XML Schema for ISO 13250 Topic Maps

Proposed Syntax 29th January 2001

This version:
http://www.diffuse.org/TopicMaps/20001221/schema.html
Latest version:
http://www.diffuse.org/TopicMaps/schema.html
Previous version:
http://www.diffuse.org/TopicMaps/20001128/schema.html
Editors:
Martin Bryan mailto:mtbryan@diffuse.org

Abstract

This specification defines an XML Schema representation of ISO 13250 Topic Maps that also makes the maximum possible use of existing XML Link functionality.

Status of This Document

Draft for discussion.

This document is based on the 3rd July 2000 W3C Candidate Recommendation for the XML Linking Language (XLink) Version 1.0 specification, and the 24th October 2000 Candidate Recommendation for XML Schemas.

A list of current W3C Recommendations and other technical documents can be found at http://www.w3.org/TR/.

Table of contents

1 Introduction
    1.1 Purpose
    1.2 Dependencies on Other Specifications
    1.3 Documentation Conventions and Terminology
2 Conceptual Framework
    2.1 Overview of ISO 13250 Topic Maps
    2.2 Overview of XML Links
    2.3 Overview of XML Schema Type Definitions
3 Topic Map Definitions
    3.1 Topic Map
    3.2 Topic
          3.2.1 Topic Names
                   3.2.1.1 Base Name
                   3.2.1.2 Display Name
                   3.2.1.3 Sort Name
          3.2.2 Occurs
    3.3 Association
          3.3.1 Association Role
    3.4 Facet
          3.4.1 Facet Value
    3.5 Added Themes
4 Creating Customized Topic Maps

Appendices

A Schema for ISO 13250 Topic Maps (normative)
B Glossary (normative)
C References (normative)

1 Introduction

This document defines a set of XML Schema type definitions that can be used to create a customized Topic Map Schema that provides an XML representation of an ISO 13250 Topic Map.

Chapter 2 provides a Conceptual Framework, including an overview of ISO 13250 Topic Maps, a summary of XML Links and a summary of XML Schema type definitions.

Chapter 3 provides a set  XML Schema Complex Type Definitions that can be used as the basis for creating a customized topic map.

Chapter 4 illustrates how the Complex Type Definitions defined in Chapter 3 can be used to create a customized topic map.

1.1 Purpose

The purpose of the XML Schema for Topic Maps is to allow the full power of ISO 13250 Topic Maps to be captured as an XML Schema in a form that makes the maximum possible use of functionality already provided in XML Links.

Note: Unlike other proposals for XML representation of Topic Maps the techniques presented here do not require the use of a fixed set of tags, but permit all of the renaming facilities provided in ISO 13250. They also make maximal rather than minimal use of XML Link functionality.

1.2 Dependencies on Other Specifications

The definition of XML Schema for ISO 13250 Topic Maps depends on the following specifications: [URI], [XML-Infoset], [XML-Namespaces], [XPath], [XLink], [XML Schema: Datatypes] and [XML Schemas: Structures].

1.3 Documentation Conventions and Terminology

The following highlighting and typography is used to present technical material in this document:

The special terms used to describe topic maps are formally defined in Chapter 2; hyperlinks connect other uses of the term to the definition. For example, a definition of term might read: [Definition]  A term is something we use a lot. The definition is labeled as such and the term is highlighted typographically. The end of the definition is not specially marked in the displayed or printed text.

Non-normative examples are set off typographically and accompanied by a brief explanation:

Example
<xs:element name="NewsCategories" ref="TopicMaps">
And an explanation of the example.

References to properties of information items as defined in [XLink] are notated as links to the relevant section thereof.

2 Conceptual Framework

This chapter gives an overview of the XML Schema for ISO 13250 Topic Maps.

2.1 Overview of ISO 13250 Topic Maps

The ISO 13250 Topic Maps international standard defines a set of element types that have been assigned the following somewhat over-cryptic short names:

Note: The last two entries are specific to the fact that ISO 13250 is defined as an application of the ISO 10744 Hypermedia/Time Based Structuring Language (HyTime) international standard. They can, therefore, be ignored in the equivalent XML application.

The topicmap element type is used to identify those parts of a resource that define a navigable topic map. It contains details of individual topics, associations links between topics (assoc), facets that assign property values to resource occurrences, and details of themes (topics) that are to be considered to be associated with certain types of topic map components.

A topic consists of a set of topic names (topname) that can be used to identify the meaning of the topic, and a set of pointers to the parts of resources that have been identified as using, or explaining, the meaning. In addition to a text-only basename, a topic can be assigned any number of displayable names (dispname), which can be defined using any number of languages and in any number of representations, and names that can be used to identify the correct order(s) for the topic within alphabetically sorted lists of topic names (sortname) applicable to a specific language or domain.

Note: Topics provide a set of "node labels" for a set of logically related resources which have not necessarily been logically (or even physically) labelled.

An association links two or more topics. Each link within the association has a role that identifies the reason the topic is part of the association.

Note: Association links provide a set of "edge labels" that describe the relationships between topics (but not their occurrences).

A facet can be used to assign a property/characteristic to a part of a resource that does not have that property assigned internally. For example, it could be used to identify the language of a particular a piece of text. A facet definition can define a number of different facet values (fvalue), each of which can be associated with one or more resources.

Where a topic map is designed to identify a subset within a set of topic maps, the themes to be added (addthms) element can be used to identify the scope in which the topics defined in this map, or in any linked map, are to be considered to apply.

Figure 1 illustrates the relationships between the various component parts of a topic map.

Figure 1. Relationships between elements in topic maps

2.2 Overview of XML Links

There are two types of XML links: simple links that reference a single resource and extended links that can reference multiple resources, and define traversal rules (arcs) between them.

Note: This specification only uses extended XML links.

Elements conforming to the XML Linking Language [XLink] specification are identified by the presence of one or more attributes that define the linking properties to be associated with the element. The type of XLink element is identified by a namespaced type attribute from this set. Normally the xlink namespace is used for this purpose, e.g. xlink:type="extended".

The following attributes are used to identify the components of an XML extended link that are used within this specification:

The xlink:type attribute identifies which type of link object is being defined. Options include simple, extended, locator, arc, resource and title.

The xlink:href attribute is used to identify a resource that is to be "located" by an XLink locator component. It is defined in terms of a [URI], as defined in IETF RFC 2396, with an optional fragment identifier based on the XPointer specification [XPTR].

The optional xlink:role attribute can be used to provide a pointer to a resource that explains the role played by the link.  It is defined in terms of a [URI], as defined in IETF RFC 2396, with an optional fragment identifier based on the XPointer specification [XPTR].

The optional xlink:title attribute can be used to describe the meaning of a link or resource in a human-readable fashion. It should contain a string that describes the resource. An alternative way of defining titles is by use of an xlink:title embedded element.

NB: This specification uses embedded xlink:title elements in preference to attributes of the same name. Users can choose to add a similarly named attribute to their applications where appropriate.

The optional xlink:label attribute is used to identify locators that play specific roles within a traversal rule (arc). (The way in which labels and traversal rules should be applied within a topic map is not defined in this specification. Developers of topic map schemas based on the Complex Type Definitions defined in Chapter 3 may choose to add them if they are deemed appropriate.)

2.3 Overview of XML Schema Type Definitions

Chapter 3 provides a set of XML Schema Complex Type Definitions, as defined in [XML Schemas: Structures], that describe the component parts of a Topic Map, together with an abstract element declaration  for each type that can be used as the basis for declaring locally applicable elements. Chapter 4 shows how these abstract element definitions will typically be used to create a customized topic map. This section describes the set of XML Schema elements and attributes used in the type definitions and examples.

Each XML Schema is enclosed within a schema element. This element should define which namespaces, conforming to the [XML-Namespaces] specification, are to be used for schemas, and any other namespaces that are to be referred to within the schema. Topic maps elements that conform to the XML Schema specification have been assigned to the xs namespace within this specification, while attributes that are taken from the XML Linking Language are assigned to the xlink namespace. Unassigned attributes are considered to share the namespace of their parent element.

A Complex Type Definition is defined within an XML Schema xs:complexType element. All Complex Type Definitions are assigned class names using the name attribute. 

Each Complex Type Definition can start with one or more of xs:annotation elements that explain the role of the element, and provide other relevant information, such as development history. Within this specification only xs:documentation elements are used to annotate the definitions.

Embedded elements are identified by the presence of an xs:element declaration within the Complex Type Definition. Within this specifications all such declarations are made by reference (using the ref attribute) to another Complex Type Definition. The maximum and minimum number of occurrences of the element that are permitted within a topic map is defined using the minOccurs and maxOccurs attributes. Optionally, each element declaration can be annotated using the xs:annotation element used to annotate the Complex Type Definition.

Groups of elements that may be used interchangeably are enclosed within an xs:choice element. Groups of elements that must occur in the order specified are defined within an xs:sequence element. The maximum and minimum number of repetitions of the choice or sequence that are permitted within a topic map can, where appropriate, be defined using the minOccurs and maxOccurs attributes.

Each attribute (property/characteristic) assigned to a Complex Type Definition is defined in an xs:attribute declaration. Each attribute is assigned a name (defined using the name attribute) which is unique within the Complex Type Definition, and a type based on, or derived from, the [XML Schema: Datatypes] specification. It is also assigned one of the following statements relating to the way in which it is used:

Optionally, each attribute declaration can be annotated using the xs:annotation element used to annotate the Complex Type Definition.

Within a customized topic map the relationship between the locally named element declaration and the imported Complex Type Definition is declared using the substitutionGroup attribute, whose value must be the name of one of the Abstract Element Declarations defined in Chapter 3 for the topic map to be valid. The name to be assigned to the instance of the class described within the customized topic map is indicated using the name attribute.

3 Topic Map Definitions

Each topic map has a single root element, though more than one topic map can be defined within a document, and elements not defined using Complex Type Definitions defined in this chapter may occur within the same document.

Each schema used to define a topic map must be stored within an XML Schema xs:schema element. This element shall define the namespaces being used within the definition. Users can assign any namespace name they like to elements, but they must declare at least two namespaces, one of which references the XML Schema specification using the URI http://www.w3.org/2000/10/XMLSchema and the other of which references the XML Linking Language specification using the URI http://www.w3.org/1999/xlink. Users may choose to support the definitions for XML Linking Language attributes, and the XML Language attribute, from an external source.

Note: It is possible that these two URIs will change between the time of writing this specification and the final acceptance of these two standards as official W3C Recommendations. In this event the final URI as defined in the relevant Recommendation must be used in place of the versions used herein.

3.1 Topic Map

Type Definition for Root of Topic Map
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
 targetNamespace="http://www.diffuse.org/TopicMaps/Schema"
 xmlns:xml="http://www.w3.org/1998/XML"
 xmlns:xlink="http://www.w3.org/1999/xlink"
 xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
 xmlns:tm="http://www.diffuse.org/TopicMaps/Schema">
 <xs:annotation>
  <xs:documentation>
   Fifth working draft: 29th January 2001
   (c) Copyright: The SGML Centre (http://www.sgml.u-net.com)
  </xs:documentation>
 </xs:annotation>
 <xs:import namespace="http://www.w3.org/1998/XML"
            schemaLocation="http://www.diffuse.org/TopicMaps/xml-atts.xsd"/>
 <xs:import namespace="http://www.w3.org/1999/xlink"
            schemaLocation="http://www.diffuse.orgTopicMaps/xlink-atts.xsd"/>
 <xs:complexType name="TopicMapType">
  <xs:annotation>
    <xs:documentation>Root element for topic map</xs:documentation>
  </xs:annotation>
  <xs:choice maxOccurs="unbounded">
    <xs:element ref="tm:AbstractTopic"
                maxOccurs="unbounded"/>
    <xs:element ref="tm:AbstractAssociation"
                minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="tm:AbstractFacet"
                minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="tm:AbstractAddedThemes"
                minOccurs="0" maxOccurs="unbounded"/>
  </xs:choice>
  <xs:attribute name="AddedThemes" type="xs:IDREFS"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         Contains the unique identifiers of topics
         that are to be used as additional scopes for all
         topic map conformant elements within this topic map.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>

 <xs:element name="AbstractTopicMap" type="tm:TopicMapType"
             abstract="true"/>

[Definition] A topic map consists of a set of topics, associations, facets and added theme elements that are used to manage a set of terms relevant to a particular knowledge domain.

Each topic map must start with an element that is derived from the TopicMapType Complex Type Definition shown above. This element must contain one or more of the following types of embedded elements:

The AddedThemes attribute associated with the TopicMapType Complex Type Definition allows one or more of the topics within the topic map to be used as a general theme for the topic map.

Example
<xs:schema
 targetNamespace="http://www.diffuse.org/TopicMaps/DiffuseTopics"
 xmlns:xml="http://www.w3.org/1998/XML"
 xmlns:xlink="http://www.w3.org/1999/xlink"
 xmlns:xs="http://www.w3.org/2000/10/XMLSchema"
 xmlns:tm="http://www.diffuse.org/TopicMaps/Schema"
 xmlns="http://www.diffuse.org/TopicMaps/DiffuseTopics">
 <xs:import
  namespace="http://www.diffuse.org/TopicMaps/Schema"
  schemaLocation="http://www.diffuse.org/TopicMaps/schema2.xsd"/>
 <xs:element name="DiffuseTopics" type="tm:TopicMapType"
             substitutionGroup="tm:AbstractTopicMap">
  <xs:annotation>
    <xs:documentation>Diffuse Topic Map</xs:documentation>
  </xs:annotation>
 </xs:element>
   ...
</xs:schema>
This schema defines a Topic Map for DiffuseTopics (as used by the European Commission's Diffuse Standards and Specification List at http://www.diffuse.org/TopicMaps/TopicMaps.xml). The element is based on the TopicMapType Complex Type Definition and is an instantiation of  the AbstractTopicMap class.

3.2 Topic

Type Definition for Topic
<xs:complexType name="TopicType">
  <xs:annotation>
    <xs:documentation>
       Container for a set of names that can be used to identify
       the topic together with the occurrences of resources that have
       been identified as being relevant to the topic. 
     </xs:documentation>
  </xs:annotation>
  <xs:choice maxOccurs="unbounded">
    <xs:element ref="tm:AbstractTopicNames"/>
    <xs:element ref="tm:AbstractOccurs"/>
  </xs:choice>
  <xs:attribute ref="xlink:type" use="fixed" value="extended"/>
  <xs:attribute name="id" type="xs:ID" use="required"/>
  <xs:attribute name="identity" type="xs:uriReference"
                use="optional">
    <xs:annotation>
      <xs:documentation>
        Reference to subject descriptors used to provide
        an unambiguous indication of the identity of a subject
        that this topic covers.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute name="topics" type="tm:uriReferences"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         Contains the unique identifiers of topic(s)
         whose subject(s) are the classes of topics
         of which this topic is an instance.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute name="scope" type="tm:uriReferences"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         Contains the unique identifiers of topic(s) that
         identify the themes(s) this topic is to be considered
         to fall within.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
 </xs:complexType>
 <xs:simpleType name="uriReferences">
    <xs:annotation>
     <xs:documentation> List of URIs</xs:documentation>
    </xs:annotation>
    <xs:list itemType="xs:uriReference"/>
 </xs:simpleType>
 <xs:element name="AbstractTopic" type="tm:TopicType"
             abstract="true"/>>

[Definition] A Topic assigns a set of topic names to a set of resources that relate in some way to the meaning normally associated with the names.

{Definition] A subject descriptor is a reference to a positive, unambiguous, indication of the identify of a subject. For example, it could be a reference to some descriptive text, a Dewey Decimal Code or a Universal Decimal Classification. A public subject descriptor is a subject descriptor which is designed to be used as a common referent of the identity attributes in many topic maps.

[Definition] The theme of a topic, topic name, occurrence or association is the set of topics defined in the scope attribute of the element, together with any topics identified as being additional themes for part or all of the topic map (e.g. by an AddedThemes attribute or element).

Each element used to define a topic within a topic map must be derived from the TopicType Complex Type Definition shown above. This element conforms to the definition of an extended XML link. At least one set of topic names or occurrences must be defined for each topic, but there is no restriction on how many sets of names or instances of occurrences may be provided for each topic. Each of the occurrences defined in the topic has each of the names that have the same scope assigned as one of its topic identifiers.

Each topic must be assigned a unique identifier as the value of its id attribute so that it can be referenced by associations, etc. This unique identifier must be a valid XML name.

Each topic can optionally be assigned a reference to a subject descriptor as the value of its identity attribute. This XML pointer identifies the relevance of the topic by reference to terms that may not be defined as part of a topic map. Any two topics that have the same URI as the value of their identify attribute are considered to be equivalent to a single topic that is the union of the contents of the two topics, and of any associations that reference them.

Where a topic is an instance of an existing topic that relationship can optionally be recorded in the topics attribute. The value of this attribute must be a list of valid URI references whose fragment identifier identifies the unique identifier assigned to a topic definition.

Note: References to identifiers of topics within the same map must begin with a # to indicate that the entry is a URI rather than a name token.

Where the names and occurrences contained within the topic element are only relevant within a specific knowledge domain, the set of topics that identify relevant domains can optionally be recorded in the scope attribute. The referenced topics become one of the themes of all names and occurrences defined by the topic.

Example
<xs:element name="Standard" type="tm:TopicType"
            substitutionGroup="tm:AbstractTopic">
  <xs:annotation>
    <xs:documentation>Standard that is topic within map</xs:documentation>
  </xs:annotation>
</xs:element>
In the Diffuse Standards and Specification List the Standard element is used to identify topics. It is based on the TopicType Complex Type Definition, and is an instantiation of the AbstractTopic class. It is an XLink extended link.

3.2.1 Topic Names

Type Definition for Topic Names
<xs:complexType name="TopicNamesType">
  <xs:annotation>
    <xs:documentation>Names used to identify topic.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
    <xs:element ref="tm:AbstractBaseName"
                maxOccurs="unbounded"/>
    <xs:element ref="tm:AbstractDisplayName"
                minOccurs="0" maxOccurs="unbounded"/>
    <xs:element ref="tm:AbstractSortName"
                minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="xlink:type" use="fixed" value="title"/>
  <xs:attribute name="scope" type="tm:uriReferences"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         Contains the unique identifiers of topic(s) that
         identify the scope(s) this set of names is to be
         considered apply to.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>
<xs:element name="AbstractTopicNames"
            type="tm:TopicNamesType" abstract="true"/>

[Definition] A topic name is a string used by a computer or human to distinguish one topic from another. There are three types of topic names: text-only base names, human-friendly display names (which can include images) and computer-readable sort names.

Each element used to define the set of names to be used to identify a topic within a topic map must be derived from the TopicNamesType Complex Type Definition shown above.

Each set of topic names must include at least one subelement that conforms to the BaseNameType Complex Type Definition (see below). Alternative versions of  base names may also be supplied for use in different languages or for use within different scopes (knowledge domains). 

Where appropriate, a more human-friendly displayable form of the name may be assigned to the topic for use within a specific language/domain by one or more elements conforming to the DisplayNameType Complex Type Definition (see below). 

Where the base name is not suitable for correctly ordering the topic within alphabetical listings in one or more of the specified languages/domains, an element conforming to the SortNameType Complex Type Definition (see below) can be assigned to the topic.

Where all the entries in a set of topic names are only relevant within specific knowledge domains, the set of topics that identify relevant domains can optionally be recorded in the scope attribute. The referenced topics become one of the themes of all names defined for the topic. 

NB: If more than one set of topic names is assigned to a topic the names they contain should have different scopes. Where two topics share the same name within exactly the same set of scopes, the names and occurrences applicable to each scope are treated as a single set of names/occurrences.

Example
<xs:element name="Names">
  <xs:annotation>
    <xs:documentation>Names assigned to standard</xs:documentation>
  </xs:annotation>
  <xs:complexType>
    <xs:complexContent>
      <xs:restriction base="tm:TopicNamesType">
        <xs:sequence>
          <xs:element ref="Acronym"/>
          <xs:element ref="FullName"/>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
</xs:element>
In the Diffuse Standards and Specification List the Names element is used to identify sets of related topic names. It is based on the TopicNameType Complex Type Definition, and is an instantiation of the AbstractTopicNames class. The subelements within the Names element act as XLink titles
3.2.1.1 Base Name
Type Definition for Base Name
 <xs:complexType name="BaseNameType">
  <xs:annotation>
    <xs:documentation>Text string used to identify topic in lists
       of topics if no displayed name is assigned to the topic.</xs:documentation>
  </xs:annotation>
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute name="scope" type="tm:uriReferences" 
                    use="optional">
        <xs:annotation>
          <xs:documentation>
         Contains the unique identifiers of topic(s) that
         identify the scope(s) this name is to be
         considered apply to.
      </xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="xml:lang" type="xs:language"
                    use="optional">
        <xs:annotation>
          <xs:documentation>
            Language code(s)(conforming to IETF RFC 1766) that
            indicate the language group the displayed name
            will be understood by.
      </xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

<xs:element name="AbstractBaseName"
            type="tm:BaseNameType" abstract="true"/>

[Definition] A base name is a string used to distinguish one topic from another.

Each element used to define a base name for the recognition of a topic within a topic map must be derived from the BaseNameType Complex Type Definition shown above. If multiple base names are assigned to a topic each such name should be relevant to a specific language or knowledge domain.

Where a base name is only relevant within specific knowledge domains, the set of topics that identify relevant domains can optionally be recorded in the scope attribute. The referenced topics become one of the themes of the base name, in addition to those assigned to any enclosing elements conforming to the TopicNamesType, TopicType or TopicMapsType Complex Type Definitions by their scope or AddedThemes attributes.

Where a base name is only significant for a specific language the xml:lang attribute should be used to identify the language used in conformance with IETF RFC 1736.

Example
<xs:element name="Acronym" type="tm:BaseNameType"
            substitutionGroup="tm:AbstractBaseName">
  <xs:annotation>
    <xs:documentation>Acronym standard is known by</xs:documentation>
  </xs:annotation>
</xs:element>
In the Diffuse Standards and Specification List the Acronym element is used to identify the base name of a topic. It is based on the BaseNameType Complex Type Definition, and is an instantiation of the AbstractBaseNames class.
3.2.1.3 Display Name
Type Definition for Display Name
<xs:complexType name="DisplayNameType" mixed="true">
  <xs:annotation>
    <xs:documentation>
          String, image or other form of presentable information
          to be displayed in place of the base name within a 
          list of topics. For example, it could be a shorter or
          longer version of the base name, or a picture or 
          clickable sound bite identifying the topic.
          If not present the base name is displayed.  
      </xs:documentation>
  </xs:annotation>
  <xs:sequence>
    <xs:any namespace="##other"/>
  </xs:sequence>
  <xs:attribute name="scope" type="tm:uriReferences"
                use="optional"/>
  <xs:attribute ref="xml:lang" type="xs:language"
                use="optional">
    <xs:annotation>
      <xs:documentation>
        Language code(s)(conforming to IETF RFC 1766) that
        indicate the language group the displayed name
        will be understood by.
       </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>
<xs:element name="AbstractDisplayName"
            type="tm:DisplayNameType" abstract="true"/>

[Definition] A display name provides a more user-friendly format for the topic for use within a particular language/scope.

Each element used to define displayable name for the recognition of a topic within a topic map must be derived from the DisplayNameType Complex Type Definition shown above.  If multiple display names are assigned to a topic each such name should be identified as being relevant to a specific language or business domain.

A display name may consist of text or any other element that is not defined within the same namespace as a topic map.

Where a display name is only relevant within specific knowledge domains, the set of topics that identify relevant domains can optionally be recorded in the scope attribute. The referenced topics become one of the themes of the name, in addition to those assigned to any enclosing elements conforming to the TopicNamesType, TopicType or TopicMapsType Complex Type Definitions by their scope or AddedThemes attributes.

Where a display name is only significant for a specific language the xml:lang attribute should be used to identify the language used in conformance with IETF RFC 1736.

Example
<xs:element name="FullName" type="tm:DisplayNameType"
            substitutionGroup="tm:AbstractDisplayName"
            maxOccurs="unbounded">
  <xs:annotation>
    <xs:documentation>Full name of standard</xs:documentation>
  </xs:annotation>
</xs:element>
In the Diffuse Standards and Specification List the FullName element is used to identify the full name of a topic. It is based on the DisplayNameType Complex Type Definition, and is an instantiation of the AbstractDisplayNames class.
3.2.1.3 Sort Name
Type Definition for Sort Name
<xs:complexType name="SortNameType">
  <xs:annotation>
    <xs:documentation>Name used for sorting purposes when ordering lists</xs:documentation>
  </xs:annotation>
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute name="scope" type="tm:uriReferences"
                    use="optional">
        <xs:annotation>
          <xs:documentation>
              Contains the unique identifiers of topic(s) that
              identify the scope(s) this name is to be
              considered apply to.
           </xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute ref="xml:lang" type="xs:language"
                use="optional">
        <xs:annotation>
          <xs:documentation>
            Language code(s)(conforming to IETF RFC 1766) that
            indicate the language group the displayed name
            will be understood by.
          </xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>
<xs:element name="AbstractSortName" type="tm:SortNameType" abstract="true"/>

[Definition] A sort name is used to correctly identify the sequence in which a topic should be listed when this is not directly indicated by the base name.

For example, if the base name is Charles VI the sort name might be Charles6 so that similarly named kings will be listed in the correct order, and Charles VI will not appear after Charles IX.

Each element used to define the sorting order for a set of topics within a topic map must be derived from the SortNameType Complex Type Definition shown above. If multiple sort names are assigned to a topic each such name should be identified as being relevant to a specific language or business domain.

Where a sort name is only relevant within specific knowledge domains, the set of topics that identify relevant domains can optionally be recorded in the scope attribute. The referenced topics become one of the themes of the sort name, in addition to those assigned to any enclosing elements conforming to the TopicNamesType, TopicType or TopicMapsType Complex Type Definitions by their scope or AddedThemes attributes.

Where a sort name is only significant for a specific language the xml:lang attribute should be used to identify the language used in conformance with IETF RFC 1736.

Example
 <xs:element name="SortBy" type="tm:SortNameType" 
             substitutionGroup="tm:AbstractSortName"
             minOccurs="0"/>
The SortName element can be used to identify the order in which a topic should appear in a list of topics. It can be based on the SortNameType Complex Type Definition, and will be an instantiation of the AbstractDisplayNames class.

3.2.2 Occurs

Type Definition for Occurs
<xs:complexType name="OccursType">
  <xs:annotation>
    <xs:documentation>Identifies resource that utilizes topic</xs:documentation>
  </xs:annotation>
  <xs:sequence>
    <xs:element ref="tm:AbstractPrompt" 
                minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="xlink:type" use="fixed" value="locator"/>
  <xs:attribute ref="xlink:href" type="xs:uriReference"
                use="required">
    <xs:annotation>
      <xs:documentation>
         URI (conforming to IETF RFC 2396, with XML fragment
         identifiers for identification of subsections of a 
         resource) that identifies where the topic is applied.         
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute ref="xlink:label" type="xs:NMTOKEN"
                use="optional"/>
  <xs:attribute ref="xlink:role" type="xs:uriReference"
                use="optional"/>
  <xs:attribute name="scope" type="tm:uriReferences"
                use="optional"/>
  </xs:attribute>
  <xs:attribute name="xml:lang" type="xs:language"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         Language code(s) (conforming to IETF RFC 1766) that
         indicate the language group(s) the contents of the
         resources being pointed at is relevant for.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>
<xs:element name="AbstractOccurs" 
            type="tm:OccursType" abstract="true"/>

[Definition] An occurrence of a topic identifies which parts of a resource are related to the topic, and the role that part of the resource plays with respect to the topic.

Each element used to identify occurrences of a topic from a topic map within a web resources must be derived from the OccursType Complex Type Definition shown above. It can optionally contain one or more elements conforming to the PromptType Complex Type Definition.

Each element conforming to the OccursType Complex Type Definition is an XLink locator. It must have an XLink href attribute that identifies a resource whose content is related in some way to the topic. Where only part of the resource is relevant for the topic a fragment identifier that is conformant with the XPointer specification may be used to identify the relevant part of the resource.

NB: Because XML Links do not allow embedded XML Links to be used as locators of resources, occurrences declared using this schema can only be assigned to a single resource. (ISO 13250 allows an occurrence to identify a set of resources.)

Each occurrence type element may optionally be assigned an XML name that identifies the role played by the occurrence with respect to the topic. If no value is supplied for the xlink:label attribute the name assigned to the element is taken to be a sufficient label.

NB: The general-purpose xlink:label has been used in preference to a specialist occurrence role attribute (e.g. occrl in ISO 13250) to ensure maximum possible reuse of in-built XLink functionality. It is equivalent to the role attribute used on higher level elements.

Where there exists a topic that defines a set of names relevant to the role, and/or occurrences explaining it, the xlink:role attribute can be used to reference the unique identifier of this topic.

NB: This attribute serves the same purpose as the type attribute in an ISO 13250 occurs type element. It represents a restriction on the xlink:role attribute in that it restricts the type of resource that can be referenced to one that conforms to the TopicType Complex Type Definition.

Where an occurrence is only relevant within specific knowledge domains, the set of topics that identify relevant domains can optionally be recorded in the scope attribute. The referenced topics become one of the themes associated with the occurrence, in addition to those assigned to any enclosing elements conforming to the TopicType or TopicMapsType Complex Type Definitions by their scope or AddedThemes attributes.

Where the content of the occurrence is in a language other than that used for the bulk of the topic map the xml:lang attribute should be used to identify the language used within the resource in conformance with IETF RFC 1736.

Example
<xs:element name="ExplainedIn" type="tm:OccursType"
            substitutionGroup="tm:AbstractOccurs">
  <xs:annotation>
    <xs:documentation>Best source of explanatory material</xs:documentation>
  </xs:annotation>
</xs:element>
In the Diffuse Standards and Specification List the ExplainedIn element is used to identify occurrences that explain the standard. It is based on the OccursType Complex Type Definition, and is an instantiation of the  AbstractOccurs class. It  can optionally contain a Prompt element. It acts as an XLink locator.
3.2.2.1 Prompt
Type Definition for Prompt
<xs:complexType name="PromptType">
  <xs:annotation>
    <xs:documentation>Optional text used to prompt users as to the contents of the resource</xs:documentation>
  </xs:annotation>
  <xs:sequence>
    <xs:any namespace="##other"/>
  </xs:sequence>
  <xs:attribute ref="xlink:type" use="fixed" value="title"/>
  <xs:attribute name="xml:lang" type="xs:language"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         Language code(s) (conforming to IETF RFC 1766) that
         indicate the language group(s) the contents of the
         resources being pointed at is relevant for.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>
<xs:element name="AbstractPrompt"
            type="tm:PromptType" abstract="true"/>

[Definition] A prompt provides a textual clue to the user as to what he will see if he chooses a particular resource.

Each element used to prompt the user to select a locator  within a topic map must be derived from the PromptType Complex Type Definition shown above. It will be considered to be a title element by XLink processors.

Prompts may contain text and any element that does not conform to one of the Complex Type Definitions defined in this specification.

Where the content of the prompt is provided in more than one language the xml:lang attribute should be used to identify the language used in conformance with IETF RFC 1736.

Example
<xs:element name="Prompt" type="tm:PromptType"
            substitutionGroup="tm:AbstractPrompt">
  <xs:annotation>
    <xs:documentation>Prompt used to identify reference</xs:documentation>
  </xs:annotation>
</xs:element>
In the Diffuse Standards and Specification List the Prompt element is used to record text that is to be displayed to the user as the title of an element. Any element can be embedded within the title (e.g. it could be an HTML fragment). It is based on the PromptType Complex Type Definition, and is an instantiation of the AbstractPrompt class. It acts as an XLink title.

3.3. Association

Type Definition for Association
<xs:complexType name="AssociationType">
  <xs:annotation>
    <xs:documentation> Association between topics within topic map</xs:documentation>
  </xs:annotation>
  <xs:sequence>
    <xs:element ref="tm:AbstractAssociationRole"
                maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="xlink:type" use="fixed" value="extended"/>
  <xs:attribute name="role" type="xs:NMTOKEN" use="optional"/>
  <xs:attribute ref="xlink:role" type="xs:uriReference"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         Contains the unique identifier of a topic
         whose names can be used to identify the role of 
         the association.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute name="scope" type="tm:uriReferences">
    <xs:annotation>
      <xs:documentation>
	         Contains the unique identifiers of topic(s) that
	         identify the scope(s) this association falls within.
	      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>

<xs:element name="AbstractAssociation" 
            type="tm:AssociationType" abstract="true"/>

[Definition] An association link expresses relationships between topics. Each such relationship is named (typed).

NB: Association links describe the relationships between topics rather than specific occurrences of topics within resources.

Each element used to define a relationship between two or more topics within a topic map must be derived from the AssociationType Complex Type Definition shown above. This element conforms to the definition of an extended XML link.

Each association link may optionally be assigned an XML name that identifies the role played by the association. If no value is supplied for the role attribute the name assigned to the element is taken to be a sufficient label.

Where an association is an instance of a type of association that has already been named/described in an existing topic, the relevant topic can be identified using the xlink:role attribute. The value of this attribute must be a valid URI reference whose fragment identifier identifies the unique identifier assigned to the relevant topic definition.

NB: The general-purpose xlink:role has been used in preference to a specialist association type attribute (e.g. type in ISO 13250) to ensure maximum possible reuse of in-built XLink functionality. It represents a restriction on the xlink:role attribute in that it restricts the type of resource that can be referenced to one that conforms to the TopicType Complex Type Definition.

Where an association is only relevant within specific knowledge domains, the set of topics that identify relevant domains can optionally be recorded in the scope attribute. The referenced topics become one of the themes associated with the association, in addition to those assigned to any enclosing elements conforming to the  TopicMapsType Complex Type Definition by its AddedThemes attribute.

Example
<xs:element name="Association" 
            substitutionGroup="tm:AbstractAssociation">
  <xs:annotation>
    <xs:documentation>Association between topics</xs:documentation>
  </xs:annotation>
  <xs:complexType>
    <xs:complexContent>
      <xs:restriction base="tm:AssociationType">
        <xs:sequence>
          <xs:element ref="Prompt" maxOccurs="2"/>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
</xs:element>
The Associaton element is used to identify relationships between topics.  It is based on the AssociationType Complex Type Definition, and is an instantiation of the AbstractAssocistion class. It acts as an XLink extended link.

3.3.1 Association Role

Type Definition for Association Role
<xs:complexType name="AssociationRoleType">
  <xs:annotation>
    <xs:documentation>Role played by association</xs:documentation>
  </xs:annotation>
  <xs:sequence>
    <xs:element ref="tm:AbstractPrompt"
                minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="xlink:type" use="fixed" value="locator"/>
  <xs:attribute ref="xlink:href" type="xs:uriReference"
                use="required"/>
  <xs:attribute ref="xlink:label" type="xs:NMTOKEN"
                use="optional">
    <xs:annotation>
      <xs:documentation>
          Name (without spaces) used to identify role played
          by this part of the association. If not present,
          the element name is taken to indicate the role.
        </xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute ref="xlink:role" type="xs:uriReference"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         Contains the unique identifier of a topic
         whose names can be used to display the role of
         this part of the association.
      </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>
<xs:element name="AbstractAssociationRole" 
            type="tm:AssociationRoleType" abstract="true"/>

[Definition] An association role identifies the role played by a specific linked resource within a particular association.

NB: An association role can be thought of as an edge label that links two topics to prompt users when they are navigating between topics in a topic map.

Each element used to describe the role of a topic within an association relationship must be derived from the AssociationRoleType Complex Type Definition shown above.

Each element conforming to the AssociationRoleType Complex Type Definition is an XLink locator. It must have an XLink href attribute that identifies a topic defined in a topic map, using the topic's unique identifier as the fragment identifier of the URI.

NB: Because XML Links do not allow embedded XML Links to be used as locators of resources, association roles declared using this schema can only be assigned to a single resource. (ISO 13250 allows an association role to identify a set of resources.)

Each association role element may optionally be assigned an XML name that identifies the role played this part of the association. If no value is supplied for the xlink:label attribute the name assigned to the element is taken to be a sufficient label.

NB: The general-purpose xlink:label has been used in preference to a specialist anchor role attribute (e.g. anchrole in ISO 13250) to ensure maximum possible reuse of in-built XLink functionality. It is equivalent to the role attribute used on higher level elements.

Where there exists a topic that defines a set of names relevant to the role, and/or occurrences explaining it, the xlink:role attribute can be used to reference the unique identifier of this topic.

NB: The general-purpose xlink:role has been used in preference to a specialist association type attribute (e.g. type in ISO 13250). It represents a restriction on the xlink:role attribute in that it restricts the type of resource that can be referenced to one that conforms to the TopicType Complex Type Definition.

Example
<xs:element name="Purpose" type="tm:AssociationRoleType"
            substitutionGroup="tm:AbstractAssociationRole">
  <xs:annotation>
    <xs:documentation>Purpose of association</xs:documentation>
  </xs:annotation>
</xs:element>
The Purpose element can be used to identify the role played by a particular topic in a relationship between two topics.  The type of purpose can be recorded in the xlink:label attribute of the arc. The element is based on the AssociationRoleType Complex Type Definition, and is an instantiation of the AbstractAssociationRole class. It acts as an XLink locator.

3.4 Facet

Type Definition for Facet
<xs:complexType name="FacetType">
  <xs:annotation>
    <xs:documentation> Property to be assigned to resource</xs:documentation>
  </xs:annotation>
  <xs:sequence>
    <xs:element ref="tm:AbstractFacetValue"
                minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="xlink:type" use="fixed" value="extended"/>
  <xs:attribute name="property" type="xs:NMTOKEN" 
                use="optional">
    <xs:annotation>
      <xs:documentation>
          Name (without spaces) used to identify property to be
          added by the facet. If not present the element name is 
          taken to be the name of the property.
        </xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute ref="xlink:role" type="xs:uriReference"
                use="optional"/>
</xs:complexType>
 

[Definition] A facet link assigns a property/value pair to resources that currently do not exhibit that property.

Each element used to define a facet (property) to be assigned to a resource must be derived from the FacetType Complex Type Definition shown above. This element conforms to the definition of an extended XML link. The element contains a number of elements conforming to the FacetValueType Complex Type Definition that assign specific values for the property to a specific resource.

NB: Facets with no currently assigned facet values can be defined as part of the generation of a topic map to indicate that values are expected to be assigned at a later date (or have been assigned in the past).

Each facet may optionally be assigned an XML name that identifies the name of the property being assigned to resources. If no value is supplied for the property attribute the name assigned to the element is taken to be a sufficient label.

Where a facet is an instance of a topic that already exists as part of a topic map, the relevant topic can be identified using the xlink:role attribute. The value of this attribute must be a valid URI reference whose fragment identifier identifies the unique identifier assigned to the relevant topic definition.

NB: The general-purpose xlink:role has been used in preference to a specialist facet type attribute (e.g. type in ISO 13250) to ensure maximum possible reuse of in-built XLink functionality. It represents a restriction on the xlink:role attribute in that it restricts the type of resource that can be referenced to one that conforms to the TopicType Complex Type Definition.

Example
<xs:element name="Relevance" type="tm:FacetType"
            substitutionGroup="tm:AbstractFacet">
  <xs:annotation>
    <xs:documentation>Fixed facet (property) for weighting entries</xs:documentation>
  </xs:annotation>
</xs:element>
The Relevance element can be used to record relevance weightings. (In this example the element name acts as the name of the property being assigned, so the property attribute does not need to be specified.) This element is based on the FacetType Complex Type Definition, and is an instantiation of the AbstractFacet class. It acts as an XLink extended link. All facets must be assigned a unique identifier.

3.4.1 Facet Value

Type Definition for Facet Value
<xs:complexType name="FacetValueType">
  <xs:annotation>
    <xs:documentation>Value to be assigned to facet property</xs:documentation>
  </xs:annotation>
  <xs:sequence>
    <xs:element ref="tm:AbstractPrompt"
                minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="xlink:type" use="fixed" value="locator"/>
  <xs:attribute ref="xlink:href" type="xs:uriReference"
                use="required"/>
  <xs:attribute name="value" type="xs:NMTOKEN" use="optional"/>
  <xs:attribute ref="xlink:role" type="xs:uriReference" 
                use="optional"/>
</xs:complexType>
<xs:element name="AbstractFacetValue"
            type="tm:FacetValueType" abstract="true"/>

[Definition] A facet value assigns a specific value of a property to a resource, or to part of a resource.

Each element used to assign a specific value for a facet to one or more resources must be derived from the FacetValueType Complex Type Definition shown above. 

Each element conforming to the FacetValueType Complex Type Definition is an XLink locator. It must have an XLink href attribute that identifies a resource to which the property and value are to be assigned. Where only part of the resource is to be assigned the property a fragment identifier that is conformant with the XPointer specification may be used to identify the relevant part of the resource.

NB: Because XML Links do not allow embedded XML Links to be used as locators of resources, facet values declared using this schema can only be assigned to a single resource. (ISO 13250 allows a facet value to be assigned to a set of resources.)

The value to be assigned to the property identified by the enclosing facet type element can be specified as in the value attribute. If no value is specified the name of the element is taken to be the value to be assigned to the property. 

NB: For compatibility with ISO 13250 this should be a valid name, beginning with a letter, rather than an XML name token as defined in the architectural form. However, as the example shows below, there will be times when it is easier to use just numbers, as is permitted for name tokens.

Where there exists a topic that defines a set of names relevant to the value, and/or occurrences explaining it, the xlink:role attribute can be used to reference the unique identifier of this topic.

NB: The general-purpose xlink:role has been used in preference to a specialist facet value type attribute (e.g. type in ISO 13250) to ensure maximum possible reuse of in-built XLink functionality. It represents a restriction on the xlink:role attribute in that it restricts the type of resource that can be referenced to one that conforms to the TopicType Complex Type Definition.

Example
 <xs:element name="Weighting" type="tm:FacetValueType"
             substitutionGroup="tm:AbstractFacetValue">
  <xs:annotation>
    <xs:documentation>Weight assigned to resource</xs:documentation>
  </xs:annotation>
</xs:element>
The Weighting element can be used to assign a weighting to a particular resource. The applicable weighting is assigned using the value attribute (if the topic map is to interact with ISO 13250 compatible engines this entry would have to start with a letter). This element is based on the FacetValueType Complex Type Definition, and is an instantiation of the AbstractFacetValue class. It acts as an XLink locator.

3.5 Added Themes

Type Definition for Added Themes
<xs:complexType name="AddedThemesType">
  <xs:annotation>
    <xs:documentation> Empty element whose attributes identify which themes are to be added to which URIs within which topic map </xs:documentation>
  </xs:annotation>
  <xs:attribute name="themes" type="tm:uriReferences"
                use="required">
    <xs:annotation>
      <xs:documentation>
          List of unique identifiers of topics that are to be 
          used as added themes within the scope of elements of 
          the type identified by the "characteristic" attribute
          within the maps identified by the "topicmaps" attribute
          (or any topic map known to the system if no topic maps
          are explicitly identified).
       </xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute name="topicmaps" type="tm:uriReferences"
                use="optional">
    <xs:annotation>
      <xs:documentation>
         List of URIs (as defined in IETF RFC 2396) of topic maps
         to which topics in the local map are to assigned to
         as additional themes to all elements within the map.
        </xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute name="assignto" type="tm:uriReferences"
                use="optional">
    <xs:annotation>
      <xs:documentation>
             List of URIs (as defined in IETF RFC 2396) of elements
            within topic maps to which topics in the local map are to
             be assigned as additional themes.
        </xs:documentation>
    </xs:annotation>
  </xs:attribute>
</xs:complexType>
<xs:element name="AbstractAddedThemes"
            type="tm:AddedThemesType" abstract="true"/>

[Definition] An added theme is a topic that is to be added to the list of scopes applied to a particular class of elements throughout one or more topic maps.

Each element used to indicate topics which define the scope of one or more types of elements in this or another topic map must be derived from the AddedThemesType Complex Type Definition shown above. The element is an empty element which has no embedded content.

The themes attribute contains a space separated list of URIs whose fragment identifiers identify topics in one or more topic maps that are to be used to assign additional themes to those listed in the scope attribute of one or more types of topic map elements.

The topicmaps attribute contains a space separated list of URIs of documents that conform to the TopicMapType Complex Type Definition to which the identified themes are to be added to all elements. If no value is assigned to this attribute the topics are added to the topic map containing the element conforming to the AddedThemesType Complex Type Definition.

The optional assignto attribute can be used to identify specific topic maps elements to which characteristics are to be added. More than one value can be specified in a space separated list.

Example
 <xs:element name="Domains" type="tm:AddedThemesType"
             substitutionGroup="tm:AbstractAddedThemes"/>
The Domains element can be used to identify which domains a particular topic map is relevant for. It is based on the AddedThemesType Complex Type Definition, and is an instantiation of the AbstractAddedThemes class, which requires the use of a themes attribute to record the URIs (XML fragment identifiers) of topics that are to be used to scope entries within the topic map.  The topic maps the themes are to be associated can be recorded using the topicmaps attribute if they are not to be applied to the current map. Where the themes apply to specific topic then the URIs of the affected elements should be recorded in the assignto attribute.

4. Creating Customized Topic Maps

A topic map application must define its own XML schema. This schema will need to include the type definitions and element declarations shown in Chapter 3. It will also need to assign local names for each of the abstract element declarations using to form substitution groups of local elements that map to the abstract element declarations. The following example shows how this can be done.

Example of Schema for Simple Topic Map
<xs:schema targetNamespace="http://www.diffuse.org/TopicMaps/DiffuseTopics" xmlns="http://www.diffuse.org/TopicMaps/DiffuseTopics" xmlns:tm="http://www.diffuse.org/TopicMaps/Schema" xmlns:xs="http://www.w3.org/2000/10/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xml="http://www.w3.org/1998/XML">
  <xs:import namespace="http://www.diffuse.org/TopicMaps/Schema" schemaLocation="c:/Diffuse/TopicMaps/schema.xsd"/>
  <xs:element name="DiffuseTopics" type="tm:TopicMapType" substitutionGroup="tm:AbstractTopicMap">
    <xs:annotation>
      <xs:documentation>Diffuse Topic Map</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Standard" type="tm:TopicType" substitutionGroup="tm:AbstractTopic">
    <xs:annotation>
      <xs:documentation>Standard that is topic within map</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Names" substitutionGroup="tm:AbstractTopicNames">
    <xs:annotation>
      <xs:documentation>Names assigned to standard</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:TopicNamesType">
          <xs:sequence>
            <xs:element ref="Acronym"/>
            <xs:element ref="FullName" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="Acronym" type="tm:BaseNameType" substitutionGroup="tm:AbstractBaseName">
    <xs:annotation>
      <xs:documentation>Acronym standard is known by</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="FullName" type="tm:DisplayNameType" substitutionGroup="tm:AbstractDisplayName">
    <xs:annotation>
      <xs:documentation>Full name of standard</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Overview" substitutionGroup="tm:AbstractOccurs">
    <xs:annotation>
      <xs:documentation>Location of overview of standard</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:OccursType"/>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="ExplainedIn" substitutionGroup="tm:AbstractOccurs">
    <xs:annotation>
      <xs:documentation>Best source of explanatory material</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:OccursType">
          <xs:sequence>
            <xs:element ref="Prompt" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="MainInfoSource" substitutionGroup="tm:AbstractOccurs">
    <xs:annotation>
      <xs:documentation>URI of source of information on standard</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:OccursType">
          <xs:sequence>
            <xs:element ref="Prompt" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="owner" type="xs:string" use="optional"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="FormsBasisFor" substitutionGroup="tm:AbstractOccurs">
    <xs:annotation>
      <xs:documentation>Other standards that are based on this standard</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:OccursType">
          <xs:sequence>
            <xs:element ref="Prompt" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="ProvidesPartOf" substitutionGroup="tm:AbstractOccurs">
    <xs:annotation>
      <xs:documentation>Other standards that make use of this standard</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:OccursType">
          <xs:sequence>
            <xs:element ref="Prompt" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="UsedBy" substitutionGroup="tm:AbstractOccurs">
    <xs:annotation>
      <xs:documentation>RTD Projects using standard</xs:documentation>
    </xs:annotation>
    <xs:complexType mixed="true">
      <xs:complexContent mixed="true">
        <xs:restriction base="tm:OccursType">
          <xs:sequence>
            <xs:element ref="Prompt" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="InfluencedBy" substitutionGroup="tm:AbstractOccurs">
    <xs:annotation>
      <xs:documentation>RTD Projects influenced by standard</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:OccursType">
          <xs:sequence>
            <xs:element ref="Prompt" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="NewsAbout" substitutionGroup="tm:AbstractOccurs">
    <xs:annotation>
      <xs:documentation>Diffuse news items referencing standard</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:OccursType">
          <xs:sequence>
            <xs:element ref="Subject" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:attribute name="title" type="xs:string" use="optional"/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="Prompt" type="tm:PromptType" substitutionGroup="tm:AbstractPrompt">
    <xs:annotation>
      <xs:documentation>Prompt used to identify reference</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Subject" substitutionGroup="tm:AbstractPrompt">
    <xs:annotation>
      <xs:documentation>Subject of Diffuse news item</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="tm:PromptType">
          <xs:attribute ref="xlink:href" type="xs:uriReference" use="optional"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="Association" substitutionGroup="tm:AbstractAssociation">
    <xs:annotation>
      <xs:documentation>Association between topics</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Purpose" maxOccurs="2"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Purpose" substitutionGroup="tm:AbstractAssociationRole">
    <xs:annotation>
      <xs:documentation>Purpose of association</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:AssociationRoleType">
          <xs:sequence>
            <xs:element ref="Prompt" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="Relevance" type="tm:FacetType" substitutionGroup="tm:AbstractFacet">
    <xs:annotation>
      <xs:documentation>Fixed facet (property) for weighting entries</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="Weighting" substitutionGroup="tm:AbstractFacetValue">
    <xs:annotation>
      <xs:documentation>Weight assigned to resource</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:restriction base="tm:FacetValueType">
          <xs:sequence>
            <xs:element ref="Prompt" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
</xs:schema>
This example shows how each of the abstract types defined in Chapter 3 is renamed for use within a Diffuse Topic Map.  Note particularly the use of multiple examples of elements that conform to the OccursType complex type definition. These elements form a multiheaded substitution group for those points where the Occurs abstract type is referenced within the complex type definition for a topic. 
Example of Simple Topic Map
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Topic.xsl"?>
<DiffuseTopics
 xmlns:xlink="http://www.w3.org/1999/xlink"
 xmlns="http://www.diffuse.org/TopicMaps/DiffuseTopics"
 xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
 xsi:schemaLocation="http://www.diffuse.org/TopicMaps/DiffuseTopics">
 <Standard id="RDF">
  <Names>
    <Acronym>RDF</Acronym>
    <FullName>Resource Description Framework</FullName>
  </Names>
  <Overview xlink:href="meta.html#RDF"/>
  <ExplainedIn xlink:href="http://www.dlib.org/dlib/may98/miller/05miller.html">
    <Prompt>An Introduction to the Resource Description Framework</Prompt>
  </ExplainedIn>
  <MainInfoSource xlink:href="http://www.w3.org/RDF" owner="../fora.html#W3C">
    <Prompt>World Wide Web Consortium (W3C)</Prompt>
  </MainInfoSource>
  <FormsBasisFor xlink:href="meta.html#Prism">
    <Prompt>Publishing Requirements for Industry Standard Metadata (PRISM)</Prompt>
  </FormsBasisFor>
  <ProvidesPartOf xlink:href="gis.html#GML">
    <Prompt>Geography Markup Language</Prompt>
  </ProvidesPartOf>
  <ProvidesPartOf xlink:href="files.html#DRP">
    <Prompt>HTTP Distribution and Replication Protocol</Prompt>
  </ProvidesPartOf>
  <ProvidesPartOf xlink:href="meta.html#PICS">
    <Prompt>Platform for Internet Content Selection</Prompt>
  </ProvidesPartOf>
  <NewsAbout title="Information Management Standardization Activity, March 2000" xlink:href="2000-mar.html">
    <Subject xlink:href="#RDF">Resource Description Framework (RDF) Schema Specification </Subject>
    <Subject xlink:href="#PICS">PICS Rating Vocabularies in XML/RDF</Subject>
    <Subject xlink:href="#DC">The Application of Metadata Standards to Video Indexing</Subject>
    <Subject xlink:href="#photo-rdf">Describing and retrieving photos using RDF and HTTP</Subject>
  </NewsAbout>
  <NewsAbout title="WWW9 - The Web: The Next Generation, 16th-19th May 2000" xlink:href="www9.html">
    <Subject xlink:href="#Semantics">The Semantic Web Initiative</Subject>
    <Subject xlink:href="#WAP">Composite Capabilities/Preferences Protocol (CC/PP) </Subject>
  </NewsAbout>
  <NewsAbout title="Information Management Standardization Activity, September 2000" xlink:href="2000-sep.html">
    <Subject xlink:href="#photos">Describing and retrieving photos using RDF and HTTP</Subject>
  </NewsAbout>
  <NewsAbout title="IST Semantic Web Technologies Workshop, Luxembourg, 22nd &amp; 23rd November 2000" xlink:href="S-Web.html">
    <Subject xlink:href="#Karlsruhe">Beyond RDFS: the ontology perspective for the semantic web</Subject>
    <Subject xlink:href="#OIL">Ontology Inference Layer (OIL)</Subject>
    <Subject xlink:href="#Essex">Using RDF for the description of web objects</Subject>
    <Subject xlink:href="#QueryRDF">Querying RDF</Subject>
    <Subject xlink:href="#SMIL">Describing multimedia for the semantic web</Subject>
    <Subject xlink:href="#inference">Inferential semantics for networked image data</Subject>
    <Subject xlink:href="#OLR">Navigation and Access to Open Learning Repositories</Subject>
    <Subject xlink:href="#Pics">Applying semantics to still pictures</Subject>
    <Subject xlink:href="#RSS">RSS 1.0 and its taxonomy module</Subject>
  </NewsAbout>
  <NewsAbout title="Information Management Standardization Activity, November 2000" xlink:href="2000-nov.html">
    <Subject xlink:href="#DAML">Model Theoretic Semantics for DAML-ONT</Subject>
    <Subject xlink:href="#RSS">RDF Site Summary (RSS)</Subject>
  </NewsAbout>
  <UsedBy xlink:href="projects.html#COMMA">
    <Prompt>IST COMMA Project</Prompt>
  </UsedBy>
  <UsedBy xlink:href="projects.html#EASEL">
    <Prompt>IST EASEL Project</Prompt>
  </UsedBy>
  <UsedBy xlink:href="projects.html#On-To-Knowledge">
    <Prompt>IST On-To_Knowledge Project</Prompt>
  </UsedBy>
  <UsedBy xlink:href="projects.html#SCHEMAS">
    <Prompt>IST SCHEMAS Project</Prompt>
  </UsedBy>
 </Standard>
</DiffuseTopics>
For Diffuse Topic Maps (identified by the DiffuseTopics element) the Standard element conforms to the TopicType, the Names element conforms to the TopicNamesType, the Acronym element conforms to the BaseNameType while the FullName element provides the DisplayNameType. The Overview, ExplainedIn, MainInfoSource, FormsBasisFor and ProvidesPartOf elements all conform to the standard OccursType definition, referencing the globally defined Prompt element for their permitted contents. For the MainInfoSource an extension has been defined to add an additional application specific attribute to the element definition.

The NewsAbout element also conforms to the OccursType definition, but in this case the embedded element, while still conforming to the PromptType, has been renamed Subject, and has also been assigned an optional xlink:title attribute to allow the title of the publication containing the article to be referenced. Individual anchors within the resource have been identified using the application specific AnchorID attribute.

The general-purpose Association element type has been specialized in this example to record the Representation used for the RDF standard. The element has been assigned a unique identifier, id, so that it can be associated with a relevance weighting (see below).

Note: Any Topic Map element can have an ID associated with it, whether or not it is defined as part of the type definition. Only where the ID is required does it get defined within the type definition.

The two Purpose elements that make up the association identify the two standards linked by the association, RDF and XML, and the roles that these two standards play in the association.

The Relevance element, which conforms to the FacetType definition, allows a value to be assigned to a resource for the Relevance property. (As the element has no property attribute the element name is taken to be the property name.) The Weighting element, which conforms to the FacetValueType definition, records the property value that is to be applied to which element in which resource. In this example the resource referenced is the unique identifier assigned within the current resource to one of the associations, which is deemed to have a high relevance.

Appendix A: Schema for ISO 13250 Topic Maps (normative)


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.diffuse.org/TopicMaps/Schema" xmlns:tm="http://www.diffuse.org/TopicMaps/Schema" xmlns:xs="http://www.w3.org/2000/10/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xml="http://www.w3.org/XML/1998/namespace">
  <xs:annotation>
    <xs:documentation>
                Fifth working draft: 29th January 2001
                (c) Copyright: The SGML Centre (http://www.sgml.u-net.com)
              </xs:documentation>
  </xs:annotation>
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="c:\Diffuse\TopicMaps\xml-atts.xsd"/>
  <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="c:\Diffuse\TopicMaps\xlink-atts.xsd"/>
  <xs:simpleType name="uriReferences">
    <xs:annotation>
      <xs:documentation> List of URIs</xs:documentation>
    </xs:annotation>
    <xs:list itemType="xs:uriReference"/>
  </xs:simpleType>
  <xs:complexType name="TopicMapType">
    <xs:annotation>
      <xs:documentation> Root element for topic map</xs:documentation>
    </xs:annotation>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="tm:AbstractTopic" maxOccurs="unbounded"/>
      <xs:element ref="tm:AbstractAssociation" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tm:AbstractFacet" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tm:AbstractAddedThemes" minOccurs="0" maxOccurs="unbounded"/>
    </xs:choice>
    <xs:attribute name="AddedThemes" type="xs:IDREFS" use="optional">
      <xs:annotation>
        <xs:documentation>
         Contains the unique identifiers of topics
         that are to be used as additional scopes for all
         topic map conformant elements within this topic map.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="TopicType">
    <xs:annotation>
      <xs:documentation>
       Container for a set of names that can be used to identify
        the topic together with the occurrences of resources that have
        been identified as being relevant to the topic. 
     </xs:documentation>
    </xs:annotation>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="tm:AbstractTopicNames"/>
      <xs:element ref="tm:AbstractOccurs"/>
    </xs:choice>
    <xs:attribute ref="xlink:type" use="fixed" value="extended"/>
    <xs:attribute name="id" type="xs:ID" use="required"/>
    <xs:attribute name="identity" type="xs:uriReference" use="optional">
      <xs:annotation>
        <xs:documentation>
        Reference to subject descriptors used to provide
        an unambiguous indication of the identity of a subject
        that this topic covers.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="topics" type="tm:uriReferences" use="optional">
      <xs:annotation>
        <xs:documentation>
         Contains the unique identifiers of topic(s)
         whose subject(s) are the classes of topics
         of which this topic is an instance.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="scope" type="tm:uriReferences" use="optional">
      <xs:annotation>
        <xs:documentation>
         Contains the unique identifiers of topic(s) that
         identify the themes(s) this topic is to be considered
         to fall within.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="TopicNamesType">
    <xs:annotation>
      <xs:documentation> Names used to identify topic.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="tm:AbstractBaseName" maxOccurs="unbounded"/>
      <xs:element ref="tm:AbstractDisplayName" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tm:AbstractSortName" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="xlink:type" use="fixed" value="title"/>
    <xs:attribute name="scope" type="tm:uriReferences" use="optional">
      <xs:annotation>
        <xs:documentation>
         Contains the unique identifiers of topic(s) that
         identify the scope(s) this set of names is to be
         considered apply to.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="BaseNameType">
    <xs:annotation>
      <xs:documentation>Text string used to identify topic in lists
       of topics if no displayed name is assigned to the topic.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="scope" type="tm:uriReferences" use="optional">
          <xs:annotation>
            <xs:documentation>
         Contains the unique identifiers of topic(s) that
         identify the scope(s) this name is to be
         considered apply to.
      </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute ref="xml:lang" type="xs:language" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="DisplayNameType" mixed="true">
    <xs:annotation>
      <xs:documentation>
          String, image or other form of presentable information
          to be displayed in place of the base name within a 
          list of topics. For example, it could be a shorter or
          longer version of the base name, or a picture or 
         clickable sound bite identifying the topic.
         If not present the base name is displayed.  
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:any namespace="##other"/>
    </xs:sequence>
    <xs:attribute name="scope" type="tm:uriReferences" use="optional"/>
    <xs:attribute ref="xml:lang" type="xs:language" use="optional">
      <xs:annotation>
        <xs:documentation>
                 Language code(s) (conforming to IETF RFC 1766) that
                 indicate the language group the displayed name
                 will be understood by.
           </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="SortNameType">
    <xs:annotation>
      <xs:documentation> Name used for sorting purposes when ordering lists</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="scope" type="tm:uriReferences" use="optional">
          <xs:annotation>
            <xs:documentation>
              Contains the unique identifiers of topic(s) that
              identify the scope(s) this name is to be
              considered apply to.
           </xs:documentation>
          </xs:annotation>
        </xs:attribute>
        <xs:attribute ref="xml:lang" type="xs:language" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="OccursType">
    <xs:annotation>
      <xs:documentation> Identifies resource that utilizes topic</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="tm:AbstractPrompt" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="xlink:type" use="fixed" value="locator"/>
    <xs:attribute ref="xlink:href" type="xs:uriReference" use="required">
      <xs:annotation>
        <xs:documentation>
         URI (conforming to IETF RFC 2396, with XML fragment
         identifiers for identification of subsections of a 
         resource) that identifies where the topic is applied.         
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute ref="xlink:label" type="xs:NMTOKEN" use="optional"/>
    <xs:attribute ref="xlink:role" type="xs:uriReference" use="optional"/>
    <xs:attribute name="scope" type="tm:uriReferences" use="optional"/>
  </xs:complexType>
  <xs:complexType name="PromptType" mixed="true">
    <xs:annotation>
      <xs:documentation>Optional text used to rpompt users as to the contents of the resource</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:any namespace="##other"/>
    </xs:sequence>
    <xs:attribute ref="xlink:type" use="fixed" value="title"/>
    <xs:attribute ref="xml:lang" type="xs:language" use="optional"/>
  </xs:complexType>
  <xs:complexType name="AssociationType">
    <xs:annotation>
      <xs:documentation> Association between topics within topic map</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="tm:AbstractAssociationRole" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="xlink:type" use="fixed" value="extended"/>
    <xs:attribute name="role" type="xs:NMTOKEN" use="optional"/>
    <xs:attribute ref="xlink:role" type="xs:uriReference" use="optional">
      <xs:annotation>
        <xs:documentation>
         Contains the unique identifier of a topic
         whose names can be used to identify the role of 
         the association.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="scope" type="tm:uriReferences">
      <xs:annotation>
        <xs:documentation>
	         Contains the unique identifiers of topic(s) that
	         identify the scope(s) this association falls within.
	      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="AssociationRoleType">
    <xs:annotation>
      <xs:documentation> Role played by association</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="tm:AbstractPrompt" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="xlink:type" use="fixed" value="locator"/>
    <xs:attribute ref="xlink:href" type="xs:uriReference" use="required"/>
    <xs:attribute ref="xlink:label" type="xs:NMTOKEN" use="optional">
      <xs:annotation>
        <xs:documentation>
          Name (without spaces) used to identify role played
          by this part of the association. If not present,
          the element name is taken to indicate the role.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute ref="xlink:role" type="xs:uriReference" use="optional">
      <xs:annotation>
        <xs:documentation>
         Contains the unique identifier of a topic
         whose names can be used to display the role of
         this part of the association.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="FacetType">
    <xs:annotation>
      <xs:documentation> Property to be assigned to resource</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="tm:AbstractFacetValue" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="xlink:type" use="fixed" value="extended"/>
    <xs:attribute name="property" type="xs:NMTOKEN" use="optional">
      <xs:annotation>
        <xs:documentation>
          Name (without spaces) used to identify property to be
          added by the facet. If not present the element name is 
          taken to be the name of the property.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute ref="xlink:role" type="xs:uriReference" use="optional"/>
  </xs:complexType>
  <xs:complexType name="FacetValueType">
    <xs:annotation>
      <xs:documentation> Value to be assigned to facet property</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="tm:AbstractPrompt" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute ref="xlink:type" use="fixed" value="locator"/>
    <xs:attribute ref="xlink:href" type="xs:uriReference" use="required"/>
    <xs:attribute name="value" type="xs:NMTOKEN" use="optional"/>
    <xs:attribute ref="xlink:role" type="xs:uriReference" use="optional"/>
  </xs:complexType>
  <xs:complexType name="AddedThemesType">
    <xs:annotation>
      <xs:documentation> Empty element whose attributes identify which themes are to be added to which URIs within which topic map </xs:documentation>
    </xs:annotation>
    <xs:attribute name="themes" type="tm:uriReferences" use="required">
      <xs:annotation>
        <xs:documentation>
          List of unique identifiers of topics that are to be 
          used as added themes within the scope of elements of 
          the type identified by the "characteristic" attribute
          within the maps identified by the "topicmaps" attribute
          (or any topic map known to the system if no topic maps
          are explicitly identified).
       </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="topicmaps" type="tm:uriReferences" use="optional">
      <xs:annotation>
        <xs:documentation>
         List of URIs (as defined in IETF RFC 2396) of topic maps
         to which topics in the local map are to assigned to
         as additional themes to all elements within the map.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="assignto" type="tm:uriReferences" use="optional">
      <xs:annotation>
        <xs:documentation>
             List of URIs (as defined in IETF RFC 2396) of elements
            within topic maps to which topics in the local map are to
             be assigned as additional themes.
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="AbstractTopicMap" type="tm:TopicMapType" abstract="true">
    <xs:annotation>
      <xs:documentation/>
    </xs:annotation>
  </xs:element>
  <xs:element name="AbstractTopic" type="tm:TopicType" abstract="true"/>
  <xs:element name="AbstractTopicNames" type="tm:TopicNamesType" abstract="true"/>
  <xs:element name="AbstractBaseName" type="tm:BaseNameType" abstract="true"/>
  <xs:element name="AbstractDisplayName" type="tm:DisplayNameType" abstract="true"/>
  <xs:element name="AbstractSortName" type="tm:SortNameType" abstract="true"/>
  <xs:element name="AbstractOccurs" type="tm:OccursType" abstract="true"/>
  <xs:element name="AbstractPrompt" type="tm:PromptType" abstract="true"/>
  <xs:element name="AbstractAssociation" type="tm:AssociationType" abstract="true"/>
  <xs:element name="AbstractAssociationRole" type="tm:AssociationRoleType" abstract="true"/>
  <xs:element name="AbstractFacet" type="tm:FacetType" abstract="true"/>
  <xs:element name="AbstractFacetValue" type="tm:FacetValueType" abstract="true"/>
  <xs:element name="AbstractAddedThemes" type="tm:AddedThemesType" abstract="true"/>
</xs:schema>

Appendix B: Glossary (normative)

Added theme
A topic that is to be added to the list of scopes applied to a particular class of elements throughout one or more topic maps.
Association role
Identifies the role played by a specific linked resource within a particular association.
Association link
Expresses relationships between topics. Each such relationship is named (typed).
Base name
A string used to distinguish one topic from another.
Display name
Provides a more user-friendly format for the topic for use within a particular language/scope.
Facet link
Assigns a property/value pair to resources that currently do not exhibit that property.
Occurrence
Identifies which parts of a resource are related to the topic, and the role that part of the resource plays with respect to the topic.
Prompt
Provides a textual clue to the user as to what he will see if he chooses a particular resource.
Public subject descriptor
A subject descriptor which is designed to be used as a common referent of the identity attributes in many topic maps.
Sort name
Used to correctly identify the sequence in which a topic should be listed when this is not directly indicated by the base name.
Subject descriptor
A reference to a positive, unambiguous, indication of the identify of a subject. For example, it could be a reference to some descriptive text, a Dewey Decimal Code or a Universal Decimal Classification.
Topic
Assigns a set of topic names to a set of resources that relate in some way to the meaning normally associated with the names.
Topic map
A set of topics, associations, facets and added theme elements that are used to manage a set of terms relevant to a particular knowledge domain.
Topic name
A string used by a computer or human to distinguish one topic from another. There are three types of topic names: text-only base names, human-friendly display names (which can include images) and computer-readable sort names.

Appendix C: References (normative)

URI
Uniform Resource Identifiers (URI): Generic Syntax. T. Berners-Lee, R. Fielding, and L. Masinter, eds,  IETF RFC 2396. See http://www.ietf.org/rfc/rfc2396.txt.
XLink
XML Linking Language (XLink) Version 1.0, Steve DeRose, Eve Maler, David Orchard and Ben Trafford, eds, W3C, July 2000. See http://www.w3.org/TR/2000/CR-xlink-20000703/
XML-Infoset
XML Information Set W3C Working Draft. See http://www.w3.org/TR/xml-infoset
XPointer
XML Pointer Language (XPointer). W3C Working Draft, December 1999. See http://www.w3.org/TR/xptr
XML-Namespaces
Namespaces in XML. W3C Recommendation. See http://www.w3.org/TR/REC-xml-name
XML Schemas: Datatypes
XML Schema Part 1: Datatypes, Paul V. Biron and Ashok Malhotra, W3C, October 2000. See http://www.w3.org/TR/2000/CR-xmlschema-2-20001024/
XML Schemas: Structures
XML Schema Part 1: Structures, Henry S. Thompson, David Beech, Murray Maloney and Noah Mendelsohn,eds, W3C, October 2000. See http://www.w3.org/TR/2000/CR-xmlschema-1-20001024/
XPath
XML Path Language (XPath) Version 1.0, James Clark and Steve DeRose, eds, W3C, November 1999. See http://www.w3.org/TR/1999/REC-xpath-19991116