<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><title>Compact Topic Maps Syntax - Use Case Solutions</title>
<style type="text/css">

.source {
    border-width: 1px;
    border-color: #999;
    border-style: dotted;
    background-color: #FEFEFE;
    overflow: auto;
    padding: 15px;
    color: #000;
    font-family: "Courier New", Courier, mono;
}

/* Strings */
.source .s {     /* String */
    color: darkgreen;
}

/* Literals */
.source .m,     /* number */
.source .mf,    /* float */
.source .il,    /* long */
.source .mi,    /* integer */
.source .ld    /* dates */
{
    color: #f60;
}

/* URLs */
.source .u,     /* URL */
.source .usid,  /* Subject identifier */
.source .uslo,  /* Subject locator */
.source .nq {   /* QName */
    color: darkblue;
}

.source .n {    /* Identifier */
    color: darkred;
}

.source .nf {/* Template */
    font-style: italic;
}

/* Directives */
.source .nd {
}

/* Variables */
.source .nv {
    color: #B8860B;
}

/* Keywords */
.source .k {
    color: #c33;
}

/* Comments */
.source .c {
    color: #666;
}

/* Punctuation */
.source .p {
    color: #666;
}
</style>
</head>
<body>

<h1>Compact Topic Maps Syntax - Use Case Solutions</h1>
<p>For these use case solutions the current CTM draft (dated July 2nd, 2007) 
   is used.
</p>

<h2>3.2.1. Topic with an Item Identifier</h2>
<div class="source"><pre><span class="n">john</span>
</pre></div>

<h2>3.2.2. Typed Topic - Using Item Identifiers</h2>
<div class="source"><pre><span class="n">john</span> <span class="nf">isa</span> <span class="n">person</span>
</pre></div>

<h2>3.2.3. Typed Topic - Using Subject Identifiers</h2>
<div class="source"><pre><span class="n">john</span> <span class="nf">isa</span> <span class="u">http://psi.example.org/music/guitarist</span>
</pre></div>
<p>  <br>
   Alternative (using the "prefix" directive):
</p>
<div class="source"><pre><span class="nd">%prefix</span> <span class="n">music</span> <span class="u">http://psi.example.org/music/</span>

<span class="n">john</span> <span class="nf">isa</span> <span class="nq">music:guitarist</span>
</pre></div>

<h2>3.2.4. Multityped Topic - Using Item Identifiers</h2>
<div class="source"><pre><span class="n">john</span> <span class="nf">isa</span> <span class="n">singer</span> 
     <span class="nf">isa</span> <span class="n">guitarist</span>
</pre></div>

<h2>3.2.5. Multityped Topic - Using Subject Identifiers</h2>
<div class="source"><pre><span class="u">http://psi.example.org/beatles/john</span> <span class="nf">isa</span> <span class="n">singer</span> <span class="nf">isa</span> <span class="n">guitarist</span>
</pre></div>

<h2>3.3.1. Topic with an Item Identifier and Topic Name</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="s">"John Lennon"</span>
</pre></div>
<p>  <br>
   Alternative
</p>
<div class="source"><pre><span class="n">john</span> <span class="p">-:</span> <span class="s">"John Lennon"</span>
</pre></div>

<h2>3.3.2. Topic with a Subject Identifier and Topic Name</h2>
<div class="source"><pre><span class="nd">%prefix</span> <span class="n">beatles</span> <span class="u">http://psi.beatles.example.org/</span>

<span class="nq">beatles:The_Beatles</span> <span class="p">-:</span> <span class="s">"The Beatles"</span>
</pre></div>

<h2>3.3.3. Topic with a Subject Locator and a Topic Name</h2>
<div class="source"><pre><span class="p">=</span> <span class="uslo">http://beatles.com/</span> <span class="p">-</span> <span class="s">"Official website of The Beatles"</span>
</pre></div>

<h2>3.3.4. Typed Topic Name - Using Item Identifiers</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="n">fullname</span><span class="p">:</span> <span class="s">"John Ono Lennon"</span>
</pre></div>

<h2>3.3.5. Typed Topic Names - Using Subject Identifiers</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="u">http://psi.example.org/fullname</span><span class="p">:</span> <span class="s">"John Ono Lennon"</span>
</pre></div>

<h2>3.3.6. Scoped Topic Name - Using Item Identifiers</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="s">"John Ono Lennon"</span> <span class="p">@</span><span class="n">fullname</span>
</pre></div>
<p>  <br>
   or
</p>
<div class="source"><pre><span class="n">john</span> <span class="p">-:</span> <span class="s">"John Ono Lennon"</span> <span class="p">@</span><span class="n">fullname</span>
</pre></div>

<h2>3.3.7. Scoped Topic Name - Using Subject Itentifiers</h2>
<div class="source"><pre><span class="nd">%prefix</span> <span class="n">ex</span> <span class="u">http://blabla.org</span>
<span class="n">john</span> <span class="p">-</span> <span class="s">"John Ono Lennon"</span> <span class="p">@</span><span class="nq">ex:fullname</span>
</pre></div>

<h2>3.3.8. Multi Scoped Topic Name</h2>
<div class="source"><pre><span class="n">beatles</span> 
<span class="p">-</span> <span class="s">"The Beatles"</span>
<span class="p">-</span> <span class="s">"Fab Four"</span> <span class="p">@</span><span class="n">nickname</span> <span class="n">short</span>
</pre></div>

<h2>3.3.9. Typed and Scoped Names</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="n">fullname</span><span class="p">:</span> <span class="s">"John Ono Lennon"</span> <span class="p">@</span><span class="n">yoko</span>
</pre></div>

<h2>3.3.10. Topic Name with Variant of datatype String</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="s">"John Lennon"</span> <span class="p">(</span><span class="s">"lennon, john"</span> <span class="p">@</span><span class="nq">tm:sort</span><span class="p">)</span>
</pre></div>

<h2>3.3.11. Topic Name with Variant of datatype XML</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="s">"John Lennon"</span> 
<span class="p">(</span> <span class="s">"&lt;b&gt;John Lennon&lt;/b&gt;"</span><span class="p">^^</span><span class="nq">xs:anyType</span> <span class="p">@</span><span class="n">markup</span><span class="p">)</span>
</pre></div>

<h2>3.3.12. Topic Name with Variant of datatype URI</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="s">"John Lennon"</span> <span class="p">(</span><span class="u">http://link/to/an/image.jpg</span> <span class="p">@</span><span class="n">image</span><span class="p">)</span>
</pre></div>

<h2>3.3.13. Topic Name with Variant with non-TMDM datatype</h2>
<div class="source"><pre><span class="n">revolution-nine</span> <span class="p">-</span> <span class="s">"Revolution No. 9"</span> <span class="p">(</span><span class="mi">9</span> <span class="p">@</span><span class="n">number</span><span class="p">)</span>
</pre></div>

<h2>3.3.14 Typed topic with subject identifier with occurrences and associations</h2>
<div class="source"><pre><span class="c"># Creating the templates</span>
<span class="k">def</span> <span class="nf">has-shoesize</span><span class="p">(</span><span class="nv">$person</span><span class="p">,</span> <span class="nv">$size</span><span class="p">)</span>
    <span class="nv">$person</span> 
    <span class="n">shoesize</span><span class="p">:</span> <span class="nv">$size</span>     <span class="c"># Shoesize is modelled as occurrence</span>
<span class="k">end</span>

<span class="k">def</span> <span class="nf">is-member-of</span><span class="p">(</span><span class="nv">$member</span><span class="p">,</span> <span class="nv">$group</span><span class="p">)</span>
    <span class="n">is-member-of</span><span class="p">(</span><span class="n">member</span><span class="p">:</span> <span class="nv">$member</span><span class="p">,</span> <span class="n">group</span><span class="p">:</span> <span class="nv">$group</span><span class="p">)</span>
<span class="k">end</span>


<span class="u">http://psi.example.org/beatles/paul</span> <span class="nf">isa</span> <span class="n">person</span>
<span class="nf">has-shoesize</span> <span class="mi">45</span>
<span class="nf">is-member-of</span> <span class="n">the-beatles</span>
<span class="n">homepage</span><span class="p">:</span> <span class="u">http://www.paulmccartney.com/</span>
</pre></div>

<h2>3.4.2. Typed Occurrence of datatype String - Using Item Identifiers</h2>
<div class="source"><pre><span class="n">a-day-in-the-life</span> 
<span class="n">lyrics</span><span class="p">:</span> <span class="s">"I read ..."</span>
</pre></div>

<h2>3.4.3. Typed Occurrence of datatype String - Using Subject Identifiers</h2>
<div class="source"><pre><span class="nd">%prefix</span> <span class="n">ex</span> <span class="u">http://www.blabla.org</span>

<span class="n">a-day-in-the-life</span> 
<span class="nq">ex:lyrics</span><span class="p">:</span> <span class="s">"I read ..."</span>
</pre></div>

<h2>3.4.4. Scoped Occurrence of datatype String - Using Item Identifiers</h2>
<div class="source"><pre><span class="n">a-day-in-the-life</span> 
<span class="n">lyrics</span><span class="p">:</span> <span class="s">"I read ..."</span> <span class="p">@</span><span class="n">en</span>
</pre></div>

<h2>3.4.5. Scoped Occurrence of datatype String - Using Subject Identifiers</h2>
<div class="source"><pre><span class="nd">%prefix</span> <span class="n">ex</span> <span class="u">http://bla.org</span>
<span class="nd">%prefix</span> <span class="n">lang</span> <span class="u">http://language.org</span>

<span class="n">a-day-in-the-life</span> 
<span class="nq">ex:lyrics</span><span class="p">:</span> <span class="s">"I read ..."</span> <span class="p">@</span><span class="nq">lang:en</span>
</pre></div>

<h2>3.4.6. Occurrence of datatype XML</h2>
<div class="source"><pre><span class="n">a-day-in-the-life</span> 
<span class="n">lyrics</span><span class="p">:</span> <span class="s">"""&lt;html&gt;</span>
<span class="s">            &lt;head&gt;[...]&lt;/head&gt;</span>
<span class="s">            &lt;body id="lyrics"&gt;[...]&lt;/body&gt;</span>
<span class="s">       &lt;/html&gt;"""</span><span class="p">^^</span><span class="nq">xs:anyType</span>
</pre></div>

<h2>3.4.7. Occurrence of datatype IRI</h2>
<div class="source"><pre><span class="n">beatles</span> <span class="n">website</span><span class="p">:</span> <span class="u">http://www.beatles.com/</span>
</pre></div>
<p>  <br>
   or
</p>
<div class="source"><pre><span class="n">beatles</span> <span class="n">website</span><span class="p">:</span> <span class="s">"http://www.beatles.com/"</span><span class="p">^^</span><span class="nq">xs:anyURI</span>
</pre></div>

<h2>3.4.7. Occurrence of non-TMDM datatype</h2>
<div class="source"><pre><span class="n">pennylane</span> <span class="n">track-number</span><span class="p">:</span> <span class="mi">2</span>
</pre></div>
<p>  <br>
   or
</p>
<div class="source"><pre><span class="n">pennylane</span> <span class="n">track-number</span><span class="p">:</span> <span class="s">"2"</span><span class="p">^^</span><span class="nq">xs:integer</span>
</pre></div>

<h2>3.5.1. Creating Associations</h2>
<div class="source"><pre><span class="n">created</span><span class="p">(</span><span class="n">person</span> <span class="p">:</span> <span class="n">mccartney</span><span class="p">,</span> <span class="n">song</span> <span class="p">:</span> <span class="n">yesterday</span><span class="p">)</span>
</pre></div>
<p>  <br>
   or with templates:
</p>
<div class="source"><pre><span class="c"># Template definition</span>
<span class="k">def</span> <span class="nf">created</span><span class="p">(</span><span class="nv">$creator</span><span class="p">,</span> <span class="nv">$song</span><span class="p">)</span>
    <span class="n">created</span><span class="p">(</span><span class="n">person</span> <span class="p">:</span> <span class="nv">$creator</span><span class="p">,</span> <span class="n">song</span> <span class="p">:</span> <span class="nv">$song</span><span class="p">)</span>
<span class="k">end</span>

<span class="n">mccartney</span> <span class="nf">created</span> <span class="n">yesterday</span>
</pre></div>
<p>  <br>
   or with template invocation outside of topic declaration
</p>
<div class="source"><pre><span class="c"># Template definition</span>
<span class="k">def</span> <span class="nf">created</span><span class="p">(</span><span class="nv">$creator</span><span class="p">,</span> <span class="nv">$song</span><span class="p">)</span>
    <span class="n">created</span><span class="p">(</span><span class="n">person</span> <span class="p">:</span> <span class="nv">$creator</span><span class="p">,</span> <span class="n">song</span> <span class="p">:</span> <span class="nv">$song</span><span class="p">)</span>
<span class="k">end</span>

<span class="nf">created</span><span class="p">(</span><span class="n">mccartney</span><span class="p">,</span> <span class="n">yesterday</span><span class="p">)</span>
</pre></div>

<h2>3.5.2. Scoped Association</h2>
<div class="source"><pre><span class="n">created</span><span class="p">(</span><span class="n">person</span> <span class="p">:</span> <span class="n">mc-cartney</span><span class="p">,</span> <span class="n">song</span> <span class="p">:</span> <span class="n">yesterday</span><span class="p">)</span> <span class="p">@</span><span class="n">music</span>
</pre></div>

<h2>3.5.5. Supertype-Subtype relationship - Using Item Identifiers</h2>
<div class="source"><pre><span class="n">song</span> <span class="nf">iko</span> <span class="n">musical-work</span>
</pre></div>

<h2>3.5.6. Supertype-Subtype relationship - Using Subject Identifiers</h2>
<div class="source"><pre><span class="nd">%prefix</span> <span class="n">ex</span> <span class="u">http://...</span>

<span class="nq">ex:song</span> <span class="nf">iko</span> <span class="nq">ex:musical-work</span>
</pre></div>

<h2>3.6.1 Reification of a Topic Map</h2>
<div class="source"><pre><span class="p">~</span> <span class="n">tm-reifier</span> <span class="p">-</span> <span class="s">"Beatlestopicmap"</span>
</pre></div>

<h2>3.6.2. Reification of a Topic Name</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="s">"John Ono Lennon"</span> <span class="p">~</span> <span class="n">name-of-john-lennon</span>
</pre></div>

<h2>3.6.3. Reification of a Variant</h2>
<div class="source"><pre><span class="n">john</span> <span class="p">-</span> <span class="s">"John Ono Lennon"</span> 
        <span class="p">(</span><span class="s">"lennon, john"</span> <span class="p">@</span><span class="n">sort</span> <span class="p">~</span> <span class="n">sortname-of-john-lennon</span><span class="p">)</span>
</pre></div>

<h2>3.6.4. Reification of an Occurrence</h2>
<div class="source"><pre><span class="n">john</span> <span class="n">website</span><span class="p">:</span> <span class="u">http://www.lennon.com/</span> <span class="p">~</span> <span class="n">lennons-website</span>
</pre></div>

<h2>3.6.5. Reification of an Association</h2>
<div class="source"><pre><span class="n">partnership</span><span class="p">(</span><span class="n">person</span><span class="p">:</span> <span class="n">lennon</span><span class="p">,</span> <span class="n">person</span><span class="p">:</span> <span class="n">mc-cartney</span><span class="p">)</span> <span class="p">~</span> <span class="n">lennon-mccartney</span>

<span class="n">lennon-mccartney</span> <span class="p">-</span> <span class="s">"Lennon / McCartney"</span>
</pre></div>

<h2>3.7.1. Singe line comment</h2>
<div class="source"><pre><span class="c"># a single line with comments</span>
</pre></div>

<h2>3.7.2. Multiline comment</h2>
<div class="source"><pre><span class="c"># one comment</span>
<span class="c"># line 2</span>
</pre></div>

</body>
</html>