ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 6 / 8 << | Prev | Next |
Contents > Substitutions > Combining block and blockDefault attributes

Combining block and blockDefault attributes

  1. blockDefault = "restriction" and block = "extension"
XML Schema keys: block, blockDefault

1. blockDefault = "restriction" and block = "extension"

The values of block and blockDefault attributes were combined and thus we can use the elements "C" or "E" only. (The type of "D" is derived by an extension from the type "AAA" and the type of "F" is derived by a restriction from the type "AAA" - both cases are in conflict with the "block" or "blockDefault" attributes).

Valid document


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <C>5</C>
</root>

Invalid document


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <D>7</D>
</root>

Valid document


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <E>7</E>
</root>

Invalid document


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <F>7</F>
</root>

Correct XML Schema (correct_0.xsd)


<xsd:schema blockDefault="restriction" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

  <xsd:element name="root">
    <xsd:complexType>
      <xsd:sequence minOccurs="1">
        <xsd:element ref="C"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:complexType name="AAA">
    <xsd:simpleContent>
      <xsd:extension base="xsd:integer"/>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:element name="C" type="AAA" block="extension"/>

  <xsd:element name="D" substitutionGroup="C">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="AAA">
          <xsd:attribute name="bbb" type="xsd:string"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="E" type="AAA" substitutionGroup="C"/>

  <xsd:element name="F" substitutionGroup="C">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:restriction base="AAA">
          <xsd:minInclusive value="0"/>
        </xsd:restriction>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>