Re: block attribute and substitution groups

The schema is valid, but if you have an instance like:

<root xmlns="ElemDecl/disallowedSubst">
  <Member1/>
</root>

Then you would get an error. And the error disappears if you remove the
"block" attribute from the schema.

The "validly substitutable" rule is checked when the instance is validated,
and not when the schema is built.

Thanks,
Sandy Gao
XML Technologies, IBM Canada
Editor, W3C XML Schema WG
Member, W3C SML WG
(1-905) 413-3255 T/L 313-3255



                                                                           
             Tobias Koenig                                                 
             <tobias.koenig@tr                                             
             olltech.com>                                               To 
             Sent by:                  xmlschema-dev@w3.org                
             xmlschema-dev-req                                          cc 
             uest@w3.org                                                   
                                                                   Subject 
                                       block attribute and substitution    
             07/01/2009 06:25          groups                              
             AM                                                            
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           





Hej,

today I have a question about the block attribute in conjunction with
substitution groups.

Let's assume the following schema
=========================================
<xsd:schema
  xmlns="ElemDecl/disallowedSubst"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  targetNamespace="ElemDecl/disallowedSubst"
  elementFormDefault="qualified"
  >

  <xsd:element name="root">
      <xsd:complexType>
          <xsd:sequence>
              <xsd:element ref="Head" maxOccurs="unbounded"/>
          </xsd:sequence>
      </xsd:complexType>
  </xsd:element>

  <xsd:element name="Head" type="Type"/>

  <xsd:complexType name="Type" block="restriction"/>

  <xsd:complexType name="derivedFromType">
      <xsd:complexContent>
          <xsd:restriction base="Type"/>
      </xsd:complexContent>
  </xsd:complexType>

  <xsd:element name="Member1" type="derivedFromType"
substitutionGroup="Head"/>

</xsd:schema>
==========================================
according to the test suite and some schema validators it is correct.

However I stumble about http://www.w3.org/TR/xmlschema11-1/#e-props-correct
4)
that defines
             For each member M of E.{substitution group affiliations},
E.{type definition}
             is ·validly substitutable· for M.{type definition}, subject to
the blocking
             keywords in M.{substitution group exclusions}.

So when checking element Member1, derivedFromType must be validly
substitutable for Type, subject to the blocking keywords (empty set in this

case)

When checking ·validly substitutable·, the first case (both are complex
types)
is used, which means:
             derivedFromType is validly derived from Type subject to the
blocking keywords
             in the union of {empty set} and {restriction}, as defined in
Type Derivation
             OK (Complex) (§3.4.6.5)

Now when testing Type Derivation Ok (Complex) all rules from
http://www.w3.org/TR/xmlschema11-1/#cos-ct-derived-ok must be true, however
the first fails, as derivedFromType and Type are not the same type
but 'restriction' _is_ part of the constraint set.

Where is my error in reasoning? Any help is appreciated.

Ciao,
Tobias

Received on Wednesday, 7 January 2009 14:36:54 UTC