7. Creating Complex Datatypes (samples)

Sample 1

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="string255">
          <xs:attribute ref="lang"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 2

[download]


  <xs:complexType name="tokenWithLang">
    <xs:simpleContent>
      <xs:extension base="xs:token">
        <xs:attribute ref="lang"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

[download]


  <xs:element name="title" type="tokenWithLang"/>

Sample 3

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="tokenWithLang">
          <xs:attribute name="note" type="xs:token"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 4

[download]


  <xs:complexType name="tokenWithLangAndNote">
    <xs:simpleContent>
      <xs:extension base="xs:token">
        <!-- <xs:attribute name="lang" type="xs:language"/> -->
        <xs:attribute name="note" type="xs:token"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

Sample 5

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:restriction base="tokenWithLangAndNote">
          <xs:maxLength value="255"/> 
          <!-- <xs:attribute name="lang" type="xs:language"/>
          <xs:attributename="note" type="xs:token"/> -->
        </xs:restriction>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 6

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:restriction base="tokenWithLangAndNote">
          <xs:maxLength value="255"/>
          <xs:attribute name="lang" type="xs:language"/>
          <xs:attribute name="note" use="prohibited"/>
        </xs:restriction>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 7

[download]


  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:restriction base="tokenWithLangAndNote">
          <xs:maxLength value="255"/>
          <xs:attribute name="lang">
            <xs:simpleType>
              <xs:restriction base="xs:language">
                <xs:enumeration value="en"/>
                <xs:enumeration value="es"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:restriction>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 8


				

  <first-name>
    Charles
  </first-name>

         

  <middle-name>
    M
  </middle-name>

         

  <last-name>
    Schulz
  </last-name>

or				          

  <first-name>
    Peppermint
  </first-name>

         

  <last-name>
    Patty
  </last-name>

or				          

  <name>
    Snoopy
  </name>

												 
								 

Sample 9

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:element ref="name"/>
          <xs:sequence>
            <xs:element ref="first-name"/>
            <xs:element ref="middle-name" minOccurs="0"/>
            <xs:element ref="last-name"/>
          </xs:sequence>
        </xs:choice>
        <xs:element ref="born"/>
        <xs:element ref="dead" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

Sample 10

[download]


  <xs:group name="name">
    <xs:choice>
      <xs:element ref="name"/>
      <xs:sequence>
        <xs:element ref="first-name"/>
        <xs:element ref="middle-name" minOccurs="0"/>
        <xs:element ref="last-name"/>
      </xs:sequence>
    </xs:choice>
  </xs:group>

Sample 11

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="dead" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="qualification"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

Sample 12

[download]


  <xs:attributeGroup name="bookAttributes">
    <xs:attribute name="id" type="xs:ID"/>
    <xs:attribute name="available" type="xs:boolean"/>
  </xs:attributeGroup>

[download]


  <xs:element name="book">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="isbn"/>
        <xs:element ref="title"/>
        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/> 
        <xs:element ref="character" minOccurs="0"
          maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="bookAttributes"/>
    </xs:complexType>
  </xs:element>

Sample 13

[download]


  <xs:group name="pages">
    <xs:sequence>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="odd-page"/>
        <xs:element ref="even-page"/>
      </xs:sequence>
      <xs:element ref="odd-page" minOccurs="0"/>
    </xs:sequence>
  </xs:group>

Sample 14

[download]


  <xs:group name="name">
    <xs:choice>
      <xs:element ref="name"/>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="middle-name" minOccurs="0"/>
        <xs:element ref="last-name"/>
      </xs:sequence>
    </xs:choice>
  </xs:group>

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="dead" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

Sample 15

[download]


  <xs:group name="name">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:sequence minOccurs="0">
        <xs:element ref="middle-name" minOccurs="0"/>
        <xs:element ref="last-name"/>
      </xs:sequence>
    </xs:sequence>
  </xs:group>

Sample 16

[download]


  <xs:group name="name">
    <xs:choice>
      <xs:element ref="name"/>
      <xs:sequence>
        <xs:element ref="name" minOccurs="0"/>
        <xs:element ref="middle-name" minOccurs="0"/>
        <xs:element ref="last-name"/>
      </xs:sequence>
    </xs:choice>
  </xs:group>

Sample 17

[download]


  <xs:group name="name">
    <xs:choice>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:sequence minOccurs="0">
          <xs:element ref="middle-name" minOccurs="0"/>
          <xs:element ref="last-name"/>
        </xs:sequence>
      </xs:sequence>
      <xs:sequence>
        <xs:element ref="middle-name" minOccurs="0"/>
        <xs:element ref="last-name"/>
      </xs:sequence>
    </xs:choice>
  </xs:group>

Sample 18


  <xs:choice>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="name">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="first-name"/>
          <xs:element ref="middle-name"/>
          <xs:element ref="last-name"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:choice>

						

Sample 19

[download]


  <xs:element name="book">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="isbn"/>
        <xs:element ref="title"/>
        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/> 
        <xs:element ref="character" minOccurs="0"
          maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
      <xs:attribute ref="available"/>
    </xs:complexType>
  </xs:element>

Sample 20

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="dead" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="qualification"/>
      </xs:sequence>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

Sample 21

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:all>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="dead" minOccurs="0"/>
      </xs:all>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:all>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="qualification"/>
      </xs:all>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

Sample 22

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/complex-types/first-all-wa.xml,v
1.12001/11/07 18:13:19 vdv Exp $ -->
<library>
  <book id="b0836217462" available="true">
    <title lang="en">
      Being a Dog Is a Full-Time Job
    </title>
    <isbn>
      0836217462
    </isbn>
    <authors>
      <author id="CMS">
        <born>
          1922-11-26
        </born>
        <dead>
          2000-02-12
        </dead>
        <name>
          Charles M Schulz
        </name>
      </author>
    </authors>
    <characters>
      <character id="PP">
        <name>
          Peppermint Patty
        </name>
        <qualification>
          bold, brash and tomboyish
        </qualification>
        <born>
          1966-08-22
        </born>
      </character>
      <character id="Snoopy">
        <born>
          1950-10-04
        </born>
        <name>
          Snoopy
        </name>
        <qualification>
          extroverted beagle
        </qualification>
      </character>
      <character id="Schroeder">
        <qualification>
          brought classical music to the Peanuts strip
        </qualification>
        <name>
          Schroeder
        </name>
        <born>
          1951-05-30
        </born>
      </character>
      <character id="Lucy">
        <name>
          Lucy
        </name>
        <born>
          1952-03-03
        </born>
        <qualification>
          bossy, crabby and selfish
        </qualification>
      </character>
    </characters>
  </book>
</library>

Sample 23

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/complex-types/first-all-wa.xsd,v
1.12001/11/07 18:13:19 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="name" type="xs:token"/>
  <xs:element name="qualification" type="xs:token"/>
  <xs:element name="born" type="xs:date"/>
  <xs:element name="dead" type="xs:date"/>
  <xs:element name="isbn" type="xs:integer"/>
  <xs:attribute name="id" type="xs:ID"/>
  <xs:attribute name="available" type="xs:boolean"/>
  <xs:attribute name="lang" type="xs:language"/>
  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute ref="lang"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="book" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="authors">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="author">
    <xs:complexType>
      <xs:all>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="dead" minOccurs="0"/>
      </xs:all>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="book">
    <xs:complexType>
      <xs:all>
        <xs:element ref="isbn"/>
        <xs:element ref="title"/>
        <xs:element ref="authors"/>
        <xs:element ref="characters"/>
      </xs:all>
      <xs:attribute ref="id"/>
      <xs:attribute ref="available"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="characters">
    <xs:complexType>
      <xs:sequence> 
        <xs:element ref="character" minOccurs="0"
          maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="character">
    <xs:complexType>
      <xs:all>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="qualification"/>
      </xs:all>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Sample 24

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/complex-types/first-all-wa2.xml,v
1.12001/11/07 18:13:19 vdv Exp $ -->
<library>
  <book id="b0836217462" available="true">
    <title lang="en">
      Being a Dog Is a Full-Time Job
    </title>
    <isbn>
      0836217462
    </isbn>
    <authors>
      <author id="CMS">
        <born>
          1922-11-26
        </born>
        <dead>
          2000-02-12
        </dead>
        <name>
          <complex-name>
            <last-name>
              Schulz
            </last-name>
            <first-name>
              Charles
            </first-name>
            <middle-name>
              M
            </middle-name>
          </complex-name>
        </name>
      </author>
    </authors>
    <characters>
      <character id="PP">
        <name>
          <complex-name>
            <first-name>
              Peppermint
            </first-name>
            <last-name>
              Patty
            </last-name>
          </complex-name>
        </name>
        <qualification>
          bold, brash and tomboyish
        </qualification>
        <born>
          1966-08-22
        </born>
      </character>
      <character id="Snoopy">
        <born>
          1950-10-04
        </born>
        <name>
          <simple-name>
            Snoopy
          </simple-name>
        </name>
        <qualification>
          extroverted beagle
        </qualification>
      </character>
      <character id="Schroeder">
        <qualification>
          brought classical music to the Peanuts strip
        </qualification>
        <name>
          <simple-name>
            Schroeder
          </simple-name>
        </name>
        <born>
          1951-05-30
        </born>
      </character>
      <character id="Lucy">
        <name>
          <simple-name>
            Lucy
          </simple-name>
        </name>
        <born>
          1952-03-03
        </born>
        <qualification>
          bossy, crabby and selfish
        </qualification>
      </character>
    </characters>
  </book>
</library>

Sample 25

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/complex-types/first-all-wa2.xsd,v
1.12001/11/07 18:13:19 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="simple-name" type="xs:token"/>
  <xs:element name="first-name" type="xs:token"/>
  <xs:element name="middle-name" type="xs:token"/>
  <xs:element name="last-name" type="xs:token"/>
  <xs:element name="qualification" type="xs:token"/>
  <xs:element name="born" type="xs:date"/>
  <xs:element name="dead" type="xs:date"/>
  <xs:element name="isbn" type="xs:integer"/>
  <xs:attribute name="id" type="xs:ID"/>
  <xs:attribute name="available" type="xs:boolean"/>
  <xs:attribute name="lang" type="xs:language"/>
  <xs:element name="name">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="simple-name"/>
        <xs:element ref="complex-name"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="complex-name">
    <xs:complexType>
      <xs:all>
        <xs:element ref="first-name"/>
        <xs:element ref="middle-name" minOccurs="0"/>
        <xs:element ref="last-name"/>
      </xs:all>
    </xs:complexType>
  </xs:element>
  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:token">
          <xs:attribute ref="lang"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="book" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="authors">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="author">
    <xs:complexType>
      <xs:all>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="dead" minOccurs="0"/>
      </xs:all>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="book">
    <xs:complexType>
      <xs:all>
        <xs:element ref="isbn"/>
        <xs:element ref="title"/>
        <xs:element ref="authors"/>
        <xs:element ref="characters"/>
      </xs:all>
      <xs:attribute ref="id"/>
      <xs:attribute ref="available"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="characters">
    <xs:complexType>
      <xs:sequence> 
        <xs:element ref="character" minOccurs="0"
          maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="character">
    <xs:complexType>
      <xs:all>
        <xs:element ref="name"/>
        <xs:element ref="born"/>
        <xs:element ref="qualification"/>
      </xs:all>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Sample 26

[download]


  <xs:element name="persons">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="author"/>
        <xs:element ref="character"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

Sample 27


  <xs:element name="persons">
    <xs:complexType>
      <xs:all>
        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/> 
        <xs:element ref="character" minOccurs="0"
          maxOccurs="unbounded"/>
      </xs:all>
    </xs:complexType>
  </xs:element>
 

Sample 28

[download]


  <xs:complexType name="basePerson">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element ref="born"/>
    </xs:sequence>
    <xs:attribute ref="id"/>
  </xs:complexType>

Sample 29

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="basePerson">
          <xs:sequence>
            <xs:element ref="dead" minOccurs="0"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="basePerson">
          <xs:sequence>
            <xs:element ref="qualification"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 30

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:sequence>
        <xs:sequence>
          <xs:element ref="name"/>
          <xs:element ref="born"/>
        </xs:sequence>
        <xs:sequence>
          <xs:element ref="dead" minOccurs="0"/>
        </xs:sequence>
      </xs:sequence>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:sequence>
        <xs:sequence>
          <xs:element ref="name"/>
          <xs:element ref="born"/>
        </xs:sequence>
        <xs:sequence>
          <xs:element ref="qualification"/>
        </xs:sequence>
      </xs:sequence>
      <xs:attribute ref="id"/>
    </xs:complexType>
  </xs:element>

Sample 31

[download]


  <xs:complexType name="basePersons">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="author"/>
      <xs:element ref="character"/>
    </xs:choice>
  </xs:complexType>

Sample 32

[download]


  <xs:complexType name="persons">
    <xs:complexContent>
      <xs:extension base="basePersons">
        <xs:sequence> 
          <xs:element name="editor" type="xs:token" minOccurs="0"
            maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

Sample 33

[download]


  <xs:complexType name="personsEquivalent">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="author"/>
        <xs:element ref="character"/>
      </xs:choice>
      <xs:sequence> 
        <xs:element name="editor" type="xs:token" minOccurs="0"
          maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:sequence>
  </xs:complexType>

Sample 34

[download]


  <xs:complexType name="personsAsWeWouldHaveLiked">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="author"/>
      <xs:element ref="character"/>
      <xs:element name="editor" type="xs:token"/>
    </xs:choice>
  </xs:complexType>

Sample 35

[download]


  <xs:complexType name="person">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element ref="born"/>
      <xs:element ref="dead" minOccurs="0"/>
      <xs:element ref="qualification" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute ref="id"/>
  </xs:complexType>

Sample 36

[download]


  <xs:element name="author">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="person">
          <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="dead" minOccurs="0"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="person">
          <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="qualification"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 37

[download]


  <xs:complexType name="basePerson">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element ref="born"/>
    </xs:sequence>
    <xs:attribute ref="id"/>
  </xs:complexType>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="basePerson">
          <xs:sequence>
            <xs:element ref="qualification"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 38

[download]


  <xs:complexType name="person">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element ref="born"/>
      <xs:element ref="dead" minOccurs="0"/>
      <xs:element ref="qualification" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute ref="id"/>
  </xs:complexType>

[download]


  <xs:element name="character">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="person">
          <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="qualification"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 39

[download]


  <xs:element name="a">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="href" type="xs:anyURI"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

[download]


  <xs:complexType name="markedText" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="em" type="xs:token"/>
      <xs:element ref="a"/>
    </xs:choice>
    <xs:attribute ref="lang"/>
  </xs:complexType>

[download]


  <xs:element name="title" type="markedText"/>

Sample 40


  <title lang="en">
    Being a
    <a href="http://dmoz.org/Shopping/Pets/Dogs/">
      Dog
    </a>
    Is a
    <em>
      Full-Time
    </em>
    Job
  </title>

							 

Sample 41

[download]


  <xs:element name="title">
    <xs:complexType mixed="true">
      <xs:complexContent mixed="true">
        <xs:extension base="markedText">
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="strong" type="xs:string"/>
          </xs:choice>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 42

[download]


  <xs:complexType name="resultingType" mixed="true">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="em" type="xs:token"/>
        <xs:element ref="a"/>
      </xs:choice>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="strong" type="xs:string"/>
      </xs:choice>
    </xs:sequence>
    <xs:attribute ref="lang"/>
  </xs:complexType>

Sample 43

[download]


  <xs:element name="a">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="href" type="xs:anyURI"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

[download]


  <xs:complexType name="markedText" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="em" type="xs:token"/>
      <xs:element ref="a"/>
    </xs:choice>
    <xs:attribute ref="lang"/>
  </xs:complexType>

[download]


  <xs:element name="title" type="markedText"/>

Sample 44

[download]

[download]


  <xs:element name="a" type="link"/>

Sample 45

[download]


  <xs:element name="title">
    <xs:complexType mixed="true">
      <xs:complexContent mixed="true">
        <xs:restriction base="markedText">
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="a">
              <xs:complexType>
                <xs:simpleContent>
                 <xs:restriction base="link">
                 <xs:attribute name="href">
                 <xs:simpleType>
                 <xs:restriction base="xs:anyURI">
                 <xs:pattern value="http://.*"/>
                 </xs:restriction>
                 </xs:simpleType>
                 </xs:attribute>
                 </xs:restriction>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:choice>
          <xs:attribute name="lang">
            <xs:simpleType>
              <xs:restriction base="xs:language">
                <xs:enumeration value="en"/>
                <xs:enumeration value="es"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 46

[download]


  <xs:simpleType name="empty">
    <xs:restriction base="xs:string">
      <xs:enumeration value=""/>
    </xs:restriction>
  </xs:simpleType>

[download]


  <xs:element name="br">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="empty">
          <xs:attribute name="id" type="xs:ID"/>
          <xs:attribute name="class" type="xs:NMTOKEN"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

Sample 47

[download]


  <xs:element name="br">
    <xs:complexType>
      <xs:attribute name="id" type="xs:ID"/>
      <xs:attribute name="class" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>

Sample 48

[download]


  <xs:simpleType name="empty">
    <xs:restriction base="xs:string">
      <xs:enumeration value=""/>
    </xs:restriction>
  </xs:simpleType>

[download]


  <xs:complexType name="emptyBr">
    <xs:simpleContent>
      <xs:extension base="empty">
        <xs:attribute name="id" type="xs:ID"/>
        <xs:attribute name="class" type="xs:NMTOKEN"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

[download]


  <xs:complexType name="allmostEmptyBr">
    <xs:simpleContent>
      <xs:restriction base="emptyBr">
        <xs:whiteSpace value="collapse"/>
        <xs:attribute name="id" type="xs:ID"/>
        <xs:attribute name="class" type="xs:NMTOKEN"/>
      </xs:restriction>
    </xs:simpleContent>
  </xs:complexType>

Sample 49

[download]


  <xs:complexType name="elementWithID">
    <xs:attribute ref="id"/>
  </xs:complexType>

Sample 50

[download]


  <xs:element name="book">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="isbn"/>
        <xs:element ref="title"/>
        <xs:element ref="author" minOccurs="0" maxOccurs="unbounded"/> 
        <xs:element ref="character" minOccurs="0"
          maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="id" type="bookID"/>
      <xs:attribute ref="available"/>
    </xs:complexType>
  </xs:element>

Sample 51

[download]


  <xs:complexType name="bookTmp">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <xs:sequence>
          <xs:element ref="isbn"/>
          <xs:element ref="title"/> 
          <xs:element ref="author" minOccurs="0"
            maxOccurs="unbounded"/> 
          <xs:element ref="character" minOccurs="0"
            maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="available"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

[download]


  <xs:element name="book">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="bookTmp">
          <xs:sequence>
            <xs:element ref="isbn"/>
            <xs:element ref="title"/> 
            <xs:element ref="author" minOccurs="0"
              maxOccurs="unbounded"/> 
            <xs:element ref="character" minOccurs="0"
              maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="id" type="bookID"/>
          <xs:attribute ref="available"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 52


	

  <xs:complexType name="elementWithBookID">
    <xs:complexContent>
      <xs:restriction base="elementWithID">
        <xs:attribute name="id" type="bookID"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>




  <xs:complexType name="book">
    <xs:complexContent>
      <xs:extension base="elementWithBookID">
        <xs:sequence>
          <xs:element ref="isbn"/>
          <xs:element ref="title"/> 
          <xs:element ref="author" minOccurs="0"
            maxOccurs="unbounded"/> 
          <xs:element ref="character" minOccurs="0"
            maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="available"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

		
			

Sample 53

[download]

<?xml version="1.0"?> 
<!-- $Header:
/home/cvsroot/w3c-xml-schema/user/examples/first-complex-types.xsd,v
1.12001/11/12 20:54:00 vdv Exp $ -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="string255">
    <xs:restriction base="xs:token">
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="string32">
    <xs:restriction base="xs:token">
      <xs:maxLength value="32"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="isbn">
    <xs:restriction base="xs:unsignedLong">
      <xs:totalDigits value="10"/>
      <xs:pattern value="\d{10}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="bookID">
    <xs:restriction base="xs:ID">
      <xs:pattern value="b\d{10}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="supportedLanguages">
    <xs:restriction base="xs:language">
      <xs:enumeration value="en"/>
      <xs:enumeration value="es"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="date">
    <xs:restriction base="xs:date">
      <xs:pattern value="[^:Z]*"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="name" type="string32"/>
  <xs:element name="qualification" type="string255"/>
  <xs:element name="born" type="date"/>
  <xs:element name="dead" type="date"/>
  <xs:element name="isbn" type="isbn"/>
  <xs:attribute name="id" type="xs:ID"/>
  <xs:attribute name="available" type="xs:boolean"/>
  <xs:attribute name="lang" type="supportedLanguages"/>
  <xs:complexType name="elementWithID">
    <xs:attribute ref="id"/>
  </xs:complexType>
  <xs:complexType name="bookTmp">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <xs:sequence>
          <xs:element ref="isbn"/>
          <xs:element ref="title"/> 
          <xs:element ref="author" minOccurs="0"
            maxOccurs="unbounded"/> 
          <xs:element ref="character" minOccurs="0"
            maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="available"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="personType">
    <xs:complexContent>
      <xs:extension base="elementWithID">
        <xs:sequence>
          <xs:element ref="name"/>
          <xs:element ref="born"/>
          <xs:element ref="dead" minOccurs="0"/>
          <xs:element ref="qualification" minOccurs="0"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="string255">
          <xs:attribute ref="lang"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="library">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="book" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="book">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="bookTmp">
          <xs:sequence>
            <xs:element ref="isbn"/>
            <xs:element ref="title"/> 
            <xs:element ref="author" minOccurs="0"
              maxOccurs="unbounded"/> 
            <xs:element ref="character" minOccurs="0"
              maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="id" type="bookID"/>
          <xs:attribute ref="available"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="author">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="personType">
          <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="dead" minOccurs="0"/>
          </xs:sequence>
          <xs:attribute ref="id"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="character">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="personType">
          <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="born"/>
            <xs:element ref="qualification"/>
          </xs:sequence>
          <xs:attribute ref="id"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
</xs:schema>