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

An API to a Topic Maps Graph, in XML

Michel Biezunski and Steven R. Newcomb

June 27, 2001.

Text version of this DTD: http://www.topicmaps.net/TMGraphAPI3.dtd

Yet Another DTD for renditions-as-XML of Topic Maps Graphs. ("Topic Maps Graphs" a la http://www.topicmaps.net/pmtm4.htm)

CLAIMER: This TMGraphAPI3.dtd DTD is designed to express topic maps in such a way as to permit the information that they contain to be directly and comprehensively accessible via even the simplest DOM applications. This appears to be a possible way to publish topic maps, for use by DOM applications that can't or shouldn't be required to create or maintain an entire topic maps graph within themselves.

The authors request that all copies and translations of Topicmaps.net's "API to a 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

Root Element Type

Primary Element Types

Referencing Element Types

XML Topic Maps Graph API DTD


Root element type: <topicMapGraph>

Each <topicMapGraph> element fully and consistently represents a single topic maps graph that has been fully rationalized and normalized. <topicMapGraph> elements conform to all of the constraints on topic maps graphs that have been produced in accordance with all of the rules governing the processing of topic maps. This DTD is designed to allow the fully normalized topic maps to be interchanged and used in contexts where topic map engines are not available, while preserving some of the formatting and querying flexibility provided by topic map graphs.

<topicMapGraph> elements contain many redundant references. Wherever a topic maps graph provides an arc that can be traversed in either direction, <topicMapGraph> elements provide referencing information at the elements that correspond to both ends of the arc, so that the same bidirectional traversal capability is fully preserved even when only the simplest XML hyperlinking technology is used to render or browse the <topicMapGraph>.

Some information in <topicMapGraph> elements is provided redundantly in order to make it convenient to use the DOM API, for example, just as if it were a simple API designed for topic maps graphs.

It is strongly recommended that all <topicMapGraph> elements be automatically rendered from fully-processed topic maps graphs. It is inadvisable to attempt to create a <topicMapGraph> element by any other method, or to edit a <topicMapGraph> by hand. If any method other than the recommended method is used, the result is very likely to be self-inconsistent, and it may cause applications to behave inconsistently.

<topicMapGraph>

<!ELEMENT topicMapGraph (
   aNode |
   membership |
   templateRoleRPR |
   tNode |
   sNode
   )*
>

<!ATTLIST topicMapGraph
   id          ID     #IMPLIED
   xmlns       CDATA  #FIXED 
      'http://www.topicmaps.net/temporary/topicMapGraph/1.0/'  
   xmlns:xlink CDATA  #FIXED 'http://www.w3.org/1999/xlink'
   xml:base    CDATA  #IMPLIED
>
<aNode> Each <aNode> represents a topic association.
<membership> Each <membership> represents the fact that a topic is a member of an association, and it characterizes the topic's membership by referring to a <templateRoleRPR> element that provides information about the role being played, and the association template, if any.
<templateRoleRPR> Each <templateRoleRPR> characterizes an association member role. If the role is specified by one or more association templates, there is a <templateRoleRPR> for each such template/role combination. In addition, if the role appears in one or more associations that do not have templates, there is exactly one <templateRoleRPR> -- that specifies no template -- that is used by all such template-less associations to characterize the role.
<tNode> Each <tNode> represents a topic.
<sNode> Each <sNode> represents a scope.

Primary Element Types

<tNode>

Each <tNode> element represents a topic. -->

<!ELEMENT tNode ( 
   constitutedBy?,
   indicatedBy*,
   isMember*,
   componentOfScope*,
   isRoleOf*,
   isTemplateHasRole*,
   isRPROf*,
   isTemplateOf*
   )
>
<!ATTLIST tNode
  id  ID  #REQUIRED
>
'
<constitutedBy> References a subject constituter. Used only if the subject of this <tNode> is an addressable subject, i.e., an information resource considered as an information resource, rather than in terms of what it means or indicates.
<indicatedBy>Each references a subject indicator. There really should be at least one of these. It is OK for the <tNode> to reference itself, i.e., to use itself as a binding point, but it must be done explicitly; processing systems will not assume that the <tNode> is one of its own binding points automatically.
<isMember> Each references a <membership> that contains a <memberRef> that references this <tNode>. Used only if this <tNode> is a member of an association.
<componentOfScope> Each references an <sNode> that contains a <hasComponent> that references this <tNode>. Used only if this <tNode> is a component of a scope.
<isRoleOf> Each references a <templateRoleRPR> whose <roleRef> references this <tNode>. Used only if this <tNode>'s subject is an association role in any association.
<isTemplateHasRole> Each references a <templateRoleRPR> whose <templateRef> references this <tNode>. Used only if this <tNode>'s subject is an association template.
<isRPROf> Each references a <templateRoleRPR> whose <RPRRef> references this <tNode>. Used only if this <tNode>'s subject is the class of which all players of a given role must be instances.
<isTemplateOf> Each references an <aNode> that contains a <templateRef> that references this <tNode>. Used only if this <tNode>'s subject is an association template.

<aNode>

Each <aNode> represents a topic association.

<!ELEMENT aNode ( 
   templateRef?,
   indicatedBy*,
   hasMember*,
   isMember*,
   componentOfScope*,
   hasScope+
                ) 
>
<!ATTLIST aNode
  id  ID  #REQUIRED
>
<templateRef> References a <tNode> whose subject is the template of the class of associations of which the association represented by this <aNode> is an instance. Used only if this <aNode> has a template.
<indicatedBy> Each references a subject indicator. There really should be at least one of these. It is OK for the <aNode> to reference itself, i.e., to use itself as a binding point, but it must be done explicitly; processing systems will not assume that the <aNode> is one of its own binding points automatically. Note: the subject of an <aNode> is *always* the relationship (the "association") that it represents.
<hasMember*,> Each references a <membership> that contains an <associationRef> that refers back to the <aNode>. Used only if the association represented by the <aNode> has one or more members.
<isMember> Each references a <membership> that contains a <memberRef> that references this <aNode>. Used only if this <aNode> is a member of an association.
<componentOfScope> Each references an <sNode> that contains a <hasComponent> that references this <aNode>. Used only if this <aNode> is a component of a scope.
<hasScope> Each references an <sNode> that contains an <isScopeOf> that references this <aNode>. Every <aNode> always has at least one scope, so there is always at least one <hasScope> element in each <aNode>.

<sNode>

Each <sNode> represents a scope.

<!ELEMENT sNode ( 
   hasComponent*,
   isScopeOf+
                ) 
>
<!ATTLIST sNode
  id  ID  #REQUIRED
>
<hasComponent> Each references a <tNode> or <aNode> that contains an <componentOfScope> element that references this <sNode>. The scope represented by an <sNode> is the set of topics that are referenced by the <hasComponent> elements contained in the <sNode>. Note: In any given <topicMapGraph>, it is possible/likely that there will be an <sNode> that contains no <hasComponent> elements; the null set of topics is a valid scope.
<isScopeOf> Each references an <aNode> that contains a <hasScope> element that references this <sNode>. The <aNode>s that are referenced by the <isScopeOf> element have as one of their scopes the scope represented by this <sNode>.

<membership>

<!ELEMENT membership ( 

   memberRef,
   associationRef,
   templateRoleRPRRef,
   scopeRef+

                     )
>
<!ATTLIST membership
  id  ID  #REQUIRED
>

Each <membership> element characterizes the membership of an association member in an association.

<memberRef> References a <tNode> or <aNode> that contains an <isMember> element that references this <membership>. The referenced <tNode> or <aNode> is a member of the association represented by the <aNode> referenced by the sibling <associationRef> element, playing the role that is the subject of the <tNode> referenced by the <roleRef> element contained in the <templateRoleRPR> element referenced by the sibling <templateRoleRPRRef> element.
<associationRef> References an <aNode> that contains a <hasMember> element that references this <membership>. The referenced <aNode> represents the association of which the <tNode> or <aNode> referenced by the sibling <memberRef> is the member; the relationship between the association and the member is what is being characterized by the <membership> element.
<templateRoleRPRRef> References a <templateRoleRPR> element that contains a <membershipRef> element that references this <membership> element. The referenced <templateRoleRPR> element characterizes the role that the <tNode> or <aNode> referenced by the sibling <memberRef> element plays in the association represented by the <aNode> referenced by the sibling <associationRef> element.
<scopeRef> Each references an <sNode> element that represents a scope that governs the association represented by the <aNode> referenced by the sibling <associationRef> element. The set of <scopeRef>s that appears in a <membership> is always the same as the set of <scopeRef>s that appears in the <aNode> referenced by the <associationRef> element; this information is duplicated here purely for convenience.

Each <templateRoleRPR> element characterizes a role played in a class of associations (an association template), or, in the case of associations that do not have templates, it characterizes a unique role played in one or more associations that do not have templates.

In the case of associations that have templates, there is exactly one <templateRoleRPR> element for each unique combination of role topic (referenced by the contained <roleRef>) and template topic (referenced by the contained <templateRef>).

<templateRoleRPR>

<!ELEMENT templateRoleRPR ( 
   roleRef,
   templateRef?,
   RPRRef?,
   membershipRef*
                          )
>
<!ATTLIST templateRoleRPR
  id  ID  #REQUIRED
>
<roleRef> References a <tNode> that contains an <isRoleOf> that references this <templateRoleRPR>. The subject of the referenced <tNode> is an association role.
<templateRef> References a <tNode> whose subject is an association template, and that contains a <isTemplateHasRole> element that references the containing <templateRoleRPR> element. Used only if there is an association template that specifies the role that is the subject of the <tNode> referenced by the sibling <roleRef>.
<RPRRef> References a <tNode> whose subject (the "Recognized Player of Role (RPR)" subject) is the class of subjects of which the subjects that play the role are required to be instances. Used only when the association template constrains the subjects that are permitted to play the role that is the subject of the <tNode> referenced by the sibling <roleRef> element.
<membershipRef>

Each references a <membership> element that contains a <templateRoleRPRRef> element that references the containing <templateRoleRPR>. In other words, the list of association memberships that are governed by the role/template combination characterized by a given <templateRoleRPR> element is the list of <membershipRef> elements that are contained in that <templateRoleRPR> element.

If there is no <templateRef>, then all of the memberships governed by the role topic (referenced by the <roleRef> element) are listed. In other words, the lack of a template is itself regarded as a template (that can perhaps be called "the null template"), for purposes of establishing the uniqueness of the combination of role topic and template topic. Thus, there is only one <templateRoleRPR> element for any given role topic in all of the template-less associations in which it is used as a role.

Referencing Element Types

References to subject identity points ("binding points").

<constitutedBy>

Exactly one <constitutedBy> element may or may not appear in the content of a <tNode>. If specified, the <constitutedBy> element references the one-and-only information resource that constitutes the subject of the <tNode> that contains the <constitutedBy>.

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

<indicatedBy>

Any number of <indicatedBy> elements may appear in the content of a <tNode> or an <aNode>. Each <indicatedBy> element references an information resource that indicates the subject of the <tNode> that contains the <indicatedBy>. If the source of the topic or association represented by the <tNode> or <aNode> was one or more topic map interchange documents (such as documents that conform to the ISO 13250 "HyTime" DTD, or to the XTM DTD), then there is always at least one <indicatedBy> element that refers to the corresponding "node demander" in that interchangeable topic map.

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

References to <membership> elements.

<isMember>

<isMember> elements may appear in <tNode>s and <aNode>s. Each indicates that the subject of the containing <tNode> or <aNode> is a member of the association referenced by the <associationRef> element contained in the <membership> element referenced by the <isMember> element.

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

<hasMember>

<hasMember> elements may appear in <aNode>s. Each specifies a member of the association that is the subject of the containing <aNode>. The member itself is the subject of the <tNode> or <aNode> referenced by the <memberRef> element contained in the <membership> referenced by the <hasMember> element. The role played by the member is the subject of the <tNode> referenced by the <roleRef> element contained in the <membership> referenced by the <hasMember> element.

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

<membershipRef>

<membershipRef> elements may appear in <templateRoleRPR> elements. Each specifies a membership in some association that is governed by the association role characterized and elaborated by the containing <templateRoleRPR> element.

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

References to <sNodes>.

<componentOfScope>

<componentOfScope> elements may appear in <tNode>s and <aNode>s. Each indicates that the subject of the containing <tNode> or <aNode> is a component of the scope represented by the referenced <sNode>.

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

<hasScope>

<hasScope> elements may appear in <aNode>s. Each indicates that the association that is the subject of the containing <aNode> is governed by the scope represented by the referenced <sNode>.

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

<scopeRef>

One or more <scopeRef> elements may appear in every <membership> element. Each indicates that the association that is the subject of the <aNode> referenced by the sibling <associationRef> element is governed by the scope represented by the <sNode> referenced by the <scopeRef>.

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

References to <templateRoleRPR> elements.

<isRoleOf>

<isRoleOf> elements may appear in <tNode>s. Each indicates that the subject of the containing <tNode> is an association role.

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

<isTemplateHasRole>

<isTemplateHasRole> elements may appear in <tNode>s. The presence of an <isTemplateHasRole> in a <tNode> indicates that the subject of the containing <tNode> is an association template. Each <isTemplateHasRole> refers to a <templateRoleRPR> element that characterizes one of the association roles templated by the containing <tNode>.

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

<isRPROf>

<isRPROf> elements may appear in <tNode>s. The presence of an <isRPROf> in a <tNode> indicates that the subject of the containing <tNode> is a recognized player of role. Each <isRPROf> refers to a <templateRoleRPR> element that characterizes the recognized player of role templated by the containing <tNode>.

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

<templateRoleRPRRef>

In <membership> elements, the <templateRoleRPRRef> element refers to the <templateRoleRPR> element that characterizes the role being played by the subject of the <tNode> or <aNode> referenced by the sibling <memberRef> element.

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

References to <aNode> elements.

<isTemplateOf>

<isTemplateOf> elements may appear in <tNode>s whose subjects are association templates (classes of associations). Each <isTemplateOf> refers to an <aNode> element that is governed by the template that is the subject of the <tNode> that contains the <isTemplateOf>.

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

<isScopeOf>

One or more <isScopeOf> elements may appear in <sNode>s. Each <isScopeOf> refers to an <aNode> element that is governed by the scope represented by the containing <sNode>.

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

<associationRef>

In <membership> elements, the <associationRef> element refers to the <aNode> that represents the association in which the membership characterized by the <membership> exists.

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

References to <tNode> elements.

<templateRef>

A <templateRef> element may appear in an <aNode>, in which case it refers to the <tNode> element whose subject is the association template that governs the association that is the subject of the <aNode> that contains the <templateRef>. A <templateRef> element may also appear in a <templateRoleRPR> element, in which case it refers to the <tNode> element whose subject is an association template that has, as one of its member roles, the subject of the <tNode> referenced by the sibling <roleRef> element.

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

<roleRef>

A <roleRef> appears in every <templateRoleRPR> element. It refers to the <tNode> element whose subject is the association role that is specified and elaborated by the containing <templateRoleRPR> element.

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

<RPRRef>

An <RPRRef> may appear in a <templateRoleRPR> element. It refers to the <tNode> element whose subject (the "Recognized Player of Role (RPR)" subject) is the class of subjects of which the subjects that play the role (the role being characterized and elaborated by the containing <templateRoleRPR> element) are required to be instances.

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

References to <tNode> and/or <aNode> elements.

<hasComponent>

<hasComponent> elements may appear in <sNode>s. The scope represented by an <sNode> is the set of topics that are referenced by the <hasComponent> elements contained in the <sNode>.

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

<memberRef>

A <memberRef> element appears in every <membership> element. The <aNode> or <tNode> referenced by a <memberRef> has the association membership characterized by the containing <membership> element.

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



XML Topic Maps Graph API DTD

<!ELEMENT topicMapGraph ( 

   aNode |
   membership |
   templateRoleRPR |
   tNode |
   sNode
                        )*
>
<!ATTLIST topicMapGraph
   id          ID     #IMPLIED
   xmlns       CDATA  #FIXED 
      'http://www.topicmaps.net/temporary/topicMapGraph/1.0/'  
   xmlns:xlink CDATA  #FIXED 'http://www.w3.org/1999/xlink'
   xml:base    CDATA  #IMPLIED
>

<!-- Namespace will be fixed when this DTD will be standardized. -->

<!-- 
     #########################################
     ######## PRIMARY ELEMENT TYPES ##########
     #########################################
-->


<!-- Each  element represents a topic. -->

<!ELEMENT tNode ( 

   constitutedBy?,
   indicatedBy*,
   isMember*,
   componentOfScope*,
   isRoleOf*,
   isTemplateHasRole*,
   isRPROf*,
   isTemplateOf*
                )
>
<!ATTLIST tNode
  id  ID  #REQUIRED
>


<!-- Each  represents a topic association. -->

<!ELEMENT aNode ( 

   templateRef?,
   indicatedBy*,
   hasMember*,
   isMember*,
   componentOfScope*,
   hasScope+
                ) 
>
<!ATTLIST aNode
  id  ID  #REQUIRED
>


<!-- Each  represents a scope.  -->

<!ELEMENT sNode ( 

   hasComponent*,
   isScopeOf+
                ) 
>
<!ATTLIST sNode
  id  ID  #REQUIRED
>


<!-- Each  element characterizes the
     membership of an association member in an
     association. -->

<!ELEMENT membership ( 

   memberRef,
   associationRef,
   templateRoleRPRRef,
   scopeRef+
         )
>
<!ATTLIST membership
  id  ID  #REQUIRED
>

<!ELEMENT templateRoleRPR ( 
   roleRef,
   templateRef?,
   RPRRef?,
   membershipRef*
 )
>
<!ATTLIST templateRoleRPR
  id  ID  #REQUIRED
>



<!-- 
     #########################################
     ######## REFERENCING ELEMENT TYPES ######
     #########################################
-->


<!-- References to subject identity points ("binding
     points").  -->
     <!ELEMENT constitutedBy EMPTY>
     <!ATTLIST constitutedBy
        xlink:type      NMTOKEN   #FIXED 'simple'
        xlink:href      CDATA     #REQUIRED
     >

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

<!-- References to  elements. -->

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


<!-- References to . -->
     <!ELEMENT componentOfScope EMPTY>
     <!ATTLIST componentOfScope
        xlink:type      NMTOKEN   #FIXED 'simple'
        xlink:href      CDATA     #REQUIRED
     >
     <!ELEMENT hasScope EMPTY>
     <!ATTLIST hasScope
        xlink:type      NMTOKEN   #FIXED 'simple'
        xlink:href      CDATA     #REQUIRED
     >
     <!ELEMENT scopeRef EMPTY>
     <!ATTLIST scopeRef
        xlink:type      NMTOKEN   #FIXED 'simple'
        xlink:href      CDATA     #REQUIRED
     >




<!-- References to  elements. -->
     <!ELEMENT isRoleOf EMPTY>
     <!ATTLIST isRoleOf
        xlink:type      NMTOKEN   #FIXED 'simple'
        xlink:href      CDATA     #REQUIRED
     >
     <!ELEMENT isTemplateHasRole EMPTY>
     <!ATTLIST isTemplateHasRole
        xlink:type      NMTOKEN   #FIXED 'simple'
        xlink:href      CDATA     #REQUIRED
     >
     <!ELEMENT isRPROf            EMPTY>
     <!ATTLIST isRPROf
        xlink:type      NMTOKEN   #FIXED 'simple'
        xlink:href      CDATA     #REQUIRED
     >
     <!ELEMENT templateRoleRPRRef EMPTY>
     <!ATTLIST templateRoleRPRRef
        xlink:type      NMTOKEN   #FIXED 'simple'
        xlink:href      CDATA     #REQUIRED
     >



<!-- References to  elements. -->

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


<!-- References to  elements. -->

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

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


<!-- References to  and/or  elements. -->

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

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