The informative Topic Maps website maintained by
Michel Biezunski (InfoLoom) and
Steven R. Newcomb (Coolheads Consulting)

A Topic Maps Graph in XML

Michel Biezunski and Steven R. Newcomb

June 27, 2001

Text version: http://www.topicmaps.net/simpleTMGraph3.dtd

CLAIMER: The requirements that the <simpleTMGraph> DTD is designed to meet are (1) comprehensiveness, and (2) simplicity, with no compromises on either of those two requirements, and no other requirements whatsoever.

DISCLAIMER: The intended purpose of this DTD is to include more people in the discussion of the underlying "is-ness" of topic maps. This is for you if you want to understand the topic map graph model and you happen to be able to understand DTD formalism.

(NOTE: See also http://www.topicmaps.net/TMGraphAPI3.htm, where a more practical set of requirements guided our efforts to produce a very different DTD. The design of the TMGraphAPI2.dtd DTD is based on the same requirement for absolute comprehensiveness; nothing in a topic map graph can be lost. However, there was no requirement for simplicity, and, instead, it was required that even the simplest DOM applications would be able to directly access and use the topic map information contained in documents that are expressed in terms of this DTD. In effect, this DTD describes an API to the information that it contains, which is why we call it a "Topic Maps Graph API DTD.")

NOTE: By contrast, the below simpleTMGraph.dtd offers no directly-usable API to the information that it represents, so that, in any case, it can have little or no role to play in the publishing of large-scale topic maps. (It's still a revealing exercise.)

It's a topic map graph a la http://www.topicmaps.net/pmtm4.htm.

The authors request that all copies and translations of Topicmaps.net's Simple Topic Maps Graph Document Type Definition be complete and correct, including this and all other notices, and including attribution to the authors by names and e-mail addresses, please. The authors also request that any claims of conformance to Topicmaps.net's Processing Model be accurate. Either a processing system conforms to the model exactly and comprehensively in every detail, or it does not conform, and no claim of conformance is justified.

Contents

Elements

The Simple Topic Maps Graph DTD


Elements

Root Element

<!ELEMENT simpleTMGraph (
  tNode |
  aNode |
  sNode |
  associationMemberArc |
  associationScopeArc |
  associationTemplateArc |
  scopeComponentArc
)*
>
<!ATTLIST simpleTMGraph
   id          ID     #IMPLIED
   xmlns       CDATA  #FIXED 
      'http://www.topicmaps.net/temporary/simpleTMGraph/1.0/'  
   xmlns:xlink CDATA  #FIXED 'http://www.w3.org/1999/xlink'
   xml:base    CDATA  #IMPLIED
>

A topic node ("t-node")

<!ELEMENT tNode (
  constitutedBy?,
  indicatedBy*
)>
<!ATTLIST tNode
  id   ID   #REQUIRED
>

An association node ("a-node")

<!ELEMENT aNode (
  indicatedBy*
)>
<!ATTLIST aNode
  id   ID   #REQUIRED
>

A reference to an addressable subject

<!ELEMENT constitutedBy EMPTY >
<!ATTLIST constitutedBy
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

A reference to a subject indicator

<!ELEMENT indicatedBy EMPTY >
<!ATTLIST indicatedBy
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

A scope node ("s-node")

<!ELEMENT sNode EMPTY>
<!ATTLIST sNode
  id   ID   #REQUIRED
>

Arc used to connect an association to one of its members, in a specific membership role (another t-node).

<!ELEMENT associationMemberArc (
  aNodeRef,
  atNodeRef,
  tNodeRef
)>
<aNodeRef> association
<atNodeRef> member
<tNodeRef> role

Arc used to connect an association (a-node) to one of its scopes (s-nodes).

<!ELEMENT associationScopeArc (
  aNodeRef,
  sNodeRef
)>

<aNodeRef> association
<sNodeRef> scope

Arc used to connect an association (a-node) to its template (if any).

<!ELEMENT associationTemplateArc (
  aNodeRef,
  tNodeRef
)>
<aNodeRef> association
<tNodeRef> template

Arc used to connect a scope (s-node) to one of its component topics or associations.

<!ELEMENT scopeComponentArc (
  sNodeRef,
  atNodeRef
)>
<sNodeRef> scope
<atNodeRef> component topic or association

Reference to an association (a-node).

<!ELEMENT aNodeRef EMPTY >
<!ATTLIST aNodeRef
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

Reference to a topic (t-node).

<!ELEMENT tNodeRef EMPTY >
<!ATTLIST tNodeRef
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

Reference to an a-node or a t-node

<!ELEMENT atNodeRef EMPTY >
<!ATTLIST atNodeRef
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

Reference to an s-node

<!ELEMENT sNodeRef EMPTY >
<!ATTLIST sNodeRef
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

The Simple Topic Maps Graph DTD

<!ELEMENT simpleTMGraph (
  tNode |
  aNode |
  sNode |
  associationMemberArc |
  associationScopeArc |
  associationTemplateArc |
  scopeComponentArc
)*
>
<!ATTLIST simpleTMGraph
   id          ID     #IMPLIED
   xmlns       CDATA  #FIXED 
      'http://www.topicmaps.net/temporary/simpleTMGraph/1.0/'  
   xmlns:xlink CDATA  #FIXED 'http://www.w3.org/1999/xlink'
   xml:base    CDATA  #IMPLIED
>

<!-- A topic node ("t-node")  -->
<!ELEMENT tNode (
  constitutedBy?,
  indicatedBy*
)>
<!ATTLIST tNode
  id   ID   #REQUIRED
>

<!-- An association node ("a-node")  -->
<!ELEMENT aNode (
  indicatedBy*
)>
<!ATTLIST aNode
  id   ID   #REQUIRED
>

<!-- A reference to an addressable subject -->
<!ELEMENT constitutedBy EMPTY >
<!ATTLIST constitutedBy
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

<!-- A reference to a subject indicator -->
<!ELEMENT indicatedBy EMPTY >
<!ATTLIST indicatedBy
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

<!-- A scope node ("s-node")  -->
<!ELEMENT sNode EMPTY>
<!ATTLIST sNode
  id   ID   #REQUIRED
>

<!-- Arc used to connect an association to one of its
     members, in a specific membership role (another
     t-node). -->
<!ELEMENT associationMemberArc (
  aNodeRef,
  atNodeRef,
  tNodeRef
)>

<!-- Arc used to connect an association (a-node) to one of
     its scopes (s-nodes). -->
<!ELEMENT associationScopeArc (
  aNodeRef,
  sNodeRef
)>

<!-- Arc used to connect an association (a-node) to its
     template (if any). -->
<!ELEMENT associationTemplateArc (
  aNodeRef,
  tNodeRef
)>

<!-- Arc used to connect a scope (s-node) to one of its
     component topics or associations. -->
<!ELEMENT scopeComponentArc (
  sNodeRef,
  atNodeRef
)>

<!-- Reference to an association (a-node). -->
<!ELEMENT aNodeRef EMPTY >
<!ATTLIST aNodeRef
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

<!-- Reference to a topic (t-node). -->
<!ELEMENT tNodeRef EMPTY >
<!ATTLIST tNodeRef
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

<!-- Reference to an a-node or a t-node -->
<!ELEMENT atNodeRef EMPTY >
<!ATTLIST atNodeRef
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>

<!-- Reference to an s-node -->
<!ELEMENT sNodeRef EMPTY >
<!ATTLIST sNodeRef
  xlink:type      NMTOKEN   #FIXED 'simple'
  xlink:href      CDATA     #REQUIRED
>