It's not an optimization. This is how substitution groups are defined by 
the XML Schema spec. Building this set isn't as easy you think. For 
instance, B could block C but still be a member of A's substitution group. 
How could you "loop down" to find C from A if C is not in B's substitution 
group?

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: [EMAIL PROTECTED]
E-mail: [EMAIL PROTECTED]

Dick Deneer <[EMAIL PROTECTED]> wrote on 01/31/2007 
11:47:55 AM:

> 
> It is easy to "loop down" finding all possible substitutions. So for 
> me this optimization could have been left out,
> because it makes it harder to show the original relations in the 
> schema to the user.
> 
> Thanks for your  answer
> Dick Deneer
> 
> 
> Op 31-jan-2007, om 16:14 heeft Michael Glavassevich het volgende 
> geschreven:
> 
> > Potential substitution group membership is transitive. Setting 
> > aside the
> > conditions for exclusion (e.g. block="substitution"), if B is a 
> > member of
> > A's substitution group and C is a member of B's substitution group 
> > then C
> > is a member of A's substitution group. That's why "even" appears in 
> > the
> > list returned for "myAbstract".
> >
> > Michael Glavassevich
> > XML Parser Development
> > IBM Toronto Lab
> > E-mail: [EMAIL PROTECTED]
> > E-mail: [EMAIL PROTECTED]
> >
> > Dick Deneer <[EMAIL PROTECTED]> wrote on 01/29/2007
> > 03:30:11 PM:
> >
> >> I have the following schema
> >>
> >> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; >
> >>     <xsd:element name="root">
> >>        <xsd:complexType>
> >>           <xsd:sequence minOccurs="1">
> >>              <xsd:element ref="myAbstract"/>
> >>           </xsd:sequence>
> >>        </xsd:complexType>
> >>     </xsd:element>
> >>     <xsd:element name="myAbstract" type="AAA" abstract="true"/>
> >>     <xsd:simpleType name="AAA">
> >>        <xsd:restriction base="xsd:integer">
> >>           <xsd:minInclusive value="1"/>
> >>           <xsd:maxInclusive value="9"/>
> >>        </xsd:restriction>
> >>     </xsd:simpleType>
> >>     <xsd:element name="odd" substitutionGroup="myAbstract">
> >>        <xsd:simpleType>
> >>           <xsd:restriction base="AAA">
> >>              <xsd:enumeration value="1"/>
> >>              <xsd:enumeration value="3"/>
> >>              <xsd:enumeration value="5"/>
> >>              <xsd:enumeration value="7"/>
> >>              <xsd:enumeration value="9"/>
> >>           </xsd:restriction>
> >>        </xsd:simpleType>
> >>     </xsd:element>
> >>     <xsd:element name="evenAbstract" substitutionGroup="myAbstract"
> >> abstract="true"/>
> >>        <xsd:element name="even" substitutionGroup="evenAbstract">
> >>           <xsd:simpleType>
> >>              <xsd:restriction base="AAA">
> >>                 <xsd:enumeration value="2"/>
> >>                 <xsd:enumeration value="4"/>
> >>                 <xsd:enumeration value="6"/>
> >>                 <xsd:enumeration value="8"/>
> >>              </xsd:restriction>
> >>           </xsd:simpleType>
> >>        </xsd:element>
> >>     </xsd:schema>
> >>
> >> So in this schema  element myAbstract is substituted by element odd
> >> or by the abstract element evenAbstract.
> >> Element evenAbstract  is susbstituted by element even.
> >>
> >> When I ask the xsModel for the substitution groups of myAbstract I 
> >> get:
> >> odd
> >> evenAbstract
> >> even
> >>
> >> When I ask the xsModel for the substitution groups of evenAbstract I
> >> get:
> >> even
> >>
> >> I did not expect  "even" in the susbstition list for myAbstract.  I
> >> know that in fact it is true that you susbtitute "even" for
> >> myAbstract but with this kind of motivation you could also list "odd"
> >> as subsitution for evenAbstract.
> >>
> >> So is this right behaviour?
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to