Restriction+choice+substitutionGroup error
------------------------------------------

         Key: XERCESJ-1066
         URL: http://issues.apache.org/jira/browse/XERCESJ-1066
     Project: Xerces2-J
        Type: Bug
  Components: XML Schema Structures  
    Versions: 2.6.2    
 Environment: N/A
    Reporter: Martin Thomson


When using a substitution group head in a choice, the head of the substitition 
group is not correctly treated as a choice.

Given a choice of X and Y where X is the head of a group with the members X1, 
X2 and X3, the following SHOULD be true:

Base = (X|Y)*

...according to clause 2.1 of Schema Component Constraint: Particle Valid 
(Restriction) <http://www.w3.org/TR/xmlschema-1/#cos-particle-restrict> this 
should be interpreted as:

Base = ((X|X1|X2|X3)|Y)*

Therefore the following should be a valid restriction, but Xerces does not 
allow it:

Restriction = ((X1|X2)|Y)*

I am aware that some simplification of the choices is required by clause 2.2 of 
the above section, but this should not have the effect that it is.

The following schema document demonstrates this:
-----------------------------------------
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
            targetNamespace="urn:restrict" xmlns="urn:restrict"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">

  <xsd:complexType name="base">
    <xsd:complexContent>
      <xsd:restriction base="xsd:anyType">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="X"/>
          <xsd:element ref="Y"/>
        </xsd:choice>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="X"/>
  <xsd:element name="Y"/>
  <xsd:complexType name="restriction">
    <xsd:complexContent>
      <xsd:restriction base="base">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:choice>
            <xsd:element ref="X1"/>
            <xsd:element ref="X2"/>
          </xsd:choice>
          <xsd:element ref="Y"/>
        </xsd:choice>
      </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="X1" substitutionGroup="X"/>
  <xsd:element name="X2" substitutionGroup="X"/>

</xsd:schema>


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


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

Reply via email to