logo
Associations < Authoring XTM Topic Maps, Part I < < Home 

PrevUpNext

Associations

Topics can participate in relationships, called associations, in which they play roles as members.

After having collected our topics we finally can connect them, which is one of the most important aspects within a topic map. The task is now:

  • to find meaningful associations between the topics and
  • to define the roles played by the topics in the association.

What is a meaningful association?

Topics can have relationships between each other and the trick is to find the most meaningful association. That means, you have to be explicit - to pin it down, to make it clear - which relationship two or more topics have to each other.

Associations can be rather general like:

  • is located in
  • lives in
  • written by
  • born in
or more specific like:
  • is an academic organization within
  • requires to have property
  • a facility provided by

A simple example for an association could be: bond-uni is located in robina.

Why do we need members and roles?

We need to define roles because someone could interpret: robina is located in bond-uni. To avoid confusion and to make it perfectly clear who is who and who plays which role in the association we use the following scheme:

  • the topics involved in the association are called members
  • and the members play roles

Connect Topics with Associations


<association>
  <instanceOf>
    <topicRef xlink:href="#is-located-in"/>
  </instanceOf>
  <member>
    <roleSpec><topicRef xlink:href="#building"/></roleSpec>
    <topicRef xlink:href="#bond-uni"/>
  </member>
  <member>
    <roleSpec><topicRef xlink:href="#location"/></roleSpec>
    <topicRef xlink:href="#robina"/>
  </member>
</association>

Note: Every time we introduce a reference to a new topic (topicRef xlink:href), we have to define the topic.

<topic id="is-located-in">
  <baseName>
    <baseNameString>is located in</baseNameString>
  </baseName>
</topic>

<topic id="building">
  <baseName>
    <baseNameString>building</baseNameString>
  </baseName>
</topic>

<topic id="location">
  <baseName>
    <baseNameString>location</baseNameString>
  </baseName>
</topic>

In the same way we can express the fact it-school belongs to bond-uni:

IT School belongs to Bond University

In order to have a meaningful relationship between our members we introduced a new topic is-an-academic-organization-within which is more expressive than a simple belongs-to we also could have used.

<association>
  <instanceOf>
    <topicRef xlink:href="#is-an-academic-organization-within"/>
  </instanceOf>
  <member>
    <roleSpec><topicRef xlink:href="#faculty"/></roleSpec>
    <topicRef xlink:href="#it-school/>
  </member>
  <member>
    <roleSpec><topicRef xlink:href="#university"/></roleSpec>
    <topicRef xlink:href="#bond-uni"/>
  </member>
</association>

As we have seen before, we are again supposed to define our topics which we introduced as we created our association - if we have not already done so. In the example above we referred to faculty and university which we both have already defined in a previous section. Therefore we have only one topic left:

<topic id="is-an-academic-organization-within">
  <baseName>
    <baseNameString>is an academic organization within</baseNameString>
  </baseName>
</topic>

Associations can also connect more than two topics, as the example Gopal is the dean of the Bond IT school shows:

Gopal is the dean of the Bond IT school

While the topic it-school was already defined before we have to create some new ones:

<topic id="gopal">
  <instanceOf><topicRef xlink:href="#person"/></instanceOf>
  <baseName>
    <baseNameString>Gopal Gupta</baseNameString>
  </baseName>  
</topic>

<topic id="person">
  <baseName>
    <baseNameString>person</baseNameString>
  </baseName>
</topic>

<topic id="dean">
  <instanceOf><topicRef hlink:href="#position"/></instanceOf>
  <baseName>
    <baseNameString>dean</baseNameString>
  </baseName>
</topic>

<topic id="position>
  <baseName>
    <baseNameString>position</baseNameString>
  </baseName>
</topic>

in order to create the association properly:

<assocation>
  <instanceOf>
    <topicRef xlink:href="#holds-position-in-organisation"/>
  </instanceOf>
  <member>
    <roleSpec><topicRef xlink:href="#holder"/></roleSpec>
    <topicRef xlink:href="#gopal"/>
  </member>
  <member>
    <roleSpec><topicRef xlink:href="#position"/></roleSpec>
   <topicRef xlink:href="#dean"/>
  </member>
  <member>
    <roleSpec><topicRef xlink:href="#organisation"/></roleSpec>
    <topicRef xlink:href="it-school"/>
  </member>
</association>

Finally, we pay our dues with

<topic id="holder">
  <baseName>
    <baseNameString>position holder</baseNameString>
  </baseName>
</topic>

<topic id="organisation">
  <baseName>
    <baseNameString>organisation</baseNameString>
  </baseName>
</topic>

<topic id="holds-position-in-organisation">
  <baseName>
    <baseNameString>holds position in organisation</baseNameString>
  </baseName>
</topic>

The exact sequence of our declarations of topics and associations does not matter to any system processing the topic map. Topic maps only capture the relative relationship between topics. [ standard]

Our next section gives a more in-depth look into adding resources to topics.


PrevUpNext