<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NetworkedPlanet Blog &#187; Theory and Practice</title>
	<atom:link href="http://blogs.networkedplanet.com/category/theory-and-practice/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.networkedplanet.com</link>
	<description>Insights into developing with NetworkedPlanet products</description>
	<lastBuildDate>Wed, 01 Feb 2012 11:10:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>SDShare Presentation</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/sdshare-presentation/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/sdshare-presentation/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 08:32:11 +0000</pubDate>
		<dc:creator>Graham Moore</dc:creator>
				<category><![CDATA[Theory and Practice]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=665</guid>
		<description><![CDATA[I recently gave a presentation on the SDShare protocol. The slides from that presentation can now be downloaded.]]></description>
			<content:encoded><![CDATA[<p>I recently gave a presentation on the SDShare protocol. The slides from that presentation can now be <a href='http://blogs.networkedplanet.com/theory-and-practice/sdshare-presentation/attachment/sdshare/' rel='attachment wp-att-664'>downloaded.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/sdshare-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LOS on data.networkedplanet.com</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/los-on-data-networkedplanet-com/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/los-on-data-networkedplanet-com/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 08:41:25 +0000</pubDate>
		<dc:creator>Graham Moore</dc:creator>
				<category><![CDATA[Linked Data]]></category>
		<category><![CDATA[Theory and Practice]]></category>
		<category><![CDATA[Web3]]></category>
		<category><![CDATA[Web3 Platform]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=292</guid>
		<description><![CDATA[See how the Web3 Platform is used to publish the LOS Taxonomy using Linked Open Data principles at http://data.networkedplanet.com ]]></description>
			<content:encoded><![CDATA[<p>The service at data.norge.no provides metadata about data sets that are published by a variety of organisations and aims to facilitate the sharing and reuse of data and vocabularies. The service at data.norge.no is very well put together allowing developers and organisations to find out about data sets that may be of use to them. However, the quality and way in which the organisations listed expose the actual data sets could be better and doesn’t make it easy for third parties to utilise the data.</p>
<p>Consider the <a href="http://beta.data.norge.no/data/los">LOS hierarchy</a> for example. This simple hierarchy of concepts and topics is described at data.norge.no and the <a href="http://los.difi.no/wp-content/uploads/2009/06/Emneord_los.ods">actual data set</a> resides at <a href="http://los.difi.no/">difi.org</a>. The LOS hierarchy is category scheme and suggested navigation structure for local government in Norway. The data, sadly, is published as an open document format spreadsheet file.</p>
<p>So, with data.networkedplanet.com and the Web3 Platform we have tried to demonstrate how organisations should publish data for it to be useful and easy for others to work with. To accompany the service we describe the key principles that have guided us. </p>
<p>1)	Give unique persistent identifiers in the form or URLs to the terms in a vocabulary or ontology. E.g. <a href="http://data.networkedplanet.com/difi/los/themes/Arbeid">http://data.networkedplanet.com/difi/los/themes/Arbeid</a>. Is the immutable URI we have assigned to the concept for ‘work’ in the theme hierarchy.</p>
<p>2)	Have human and machine representations for all the ‘things’ being published. Again consider the Arbied concept in Los. If developers creating mashups want to make use of the term in an application why would they want to create and store and manage a static copy when it is intended to be a common data set? At data.networkedplanet.com using the Web3 Platform we expose both human and machine representations of all concepts. See http://data.networkedplanet.com/difi/los/themes/Arbeid?format=rdf for the data representation of the Arbied/Work concept.</p>
<p>3)	Make the data searchable. Developers and other users (CMS editors perhaps) want to know if certain terms exist. Exposing a full text concept search allows them to find the concepts that are interesting to them.</p>
<p>4)	Make the data queryable. Full text search is useful for looking up, or checking that a given term is there. But structured data queries are what developers need to be able to best make use of the data. The Web3 Platform allows SPARQL queries to be run to explore and query the data. To see a list of all themes in LOS the follow URL encoded query can be used …</p>
<p>data.norge.no provides a great hub to discover data sets published by different organisations, but the value of the data they publish is only as good as the tools they offer to users to make use of that data. Networked Planet’s Web3 Platform allows organisations to quickly and easily publishing Linked Open Data in a way that is robust, long lasting and provides developers with data the way they want it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/los-on-data-networkedplanet-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Networked Planet Linked Data Article</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/networked-planet-linked-data-article/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/networked-planet-linked-data-article/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 07:24:16 +0000</pubDate>
		<dc:creator>Graham Moore</dc:creator>
				<category><![CDATA[Linked Data]]></category>
		<category><![CDATA[Theory and Practice]]></category>
		<category><![CDATA[Web3]]></category>
		<category><![CDATA[Web3 Platform]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=308</guid>
		<description><![CDATA[A recent article about Linked Data has been published at Business Computing World.]]></description>
			<content:encoded><![CDATA[<p>A recent article about Linked Data has been published at <a href="http://www.businesscomputingworld.co.uk/moving-towards-a-linked-data-environment/">Business Computing World</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/networked-planet-linked-data-article/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REST in the Web3 Platform</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/rest-in-the-web3-platform/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/rest-in-the-web3-platform/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 07:16:59 +0000</pubDate>
		<dc:creator>Graham Moore</dc:creator>
				<category><![CDATA[Theory and Practice]]></category>
		<category><![CDATA[Web3]]></category>
		<category><![CDATA[Web3 Platform]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=231</guid>
		<description><![CDATA[One of the goals of the Web3 Platform was to adhere to as many of the architectural principles of REST that was possible. In our minds the key things were that: 1) Given a start URI and a description of all the content types and valid transitions a client could interact with the topic map [...]]]></description>
			<content:encoded><![CDATA[<p>One of the goals of the Web3 Platform was to adhere to as many of the architectural principles of REST that was possible. In our minds the key things were that:</p>
<p>1) Given a start URI and a description of all the content types and valid transitions a client could interact with the topic map store.</p>
<p>Yep, there is only that one point.  </p>
<p>Given the URI of a topic map a client that is aware of the different content types that can be returned can interact with the entire topic map without guessing at, or constructing URIs.</p>
<p>For the Web3 Platform we introduced a new syntactic representation for Topic Maps because XTM is an interchange syntax for Topic Maps and not an effective Hypertext representation for the TMDM.</p>
<p>I'll walk through some interactions starting from a topicmap URL to demonstrate why we introduced the new syntax and how a client behaves.</p>
<p>Starting with the topicmap URL:</p>
<pre class="qoate-code">
GET http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b?format=xml
</pre>
<p>When addressing Web3 Resources content negotiation can be done through accept headers or via  a format parameter. The above GET returns the following representation.</p>
<pre class="qoate-code">

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;TopicMap xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          Id="e518129d-b458-4171-99cc-5e4941dafc7b"
          Version="49"
          LastModified="2010-09-22T08:44:56.65"
          Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b"
          WebLabel="myfilms"
          Reifier="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/75746aa2-61a1-4303-9d4e-d9832e366e82"
          Schema="http://localhost/web3/schemas/0df562f3-f86b-4fbb-a4d3-66679f2df0fa"
          Associations="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/associations"
          Topics="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics"&gt;
  &lt;Labels&gt;
    &lt;Label Lang="en-gb"&gt;Films&lt;/Label&gt;
  &lt;/Labels&gt;
&lt;/TopicMap&gt;
</pre>
<p>There are a couple of things to notice in this representation.</p>
<ol>
<li>We use full URLs for everything, no Ids that need turning into URLs based on some defined URL space.</li>
<li>We are exposing the collections of Topics and Associations as resources in their own right. This allows clients to POST to these collections to create new Topics and Associations and also to fetch these collections. (The full representation documentation also specifies the allowed query parameters for these resources).</li>
</ol>
<p>Now a client can navigate the topic collection using:</p>
<pre class="qoate-code">
GET http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics?format=xml
</pre>
<p>This returns the following collection:</p>
<pre class="qoate-code">

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;TopicRefList xmlns:xsd="http://www.w3.org/2001/XMLSchema"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              Start="0" Count="29" Length="25"
              ListUrl="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics"
              Next="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics?skip=25&amp;take=25"
              Previous="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics?skip=-25take=25"&gt;
  &lt;Items&gt;
    &lt;TopicRef Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606"&gt;
      &lt;Labels&gt;
        &lt;Label Lang="en-gb"&gt;Harrison Ford&lt;/Label&gt;
      &lt;/Labels&gt;
      &lt;Identifiers /&gt;
    &lt;/TopicRef&gt;
    &lt;TopicRef Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/dee5c82f-a6ab-4dcc-9e2b-4fbfcaefdc41"&gt;
      &lt;Labels&gt;
        &lt;Label Lang="en-gb"&gt;Witness&lt;/Label&gt;
      &lt;/Labels&gt;
      &lt;Identifiers /&gt;
    &lt;/TopicRef&gt;
    &lt;TopicRef Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/fc914a45-915c-49b1-baa8-8cf523de3425"&gt;
      &lt;Labels&gt;
        &lt;Label Lang="en-gb"&gt;Star Wars&lt;/Label&gt;
      &lt;/Labels&gt;
      &lt;Identifiers /&gt;
    &lt;/TopicRef&gt;
  &lt;/Items&gt;
&lt;/TopicRefList&gt;
</pre>
<p>The interesting things in the snippet above are:</p>
<ol>
<li>We have introduced a generic list container for topics, in fact topic refs. This gives us control over thing like collection size and paging.</li>
<li>We have introduced a lightweight topic reference structure for use in listing topics. This is a subset of the full topic representation and is used in many places.
<li>We are explicit about the topic's web address.</li>
<li>We provided explicit links to navigate through the collection</li>
</ol>
<p>All of the above means that a client who understands this content type can navigate to a topic, and find more results or the previous page of results. </p>
<p>Following a link to a topic using:</p>
<pre class="qoate-code">
GET http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606?format=xml
</pre>
<p>Returns the following XML</p>
<pre class="qoate-code">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;Topic xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       Id="2a8a2182-f8b7-427a-9f7f-ef206b775606" Version="54" LastModified="2010-09-22T08:46:34.36"
       Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606"
       TopicMapAddress="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b"
       TopicAssociations="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606/associations"&gt;
  &lt;Labels&gt;
    &lt;Label Lang="en-gb"&gt;Harrison Ford&lt;/Label&gt;
  &lt;/Labels&gt;
  &lt;Identifiers /&gt;
  &lt;Types&gt;
    &lt;Type Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/5c3c037f-0c13-457e-b177-fa3328d13370"&gt;
      &lt;Labels&gt;
        &lt;Label Lang="en-gb"&gt;Person&lt;/Label&gt;
      &lt;/Labels&gt;
      &lt;Identifiers&gt;
        &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/5c3c037f-0c13-457e-b177-fa3328d13370/identifiers/32fafe54-0363-4e3a-bb3b-f8a565fc7e26" IdentifierType="ii"&gt;

http://localhost/web3/schemas/0df562f3-f86b-4fbb-a4d3-66679f2df0fa/types/16f22191-5fd7-4f15-8014-f4fc28b1563e

        &lt;/Identifier&gt;
        &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/5c3c037f-0c13-457e-b177-fa3328d13370/identifiers/5ab286fc-3e7b-43bd-949f-1766860fb2f3" IdentifierType="si"&gt;

http://www.myfilms.com/types/person

        &lt;/Identifier&gt;
      &lt;/Identifiers&gt;
    &lt;/Type&gt;
  &lt;/Types&gt;
  &lt;Properties&gt;
    &lt;Property Id="526c5a91-302c-4138-b8cb-35e5b7b19d2e" Version="54" LastModified="2010-09-22T08:46:34.36" Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606/properties/526c5a91-302c-4138-b8cb-35e5b7b19d2e" TopicAddress="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606"&gt;
      &lt;Type Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/cb3832ab-7c9b-4ec7-a20e-112dd9b133c3"&gt;
        &lt;Labels&gt;
          &lt;Label Lang="en-gb"&gt;Biography&lt;/Label&gt;
        &lt;/Labels&gt;
        &lt;Identifiers&gt;
          &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/cb3832ab-7c9b-4ec7-a20e-112dd9b133c3/identifiers/a2b3bb57-3313-4432-b485-bd08703f1495" IdentifierType="si"&gt;

http://www.myfilms.com/types/biography

          &lt;/Identifier&gt;
          &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/cb3832ab-7c9b-4ec7-a20e-112dd9b133c3/identifiers/a314af53-a940-4b7a-a92b-ad2d761ef2c7" IdentifierType="ii"&gt;

http://localhost/web3/schemas/0df562f3-f86b-4fbb-a4d3-66679f2df0fa/types/45ba8b1a-a80c-40c6-8fb6-7d1692c0da7b

          &lt;/Identifier&gt;
        &lt;/Identifiers&gt;
      &lt;/Type&gt;
      &lt;Value xsi:type="xsd:string"&gt;Born in the 1940's&lt;/Value&gt;
      &lt;Scope /&gt;
    &lt;/Property&gt;
  &lt;/Properties&gt;
&lt;/Topic&gt;
</pre>
<p>Points of interest in the above snippet are:</p>
<ol>
<li>The link to the associations for the topic. With this we have created a resource that can be navigated to return the associations in which the topic plays a role. (There are optional query parameters on this as well.)</li>
<li>We use inline topic ref elements to minimise round trips for common things, such as property types and topic types.</li>
<li>All contained resources, property (is name or occurrence) and identity expose their web address. </li>
<li>We have also included version information to help with ETag processing.</li>
</ol>
<p>Finally, following the associations link using:</p>
<pre class="qoate-code">

http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606/associations?format=xml
</pre>
<p>We get back the following XML structure:</p>
<pre class="qoate-code">
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;AssociationList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 Start="0" Count="0" Length="3"
                 ListUrl="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606/associations?type="
                 Next="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606/associations?type=&amp;skip=3&amp;take=3"
                 Previous="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606/associations?type=&amp;skip=-3take=3"&gt;
  &lt;Items&gt;
    &lt;Association Id="033426d3-90fb-4501-9372-cafa7e46cc53" Version="53" LastModified="2010-09-22T08:45:44.507"
                 Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/associations/033426d3-90fb-4501-9372-cafa7e46cc53"
                 TopicMapAddress="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b"&gt;
      &lt;Type Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/042c8aad-1d32-48d8-9d71-2ed5a9a30b04"&gt;
        &lt;Labels /&gt;
        &lt;Identifiers&gt;
          &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/042c8aad-1d32-48d8-9d71-2ed5a9a30b04/identifiers/be689f59-e07a-4594-abd1-6d4d0457ee1d" IdentifierType="si"&gt;http://psi.topicmaps.org/iso13250/model/type-instance&lt;/Identifier&gt;
        &lt;/Identifiers&gt;
      &lt;/Type&gt;
      &lt;Scope /&gt;
      &lt;Roles&gt;
        &lt;Role Id="6bb8e97c-ad0a-469f-8578-e77e2b383e27"&gt;
          &lt;Player Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/2a8a2182-f8b7-427a-9f7f-ef206b775606"&gt;
            &lt;Labels&gt;
              &lt;Label Lang="en-gb"&gt;Harrison Ford&lt;/Label&gt;
            &lt;/Labels&gt;
            &lt;Identifiers /&gt;
          &lt;/Player&gt;
          &lt;Type Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/65239824-ebdb-4f14-bd10-7bc66ffb772e"&gt;
            &lt;Labels /&gt;
            &lt;Identifiers&gt;
              &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/65239824-ebdb-4f14-bd10-7bc66ffb772e/identifiers/a9cbb6c7-7729-4834-bc0d-cba517ad4672" IdentifierType="si"&gt;http://psi.topicmaps.org/iso13250/model/instance&lt;/Identifier&gt;
            &lt;/Identifiers&gt;
          &lt;/Type&gt;
        &lt;/Role&gt;
        &lt;Role Id="82cf9263-4951-4c0f-a536-e940ce9f17f0"&gt;
          &lt;Player Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/5c3c037f-0c13-457e-b177-fa3328d13370"&gt;
            &lt;Labels&gt;
              &lt;Label Lang="en-gb"&gt;Person&lt;/Label&gt;
            &lt;/Labels&gt;
            &lt;Identifiers&gt;
              &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/5c3c037f-0c13-457e-b177-fa3328d13370/identifiers/32fafe54-0363-4e3a-bb3b-f8a565fc7e26" IdentifierType="ii"&gt;http://localhost/web3/schemas/0df562f3-f86b-4fbb-a4d3-66679f2df0fa/types/16f22191-5fd7-4f15-8014-f4fc28b1563e&lt;/Identifier&gt;
              &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/5c3c037f-0c13-457e-b177-fa3328d13370/identifiers/5ab286fc-3e7b-43bd-949f-1766860fb2f3" IdentifierType="si"&gt;http://www.myfilms.com/types/person&lt;/Identifier&gt;
            &lt;/Identifiers&gt;
          &lt;/Player&gt;
          &lt;Type Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/e3746d43-ce02-45c5-9d2d-c244fcbbd9e3"&gt;
            &lt;Labels /&gt;
            &lt;Identifiers&gt;
              &lt;Identifier Address="http://localhost/web3/topicmaps/e518129d-b458-4171-99cc-5e4941dafc7b/topics/e3746d43-ce02-45c5-9d2d-c244fcbbd9e3/identifiers/d3d79a3b-84fc-433a-8251-306a8bcc3e74" IdentifierType="si"&gt;http://psi.topicmaps.org/iso13250/model/type&lt;/Identifier&gt;
            &lt;/Identifiers&gt;
          &lt;/Type&gt;
        &lt;/Role&gt;
      &lt;/Roles&gt;
      &lt;Identifiers /&gt;
    &lt;/Association&gt;
  &lt;/Items&gt;
&lt;/AssociationList&gt;
</pre>
<p>So the key things we wanted to do was to create a set of content types that along with a description allowed a client to interact with a Topic Map without the need to refer to or know how to generate ANY URIs.</p>
<p>The examples above have shown how we have updated the core TMDM items, topic, association, occurrence etc to be better REST citizens, and we have also introduced new resources for collections of things in the topic map model. These collections are key to connecting together the basic topic map building blocks.</p>
<p>The full content type descriptions, including update semantics, are available as part of the Web3 Documentation which can be downloaded from <a href="http://www.networkedplanet.com/Products/Web3/">http://www.networkedplanet.com/Products/Web3/</a></p>
<p>We also recently posted about how we support transactions in a RESTful way. This can be seen <a href="http://blogs.networkedplanet.com/theory-and-practice/using-http-verbs-to-describe-server-side-transactions/">here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/rest-in-the-web3-platform/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using HTTP Verbs to describe Server Side Transactions</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/using-http-verbs-to-describe-server-side-transactions/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/using-http-verbs-to-describe-server-side-transactions/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 07:21:14 +0000</pubDate>
		<dc:creator>Graham Moore</dc:creator>
				<category><![CDATA[Theory and Practice]]></category>
		<category><![CDATA[Web3]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=193</guid>
		<description><![CDATA[One of the challenges of putting together a REST service is how to let clients make transactional updates that involve two or more resources. One approach to this problem is to create a resource that is 'a collection of transactions'. A client can post a representation of a new transaction to this resource. The transaction [...]]]></description>
			<content:encoded><![CDATA[<p>One of the challenges of putting together a REST service is how to let clients make transactional updates that involve two or more resources. One approach to this problem is to create a resource that is 'a collection of transactions'. A client can post a representation of a new transaction to this resource. The transaction becomes a 'child' of the 'transactions' resource and can be accessed via a returned URL.</p>
<p>Making the transaction explicit is good as it allows the transaction to be addressed and its status checked, it also allows for the service to return immediately and process the transaction in the background.</p>
<p>This basic pattern is good but it has a drawback in that for each different system you build you need to define the transaction language.</p>
<p>Our solution to this is to use HTTP verbs, URIs and resource representations as the building blocks of our transaction language. A transaction representation contains a number of operations. Each operation contains information about its Method, e.g. POST, PUT, DELETE, the resource URI to operate on and the request body.</p>
<p>&lt;transaction&gt;</p>
<p>&lt;operation id="a1" method="POST" Resource="http://...../somecollection"&gt;</p>
<p>&lt;body&gt;&lt;!-- resource representation --&gt;&lt;/body&gt;</p>
<p>&lt;/operation&gt;</p>
<p>.. more operations</p>
<p>&lt;/transaction&gt;</p>
<p>The server processes a transaction by looking at each operation construct and operating on it as though the request has come from a client. The only difference is that all of the operations listed occur in a single transaction.</p>
<p>Each operation has a local id. When an operation completes the return URL from the operation is bound to that identifier. The identifier can then be used later in the transaction. This is especially useful when you want to create two new resources and then associate them together all in the same transaction.</p>
<p>After a transaction is processed the representation can be retrieved. The representation contains the URLs of newly created resources, as well as an errors information that occurred when processing the transaction.</p>
<p>This is a very powerful model that removes the need to create a domain specific transaction language for different applications, can reuse  existing resource processing code and is very descriptive.</p>
<p>For more information about this approach, download and review the REST service documentation for the <a href="http://www.networkedplanet.com/products/web3">Web3 Platform</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/using-http-verbs-to-describe-server-side-transactions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Topic Maps SPARQL</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/making-topic-maps-sparql/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/making-topic-maps-sparql/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 15:25:08 +0000</pubDate>
		<dc:creator>Kal</dc:creator>
				<category><![CDATA[Theory and Practice]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=63</guid>
		<description><![CDATA[The focus of this article is on the implementation of the SPARQL query language on top of a topic map repository. I'm not going to get down into implementation issues but instead will describe what has motivated this work and the way in which we have addressed the various incompatibilities between the graph-based data model [...]]]></description>
			<content:encoded><![CDATA[<p>
The focus of this article is on the implementation of the SPARQL query language on top of a topic map repository. I'm not going to get down into implementation issues but instead will describe what has motivated this work and the way in which we have addressed the various incompatibilities between the graph-based data model for which SPARQL was designed and the aggregate association model of topic maps.
</p>
<h2>Contents</h2>
<ul>
<li><a href="#motivation">Motivation and Goals</a></li>
<li><a href="#approach">Approach</a></li>
<li><a href="#limitations">Limitations of TMSPARQL</a></li>
<li><a href="#conclusions">Conclusions</a></li>
<li><a href="#examples">Further Examples</a></li>
</ul>
<h2 id="motivation">Motivation and Goals</h2>
<p>The principle motivation behind this work has been the need for topic maps repositories to be active participants in the Linked Data Web. It is relatively trivial to expose topic map data as RDF but just providing a bunch of addressable RDF resources isn't really enough. A true Linked Data repository really must also support a query interface that allows clients to search and filter the data provided by the repository. It is clear (from even a cursory inspection of the various linked data repositories that exist out there) that SPARQL is the preferred query language for Linked Data clients. Therefore if a topic maps repository is to be a full and useful participant in the Linked Data web it is important that it can provide a SPARQL query service endpoint.</p>
<p>A second, weaker, motivation has been the progress and direction of the ISO TMQL standard. At the time of writing the TMQL standard is still under development and while it is not clear just yet exactly how the query language will look, it is my opinion that the final language will not be palatable to those outside the topic maps community. It is hoped that by providing a SPARQL query implementation on top of a topic maps repository it would be possible to provide a simpler query language that perhaps meets the 80/20 rule leaving the 20% of really heavy lifting in topic maps query to TMQL.</p>
<p>The main goal of this project is to enable the implementation of a SPARQL query endpoint, but it is also important that this should be an endpoint that is usable by any Linked Data client. In particular the SPARQL query endpoint should be queryable by a client that does not know (and does not need to care) that the underlying repository is using topic maps as its core data model rather than RDF. Ideally a client should be able to send the same query to both RDF and Topic Maps based repositories and, assuming there is some consistent mapping of identifiers to resources, retrieve equivalent results. For example, if I have a topic map that stores social network data using the FOAF ontology, it should be possible for a client to query that data using exactly the same SPARQL queries it would use to query an RDF store of FOAF data.</p>
<p>We have called this project TMSPARQL.</p>
<h2 id="approach">Approach</h2>
<p>A SPARQL query is expressed as a graph pattern that (in its most basic form) consists of a set of triples where the subject, predicate, or object of those triples may be either an RDF node or a variable. The query result returns the collection of bindings of values to the variables that result in a match of the pattern against the data store. TMSPARQL takes a SPARQL query and converts it into a set of matches against a topic map data store. It is important to point out that the data being queried is stored using a conventional topic maps data model - no conversion or intermediate form of data is required nor is any configuration or mapping of identifiers.</p>
<p>For the purpose of explanation I'm going to use some very simple sample data. This is the data being queried in CTM notation:</p>
<pre>
person http://www.networkedplanet.com/ontology/employment/person .
company http://www.networkedplanet.com/ontology/employment/company .
worksFor http://www.networkedplanet.com/ontology/employment/worksFor .
employer http://www.networkedplanet.com/ontology/employment/employer .
employee http://www.networkedplanet.com/ontology/employment/employee .
hourlyWage http://www.networkedplanet.com/ontology/employment/hourlyWage .
alf
isa person
hourlyWage 14.50 .
bert
isa person
hourlyWage 25.40 .
xyz isa company .
worksFor(employee: alf, employer: xyz)
worksFor(employee: bert, employer: xyz)
</pre>
<h3>Mapping URIs to Topics</h3>
<p>The first stage of the TMSPARQL process is to bind all URIs in the triples of the graph pattern to topics. The URI may be one of a small number of special predefined URIs (primarily used as predicates for explicit traversals of the topic map data model), otherwise the URI is used to look up topic map items by item identifier or subject identifier (for topic items). Under this rule it is possible for a single topic to be referenced by different resource URIs in a SPARQL query, but this has no negative effect on the construction or execution of queries. If a topic map item cannot be found for a particular URI, then the triple containing that URI cannot be matched. For example given the query:</p>
<pre>
PREFIX ont: <http://www.networkedplanet.com/simpleOntology/>
SELECT ?person ?employer ?wage WHERE {
?person ont:employer ?employer .
?person ont:hourlyWage ? wage
}
</pre>
<p>only the predicates of the triples in the graph pattern are bound to URIs. The TMSPARQL engine must, then, find the topic map items identified by the URIs <code>http://www.networkedplanet.com/simpleOntology/hourlyWage</code> and <code>http://www.networkedplanet.com/simpleOntology/employer</code>.</p>
<h3>Implicit Data Model Traversals</h3>
<p>If the predicate of a triple in the SPARQL graph pattern does not match any of the predefined URIs for the explicit data model traversals, then there are a number of possible traversal options that the TMSPARQL processor must consider. In each case, the predicate specifies a typing topic that acts as a filter on the traversal.</p>
<h4>Related Topics Traversal</h4>
<p>The related topics traversal binds topic items to the subject and object of the triple. The predicate of the triple must be a role type and specifies the type of the role played by the topic bound to the object of the triple in an association in which the subject of the triple plays a role of any type other than the type bound to the predicate. In our example query the triple <code>?person ont:employer ?employer</code> executes a Related Topics Traversal because the topic with subject identifier <code>http://www.networkedplanet.com/simpleOntology/employer</code> is used as a role type in two associations in our sample data set.</p>
<p>At first glance it may be unclear why the predicate is a role type and not an association type. The reason for this is that a topic map association potentially groups more than two topics together. Using the association type as a filter implies no specific "direction" to the triple meaning that any role player could be bound to either the subject or object of the triple and that all possible combinations would have to be returned by the match (in our example if we used association type as the predicate <code>?person ont:worksFor ?employer</code> and would result in the following matches:</p>
<table border=1 cellpadding=3 cellspacing=3>
<tr>
<td>?person</td>
<td>?employer</td>
</tr>
<tr>
<td>alf</td>
<td>xyz</td>
</tr>
<tr>
<td>xyz</td>
<td>alf</td>
</tr>
<tr>
<td>bert</td>
<td>xyz</td>
</tr>
<tr>
<td>xyz</td>
<td>bert</td>
</tr>
</table>
<p>The predicate is specified to be the type of the role played by the topic that binds to the object of the triple to make queries read more naturally. If we had said that  the predicate should be a filter on the type of role played by the subject of the triple then our sample query triple would have to be rewritten as <code>?person ont:employee ?employer</code> - which doesn't quite read correctly.</p>
<p>This implied traversal is really tuned specifically for the case of binary associations (as our experience is that the vast majority of all associations are binary). It also neatly handles the case of grouping associations where one player plays a specific "parent" role type and all other players play the same "child" role type. It doesn't quite so neatly handle associations that contain more than two types of role as the subject of the predicate must bind to all players of roles other than the role type specified in the predicate. This problem can often be mitigated by introducing other filtering triples into the query (e.g. adding a ?person a ont:person triple to the query pattern), or if all else fails by falling back on a more verbose use of the explicit traversals.</p>
<p>Using our example data, the query:</p>
<pre>SELECT ?person, ?employer { ?person ont:employer ?employer }</pre>
<p>will result in the following variable bindings:</p>
<table border=1 cellpadding=3 cellspacing=3>
<tr>
<td>?person</td>
<td>?employer</td>
</tr>
<tr>
<td>alf</td>
<td>xyz</td>
</tr>
<tr>
<td>bert</td>
<td>xyz</td>
</tr>
</table>
<h4>Topic Property Value Traversal</h4>
<p>The Topic Property Value Traversal binds topic items to the subject of the triple and literals to the object of the triple. The triple predicate must be a name or occurrence type and specifies the type of name or occurrence that must be present on the topic bound to the subject with a literal value equal to that bound to the object. </p>
<p>In our example query the triple <code>?person ont:hourlyWage ?wage</code> executes as a Topic Property Value Traversal because the topic with the subject identifier <code>http://www.networkedplanet.com/simpleOntology/hourlyWage</code> is used as an occurrence type in our sample data set.</p>
<p>Using our example data again, the query:</p>
<pre>SELECT ?person, ?wage { ?person ont:hourlyWage ?wage }</pre>
<p>will result in the following variable bindings:</p>
<table border=1 cellpadding=3 cellspacing=3>
<tr>
<td>?person</td>
<td>?wage</td>
</tr>
<tr>
<td>alf</td>
<td>14.50</td>
</tr>
<tr>
<td>bert</td>
<td>25.40</td>
</tr>
</table>
<h4>Handling Traversal Options</h4>
<p>It should be noted that it is not possible to determine from the predicate URI of a triple which implicit data model traversal should be followed. Our current implementation uses the other triples in the query to help narrow down the traversal options. For example the single triple in the query:</p>
<pre>
SELECT ?person ?wage WHERE {  ?person ont:hourlyWage ?wage }
</pre>
<p>Could be either a related topics traversal (in which case ?wage must bind to a topic) or a topic property value traversal (in which case ?wage must bind to a literal). However the query:
</p>
<pre>
SELECT ?person ?wage WHERE {
?person ont:hourlyWage ?wage .
?wage a ont:monetaryValue
}
</pre>
<p>has a second triple that implies that ?wage cannot be a literal value (because it has a type specified by the topic referenced by ont:monetaryValue) so only a related topics traversal is appropriate. Alternatively the query:</p>
<pre>
SELECT ?person ?wage WHERE {
?person ont:wage ?wage .
FILTER (?wage > 50)
}
</pre>
<p>uses ?wage in a filter comparison with a numeric which therefore implies that ?wage must be bound to a literal value and so the traversal in the first triple must be a topic property value traversal.</p>
<p>If the predicate is already bound to a topic at query time, it is also possible to handle this problem by inspection (looking at the topic map to see how the topic that binds to the predicate is used for typing purposes) or by reference to a TMCL schema (by looking at how the predicate topic is declared for use in the schema). However these approaches do not help when the predicate of a triple is itself a variable. In some cases it may be necessary to execute both traversal options and combine the results.
</p>
<h4>Explicit Data Model Traversals</h4>
<p>TMSPARQL predefines a number of URI identifiers for specific traversals of the topic maps data model. Whenever a triple is encountered in the SPARQL query that uses one of these URIs as the predicate of the triple, then the corresponding data model traversal is invoked. Each of these traversals also imply a restriction on the type of item referenced by the subject and object of the triple. The table below summarises these predicates using CURIEs where the prefix <code>rdf</code> maps to the URI <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#</code> and the prefix <code>tms</code> maps to the URI <code>http://www.networkedplanet.com/tmsparql.</code>
</p>
<table border=1 cellpadding=3 cellspacing=3>
<tr>
<td>Identifier (CURIE)</td>
<td>Traversal Description</td>
<td>Subject Item Type</td>
<td>Object Item Type</td>
</tr>
<tr>
<td>rdf:type</td>
<td>The type-instance traversal. From a typed topic map item to the topic(s) that specify its type(s).</td>
<td>Topic, Association, Role, Name, Occurrence</td>
<td>Topic</td>
</tr>
<tr>
<td>tms:reifier</td>
<td>Item -> Reifier traversal. From a topic map item to the topic that reifies that item.</td>
<td>Association, Role, Name, Occurrence</td>
<td>Topic</td>
</tr>
<tr>
<td>tms:role</td>
<td>Association -> role traversal. From an association item to its child role items.</td>
<td>Association</td>
<td>Role</td>
</tr>
<tr>
<td>tms:player</td>
<td>Role -> player traversal. From a role item to the topic item that is the value of the role player property</td>
<td>Role</td>
<td>Topic</td>
</tr>
<tr>
<td>tms:topicProperty</td>
<td>Topic -> occurrence or name traversal. From a topic item to its child name and occurrence items</td>
<td>Topic</td>
<td>Name, Occurrence</td>
</tr>
<tr>
<td>tms:scope</td>
<td>Scoped item -> themes traversal. From a scoped topic map item to the topics in its scope property.</td>
<td>Association, Name, Occurrence</td>
<td>Topic</td>
</tr>
<tr>
<td>tms:value</td>
<td>Property -> value traversal. From a name or occurrence item to its value literal.</td>
<td>Name, Occurrence</td>
<td>Literal</td>
</tr>
</table>
<p>It is important to note that these traversals also carry implications on the type of object referenced by the subject and object of the triple. If a variable is present in multiple triples in the pattern its actual item type must be the intersection of all item types implied by the triples it is in. If that intersection is the empty set, the query cannot bind the variable at all.
</p>
<h4>Importing RDF and Querying with TMSPARQL</h4>
<p>One of the goals of this design has been to make it possible to import RDF into a topic map store and then execute the same SPARQL query against it as you would if the data had been stored in an RDF store. This is the reason behind the choice of the implicit traversals described above. A number of papers on importing RDF into topic map data stores have been written (and many of which are summarised in the W3C Working Group Note "A Survey of RDF/Topic Maps Interoperability Proposals") and it is not the purpose of this paper to rehash those issues. However our design of the implicit traversals does impose some restrictions on how RDF properties map to types in the topic map data store. If the object of the RDF triple is a resource, then the assumption is that the subject and object of the triple both map to topics in the topic map store, and the predicate URI must be the subject (or item) identifier of the topic that defines the role played by the topic mapped to the triple object in an association with the topic mapped to the triple's subject. If the object of the RDF triple is a property, then the assumption is that the subject of the triple must be imported as a topic in the topic map store, the predicate URI must be the subject (or item) identifier of the topic that defines the type of a new property on the topic mapped to the subject of the predicate and the object of the triple must be used as the value of that new property. An ontology-based mapping approach such as Ontopia's RTM should have no difficulty in meeting these requirements.</p>
<p>It should also be noted that TMSPARQL doesn't care about any reverse mapping from the topic map back out to RDF, as SPARQL results sets are simple tabular values. Where a variable binds to a topic map item, the TMSPARQL implementation simply returns a suitable identifier for the item (typically a system-specific item identifier). Of course those identifiers should then be resolvable to return RDF data, but how that RDF data is generated is not constrained by TMSPARQL itself. It should also be noted that the CONSTRUCT form of SPARQL query can be used by SPARQL clients to define exactly what RDF the SPARQL endpoint returns.
</p>
<h2 id="limitation">Limitations of TMSPARQL</h2>
<p>Many of the limitations of TMSPARQL are actually limitations in SPARQL itself. For example, querying for the non-presence of specific topics is not terribly easy requiring some contortions with the bound() filter. Reification isn't handled natively (because it isn't handled natively in SPARQL despite the fact that RDF makes heavier use of reification than topic maps). As we chose not to extend SPARQL syntax, if you want to do more with your topic map than traverse related topics and filter on / retrieve type and property information you are force to use some "magic" identifiers - but we feel this is a worthwhile trade-off for interoperability.
</p>
<p>
The TMSPARQL language as presented here does not have direct support for variants (this is due to the mapping performed in our underlying topic map system that converts names, occurrences and variants into "topic property" items). A truly TMDM-compliant version of the language might add support for variants by adding a tms:variant predicate type and defining an appropriate traversal (from name item or variant item to variant item).
</p>
<h2 id="conclusion">Conclusion</h2>
<p>
TMSPARQL shows some promise for helping topic map repositories easily act as full citizens on the Linked Data Web providing a SPARQL query endpoint which, with only a little careful ontology mapping can be made to appear exactly like an RDF data store. The advantages here are primarily for the consumers of linked data - giving them only one query language to learn (SPARQL) and the ability to combine query results from both topic maps and RDF repositories as well as the various databases and other data stores that now expose SPARQL endpoints.<br />
As well as the obvious interoperability benefits, TMSPARQL is also a clean small query language that is relatively easy to learn to write and to reason about which, we hope, should be able to cope with the majority of real-world topic map query use cases.
</p>
<h2 id="examples">Further Examples</h2>
<p>Here are a few additional sample queries to give a feel for how SPARQL can be used to query a topic map. For compactness I haven't included the PREFIX declarations.</p>
<h3>Filtering Values</h3>
<p>The FILTER construct in SPARQL can be used to restrict the results set in various ways. E.g.</p>
<pre>
SELECT ?person ?age WHERE {
?person ont:age ?age .
FILTER ((?age<40 &#038;& ?age > 18) || (?age = 50))
}
</pre>
<p><em>Find all people aged between 18 and 40 or exactly 50 years old.</em></p>
<p>SPARQL includes a number of predefined filter functions including URI validation and regular expression pattern matching. E.g.</p>
<pre>
SELECT ?person ?website WHERE {
?person ont:web ?website .
FILTER isuri(?website)
}
</pre>
<p><em>Find all ont:person topics with an ont:web property whose value is a URI.</em></p>
<pre>
SELECT ?person ?site WHERE {
?person a ont:person
OPTIONAL {
?person ont:website ?site
}
FILTER (regex(?site, "^http://"))
}
</pre>
<p><em>Find all ont:person topics with an ont:web property whose value starts with the string "http://".</em></p>
<h3>Optional Matches</h3>
<p>The OPTIONAL construct in SPARQL means that not all variables need to be bound by a pattern match:</p>
<pre>
SELECT ?person ?site WHERE {
?person a ont:person
OPTIONAL {
?person ont:website ?site
}
}
</pre>
<p><em>Find all topics of type ont:person and return the value of their ont:website property if they have one.</em></p>
<p>The OPTIONAL construct can also be combined with the bound() FILTER function:</p>
<pre>
SELECT ?person ?site WHERE {
?person a ont:person
OPTIONAL {
?person ont:web ?site
}
FILTER (!bound(?site))
}
</pre>
<p><em>Find all topics of type ont:person that do not have an ont:website property.</em></p>
<h3>TMDM Queries</h3>
<p>Using the special predefined TMSPARQL predicates it is possible to query the topic map data model at a more detailed level. </p>
<h4>Reification</h4>
<pre>
SELECT ?ageProperty ?ageValue ?ageReifier WHERE {
?ageProperty a ont:age .
?ageProperty tms:value ?ageValue
OPTIONAL { ?ageProperty tms:reifier ?ageReifier }
}
</pre>
<p><em>Find all names and occurrences of type ont:age, returning the item itself, the value and the reifying topic of the property if it is reified.</em></p>
<h4>Associations</h4>
<pre>
SELECT ?assoc, ?assocType, ?roleType WHERE {
?assoc a ?assocType .
?assoc tms:role ?rolePlayed .
?rolePlayed tms:player inst:12345 .
?rolePlayed a ?roleType
}
</pre>
<p><em>Find all associations in which the topic identified by the CURIE inst:12345 is a role player, returning the association item, the association type and the type of role played by the inst:12345 topic.</em></p>
<h4>Scope</h4>
<pre>
SELECT ?place, ?name WHERE {
?place a ont:place .
?place tms:topicProperty ?prop .
?prop a tm:displayName .
?prop tms:scope lang:de
}
</pre>
<p><em>Find all topics of type ont:place that have a property of type tm:displayName scoped by lang:de.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/making-topic-maps-sparql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Context is King!</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/context-is-king/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/context-is-king/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 14:45:23 +0000</pubDate>
		<dc:creator>Graham Moore</dc:creator>
				<category><![CDATA[Theory and Practice]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=29</guid>
		<description><![CDATA[I recently did an interview for Tassilo Pellegrini from the Semantic Web Company. We talked about Topic Maps and the upcoming conference in Oslo. You can see the full interview here.]]></description>
			<content:encoded><![CDATA[<p>I recently did an interview for Tassilo Pellegrini from the <a href="http://www.semantic-web.at/1.home.htm">Semantic Web Company</a>. We talked about Topic Maps and the upcoming conference in <a href="http://www.topicmaps.com/tmc/conference.jsp?conf=TM2008">Oslo</a>. You can see the full interview <a href="http://www.semantic-web.at/1.36.resource.227.graham-moore-x22-context-is-king-x22.htm">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/context-is-king/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ontology-driven Application Design with the NPCL Schema Editor</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/ontology-driven-application-design-with-the-npcl-schema-editor/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/ontology-driven-application-design-with-the-npcl-schema-editor/#comments</comments>
		<pubDate>Tue, 14 Aug 2007 10:23:49 +0000</pubDate>
		<dc:creator>Kal</dc:creator>
				<category><![CDATA[Theory and Practice]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=20</guid>
		<description><![CDATA[With the new release of the NPCL Schema Editor, the focus of our developer tool set is now moving around to ontology-driven application design. This post is to explain a little more about what that concept involves and how we think it can provide real benefit to system architects and developers alike. Ontology and Information [...]]]></description>
			<content:encoded><![CDATA[<p>With the <a href="http://www.networkedplanet.com/blog/2007/08/networkedplanet_announce_visua.html">new release of the NPCL Schema Editor</a>, the focus of our developer tool set is now moving around to <strong>ontology-driven application design</strong>. This post is to explain a little more about what that concept involves and how we think it can provide real benefit to system architects and developers alike.</p>
<h2>Ontology and Information Management</h2>
<p>Our key focus has always been on Information Management - enabling organizations to better organize the information that they work with to make it more accessible, more relevant to key processes and better connected to the concepts that drive the business. Adding ontologies into the mix strengthens the connections between information assets and concepts by enabling the business concepts to be made as concrete as the documents and databases that are part of the business. An ontology can also provide a means for expressing the common consensus on "what exists in our business", "what do we do" and "what are our key business drivers, goals and concepts" - in that alone the development of an ontology can be a key part of examining and improving business processes.</p>
<h2>An Ontology-based Application Development Process</h2>
<p>There are many stages of the application development life-cycle where ontologies can play a key role. These  are the principle ones that we have seen from our exeperience in developing information management solutions using topic maps.</p>
<h3>Design To Ontology</h3>
<p>An ontology represents a concrete specification of the classes of concepts and relationships that are involved in a particular system architecture. By creating an ontology with "Person", "Company", "Document" and other topic types we are explicitly saying that these concept classes are a key part of the system architecture. In many cases these conceptual classes will persist all the way down into the data layer. Of course, in the old days that meant creating database tables, but with topic maps the possibility of a more flexible approach is opened up.<br />
Furthermore with a constraint language for topic maps such as NPCL, we can take the high-level concept classes and encode them directly in a syntax that the topic map processor can understand and act on. In this way we can really start the process of coding a system by writing the ontology - it is the first step on the road to making our conceptual designs a concrete reality.<br />
A constraint language also allows us to express more about our model than a simple system of types. Constraints enable us to specify how those types interact and combine and impose minimum requirements for data integrity.</p>
<h3>Ontology to Code</h3>
<p>Ontology and code can interface in many different ways.</p>
<ul>
<li><strong>Code Access To Ontology</strong><br/><br />
At the simplest you can use code to acess the ontology information. In TMCore, this feature is provided by the NPCL library and the supporting database views that enable running code to query and traverse ontology information. In this way code can be written that is designed to work flexibly with different domain models by allowing the ontology to specify how it behaves. A simple example of this is the UI for populating a topic with occurrence values. An ontology-unaware application will have to prompt the user to search for the occurrence type and will have no way of validating that the occurrence type and its value make sense for the topic (specifying two Age occurrences with different values on a Person topic for example). An ontology-aware application could know that a Person topic is only allowed one Age occurrence, that the value for this occurrence must be a non-negative integer and that the value must be less than 130.
</li>
<li><strong>Ontology-Driven Queries</strong><br />
An ontology specifies both the types and the relationships between them. Therefore it is easy to see that it should be possible to create ontology-driven query interfaces that allow users to develop queries that traverse an topic map instance based on the types and relationships specified in the ontology and without the need for a lot of specialised knowledge about how that information is stored. ISO is working on a standardised query language for topic map queries known as TMCL, but even this is working from the principle of being ontology-unaware. An ontology-aware application will ensure that users only ever create "meaningful" queries (queries that could possibly return at least one result) and can avoid the need for users to know the underlying identifiers assigned to the types in the ontology. We have already implemented an initial version of this idea in the TMCore SharePoint Module where a simple web-form UI allows a user to construct a query as a series of "hops" through the topic map with optional filtering at each stage of the hop. The ontology-aware query editor form ensures that the user can only select an appropriate relationship type for the next hop based on the type(s) returned by the previous hop.
</li>
<li><strong>Ontology-based Code Generation</strong><br />
An initial version of our ideas on code generation was shown at the TMRA conference last year (and is written up in the book <a href="http://www.amazon.co.uk/Leveraging-Semantics-Topics-Maps-International/dp/354071944X/ref=sr_1_1/026-2065107-6402822?ie=UTF8&#038;s=books&#038;qid=1187087575&#038;sr=8-1">"Leveraging the Semantics of Topic Maps"</a>. Code generation holds many promises - not least of which is reducing the burden on the application developer by removing (or reducing) the need to write the classes that represent the key entities in the solution and allowing them instead to focus on the business logic. Combine this with the ability of a flexible schema language like NPCL to allow domain-specific constraints to be expressed in the schema itself and gradually it should be possible to move more and more of the commonly coded elements of solutions into simple configuration of properties in a schema.
</li>
</ul>
<h3>Ontology to UI</h3>
<p>I have already mentioned how an ontology-aware user interface can provide input validation, but the advantages of ontology-based application development do not stop there. As many of our applications tend to be web-based and/or forms-based, the ontology can be used as the intial specification of the layout of the various presentational forms. We will shortly be releasing an example of this for the TMCore SharePoint Module which uses the annotated ontology to generate SharePoint content types and fields which in turn automatically produces the forms representations for those items in the SharePoint interface.<br />
Future work in this area will also look at the possibility of auto-generating all kinds of page layouts and windows forms as well as web forms.</p>
<h2>Conclusion: The Future For Ontology-Driven Applications</h2>
<p>The release of the NPCL Schema Editor is the first step in enabling the vision of speeding up the development of complex information management solutions through the application of simple  topic map schemas. By building on a solid base of Topic Maps, TMCore, NPCL and now the visual editor tool we will be bringing our developer community more and better tooling to help in code generation, query generation, application and UI configuration. To keep apprised of what we are doing, be sure to subscribe to this blog!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/ontology-driven-application-design-with-the-npcl-schema-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Topic Map Objects Research Paper</title>
		<link>http://blogs.networkedplanet.com/theory-and-practice/topic-map-objects-research-paper/</link>
		<comments>http://blogs.networkedplanet.com/theory-and-practice/topic-map-objects-research-paper/#comments</comments>
		<pubDate>Wed, 18 Jul 2007 15:28:50 +0000</pubDate>
		<dc:creator>Graham Moore</dc:creator>
				<category><![CDATA[Theory and Practice]]></category>

		<guid isPermaLink="false">http://blogs.networkedplanet.com/?p=18</guid>
		<description><![CDATA[While this paper has been presented at TMRA and Extreme we thought it would be good to publish it here as well. This paper is important as it points at the next level of topic map based productivity tools and utilities. For the topic map market to grow the tool and product creators need to [...]]]></description>
			<content:encoded><![CDATA[<p>While this paper has been presented at TMRA and Extreme we thought it would be good to publish it here as well.<br />
This paper is important as it points at the next level of topic map based productivity tools and utilities. For the topic map market to grow the tool and product creators need to enable developers and information architects to more rapidly build and deploy Topic Maps based applications.<br />
This paper describes a C# framework for mapping TMDM data into domain specific classes. In somes ways it can be considered as a serialisation technology. However, TMObjects goes beyond that to provide update capabilites through the domain specific objects.<br />
We are currently looking into how to improve the performance of the tmobjects read capability and also how the C# binding classes can be generated from NPCL (Networked Planet Constraint Language) structures. All this will lead to development environments that have all the flexibility and power of topic maps but with the comfort and support found with Visual Studio and a domain object model.<br />
The full paper can be found here : <a href="http://www.networkedplanet.com/ontopic/tmo.pdf">Download file</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.networkedplanet.com/theory-and-practice/topic-map-objects-research-paper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

