- From: Xan Gregg <Xan.Gregg@jmp.com>
- Date: Thu, 8 Apr 2004 13:04:57 -0400
- To: "gayathri veerarajan" <gaytri_v@yahoo.co.in>, <xmlschema-dev@w3.org>
- Message-ID: <939FBCFFFF9B0C40BF8B53294E2296DB4AFA51@merc20.na.sas.com>
> I would like to know whether this is a valid restriction <xsd:complexType name="WineGrape"> <xsd:choice> <xsd:element ref="WineGrape" minOccurs="0" maxOccurs="unbounded" /> <xsd:element ref="CabernetFrancGrape" minOccurs="0" maxOccurs="unbounded" /> <xsd:element ref="CabernetSauvignonGrape" minOccurs="0" maxOccurs="unbounded" /> <xsd:element ref="ChardonnayGrape" minOccurs="0" maxOccurs="unbounded" /> <xsd:element ref="CheninBlancGrape" minOccurs="0" maxOccurs="unbounded" /> <xsd:element ref="ZinfandelGrape" minOccurs="0" maxOccurs="unbounded" /> <xsd:element ref="GamayGrape" minOccurs="0" maxOccurs="unbounded" /> </xsd:choice> </xsd:complexType> > I want to derive a new complex type restricted from wineGrape where I expect the element > CabernetFrancGrape to appear at least once. If you want CabernetFrancGrape to appear at least once, then the others can't appear at all, so the restriction would be: <xsd:complexType name="WineGrape_hasValue_CabernetFrancGrape"> <xsd:complexContent> <xsd:restriction base="vin:WineGrape"> <xsd:choice > <xsd:element ref="CabernetFrancGrape" minOccurs="1" maxOccurs="unbounded" /> </xsd:choice > </xsd:restriction> </xsd:complexContent> </xsd:complexType> I'm guessing you originally meant something like <xsd:complexType name="WineGrape"> <xsd:choice minOccurs="0" maxOccurs="unbounded" > <xsd:element ref="WineGrape" /> <xsd:element ref="CabernetFrancGrape" /> <xsd:element ref="CabernetSauvignonGrape" /> <xsd:element ref="ChardonnayGrape" /> <xsd:element ref="CheninBlancGrape" /> <xsd:element ref="ZinfandelGrape" /> <xsd:element ref="GamayGrape" /> </xsd:choice> </xsd:complexType> To restrict it to require at least one CabernetFrancGrape, you might try <xsd:complexType name="WineGrape"> <xsd:sequence> <xsd:choice minOccurs="0" maxOccurs="unbounded"> <xsd:element ref="WineGrape" /> <xsd:element ref="CabernetSauvignonGrape" /> <xsd:element ref="ChardonnayGrape" /> <xsd:element ref="CheninBlancGrape" /> <xsd:element ref="ZinfandelGrape" /> <xsd:element ref="GamayGrape" /> </xsd:choice> <xsd:element ref="CabernetFrancGrape" /> <xsd:choice minOccurs="0" maxOccurs="unbounded" > <xsd:element ref="WineGrape" /> <xsd:element ref="CabernetFrancGrape" /> <xsd:element ref="CabernetSauvignonGrape" /> <xsd:element ref="ChardonnayGrape" /> <xsd:element ref="CheninBlancGrape" /> <xsd:element ref="ZinfandelGrape" /> <xsd:element ref="GamayGrape" /> </xsd:choice> </xsd:sequence> </xsd:complexType> But I don't know how that matches up with the explicit restriction rules, which some processors enforce. I think the given restriction does obey the general restriction rule that the derived must validate a subset of the base. xan
Received on Thursday, 8 April 2004 13:05:24 UTC