12. Creating More Building Blocks Using Object-Oriented Features (samples)

Sample 1


							

  <simple-name>
    Snoopy
  </simple-name>

							
			

Sample 2


							

  <full-name>
    <last>
      Schulz
    </last>
    <first>
      Charles
    </first>
    <middle>
      M
    </middle>
  </full-name>

							
			

Sample 3

[download]


  <xs:element name="full-name">
    <xs:complexType>
      <xs:all>
        <xs:element name="first" type="string32" minOccurs="0"/>
        <xs:element name="middle" type="string32" minOccurs="0"/>
        <xs:element name="last" type="string32"/>
      </xs:all>
    </xs:complexType>
  </xs:element>

[download]


  <xs:element name="simple-name" type="string32"/>

[download]


  <xs:group name="name">
    <xs:choice>
      <xs:element ref="simple-name"/>
      <xs:element ref="full-name"/>
    </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>

[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 4


							

  <full-name>
    <first>
      Eric
    </first>
    <last>
      van der Vlist
    </last>
  </full-name>

							or
							

  <full-name>
    <last>
      van der Vlist
    </last>
    <first>
      Eric
    </first>
  </full-name>

			

Sample 5

[download]


  <xs:element name="name"/>

Sample 6

[download]

 
  <xs:element name="simple-name" type="string32"
    substitutionGroup="name"/>

[download]


  <xs:element name="full-name" substitutionGroup="name">
    <xs:complexType>
      <xs:all>
        <xs:element name="first" type="string32" minOccurs="0"/>
        <xs:element name="middle" type="string32" minOccurs="0"/>
        <xs:element name="last" type="string32"/>
      </xs:all>
    </xs:complexType>
  </xs:element>

Sample 7

[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>

[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>

Sample 8

[download]


  <xs:element name="name" abstract="true"/>

Sample 9

[download]


  <xs:complexType name="full-name-type">
    <xs:all>
      <xs:element name="first" type="string32" minOccurs="0"/>
      <xs:element name="middle" type="string32" minOccurs="0"/>
      <xs:element name="last" type="string32"/>
    </xs:all>
  </xs:complexType>

[download]

 
  <xs:element name="full-name" substitutionGroup="name"
    type="full-name-type"/>

[download]


  <xs:element name="composed-name" substitutionGroup="full-name">
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="full-name-type">
          <xs:all>
            <xs:element name="first" type="string32" minOccurs="0"/>
            <xs:element name="last" type="string32"/>
          </xs:all>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>

Sample 10

[download]


  <xs:group name="name">
    <xs:choice>
      <xs:element ref="simple-name"/>
      <xs:element ref="full-name"/>
    </xs:choice>
  </xs:group>

Sample 11


  <xs:redefine schemaLocation="foo.xsd">
    <xs:group name="name">
      <xs:choice>
        <xs:group ref="name"/>
        <xs:element ref="bar"/>
      </xs:choice>
    </xs:group>
  </xs:redefine>

Sample 12

[download]


  <xs:complexType name="authorType">
    <xs:sequence>
      <xs:choice>
        <xs:element ref="name"/>
        <xs:element ref="simple-name"/>
        <xs:element ref="full-name"/>
      </xs:choice>
      <xs:element ref="born"/>
      <xs:element ref="dead" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute ref="id"/>
  </xs:complexType>

Sample 13

[download]


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

Sample 14

[download]


  <xs:complexType name="restrictedAuthorType">
    <xs:complexContent>
      <xs:restriction base="authorType">
        <xs:sequence>
          <xs:choice>
            <xs:element ref="simple-name"/>
            <xs:element ref="full-name"/>
          </xs:choice>
          <xs:element ref="born"/>
          <xs:element ref="dead" minOccurs="0"/>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

Sample 15

[download]


  <xs:complexType name="personType">
    <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 16

[download]


  <xs:complexType name="authorType">
    <xs:complexContent>
      <xs:extension base="personType">
        <xs:sequence> 
          <xs:element name="book" type="xs:token" minOccurs="1"
            maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

Sample 17

[download]


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

Sample 18

 
  <person xsi:type="authorType" id="CMS"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <name>
      Charles M Schulz
    </name>
    <born>
      1922-11-26
    </born>
    <dead>
      2000-02-12
    </dead>
    <book>
      Being a Dog Is a Full-Time Job
    </book>
  </person>

		
 
  <person xsi:type="characterType" id="Snoopy"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <name>
      Snoopy
    </name>
    <born>
      1950-10-04
    </born>
    <qualification>
      extroverted beagle
    </qualification>
  </person>

Sample 19

[download]


  <xs:element name="person" type="personType"/>

[download]

 
  <xs:element name="author" type="authorType"
    substitutionGroup="person"/>

[download]

 
  <xs:element name="character" type="characterType"
    substitutionGroup="person"/>

[download]

 
  <xs:element name="human" type="personType"
    substitutionGroup="person"/>

Sample 20


  <author id="CMS">
    <name>
      Charles M Schulz
    </name>
    <born>
      1922-11-26
    </born>
    <dead>
      2000-02-12
    </dead>
    <book>
      Being a Dog Is a Full-Time Job
    </book>
  </author>

		

  <character id="PP">
    <name>
      Peppermint Patty
    </name>
    <born>
      1966-08-22
    </born>
    <qualification>
      bold, brash and tomboyish
    </qualification>
  </character>

  <human id="CMS.">
    <name>
      Charles M Schulz
    </name>
    <born>
      1922-11-26
    </born>
    <dead>
      2000-02-12
    </dead>
  </human>