- From: George Cristian Bina <george@oxygenxml.com>
- Date: Wed, 22 Sep 2010 15:56:09 +0300
- To: Marie Bilde Rasmussen <mariebilderas@gmail.com>
- CC: xmlschema-dev@w3.org
Hi Marie, Substitution groups have also constraints. The type of the specialized subject element needs to be validly derived from the Subject type http://www.w3.org/TR/xmlschema-1/#e-props-correct *** 4 If there is a {substitution group affiliation}, the {type definition} of the element declaration must be validly derived from the {type definition} of the {substitution group affiliation}, given the value of the {substitution group exclusions} of the {substitution group affiliation}, as defined in Type Derivation OK (Complex) (§3.4.6) (if the {type definition} is complex) or as defined in Type Derivation OK (Simple) (§3.14.6) (if the {type definition} is simple). *** Assuming a definition for Subject type and element as <xs:simpleType name="Subject"> <xs:restriction base="xs:string"> <xs:enumeration value="a"/> <xs:enumeration value="b"/> </xs:restriction> </xs:simpleType> <xs:element name="Subject" type="Subject"/> then following to Type Derivation OK (Simple) (§3.14.6) http://www.w3.org/TR/xmlschema-1/#cos-st-derived-ok *** Schema Component Constraint: Type Derivation OK (Simple) For a simple type definition (call it D, for derived) to be validly derived from a type definition (call this B, for base) given a subset of {extension, restriction, list, union} (of which only restriction is actually relevant) one of the following must be true: 1 They are the same type definition. 2 All of the following must be true: 2.1 restriction is not in the subset, or in the {final} of its own {base type definition}; 2.2 One of the following must be true: 2.2.1 D's ·base type definition· is B. 2.2.2 D's ·base type definition· is not the ·ur-type definition· and is validly derived from B given the subset, as defined by this constraint. 2.2.3 D's {variety} is list or union and B is the ·simple ur-type definition·. 2.2.4 B's {variety} is union and D is validly derived from a type definition in B's {member type definitions} given the subset, as defined by this constraint. *** you can see that a new subject defined as <xs:element name="NewSubject" substitutionGroup="Subject" type="NewSubject"/> <xs:simpleType name="NewSubject"> <xs:union memberTypes="Subject"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="c"/> <xs:enumeration value="d"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> does not work. Only a restriction of the Subject type will work in this case. Best Regards, George -- George Cristian Bina <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger http://www.oxygenxml.com On 9/22/10 3:29 PM, Marie Bilde Rasmussen wrote: > Hi George, > You are right. And Thankyou. I just found the same paragraph in the spec > (grrrr!). I am ow considering a solution with a specialized vocabulary > in a separate element, placed in substitution group with my <Subject> > element as it's head. If substitution groups can't be <redefined>d, I'll > allow these <specialized-subject>-elements in the most general schema - > these elements probably won't bother my authors as much as if I expanded > the Simpletype in it's original definition, forcing them to choose from > a list of alternatives that would be far too long for them. > Thanks again! > best regards, > Marie > 2010/9/22 George Cristian Bina <george@oxygenxml.com > <mailto:george@oxygenxml.com>> > > Hi Marie, > > > > > Danish-English-technical.xsd builds on it's turn upon > > Danish-English.xsd, but this time I have chosen to use <xs:redefine>, > > because in these special dictionaries, I need to modify the > SimpleType > > "Subject" by extension. > ------------^^^^^^^^^^^^^ > > The derivation methods for simple types are restriction, list and > union, extension is for complex types. In case of redefinitions of > simple types you can use only restriction, see > Schema Representation Constraint: Redefinition Constraints and Semantics > http://www.w3.org/TR/xmlschema-1/#src-redefine > *** > 5 Within the [children], each <simpleType> must have a <restriction> > among its [children] and each <complexType> must have a restriction > or extension among its grand-[children] the ·actual value· of whose > base [attribute] must be the same as the ·actual value· of its own > name attribute plus target namespace; > *** > > Best Regards, > George > -- > George Cristian Bina > <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger > http://www.oxygenxml.com <http://www.oxygenxml.com/> > > > On 9/22/10 2:23 PM, Marie Bilde Rasmussen wrote: > > Hello. > I have an xml schema, let's call it dictionary.xsd, describing > general > structures and datatypes used in dictionaries. dictionary.xsd > contains a > definition of a SimpleType called Subjects. The SimpleType is a > restriction of xs:string and it contains a long list of > enumerations. > Another - more specialized - schema, called Danish-English.xsd > is built > upon dictionary.xsd. This is done by using <xs:include>. > A third - even more specialized - schema, called > Danish-English-technical.xsd builds on it's turn upon > Danish-English.xsd, but this time I have chosen to use > <xs:redefine>, > because in these special dictionaries, I need to modify the > SimpleType > "Subject" by extension. > I cannot figure out how to do this. I am not allowed to do so. > This has worked for me with only one level of inclusion. Could > the fact > that I want to redefine a schema on a level that is more than one > nesting leve l"away" be the problem? > below I have tried to illustrate the nesting and the Type > Definitions: > Danish-English-technical.xsd (redefines SimpleType "Subjects") > -> > redefines > Danish-English.xsd > -> > includes > dictionary.xsd (declares SimpleType "Subjects" as a restriction of > xs:string by enumeration) > I would be grateful for any input. > Regards, > Marie > >
Received on Wednesday, 22 September 2010 12:57:06 UTC