[topicmapmail] Topic map design guidelines?
Jan Algermissen
algermissen@acm.org
Tue, 20 Jul 2004 11:02:27 +0200
schoenfeld.i@atlas.de wrote:
>
> Hi all,
>
> does anyone knows about a kind of style guide, guidelines or best practices of how to design good topic maps?
Ingo--
I suggest that you look at some of the extensive material on data modeling,
the general principles apply to data modeling with topic maps also.
Some stuff to consider:
- what are your classes? (although not a structural part of
the Topic Maps paradigm, classes are still a major design
element)
- don't mix classes and roles. 'Person' is a class, while 'Teacher'
is a role.
(see: http://www.infoloom.com/pipermail/topicmapmail/2002q1/003566.html )
- define the controlled vocabulary of your domain, avoid ambigous
names
- what are properties, what are relationships? Relationships
map directly to associations and participating roles provide
a fine secondary classification of your instances (e.g. "what
persons are teachers?" ==> find all players of role teacher)
Properties of your instances (e.g. Age, Height, Address,...)
can only be expressed by tweaking the semantics of <occurrence>
a bit (in the absence of a dedicated property element in XTM):
<topic>
<occurrence>
<instanceOf>
<subjectIndicatorRef xlink:href="http://.../Age" />
</instanceOf>
<resourceData>12</resourceData>
</occurrence>
</topic>
This arguably does not leave much room for data typing the '12',
but there is currently no other way.
Hmm...., you could combine your XTM with RDF, given the TM engine you
use supports this. E.g. along the following lines:
In your XTM put:
<topic>
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://people.org/mary" />
</subjectIdentity>
<!-- ... -->
</topic>
In your RDF put:
<rdf:description about="http://people.org/mary">
<foo:age>12</foo:age>
</rdf:description>
Via RDF schema the semantics and data type of foo:age can be defined.
- You should also (from my experience) restrict yourself to
- using a given role only once in an association (no multiple
role players)
- using a given role only in associations of a single type (the
combination of the roles is essentially what constitutes the
type of relationship, so they should not be mixed across
different types). This also enables you to select associations
soly by role: "find all assocications where X plays superclass"
as opposed to "find all assocications of type superclass-subclass
where X plays superclass".
Anyhow, just some guidelines I follow. Hope they help a bit.
Jan
Jan Algermissen http://www.topicmapping.com
Consultant & Programmer http://www.gooseworks.org