<!-- ............................................................. -->
<!-- XML Topic Map Schema  ....................................... -->

<!-- XML Topic Map (XTM) Schema, Version 2.0

     This is XTM 2.0, an XML interchange syntax for ISO 13250 Topic
     Maps, defined by ISO 13250-3.

     See http://www.isotopicmaps.org/sam/sam-xtm/

-->
<xs:schema targetNamespace="http://www.topicmaps.org/xtm/" 
	   elementFormDefault="qualified" 
	   xmlns="http://www.topicmaps.org/xtm/" 
	   xmlns:xs="http://www.w3.org/2001/XMLSchema" 
	   xmlns:dc="http://purl.org/dc/elements/1.1/">
  <xs:annotation>
    <xs:appinfo>
      <dc:title>W3C XML Schema for XTM 2.0</dc:title>
      <dc:owner>ISO/IEC JTC1 SC34</dc:owner>
      <dc:contributor>Max Voskob</dc:contributor>
      <dc:contributor>Lars Marius Garshol</dc:contributor>
      <dc:contributor>Ann Wrightson</dc:contributor>
    </xs:appinfo>
  </xs:annotation>

  <!-- any-markup ................................................ -->
  <xs:complexType name="any-markup" mixed="true">
    <xs:complexContent mixed="true">
      <xs:restriction base="xs:anyType">
	<xs:sequence>
	  <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                  maxOccurs="unbounded"/>
	</xs:sequence>
	<xs:attribute name="datatype" type="xs:anyURI"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <!-- topicMap .................................................. -->
  <xs:element name="topicMap">    
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="mergeMap" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="topic"/>
          <xs:element ref="association"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
      <xs:attribute name="version" fixed="2.0"/>
    </xs:complexType>
  </xs:element>

  <!-- topic ..................................................... -->
  <xs:element name="topic">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="itemIdentity"/>
          <xs:element ref="subjectLocator"/>
          <xs:element ref="subjectIdentifier"/>
        </xs:choice>
	<xs:element ref="instanceOf" minOccurs="0" maxOccurs="1"/>
	<xs:choice minOccurs="0" maxOccurs="unbounded">
	  <xs:element ref="name"/>
	  <xs:element ref="occurrence"/>
	</xs:choice>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- itemIdentity .............................................. -->
  <xs:element name="itemIdentity">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- subjectLocator ............................................ -->
  <xs:element name="subjectLocator">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- subjectIdentifier ......................................... -->
  <xs:element name="subjectIdentifier">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- name ...................................................... -->
  <xs:element name="name">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type" minOccurs="0"/>
	<xs:element ref="scope" minOccurs="0"/>
	<xs:element ref="value"/>
	<xs:element ref="variant" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- value ..................................................... -->
  <xs:element name="value" type="xs:string"/>

  <!-- variant ................................................... -->
  <xs:element name="variant">
    <xs:complexType>
      <xs:sequence>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="scope"/>
        <xs:choice>
          <xs:element ref="resourceData"/>
          <xs:element ref="resourceRef"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- scope ..................................................... -->
  <xs:element name="scope">
    <xs:complexType>
      <xs:choice>
	<xs:element ref="topicRef" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- instanceOf ................................................ -->
  <xs:element name="instanceOf">
    <xs:complexType>
      <xs:choice>
	<xs:element ref="topicRef" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- type ...................................................... -->
  <xs:element name="type">
    <xs:complexType>
      <xs:choice>
	<xs:element ref="topicRef"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- occurrence ................................................ -->
  <xs:element name="occurrence">
    <xs:complexType>
      <xs:sequence>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type"/>
	<xs:element ref="scope" minOccurs="0"/>
	<xs:choice>
	  <xs:element ref="resourceRef"/>
	  <xs:element ref="resourceData"/>
	</xs:choice>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- resourceData .............................................. -->
  <xs:element name="resourceData" type="any-markup"/>

  <!-- association ............................................... -->
  <xs:element name="association">
    <xs:complexType>
      <xs:sequence>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type"/>
	<xs:element ref="scope" minOccurs="0"/>
	<xs:element ref="role" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- role ...................................................... -->
  <xs:element name="role">
    <xs:complexType>
      <xs:sequence>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type"/>
        <xs:element ref="topicRef"/>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- topicRef .................................................. -->
  <xs:element name="topicRef">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- resourceRef ............................................... -->
  <xs:element name="resourceRef">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- mergeMap .................................................. -->
  <xs:element name="mergeMap">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
