[Home] [By Thread] [By Date] [Recent Entries]
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] |

Cart



