From W3C Wiki

RDF and TopicMaps are sufficiently similar that they are often compared and contrasted.

Upcoming: see page about a TMQLBOF (Query) at XML Europe, London

The following article seems to be a good introduction to topicmaps.

LTM and N3

LTM seems to be more clear/precise, kinda like N3 for RDF. Let's work thru the extended example...

LMG: LTM is just a different syntax for the same thing as XTM. For clear/precise, see SAM. (LMG is LarsMariusGarshol)

topic types

[format       = "Format"]
[standard     = "Standard"]
[organization = "Organization"]

in N3:

:format tm:baseName "Format".
:standard tm:baseName "Standard".
:organization tm:baseName "Organization".

hmm... how does one compare names in topicmaps, e.g. for the topic naming constraint? if the basenames match, do the names match? or are names tuples of basename/sortname/displayname?

LMG: SAM tells you how to compare names. The TNC used topic name.value and topic name.scope, but has now been expunged

association types

[format-for = "Format for"]
[defined-by = "Defined by"]

in N3:

:format-for tm:baseName "Format for".
:defined-by tm:baseName "Defined by".

Hmm... how does rdfs:lablel relate...

LMG: It is very close. A base name is simply a label for the topic, no more, and no less.

occurrence types

[specification = "Specification"]
[homepage      = "Home page"]

in N3:

:specification tm:baseName "Specification".
:homepage      tm:baseName "Home page".

topics, associations and occurrences

broke this up into parts...

first part

[topic-maps : standard  = "Topic maps"
                        = "ISO/IEC 13250 Topic Maps" / fullname]
{topic-maps, specification,

[xtm : format = "XTM Syntax"]

[ltm : format = "The linear topic map notation";
                "linear topic map notation, the"

in N3:

:topic-maps a :standard; tm:baseName "Topic maps";
                        _:name2 "ISO/IEC 13250 Topic Maps". _:name2 a tm:NameProperty; tm:scope fullname].
:specification a tm:OccurenceProperty.
:topic-maps :specification

:xtm a :format; tm:baseName "XTM Syntax".

:ltm a :format; tm:baseName "The linear topic map notation";
                tm:sortName "linear topic map notation, the";
     is foaf:topic of <>.

LMG: the translation struggles a bit here. The full name is also a base name. It's just in a different scope; that is, used in a different context. The solution with reification is, I think, the correct one for RDF, but it should still be a base name.

LMG: Sort name is subtler than it appears, perhaps. It is a variant of the base name, so that different base names of the same topic may have different sort variants. Capturing this in RDF is probably more bother than it is worth.

next part

{ltm, specification, ""}

in N3:

:specification a tm:OccurenceProperty.
:ltm :specification <">.

next part

format-for(ltm, topic-maps)
format-for(xtm, topic-maps)

defined-by(ltm, ontopia)

in N3: hmm... role types... NaryRelations...

LMG: Well, you don't necessarily need to care about the role types in RDF. Just make it a property of the format what it represents and never mind the roles. That is: :ltm :format-for :topic-maps.

:ltm :format-for :topic-maps.
:xtm :format-for :topic-maps.

:ltm :defined-by :ontopia.
:xtm :defined-by

next part

[ontopia : organization = "Ontopia AS"]
{ontopia, homepage, ""}

[  : organization = "TopicMaps.Org"]
{, homepage, ""}

:ontopia a :organization; tm:baseName "Ontopia AS".
:homepage a tm:OccurenceProperty.
:ontopia :homepage <>.  a organization; tm:baseName "TopicMaps.Org". :homepage <>.

Merging, Constraints

Some suggest that scopes work like reification, but I (DanConnolly) wonder... are they more simply modelled as InterpretationProperties?

LMG: It's not that scope /is/ reification, but that you need reification in RDF to properly express scope since scope and type are orthogonal axes of expression.

ex:n1 tm:scope ex:Norway.
ex:n2 tm:scope ex:France.
ex:n3 tm:scope ex:Germany.

ex:italy ex:n1 ?Italia?; ex:n2 ?l'Italie?; ex:n3 ?Italien?.

Then the topic naming constraint, which states that no two subjects can have exactly the same name in the same scope can be simply expressed as...

tm:NamingProperty s:subClassOf owl:FunctionalProperty.


Any two topics that reference the same subject by means of their identity attributes are considered to be semantically equivalent to a single topic that has the union of the characteristics (the names, occurrences and associations) of both topics.

LMG: The topic naming constraint was a bug. It has been removed.


Some of the differences include:

  • topic maps divide statements into names, occurrences, and associations
  • reification -- does not require changes in TMs I don't understand
  • NaryRelations -- more natural in topicmaps than RDF
  • scopes -- qualification of statements
  • uri refs -- can be disambiguated I don't understand. do you mean SubjectIndicator?

LMG: In RDF if you've said :foo :bar :baz, then want to say something about this statement you have to take it out and express it as :stmt1 rdf:Subject :foo, :stmt1 rdf:Property :bar, :stmt1 rdf:Object :baz (or whatever) and :stmt1 :something :somethingelse. In topic maps you can reify your base name/occurrence/association without having to change the original. That's all.

LMG: We do mean SubjectIndicator vs SubjectAddress. See SAM.

Additional References

see also: related technologies in the RDF home page.