OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: [xml-dev] Use xsd to specify multiple instances of existing element

> So in order to get your constraint you have three choices:
> 1) Adopt  RELAX NG instead of XSD.
> 2) Adopt Schematron as well as (or instead of XSD)
> 3) Adopt XSD 1.1 (if you can find an implementation) and use their
> assertions.

there's a 4th I think:

4) annotate the category elements with an xsi:type:

<category xsi:type="privacy" scheme='http://dig.com/privacy' term='private'/>
<category xsi:type="fishingType" scheme='http://dig.com/fishingType'

...then just define the types "privacy" and "fishingType" in your
schema.  This will work with 1.0 but depending on your situation could
be a pain to set the xsi:type on the elements (moving entirely to
Relax or using XSD+Schematron could be considered a bigger pain).  On
the positive side, when you switch to 1.1 you can drop the xsi:type
attributes and then switch between alternative type definitions based
on the value of the term attribute... (seperate type definitions are
better than assertions I think)   The XSD processor from Saxonica
implements the current 1.1 spec so you could just start using that

> In the case of the XSD 1.1, I think the assertions will have to be
> constraints on the <entry> element, for example
>  <xsd:assert test="category[1]/@term='open' or category[1]/@term='private'
> "/>
> ********* <xsd:assert test="category[2]/@term='coarse' or
> category[2]/@term='open' "/>

just to be a pedant you can do:

<xsd:assert test="category[1]/@term = ('open', 'private')"/>
<xsd:assert test="category[2]/@term = ('coarse', 'open') "/>

...which is a little nicer.

Andrew Welch
Kernow: http://kernowforsaxon.sf.net/

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS