{"id":1607,"date":"2013-02-08T00:00:00","date_gmt":"2013-02-07T23:00:00","guid":{"rendered":"https:\/\/wwwneu.strehle.de\/tim\/weblog\/archives\/2013\/02\/08\/1555\/"},"modified":"2025-11-07T14:13:51","modified_gmt":"2025-11-07T13:13:51","slug":"1555","status":"publish","type":"post","link":"https:\/\/www.strehle.de\/tim\/weblog\/archives\/2013\/02\/08\/1555\/","title":{"rendered":"Why I prefer Topic Maps to RDF"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I enjoy modeling data. As students, we were taught the relational data model (as used by SQL databases) and hierarchical database structures. But the real eye-opener was when our professor started modeling a supposedly simple example: an address book. Very soon, we ran into lots of questions with no easy answers: How are persons and addresses, companies, and other persons actually related? How about several persons sharing the same address? What about the temporal dimension, would you want to keep former addresses or employers? We learned what questions to ask, that there\u2019s no silver bullet for the perfect data model, and how to choose a good compromise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I did a lot of SQL database modeling, which was fun and powerful and easy to code against, but still relatively limited and complicated. (Think multi-valued fields and the need for separate tables for m:n relations.) So when I first read the <a href=\"http:\/\/www.isotopicmaps.org\/sam\/sam-model\/\">Topic Maps<\/a> specification (<a href=\"http:\/\/www.topicmaps.org\/xtm\/\">XTM 1.0<\/a> back in the day) and the <a href=\"http:\/\/www.ontopia.net\/topicmaps\/materials\/tao.html\">TAO of Topic Maps<\/a> article, I was thrilled. The data structures immediately made sense to me: Every thing can have names, types, properties, and identifiers. Then there\u2019s relations between two or more things, where each thing can play a certain role. Metadata can have its own metadata, and scopes help qualify it. That\u2019s all.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It took a few years before I could sneak a tiny Topic Map engine into our DAM software (see the <a href=\"http:\/\/blog.digicol.de\/tag\/topic-maps\/\">blog posts<\/a>). It still isn\u2019t fully standard conformant but serves us very well: People started using it for simple lists of countries or keywords without even knowing anything about Topic Maps. (This works fine because almost every Topic Map feature is optional.) Some time later, they would notice how powerful and flexible it is: Whether hierarchical thesaurus structures, names in multiple languages, subsets of lists or custom metadata for a topic, it\u2019s easy to think up and implement new stuff. And you don\u2019t have to change database structures or throw away existing data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When I learned about <a href=\"http:\/\/www.w3.org\/TR\/2004\/REC-rdf-primer-20040210\/\">RDF<\/a>, it totally didn\u2019t \u201cclick\u201d for me. Everything\u2019s a triple? How is this better than \u201ceverything\u2019s a row in a table\u201d? Yes, I\u2019m simplifying and probably not getting it \u2013 but I know that RDF doesn\u2019t help me think. To me, it\u2019s a low-level abstraction, too technical and too theoretical. There\u2019s too many options for implementing basic use cases, which makes interoperability harder. Topic Maps provide me with a way to think about data structures that makes my work easier, that helps clarify my thinking and communicate it to others.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s a bit sad that Topic Maps have never been widely used or even known. In terms of adoption, RDF has certainly won (even though <a href=\"http:\/\/tm.durusau.net\/?p=36911\">the Semantic Web is failing<\/a> so far). And I love that <a href=\"https:\/\/www.w3.org\/TR\/rdfa-primer\/\">RDFa<\/a> allows embedding data structures into HTML: Now Web service APIs can be built in HTML, to be browsed by humans and still be machine readable (the ability to \u201cview source\u201d is a pillar of the Web). So I\u2019ll go with keeping the data in a Topic Map, but will probably make it available through RDFa. (I hope these two can be made to play nicely together\u2026)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Update:<\/em> My experimental <a href=\"https:\/\/github.com\/tistre\/TopicBank\">TopicBank<\/a> engine runs this blog \u2013 see <a href=\"\/tim\/weblog\/archives\/2015\/02\/28\/1756\">strehle.de now powered by Topic Maps<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Update:<\/em> See my blog post <a href=\"\/tim\/weblog\/archives\/2015\/06\/14\/1763\">Topic Maps (as a standard) are dead, I\u2019m afraid<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Update:<\/em> A must-read in this context is Steve Pepper\u2019s 2002 article <a href=\"http:\/\/www.ontopia.net\/topicmaps\/materials\/rdf.html\">Ten Theses on Topic Maps and RDF<\/a>. Sample: \u201c[Topic maps] association roles also make it possible to go beyond binary relationships. In RDF, assertions are always binary.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Update (2019-03-11):<\/em> See <a href=\"\/tim\/weblog\/archives\/2017\/07\/07\/1621\">Michel Biezunski: Topic Maps Now<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I enjoy modeling data. As students, we were taught the relational data model (as used by SQL databases) and hierarchical database structures. But the real eye-opener was when our professor started modeling a supposedly simple example: an address book. Very soon, we ran into lots of questions with no easy answers: How are persons and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_share_on_mastodon":"0"},"categories":[1],"tags":[],"class_list":["post-1607","post","type-post","status-publish","format-standard","hentry","category-weblog"],"share_on_mastodon":{"url":"","error":""},"_links":{"self":[{"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/posts\/1607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/comments?post=1607"}],"version-history":[{"count":2,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/posts\/1607\/revisions"}],"predecessor-version":[{"id":2262,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/posts\/1607\/revisions\/2262"}],"wp:attachment":[{"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/media?parent=1607"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/categories?post=1607"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/tags?post=1607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}