ISO/IEC JTC1/SC34N0

ISO/IEC

ISO/IEC JTC1/SC34

Information Technology —

Document Description and Processing Languages

Title: Topic Maps — XML Syntax
Source: Lars Marius Garshol, Graham Moore, JTC1 / SC34
Project: ISO 13250: Topic Maps
Project editor: Lars Marius Garshol, Graham Moore
Status: Final Draft International Standard
Action: For review
Date: 2009-11-19
Summary:
Distribution: SC34 and Liaisons
Refer to: http://www.isotopicmaps.org/sam/sam-xtm/2009-11-19/
Supercedes: http://www.isotopicmaps.org/sam/sam-xtm/2006-06-19/

Topic Maps — XML Syntax

Contents

1 Scope
2 Normative references
3 Terms and definitions
4   Syntax definition
4.1   About the syntax
4.2   Deserialization
4.3   Common syntactical constructs
4.3.1   Common declarations
4.3.2   The reifier attribute
4.3.3   The reifier element
4.3.4   The href attribute
4.3.5   Creating IRIs from strings
4.4   The topicMap element
4.5   The topic element
4.6   The itemIdentity element
4.7   The subjectLocator element
4.8   The subjectIdentifier element
4.9   The instanceOf element
4.10   The name element
4.11   The value element
4.12   The variant element
4.13   The scope element
4.14   The type element
4.15   The occurrence element
4.16   The resourceData element
4.16.1   General
4.16.2   Deserialization
4.16.3   Canonicalizing embedded XML
4.17   The resourceRef element
4.18   The association element
4.19   The role element
4.20   The topicRef element
4.21   The subjectIdentifierRef element
4.22   The subjectLocatorRef element
4.23   The mergeMap element
5   Conformance
A   A RELAX-NG schema for XTM 2.1
B   The XTM 2.1 DTD
C   A W3C XML Schema schema for XTM 2.1
D   Differences from XTM 2.0 to XTM 1.0
E   Differences from XTM 2.1 to XTM 2.0
F   Subject identifiers for defined terms
G   MIME Media Types for XTM

Foreword

ISO (the International Organization for Standardization) and IEC (the International Electrotechnical Commission) form the specialized system for worldwide standardization. National bodies that are members of ISO or IEC participate in the development of International Standards through technical committees established by the respective organization to deal with particular fields of technical activity. ISO and IEC technical committees collaborate in fields of mutual interest. Other international organizations, governmental and non-governmental, in liaison with ISO and IEC, also take part in the work. In the field of information technology, ISO and IEC have established a joint technical committee, ISO/IEC JTC 1.

International Standards are drafted in accordance with the rules given in the ISO/IEC Directives, Part 2.

ISO/IEC 13250-3 was prepared by Joint Technical Committee ISO/IEC JTC 1, Information Technology, Subcommittee SC 34, Document Description and Processing Languages.

ISO/IEC 13250 consists of the following parts, under the general title Topic Maps:

Introduction

NOTE:

This document is not yet an official ISO standard. It has yet to receive any formal status. The currently standardized version can be found at http://www.isotopicmaps.org/sam/sam-xtm/2006-06-19/

XTM (XML Topic Maps) 2.1 is a syntax for the interchange of Topic Maps. The syntax is not designed to be extended or modified. Ease of human authoring was not prioritized during the design of XTM, and consequently it is not recommended to edit the syntax directly.

This part of ISO/IEC13250 should be read in conjunction with [ISO/IEC 13250-2] since the interpretation of the XTM syntax is defined through a mapping from the syntax to the data model there defined.

XTM 2.1 is a revision of the XTM 2.0 syntax defined in [ISO/IEC 13250-3:2007]. A description of the differences between the two versions can be found in Annex E.

Topic Maps — XML Syntax

1 Scope

This part of ISO/IEC13250 defines an XML-based interchange syntax for Topic Maps, which can be used to interchange instances of the data model defined in [ISO/IEC 13250-2]. It also defines a mapping from the interchange syntax to the data model. The syntax is defined with a RELAX-NG schema, and more precision is provided through the mapping to the data model, which effectively also defines the interpretation of the syntax.

2 Normative references

The following referenced documents are indispensable for the application of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

NOTE:

Each of the following documents has a unique identifier that is used to cite the document in the text. The unique identifier consists of the part of the reference up to the first comma.

ISO/IEC 13250-2, Topic Maps — Data Model, http://www.isotopicmaps.org/sam/

W3C XML, Extensible Markup Language (XML) 1.1 (Second Edition), W3C Recommendation, 29 September 2006, http://www.w3.org/TR/2006/REC-xml11-20060816

W3C XML-Names, Namespaces in XML, W3C Recommendation, 14 January 1999, http://www.w3.org/TR/1999/REC-xml-names-19990114/

W3C XML-Infoset, XML Information Set (Second Edition), W3C Recommendation, 4 February 2004, http://www.w3.org/TR/2004/REC-xml-infoset-20040204

W3C Canonical XML, Canonical XML Version 1.0, W3C Recommendation, 15 March 2001, http://www.w3.org/TR/2001/REC-xml-c14n-20010315

ISO/IEC 19757-2, Document Schema Definition Languages (DSDL) — Part 2: Grammar-based validation — RELAX NG, http://www.relaxng.org

IETF RFC 3986, Uniform Resource Identifiers (URI): Generic Syntax, Internet Standards Track Specification, January 2005, http://www.ietf.org/rfc/rfc3986.txt

IETF RFC 3987, Internationalized Resource Identifiers (IRIs), Internet Standards Track Specification, January 2005, http://www.ietf.org/rfc/rfc3987.txt

3 Terms and definitions

For the purposes of this part of ISO/IEC13250, the following terms and definitions apply.

3.1
XTM

the syntax defined in this part of ISO/IEC13250

4 Syntax definition

4.1 About the syntax

The acronym XTM is often used to refer to the syntax defined in this part of ISO/IEC13250. Its full name is XML Topic Maps. The namespace for the XTM syntax is http://www.topicmaps.org/xtm/.

An XTM document is an XML document that conforms to the XTM syntax. This clause defines the syntax of XTM documents using a RELAX-NG schema in compact syntax [ISO/IEC 19757-2], and their semantics using prose describing the mapping from XTM documents to [ISO/IEC 13250-2]. The full schema can be found in Annex A, a DTD in Annex B, and a W3C XML Schema in Annex C.

4.2 Deserialization

The process of exporting Topic Maps from an implementation's internal representation of the data model to an instance of a Topic Maps syntax is known as serialization. The opposite process, deserialization, is the process of building an instance of an implementation's internal representation of the data model from an instance of a Topic Maps syntax.

This clause defines how instances of the XTM syntax are deserialized into instances of the data model defined in [ISO/IEC 13250-2]. Serialization is only implicitly defined, but implementations should guarantee that for any data model instance the XTM serialization produced by the implementation should when deserialized to a new data model instance produce one that has the same canonicalization as the original data model instance, according to [ISO 13250-4].

The input to the deserialization process is:

Deserialization is done by processing each element item in the document item in document order. For each element item encountered the operations specified in the clause for that element type are performed. An input element item matches a clause in this document when the [[namespace uri]] property is set to "http://www.topicmaps.org/xtm/", and the [[local name]] matches the element type name given in the title of that clause.

Whenever a new information item is created, those of its properties which have set values are initialized to the empty set; all other properties are initialized to null.

NOTE:

This part of ISO/IEC13250 requires an instance of the XML Information Set as input to the deserialization process, but in most cases the actual input will be an XML document. This part of ISO/IEC13250 does not constrain how XML Information Set instances are built from XML documents, but assumes that in most cases this will be done by simply using an XML processor.

XML processors conformant to the XML Recommendation may produce different results given the same XML document, depending on whether they are validating or non-validating, and depending on which optional features they support. Reliance on any particular behaviour in the XML processors used by recipients is strongly discouraged.

4.3 Common syntactical constructs

4.3.1 Common declarations

The following declarations are used throughout the schema for brevity.

default namespace = "http://www.topicmaps.org/xtm/"
namespace xtm = "http://www.topicmaps.org/xtm/"

datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"

start = topicMap2 | topicMap21

href = attribute href { xsd:anyURI }

any-markup = (text |
  element * - xtm:* { attribute * { text }*, any-markup* })*

reifiable21 = (attribute reifier { xsd:anyURI } | reifier),
  itemIdentity*
tref = topicRef | subjectIdentifierRef | subjectLocatorRef
NOTE:

The schema used in this part of ISO/IEC13250 merges the XTM 2.0 and 2.1 syntaxes into a single schema. Patterns specific to XTM 2.1 have names ending in 21, whereas those specific to 2.0 have names ending in 2. Only the XTM 2.1 patterns are given here, but the complete schema can be found in Annex A.

4.3.2 The reifier attribute

The reifier attribute is used to refer from the topic map construct on which it appears to the topic reifying that construct. The reference is an IRI matching one of the topic's item identifiers.

During deserialization the value in the [[normalized value]] property of the attribute node representing the reifier attribute is resolved into an absolute IRI following the procedure in 4.3.5. If there is a topic item with that IRI in its [item identifiers] property, that topic item is set as the value of the [reifier] property of the topic map construct being processed. If no such topic item exists, a new topic item is created, the IRI added to its [item identifiers] property, and that topic item is set as the value of the [reifier] property of the topic map construct being processed.

NOTE:

This attribute duplicates the function of the reifier element (see 4.3.3) in a less general form. It is a legacy from XTM 2.0 retained only in order to preserve backwards compatibility.

4.3.3 The reifier element

The reifier element is used to assign a reifying topic to the topic map construct represented by its parent element. The reference is a child element referencing the topic. The reifier element is declared as follows:

reifier = element reifier { tref }

During deserialization the child element produces a topic item following the procedure in the clause defining deserialization of that element type. The topic item produced is set as the value of the [reifier] property of the information item produced by the parent element.

4.3.4 The href attribute

The href attribute always references an information resource using a relative or absolute IRI valid according to [IETF RFC 3986] and [IETF RFC 3987], but the meaning of the reference depends on context.

During deserialization the value in the [[normalized value]] property of the attribute node representing the href attribute is turned into an IRI following the procedure in 4.3.5.

4.3.5 Creating IRIs from strings

To create an IRI from a string unescape the string by replacing %HH escape sequences with the characters they represent, and decode the resulting character sequence from UTF-8 to a sequence of abstract Unicode characters. The resulting string is turned into an absolute IRI by resolving it against the document IRI.

4.4 The topicMap element

The topicMap element type is the document element of all XTM documents. It acts as a container for the topic map, and can be used to reify it, but has no further significance. It is declared as follows:

topicMap21 = element topicMap { reifiable21, version21, mergeMap*,
                   (topic21 | association21)* }

version21 = attribute version { "2.1" }

The version attribute is used to specify which version of XTM the document conforms to. The version number may be either "2.0" (provided no XTM 2.1 features are used) or "2.1".

NOTE:

The RELAX-NG schema has been written in such a way that if the version number is "2.0" only XTM 2.0 features are allowed by the schema, whereas if it is "2.1" XTM 2.1 features are also allowed.

During deserialization the topicMap element causes a topic map item to be created.

4.5 The topic element

The topic element type is used to represent topics, and acts as a container and point of reference for topic information. The child elements of the topic element provide identification as well as names and occurrences, while association roles played by the topic are specified outside the topic element.

The topic element type is declared as follows:

topic21 = element topic { 
      (id | itemIdentity | subjectLocator | subjectIdentifier)+,
      instanceOf?, (name | occurrence)* }

id = attribute id { xsd:ID }

The id attribute provides a unique identifier within the document for the topic, which is used to refer to it. It is not required, so long as some identifier for the topic is provided by the child elements of the topic element.

During deserialization, if the topic element has an id attribute, it causes a topic item to be created and inserted into the [topics] property of the topic map item.

A locator is created by concatenating the document IRI, a "#" character, and the value of the [[normalized value]] property of the attribute item in the [[attributes]] property of that element item whose [[local name]] property is "id". This locator is added to the [item identifiers] property of the topic item. If this makes the topic item equal to another topic item the two topic items are merged according to the procedure given in [ISO/IEC 13250-2].

4.6 The itemIdentity element

The itemIdentity element is used to assign an item identifier to the topic map construct represented by its parent element. It is declared as follows:

itemIdentity = element itemIdentity { href }

During deserialization the itemIdentity element causes a locator to be created from its href attribute as specified in 4.3.4. This locator is added to the [item identifiers] property of the information item created by the parent element. If the parent element is a topic element and this makes the topic item equal to another topic item the two topics are merged according to the procedure given in [ISO/IEC 13250-2].

4.7 The subjectLocator element

The subjectLocator element is used to assign a subject locator to the topic that is represented by its parent topic element. It is declared as follows:

subjectLocator = element subjectLocator { href }

During deserialization the subjectLocator element causes a locator to be created from its href attribute as specified in 4.3.4 and added to the [subject locators] property of the topic item created by the parent topic element. If this makes the topic item equal to another topic item the two topic items are merged according to the procedure given in [ISO/IEC 13250-2].

4.8 The subjectIdentifier element

The subjectIdentifier element is used to assign a subject identifier to the topic that is represented by its parent topic element.

The subjectIdentifier element is declared as follows:

subjectIdentifier = element subjectIdentifier { href }

During deserialization the subjectIdentifier element causes a locator to be created from its href attribute as specified in 4.3.4. This locator is added to the [subject identifiers] property of the topic item created by the parent topic element. If this makes the topic item equal to another topic item the two topic items are merged according to the procedure given in [ISO/IEC 13250-2].

4.9 The instanceOf element

The instanceOf element type is used to assign one or more types to the topic represented by its parent element. The types are always topics, indicated by the instanceOf element's child elements. The instanceOf element type is declared as follows:

instanceOf21 = element instanceOf { tref+ }

For each child element of the instanceOf element a topic item is produced following the procedure in the clause defining deserialization of that element type. For each topic item the following steps are then taken:

4.10 The name element

The name element type is used to add topic names to the topic represented by the parent topic element. The child elements of the name element provide the property values of the topic name item.

The name element type is declared as follows:

name = element name { reifiable21, type21?, scope21?, value, variant* }

During deserialization the name element causes a topic name item to be created, and added to the [topic names] property of the topic item created by the parent topic element.

If the name element has a type child element it is processed according to the procedure in 4.14. Otherwise the [type] property of the topic name item is set to the topic item whose [subject identifiers] property contains "http://psi.topicmaps.org/iso13250/model/topic-name"; if no such topic item exists, one is created.

4.11 The value element

The value element type is used to provide the value of the topic name. It is declared as follows:

value = element value { text }

During deserialization the information items in the [[children]] property of the value element are traversed, and for each character information item the Unicode character specified by the [[character code]] property is appended to the [value] property of the topic name item created by the parent name element.

4.12 The variant element

The variant element type is used to add a variant name to a topic name. It is declared as follows:

variant = element variant { reifiable21, scope21, (resourceRef | resourceData) }

During deserialization the variant element causes a variant item to be created and added to the [variants] property of the topic name item created by the name parent element. After the scope child element has been processed, the topics in the [scope] property of the topic name item created by the name parent element are added to the [scope] property of the variant name item.

4.13 The scope element

The scope element type is used to assign a scope to the statement represented by the parent element. It is declared as follows:

scope21 = element scope { tref+ }

During deserialization the scope element has no direct effect on the information set being produced, but changes the interpretation of its child elements. Each child element is processed according to the procedure in the clause defining deserialization of that element type to produce a topic item. These topic items are gathered into a set that is assigned as the value of the [scope] property of the information item produced by the parent element.

4.14 The type element

The type element type is used to assign a type to the topic map construct represented by its parent element. The type is always a topic, indicated by the type element's child element.

The type element type is declared as follows:

type21 = element type { tref }

During deserialization the child element produces a topic item following the procedure in the clause defining deserialization of that element type. The topic item produced is set as the value of the [type] property of the information item produced by the parent element.

4.15 The occurrence element

The occurrence element type is used to assign an occurrence to the topic defined by the parent element. It is declared as follows:

occurrence = element occurrence { reifiable21,
   type21, scope21?, ( resourceRef | resourceData ) }

During deserialization the occurrence element causes an occurrence item to be created and added to the [occurrences] property of the topic item created by the parent topic element.

4.16 The resourceData element

4.16.1 General

The resourceData element type represents an information resource in the form of content contained within the XTM document. This information resource may be either a variant name or an occurrence, and it can have a datatype.

The resourceData element type is declared as follows:

datatype = attribute datatype { xsd:anyURI }

resourceData = element resourceData { datatype?, any-markup }

The datatype attribute contains an absolute IRI identifying the datatype of the resource that is represented by the resourceData element.

4.16.2 Deserialization

The resourceData element sets the [value] property of the information item created by the parent element. If the datatype attribute is not present the [datatype] property is set to "http://www.w3.org/2001/XMLSchema#string"; if the attribute is present the [datatype] property is set to the value of the attribute.

If the [datatype] property is set to "http://www.w3.org/2001/XMLSchema#anyType" the procedure in 4.16.3 is followed.

If the [datatype] property is set to "http://www.w3.org/2001/XMLSchema#anyURI" the procedure in 4.3.5 is followed to produce the value of the [value] property from the content of the resourceData element. In this case it is an error for the resourceData element to have child elements.

Otherwise the information items in the [[children]] property of the element item are traversed, and for each character information item the Unicode character specified by the [[character code]] property is added to the [value] property of the information item created by the parent element. In this case it is an error for the resourceData element to have child elements.

4.16.3 Canonicalizing embedded XML

XTM documents may contain arbitrary markup inside resourceData elements, and this markup is represented in the data model as a string. A string representation is produced from the embedded markup by applying the canonicalization process described in [W3C Canonical XML]. The input to the canonicalization process is an XPath node set (as [W3C Canonical XML] requires this). The node set is produced as described below:

The second parameter to the canonicalization process is false (that is, comments are not included).

NOTE:

The output of the [W3C Canonical XML] is defined as a UTF-8-encoded octet sequence, but the output of the process defined above should be the equivalent string.

4.17 The resourceRef element

The resourceRef element type refers to an information resource. The information resource can be an occurrence, if the parent element is occurrence, or a variant name, if the parent element is variant.

The resourceRef element type is declared as follows:

resourceRef = element resourceRef { href }

During deserialization the resourceRef element causes a locator to be produced following the procedure in 4.3.4 and inserted into the [value] property of the information item created by the parent element. The [datatype] property of the information item is also set to "http://www.w3.org/2001/XMLSchema#anyURI".

4.18 The association element

The association element type represents associations. The role child elements provide the association roles of the association. It is declared as follows:

association = element association { reifiable21, type21, scope21?, role21+ }

During deserialization the association element causes an association item to be created, and added to the [associations] property of the topic map item.

4.19 The role element

The role element type is used to assign an association role to the association created by the association parent element. It is declared as follows:

role21 = element role { reifiable21, type21, tref }

During deserialization the role element causes an association role item to be created, and added to the [roles] property of the association item created by the parent association element. The child element is resolved to a topic according to the procedure in the clause defining deserialization of that element type, and that topic item is set as the value of the [player] property of the association role item.

4.20 The topicRef element

The topicRef element type refers to a topic, either within the same XML document or externally. The signficance of the topic reference depends on the context. The element type is declared as follows:

topicRef = element topicRef { href }

The href attribute contains the absolute or relative IRI reference that is the topic reference.

During deserialization a locator is produced from the topicRef element according to the rules in 4.3.4. If the data model has a topic item whose [subject identifiers] or [item identifiers] properties contain an equal locator that topic item is the one produced by this topicRef element. If no such topic item exists, a topic item is created, and the locator added to its [item identifiers] property. That topic item is then the one produced by this topicRef element.

4.21 The subjectIdentifierRef element

The subjectIdentifierRef element type refers to a topic, either within the same XML document or externally, via its subject identifier. The signficance of the topic reference depends on the context. The element type is declared as follows:

subjectIdentifier = element subjectIdentifier { href }

The href attribute contains the absolute or relative IRI reference that is the subject identifier of the referenced topic.

During deserialization a locator is produced from the subjectIdentifierRef element according to the rules in 4.3.4. If the data model has a topic item whose [subject identifiers] or [item identifiers] properties contain an equal locator that topic item is the one produced by this subjectIdentifierRef element. If no such topic item exists, a topic item is created, and the locator added to its [subject identifiers] property. That topic item is then the one produced by this subjectIdentifierRef element.

4.22 The subjectLocatorRef element

The subjectLocatorRef element type refers to a topic, either within the same XML document or externally, via its subject locator. The signficance of the topic reference depends on the context. The element type is declared as follows:

element subjectLocator { href }

The href attribute contains the absolute or relative IRI reference that is the subject locator of the referenced topic.

During deserialization a locator is produced from the subjectLocatorRef element according to the rules in 4.3.4. If the data model has a topic item whose [subject locators] property contains an equal locator that topic item is the one produced by this subjectLocatorRef element. If no such topic item exists, a topic item is created, and the locator added to its [subject locators] property. That topic item is then the one produced by this subjectLocatorRef element.

4.23 The mergeMap element

The mergeMap element type refers to an external XTM document that is to be merged into the topic map that contains the mergeMap element. It is declared as follows:

mergeMap = element mergeMap { href }

The href attribute contains an absolute or relative IRI referring to the XTM document that is to be merged in. The IRI shall not have a fragment identifier.

During deserialization an absolute IRI is produced from the mergeMap element's href attribute, following the procedure in 4.3.4. The IRI of the external information resource is resolved and the resource is parsed with an XML processor according to [W3C XML] to produce an XML Information Set according to [W3C XML-Infoset]. It is an error if the resource is not a well-formed XML document. The XML Information Set is then deserialized into a data model instance using the procedure in Clause 4 with the document item and the IRI of the information resource as input.

The new data model instance (B) is then merged into the current one (A) by:

NOTE:

Adding topics and associations to A may trigger further merges, as described in [ISO/IEC 13250-2].

5 Conformance

An XTM document conforms to this part of ISO/IEC13250 provided it:

An XTM processor conforms to this part of ISO/IEC13250 provided it meets all the requirements given below.

NOTE:

The above implies that XTM 2.1 processors are required to also support XTM 2.0.

A A RELAX-NG schema for XTM 2.1 (normative)

# ===========================================================================
#
# XML Topic Maps 2.1
#
# This is the normative RELAX-NG schema for the XTM 2.1 and 2.0
# syntaxes, as defined in ISO 13250-3. Note that the two syntaxes
# have been merged into a single schema.
#
# See http://www.isotopicmaps.org/sam/sam-xtm/
#
# ===========================================================================

# --- Common declarations

default namespace = "http://www.topicmaps.org/xtm/"
namespace xtm = "http://www.topicmaps.org/xtm/"

datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"

start = topicMap2 | topicMap21

href = attribute href { xsd:anyURI }

any-markup = (text | element * - xtm:* { attribute * { text }*, any-markup* })*

mergeMap = element mergeMap { href }

id = attribute id { xsd:ID }

value = element value { text }

datatype = attribute datatype { xsd:anyURI }

resourceData = element resourceData { datatype?, any-markup }

topicRef = element topicRef { href }
resourceRef = element resourceRef { href }
subjectLocator = element subjectLocator { href }
subjectIdentifier = element subjectIdentifier { href }
itemIdentity = element itemIdentity { href }

# --- XTM 2.1

topicMap21 = element topicMap { reifiable21, version21, mergeMap*,
                                 (topic21 | association21)* }

version21 = attribute version { "2.1" }

topic21 = element topic { 
  (id | itemIdentity | subjectLocator | subjectIdentifier)+,
  instanceOf21?, (name21 | occurrence21)* }

name21 = element name { reifiable21, type21?, scope21?, value, variant21* }

variant21 = element variant { reifiable21, scope21, (resourceRef | resourceData)}

scope21 = element scope { tref+ }

instanceOf21 = element instanceOf { tref+ }

type21 = element type { tref }

occurrence21 = element occurrence { reifiable21,
  type21, scope21?, ( resourceRef | resourceData ) }

association21 = element association { reifiable21, type21, scope21?, role21+ }

role21 = element role { reifiable21, type21, tref }

reifiable21 = (attribute reifier { xsd:anyURI } | reifier), itemIdentity*
reifier = element reifier { tref }
tref = topicRef | subjectIdentifierRef | subjectLocatorRef

subjectLocatorRef = element subjectLocatorRef { href }
subjectIdentifierRef = element subjectIdentifierRef { href }

# --- XTM 2.0

reifiable2 = attribute reifier { xsd:anyURI }?, itemIdentity*
topicMap2 = element topicMap { reifiable2, version2, mergeMap*,
                                 (topic2 | association2)* }

version2 = attribute version { "2.0" }

topic2 = element topic { id, 
                        (itemIdentity | subjectLocator | subjectIdentifier)*,
                        instanceOf2?, (name2 | occurrence2)* }

name2 = element name { reifiable2, type2?, scope2?, value, variant2* }

variant2 = element variant { reifiable2, scope2, (resourceRef | resourceData) }

scope2 = element scope { topicRef+ }

instanceOf2 = element instanceOf { topicRef+ }

type2 = element type { topicRef }

occurrence2 = element occurrence { reifiable2,
  type2, scope2?, ( resourceRef | resourceData ) }

association2 = element association { reifiable2, type2, scope2?, role2+ }

role2 = element role { reifiable2, type2, topicRef }

# --- End of schema

B The XTM 2.1 DTD (informative)

<!-- ............................................................. -->
<!-- XML Topic Map DTD  .......................................... -->

<!-- XML Topic Map (XTM) DTD, Version 2.1

     This is XTM 2.1, an XML interchange syntax for ISO 13250 Topic
     Maps, defined by ISO 13250-3.

     Use this URI to identify the XTM namespace:

         "http://www.topicmaps.org/xtm/"

     The formal public identifier for this DTD is:
         
         "ISO/IEC 13250-3:2010//DTD XML Topic Maps (XTM) 2.1//EN"

     See http://www.isotopicmaps.org/sam/sam-xtm/

-->

<!-- topicMap .................................................... -->

<!ELEMENT topicMap
   ( reifier?, itemIdentity*, mergeMap*, ( topic | association )* )
>
<!ATTLIST topicMap
   version         CDATA     #FIXED '2.1'
   xmlns           CDATA     #FIXED 'http://www.topicmaps.org/xtm/'
   reifier         CDATA     #IMPLIED
>

<!-- topic ....................................................... -->

<!ELEMENT topic
   ( ( itemIdentity | subjectLocator | subjectIdentifier )*,
     instanceOf?, ( name | occurrence )* )
>
<!ATTLIST topic
   id              ID        #IMPLIED
>

<!-- itemIdentity ................................................ -->

<!ELEMENT itemIdentity
   EMPTY
>
<!ATTLIST itemIdentity
   href            CDATA     #REQUIRED
>

<!-- subjectLocator............................................... -->

<!ELEMENT subjectLocator
   EMPTY
>
<!ATTLIST subjectLocator
   href            CDATA     #REQUIRED
>

<!-- subjectIdentifier............................................ -->

<!ELEMENT subjectIdentifier
   EMPTY
>
<!ATTLIST subjectIdentifier
   href            CDATA     #REQUIRED
>

<!-- name ........................................................ -->

<!ELEMENT name  
   ( reifier?, itemIdentity*, type?, scope?, value, variant* ) 
>
<!ATTLIST name
   reifier         CDATA     #IMPLIED
>

<!-- value ....................................................... -->

<!ELEMENT value  ( #PCDATA ) >

<!-- variant ..................................................... -->

<!ELEMENT variant  
   ( reifier?, itemIdentity*, scope, ( resourceRef | resourceData ) ) 
>
<!ATTLIST variant
   reifier         CDATA     #IMPLIED
>

<!-- scope ....................................................... -->

<!ELEMENT scope  
   ( topicRef | subjectIdentifierRef | subjectLocatorRef )+ 
>

<!-- instanceOf .................................................. -->

<!ELEMENT instanceOf  
   ( topicRef | subjectIdentifierRef | subjectLocatorRef )+
>

<!-- type .................................................. -->

<!ELEMENT type  
   ( topicRef | subjectIdentifierRef | subjectLocatorRef )
>

<!-- occurrence .................................................. -->

<!ELEMENT occurrence
   ( reifier?, itemIdentity*, type, scope?, ( resourceRef | resourceData ) )
>
<!ATTLIST occurrence
   reifier         CDATA     #IMPLIED
>

<!-- resourceData ................................................ -->

<!ELEMENT resourceData  
   ANY 
>
<!ATTLIST resourceData
   datatype        CDATA     #IMPLIED
>

<!-- resourceRef ................................................. -->

<!ELEMENT resourceRef  
   EMPTY 
>
<!ATTLIST resourceRef
   href            CDATA     #REQUIRED
>

<!-- association ................................................. -->

<!ELEMENT association
   ( reifier?, itemIdentity*, type, scope?, role+ )
>
<!ATTLIST association
   reifier         CDATA     #IMPLIED
>

<!-- role ........................................................ -->

<!ELEMENT role
   ( reifier?, itemIdentity*, type,
     ( topicRef | subjectIdentifierRef | subjectLocatorRef) )
>
<!ATTLIST role
   reifier         CDATA     #IMPLIED
>

<!-- reifier ..................................................... -->

<!ELEMENT reifier
   ( topicRef | subjectIdentifierRef | subjectLocatorRef )
>

<!-- topicRef .................................................... -->

<!ELEMENT topicRef  
   EMPTY 
>
<!ATTLIST topicRef
   href            CDATA     #REQUIRED
>

<!-- subjectIdentifierRef ........................................ -->

<!ELEMENT subjectIdentifierRef
   EMPTY 
>
<!ATTLIST subjectIdentifierRef
   href            CDATA     #REQUIRED
>

<!-- subjectLocatorRef ........................................... -->

<!ELEMENT subjectLocatorRef
   EMPTY 
>
<!ATTLIST subjectLocatorRef
   href            CDATA     #REQUIRED
>

<!-- mergeMap .................................................... -->

<!ELEMENT mergeMap  
   EMPTY
>
<!ATTLIST mergeMap
   href            CDATA     #REQUIRED
>

<!-- end of XML Topic Map (XTM) 2.1 DTD .......................... -->

C A W3C XML Schema schema for XTM 2.1 (informative)

<!-- ............................................................. -->
<!-- XML Topic Map Schema  ....................................... -->

<!-- XML Topic Map (XTM) Schema, Version 2.1

     This is XTM 2.1, 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.1</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="reifier" minOccurs="0" maxOccurs="1"/>
        <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.1"/>
    </xs:complexType>
  </xs:element>

  <!-- topic ..................................................... -->
  <xs:element name="topic">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="reifier" minOccurs="0" maxOccurs="1"/>
        <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="optional"/>
    </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="reifier" minOccurs="0" maxOccurs="1"/>
        <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="reifier" minOccurs="0" maxOccurs="1"/>
	<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:element ref="subjectIdentifierRef" maxOccurs="unbounded"/>
        <xs:element ref="subjectLocatorRef" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- instanceOf ................................................ -->
  <xs:element name="instanceOf">
    <xs:complexType>
      <xs:choice>
	<xs:element ref="topicRef" maxOccurs="unbounded"/>
        <xs:element ref="subjectIdentifierRef" maxOccurs="unbounded"/>
        <xs:element ref="subjectLocatorRef" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- type ...................................................... -->
  <xs:element name="type">
    <xs:complexType>
      <xs:choice>
	<xs:element ref="topicRef"/>
        <xs:element ref="subjectIdentifierRef"/>
        <xs:element ref="subjectLocatorRef"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- occurrence ................................................ -->
  <xs:element name="occurrence">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="reifier" minOccurs="0" maxOccurs="1"/>
	<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="reifier" minOccurs="0" maxOccurs="1"/>
	<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="reifier" minOccurs="0" maxOccurs="1"/>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type"/>
        <xs:choice>
          <xs:element ref="topicRef"/>
          <xs:element ref="subjectIdentifierRef"/>
          <xs:element ref="subjectLocatorRef"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- reifier ................................................... -->
  <xs:element name="reifier">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="topicRef"/>
        <xs:element ref="subjectIdentifierRef"/>
        <xs:element ref="subjectLocatorRef"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  
  <!-- topicRef .................................................. -->
  <xs:element name="topicRef">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- subjectIdentifierRef ...................................... -->
  <xs:element name="subjectIdentifierRef">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- subjectLocatorRef ......................................... -->
  <xs:element name="subjectLocatorRef">
    <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>

D Differences from XTM 2.0 to XTM 1.0 (informative)

This annex describes the differences between the syntax defined in [ISO/IEC 13250-3:2007] and that defined in [ISO/IEC 13250:2003].

The differences are:

E Differences from XTM 2.1 to XTM 2.0 (informative)

This annex describes the differences between the syntax defined in this edition of ISO 13250-3 and that defined in [ISO/IEC 13250-3:2007].

The differences are:

F Subject identifiers for defined terms (informative)

This annex defines one subject identifier for each formally defined term in Clause 3. The subject identifiers are defined for the sole purpose of enabling unambiguous reference to the subjects they identify, for example in order to enable the collation of information about those subjects. This part of ISO/IEC13250 attaches no processing semantics of any kind to these identifiers, over and above those associated with subject identifiers in general.

XTM
http://psi.topicmaps.org/iso13250/glossary/XTM

G MIME Media Types for XTM (informative)

Ed. Note:

This part is being prepared.

Bibliography

ISO/IEC 13250:2003, Topic Maps, 2003, http://www.y12.doe.gov/sgml/sc34/document/0322_files/iso13250-2nd-ed-v2.pdf

ISO 13250-4, Topic Maps — Canonicalization, http://www.isotopicmaps.org/sam/cxtm/

XTM1.0, XML Topic Maps (XTM) 1.0 Specification, Steve Pepper, Graham Moore, TopicMaps.Org, 2001, http://www.topicmaps.org/xtm/1.0/

ISO/IEC 13250-3:2007, Topic Maps — XML Syntax, http://www.isotopicmaps.org/sam/sam-xtm/2006-06-19/