[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] Use xsd to specify multiple instances of existing element
- From: Rick Jelliffe <rjelliffe@allette.com.au>
- To: Ian Mayo <ianmayo@tesco.net>
- Date: Mon, 22 Sep 2008 19:39:35 +1000
Ian Mayo wrote:
> Hi all,
> I'm trying to extend an existing schema. The existing schema provides
> a Category element that takes a 'term' and a 'scheme' (yes, it's an
> xsd attempt at an Atom schema). In my schema extension I'd like to
> specify that there will be two Category elements, one using a scheme
> of 'http://www.dig.com/privacy' that takes a term attribute of 'open'
> or 'private', and the second category element will take a scheme of
> 'http://www.dig.com/fishingType', taking a term attribute of either
> 'coarse' or 'open'.
>
> Now, is it possible for an xsd schema to specify that these two
> elements must be present? I can see how to mandate the presence of
> two different elements, but these represent the same element but with
> different attribute combinations.
There is a rule in XML Schemas called "** Element Declarations
Consistent"* which says that elements in the same
content model must have the same declaration. (The proposed XSD 1.1
keeps this constraint and clarifies it is the
effective definition, not merely having the same references.)
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.
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' "/>
*****
If you need this now and cannot move to RELAX NG, you may be better off
adopting Schematron to augment XSD rather than waiting for XSD 1.1.
There is code around to support Schematron embedded in XSDs, for example.
Cheers
Rick Jelliffe
* *********
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#coss-modelGroup***
**
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]