<?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>webr3.org</title>
	<atom:link href="http://webr3.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://webr3.org/blog</link>
	<description>brain&#039;s on fire!</description>
	<lastBuildDate>Mon, 30 Aug 2010 00:11:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>adding some more sugar to rdf</title>
		<link>http://webr3.org/blog/semantic-web/adding-some-more-sugar-to-rdf/</link>
		<comments>http://webr3.org/blog/semantic-web/adding-some-more-sugar-to-rdf/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 00:11:38 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[semantic web]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=388</guid>
		<description><![CDATA[Just a quick post to log an idea that's been spinning round my head for a few days.
1. Create a vocab or profile syntax that lets you give short (non namespaced) names to ontology classes and properties.
name = foaf:name
label = rdfs:label
where = is like owl:equivalent*, don't care about the syntax of this file at all, [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick post to log an idea that's been spinning round my head for a few days.</p>
<p>1. Create a vocab or profile syntax that lets you give short (non namespaced) names to ontology classes and properties.<br />
<code>name = foaf:name<br />
label = rdfs:label</code><br />
where = is like owl:equivalent*, don't care about the syntax of this file at all, even RDF using owl:equivalent is just fine.</p>
<p>2. Create a way to reference this from an rdf file, something similar to profiles.</p>
<p><code>@proxy http://ex.org/my-proxy-ontology .<br />
@prefix : <http://webr3.org/nathan#> .</p>
<p>:me a Person; name "Nathan"; nick "webr3"; birthday "31-03" .</code></p>
<p>and just to detract from this, I'd actually really quite like this syntax:</p>
<p><code>@proxy http://ex.org/my-proxy-ontology .</p>
<p>:me a Person; name Nathan; nick webr3; birthday 31-03;<br />
  knows <http://sw-app.org/mic.xhtml#i> (name Michael Hausenblas), <http://foaf.me/melvincarvalho#me> (name Melvin Carvalho) .</code></p>
<p>literals shouldn't need enclosed in quotes unless they contain syntax grammer (although \ delimiting could cover this), it'd also be nice to be able to talk about the uri you just mentioned in context, and also to leave out obvious stuff like "a foaf:Person" on who you know, cos of course they are a person. Further, literal types could easily just be inferred by the predicate, and further still the ontology of the predicate should/could contain all the rules to validate the value using owl data type restrictions. (note, doesn't this cross over with xsd restrictions?).</p>
<p>just a random snippet of thoughts / brain dump!</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/semantic-web/adding-some-more-sugar-to-rdf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My Response to &#039;The Future of RDF Standards&#039;</title>
		<link>http://webr3.org/blog/semantic-web/my-response-to-the-future-of-rdf-standards/</link>
		<comments>http://webr3.org/blog/semantic-web/my-response-to-the-future-of-rdf-standards/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 23:20:17 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[semantic web]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Blank node]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Data management]]></category>
		<category><![CDATA[J Hendler's RDFS3]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jim Hendler]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[linked data]]></category>
		<category><![CDATA[RDF query language]]></category>
		<category><![CDATA[RDF Schema]]></category>
		<category><![CDATA[RDF Trust]]></category>
		<category><![CDATA[RDF/XML]]></category>
		<category><![CDATA[Reification]]></category>
		<category><![CDATA[Sandro Hawke]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Syndication Systems]]></category>
		<category><![CDATA[Turtle]]></category>
		<category><![CDATA[World Wide Web]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=386</guid>
		<description><![CDATA[Thought I may as well post my response to the future of rdf survey that's going on - all of this can be summed up in the comments at the bottom though, that's what I really think should happen.
What do you like about RDF?
The triple, (dereferencable) URIs as identifiers, use of ontologies/schemas, ^^typed literals, various [...]]]></description>
			<content:encoded><![CDATA[<p>Thought I may as well post my response to the future of rdf survey that's going on - all of this can be summed up in the comments at the bottom though, that's what I really think should happen.</p>
<p><strong>What do you like about RDF?</strong><br />
The triple, (dereferencable) URIs as identifiers, use of ontologies/schemas, ^^typed literals, various different serializations.</p>
<p><strong>What do you dislike about RDF?</strong><br />
documentation is pretty much serialization specific (RDF/XML) should be serialization independent<br />
reification, bags and sequences in the rdf/xml specification<br />
subject and object definitions do not match (lack of literal subjects, lack of collections in the subject position, lack of graph literals)</p>
<p><strong>Most Important Addition to RDF</strong><br />
subject and object both taking the same values (literal subjects), graph literals, collections in the subject position, and variables allowed even if not supported by specific or existing serializations.</p>
<p>Tidy up RDFS and add in much needed values which currently reside in owl and a few other ontologies - RDF should come with a base vocab that covers most rdf specific needs.</p>
<p><strong> Priorities</strong><br />
* Make RDF smaller/simpler: [ No opinion ]<br />
* Make RDF larger/more powerful: [ No opinion ]<br />
* Redesign some parts of the RDF/XML syntax : [ No opinion ]<br />
* <strong>Redesign some parts of the RDF model</strong>: [ 5 +++++ (highest) ]<br />
* Improve RDF's suitability for data/database work: [ 1 + (lowest) ]<br />
* Improve RDF's suitability for semantic/KR work: [ 1 + (lowest) ]<br />
* <strong>Provide better syntaxes for RDF</strong>: [ 5 +++++ (highest) ]<br />
* <strong>Provide better documentatio</strong>n: [ 5 +++++ (highest) ]<br />
* Explain the business case better: [ No opinion ]<br />
* Provide better communication, community support: [ No opinion ]<br />
* <strong>Help people find or develop RDF vocabularies</strong>: [ 4 ++++ ]<br />
* Develop more compelling applications: [ No opinion ]<br />
* <strong>Develop standard vocabularies</strong>: [ 5 +++++ (highest) ]<br />
* Work on RDF Security: [ No opinion ]<br />
* Work on RDF Trust &amp; Provenance: [ 3 +++ ]<br />
* Work on Synchronization, Distribution, and Versioning of RDF Data: [ 3+++ ]<br />
* Work on bridging between RDF and XML: [ 1 + (lowest) ]<br />
* <strong>Standardize RDF API in Javascript</strong>: [ 5 +++++ (highest) ]<br />
* Standardize RDF APIs in other languages: [ No opinion ]</p>
<p>re: Improve RDF's suitability for X, if you improve the model this should happen automatically.</p>
<p>re: Make RDF smaller/simpler/larger/more powerful, again this is conflating issues, RDF should be looser so that serializations can tighten up by supporting certain features.</p>
<p>re: trust, provenance, synchronisation, distribution, versioning - imho this is all out of scope, work could begin on this if the model was loosened up to be more n3-like (graph literals); get the model right and these headaches become much easier to handle.</p>
<p>re: backwards compatibility, this should be a non issue as any looser definition of RDF can be countered by defining existing serializations as including a subset of RDF's features - to limit the next decade based on the mistakes or lessons learned from the last decade is, imho, unethical.</p>
<p><strong>Add Core Support for Working With Multiple Graphs</strong><br />
graph literals, anything else is a work-around imho. if graph literals +5 in every respect, else, meh.</p>
<p><strong>Create a Standard JSON RDF Synta</strong>x<br />
critical imho, unsure if it should come under this working group though.. but if it's the only place and time then here it must be, as RDF/JSON is the most important serialization for the next decade of the web, easily.</p>
<p><strong>Make Turtle a W3C Standard</strong><br />
great yes, but only after getting the core model sorted out, tweaking turtle to handle the changes (should be v easy given n3 heritage) then standardize under separate cover if possible - else, if not possible under separate cover, then imho must happen - the "why not" train of thinking comes to mind. Turtle *should* already be a standard.</p>
<p><strong>Indicate Which RDF Features Are No Longer Best Practice</strong><br />
either deprecate them or leave them be, "weak deprecation" is nothing more than politics; keeping them for BC and allowing a new generation to use them a poor choice imho, deprecate them, mark them as deprecated, then if implementation want to be backwards compatible they still can (and probably are).</p>
<p><strong>Extend RDF/XML</strong><br />
would much rather see RDF defined without any changes to serializations, let serializations conform and revise under separate cover.</p>
<p><strong>Revise Semantics for Blank Nodes</strong><br />
this issue is imo nothing to do with RDF (indicates a problem in sparql).</p>
<p><strong>Create Standards for Deployment of Linked Data</strong><br />
great idea but nothing to do with RDF core imho and would add way to much scope. can't rate it as a +5 because I view it as orthogonal.</p>
<p><strong>Define Some Useful Similarity/Equivalence Properties</strong><br />
100% behind this one, as per J Hendler's RDFS3 proposal - nigh on critical to the wider community moving forwards.</p>
<p><strong>Define a Namespace Packaging Mechanism</strong><br />
personally view it as a bell and whistle proposal, v low priority imho - however loosening the rdf spec to all namespaces to be either included or pointed to in order to allow future work like this would be a good idea.</p>
<p><strong>Change RDF Semantics to Plain Data (SPARQL) Style</strong><br />
I'd just remove this from consideration if possible.</p>
<p><strong>Explain How to Determine What a URI Means</strong><br />
? give something a uri, describe it with RDF, consult that RDF to read it's description, meaning is different in every context and.. unsure why this is on the list tbh.</p>
<p><strong>Allow Literals as Subjects</strong><br />
+5, must happen imho.</p>
<p><strong>Improve Integration with Syndication Systems (Atom)</strong><br />
it should be easy enough, indeed it's already possible - but syndication should and could be done with RDF, lack of graph literals pretty much makes RDF a no-go area in the message space, which is sad..</p>
<p><strong>Other Comments?</strong><br />
IMHO, TimBL (<a href="http://www.w3.org/DesignIssues/RDF-Future.html">http://www.w3.org/DesignIssues/RDF-Future.html</a>) and Jim Hendler (<a href="http://www.w3.org/2009/12/rdf-ws/papers/ws31">http://www.w3.org/2009/12/rdf-ws/papers/ws31</a>) have everything covered in their proposals, I completely fail to understand why these two proposals aren't just done as they cover everything and are imho golden.</p>
<p>If I could click my fingers and decide what happened, I'd get everybody working on making the changes outlined by TimBL and Jim Hendler, then get a group on to doing RDF/JSON under supervision of Sandro Hawke, Manu Sporny and possibly Jeni T. Get Turtle aligned with the changes (should be an easy hit) then clean up RDF/XML and define it as supporting a subset of RDF. Quite sure this won't happen though and I'll be completely confused as to why not.</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/semantic-web/my-response-to-the-future-of-rdf-standards/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How javascript will bring on a paradigm shift and a period of unprecedented innovation</title>
		<link>http://webr3.org/blog/secrets/how-javascript-will-bring-on-a-paradigm-shift-and-a-period-of-unprecedented-innovation/</link>
		<comments>http://webr3.org/blog/secrets/how-javascript-will-bring-on-a-paradigm-shift-and-a-period-of-unprecedented-innovation/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 02:38:32 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[secrets]]></category>
		<category><![CDATA[AMF Pensionsforsakring AB]]></category>
		<category><![CDATA[authorization protocol]]></category>
		<category><![CDATA[Client]]></category>
		<category><![CDATA[client side technologies]]></category>
		<category><![CDATA[Client-side]]></category>
		<category><![CDATA[Clients]]></category>
		<category><![CDATA[Computer networking]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[ecommerce application]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Hypertext Transfer Protocol]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[p2p]]></category>
		<category><![CDATA[Server-side]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[System software]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[X Window System]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=380</guid>
		<description><![CDATA[I could burst in to a long post about the importance of universality, or even go in depth about the incredibly liberating experience of writing a library that works on both the client and the server, and indeed the many benefits of both of these combined - but I won't for now.
As we all know, [...]]]></description>
			<content:encoded><![CDATA[<p>I <em>could</em> burst in to a long post about the importance of universality, or even go in depth about the incredibly liberating experience of writing a library that works on both the client and the server, and indeed the many benefits of both of these combined - but I won't for now.</p>
<p>As we all know, one of the biggest hindrances to innovation in the various areas of computer science is the human brain, and specifically the tendency to think inside, rather than outside the box. There are things we never even consider or imagine because we just can't think outside of what we already know/presume - a small percentage of gifted individuals can, but on the whole, we as humans/geeks/programmers cannot.</p>
<p>To keep this short and simple, let's return to the aforementioned point, with javascript, any libraries you write can be used on both client and server. Great eh, write an AMF parser and it works on both client and server -wonderful.</p>
<p>Now, let's flip the example to a 'shopping basket', you see what we did there? now you've got an ecommerce application on the client side (think about that for a minute, you could put items from <strong>any</strong> 'website' in your basket, not one, any/all - oh and keep http stateless, and, and..) - here's another one, an authorization protocol like openid or webid - so a server could 'login' to a browser.. - how about an HTTP server in js, yes now it's on the client side and the server side - and when each side is both client and server isn't that just p2p?.</p>
<p>This universality breaks down the barriers of convention, it gets rid of that wall we have between server and client - can you imagine how many 'server side' technologies, libs, patterns and architectures nobody has ever even considered working with on the client side, can you imagine the implications and the period of innovation this will bring on? </p>
<p>Conversely, can you imagine how many client side technologies and libs nobody has thought about putting on a server? fancy using HTML as a data storage serialization and editing it via jquery on the server perhaps?</p>
<p>Maybe you can't imagine, maybe I can't - but fact is it will be possible, and people will start doing it, often just by lack of these assumptions and notions the current generation(s) of programmers have, they won't assume that something we've always used on the server side will be on the client, they'll just do it because it makes sense, and we, well we'll all be astounded.</p>
<p>Make sense?</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/secrets/how-javascript-will-bring-on-a-paradigm-shift-and-a-period-of-unprecedented-innovation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Recently..</title>
		<link>http://webr3.org/blog/general/recently/</link>
		<comments>http://webr3.org/blog/general/recently/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 14:43:58 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[AMF Pensionsforsakring AB]]></category>
		<category><![CDATA[Brazil]]></category>
		<category><![CDATA[Cloud standards]]></category>
		<category><![CDATA[Computer programming]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Digital Bazaar]]></category>
		<category><![CDATA[Edward VII]]></category>
		<category><![CDATA[Eiffel Tower]]></category>
		<category><![CDATA[Entertainment/Culture]]></category>
		<category><![CDATA[Ext]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Google Inc.]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Hans Rosling]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[Jacques Henri Lartigue]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript programming language]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Keyhole Markup Language]]></category>
		<category><![CDATA[kinda web db]]></category>
		<category><![CDATA[King]]></category>
		<category><![CDATA[Lego]]></category>
		<category><![CDATA[Markup languages]]></category>
		<category><![CDATA[peer-to-peer]]></category>
		<category><![CDATA[prediction services]]></category>
		<category><![CDATA[RESTful]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Swift River]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=375</guid>
		<description><![CDATA[On the client side of things, I've been enjoying using jQuery UI and Ext JS, have been really impressed by Protovis, a graphical toolkit (js) for visualization - a quick peruse of the examples like Burton's Antibiotics, Focus + Context or Map Projections and all will become clear, it's a bit like processing but for [...]]]></description>
			<content:encoded><![CDATA[<p>On the client side of things, I've been enjoying using <a href="http://jqueryui.com/home">jQuery UI</a> and <a href="http://www.sencha.com/deploy/dev/examples/">Ext JS</a>, have been <em>really</em> impressed by <a href="http://vis.stanford.edu/protovis/">Protovis</a>, a graphical toolkit (js) for visualization - a quick peruse of <a href="http://vis.stanford.edu/protovis/ex/">the examples</a> like <a href="http://vis.stanford.edu/protovis/ex/antibiotics-burtin.html">Burton's Antibiotics</a>, <a href="http://vis.stanford.edu/protovis/ex/zoom.html">Focus + Context</a> or <a href="http://vis.stanford.edu/protovis/ex/projection.html">Map Projections</a> and all will become clear, it's a bit like <a href="http://processing.org">processing</a> but <a href="http://processingjs.org">for javascript</a>, and a bit more refined / useful.</p>
<p>There have been some <a href="http://githubissues.heroku.com/#280north/cappuccino/10">nice</a> <a href="http://wargamez.mape.me/">examples</a> of combining client and server side js recently, and <a href="http://nodeknockout.com/">node knockout</a> is sure to provide many more real soon - if you don't know of <a href="http://nodejs.org">node.js</a> I'd recommend taking a look. Also worth noting the realtime client push service, <a href="http://pusherapp.com/">Pusher</a> (for <a href="http://dev.w3.org/html5/websockets/">HTML5 WebSockets</a>) - of course there are also node implementations, and here's <a href="http://zackhobson.com/2010/03/28/node-js-and-web-sockets.html">a nice article with some more details and examples</a>.</p>
<p>I've also been playing with some of google's projects (radar check, you know about the <a href="http://code.google.com/apis/ajax/playground/">ajax playground</a> ya?), namely <a href="http://tables.googlelabs.com/">Fusion Tables</a> (<a href="http://tables.googlelabs.com/DataSource?dsrcid=136705">here's one</a>) which has a full <a href="http://code.google.com/apis/fusiontables/docs/developers_guide.html">REST API</a>, infact that's what it is, a kinda web db merged with csv merged with RESTful goodness - <em>and</em> you can <a href="http://code.google.com/apis/maps/documentation/javascript/overlays.html#FusionTables">use them with V3 Maps</a> which gives some really sweet results - like this <a href="http://code.google.com/apis/maps/documentation/javascript/examples/layer-fusiontables-heatmap.html">heatmap of designated beaches on the coast of Brazil</a>. Convergence check, you noticed that <a href="http://vis.stanford.edu/protovis/ex/oakland.html">protovis can be used with google maps</a> ya?</p>
<p>If there's one app I wish google would opensource, it's <a href="http://www.google.com/moderator/">Google Moderator</a> for an example see <a href="http://www.google.com/moderator/#15/e=b6a&amp;t=b6a.4a&amp;f=b6a.8a98">the one for TipJar</a>. Btw, did you see <a href="http://www.youtube.com/watch?v=qRrX7Rb1PdA">3D Lego Star Wars running in Chrome with HTML5</a> (credit to <a href="http://unity3d.com/">Unity 3D</a> truth be told) - oh, and if you ever wondered how those 3D Lego videos we see on youtube all the time are made, you'll be looking for <a href="http://bricks3d.com/">this</a>.</p>
<p>Generally I'm really admiring <a href="http://ushahidi.com/">ushahidi</a> (projects on <a href="http://github.com/ushahidi/">github</a>), and especially <a href="http://swift.ushahidi.com/">Swift River</a> and <a href="http://github.com/ushahidi/SiLCC">SiLCC</a> - there was a good post on <a href="http://blog.ushahidi.com/index.php/2010/08/01/ten-ways-to-use-swiftriver/">10 ways to use Swift River</a> which is certainly worth a read. Related, but don't ask why, here's a good <a href="http://mark.reid.name/iem/prediction-services.html">post on prediction services</a> which has a few good links. Crossover check, remember earlier I mentioned Fusion Tables w/ Maps V3 and Protovis.</p>
<p>Digital Bazaar have been working on a <a href="http://blog.digitalbazaar.com/2010/07/20/javascript-tls-1/2/">Javascript implementation of TLS</a> (<a href="http://blog.digitalbazaar.com/2010/07/20/javascript-tls-2/2/">part2</a>) namely Forge - <a href="http://github.com/digitalbazaar/forge">code on github</a> -explaining why this is such a big deal is outside the scope of this post, but I'd encourage you to look at <a href="http://payswarm.com/">PaySwarm</a> and <a href="http://blog.digitalbazaar.com/">Digital Bazaar's fantastic blog</a> which'll give you a good overview of what they're up to. Related and similar, it's worth noting <a href="http://jssha.sourceforge.net/">jsSHA</a> - a JavaScript implementation of the entire family of SHA hashes, <a href="http://www.random.org/">random.org</a> for all the <em>true</em> random data you could need, <a href="http://www.bitcoin.org/">Bitcoin</a> a peer-to-peer network based digital currency and <a href="http://www.jamesward.com/2010/07/07/amf-js-a-pure-javascript-amf-implementation/">amf.js</a> a js implementation of AMF. Also there's the <a href="https://www.eff.org/https-everywhere">HTTPS Everywhere</a> extension for Firefox.</p>
<p>And in non technical land, I've really been enjoying <a href="http://www.howtobearetronaut.com/">How to be a Retronaut</a>, it features amazing media from the past, such as <a href="http://www.howtobearetronaut.com/2010/07/colours-of-the-rothschilds/">Colours of the Rothschilds…</a> which amongst other things has a colour photograph of King Edward VII, taken in 1909 - other recent favourites include <a href="http://www.howtobearetronaut.com/2010/07/watch-the-eiffel-tower-being-built/">the Eiffel Tower being built</a>, <a href="http://www.howtobearetronaut.com/2010/07/the-first-ever-music-video-1895/">the first ever music video (1895)</a> and <a href="http://www.howtobearetronaut.com/2010/06/the-instant-eye-of-jacques-henri-lartigue/">the instant eye of Jacques Henri Lartigue</a>.</p>
<p>If you haven't seen <a href="http://www.ted.com/talks/hans_rosling_on_global_population_growth.html">Hans Rosling's talk on global population growth</a> go watch it now, v recommended - and finally, <em>they</em> <a href="http://timesofindia.indiatimes.com/World/UK/Mystery-cracked-Chicken-came-first/articleshow/6169249.cms">figured out what came first, the chicken or the egg</a>..</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/general/recently/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Just what do you like?</title>
		<link>http://webr3.org/blog/gotcha/just-what-do-you-like/</link>
		<comments>http://webr3.org/blog/gotcha/just-what-do-you-like/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 22:53:59 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[gotcha]]></category>
		<category><![CDATA[5 Star]]></category>
		<category><![CDATA[Entertainment/Culture]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Facebook Like]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=371</guid>
		<description><![CDATA[My better half Rachel outlined a problem to me yesterday, which I hadn't noticed before and could be something of an interesting challenge; the case of the ambiguous 'like'.
Here's the setup, a blog post which is a review of a new music album, the post has the familiar facebook 'like' button on there.
Here's the problem, [...]]]></description>
			<content:encoded><![CDATA[<p>My better half Rachel outlined a problem to me yesterday, which I hadn't noticed before and could be something of an interesting challenge; the case of the ambiguous 'like'.</p>
<p>Here's the setup, a blog post which is a review of a new music album, the post has the familiar facebook 'like' button on there.</p>
<p>Here's the problem, my partner finds that people will only click the 'like' button if they 'like' the album, it's not about the post, the site, the quality of the writing in the review. All points to something wrong in the kudos chain.</p>
<p>It's not just like though, let's introduce a simple '5 Star' rating system on the posts, just what are the users rating, the post, or the album?</p>
<p>Now, let's change the example somewhat, scenario: a well write article about a horrific genocide - hundreds of people saying 'I Like this', as humans we can quickly infer (and somewhat hope) that people are saying they like the article, and not the genocide, but what about a machine.</p>
<p>For your consideration, each web page typically includes multiple distinct things, so we need a way to be able provide users with a way to do 'stuff' which each thing, I like this review, I like this author, this topic is worth noting, I like the primary topic, I've read this and so forth - any semantic web readers will quickly say "ahh problem solved! give everything a URI" (I hope) - but the problem isn't solved, it brings up (yet again) the issue that we need a whole new generation of UX/UI improvements, one 'like' button will not do, when you've got 10-100 things on a page, and different actions for each, this is something that's clearly going to have to be abstracted out from the page and handled in a different way - just how I don't know..</p>
<p>Will leave it there, you can see the challenge..</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/gotcha/just-what-do-you-like/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Design Issue Updates</title>
		<link>http://webr3.org/blog/linked-data/design-issue-updates/</link>
		<comments>http://webr3.org/blog/linked-data/design-issue-updates/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 15:58:44 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[linked data]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[social web]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[Tim Berners-Lee]]></category>
		<category><![CDATA[World Wide Web]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=369</guid>
		<description><![CDATA[Just a quick note to let you all know that some of the crucial design issues related to social web, cloud storage, linked data, read write web of data and related have been updated by Tim Berners-Lee.
The specific issues are:

Read-Write Linked Data
Socially Aware Cloud Storage
Levels of Abstraction: Net, Web, Graph

I'm yet to disseminate all that's [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note to let you all know that some of the crucial design issues related to social web, cloud storage, linked data, read write web of data and related have been updated by Tim Berners-Lee.</p>
<p>The specific issues are:</p>
<ul>
<li><a href="http://www.w3.org/DesignIssues/ReadWriteLinkedData.html">Read-Write Linked Data</a></li>
<li><a href="http://www.w3.org/DesignIssues/CloudStorage.html">Socially Aware Cloud Storage</a></li>
<li><a href="http://www.w3.org/DesignIssues/Abstractions.html">Levels of Abstraction: Net, Web, Graph</a></li>
</ul>
<p>I'm yet to disseminate all that's changed, but they certainly are filled out and refined, remember folks the devils in the details!</p>
<p>Quite sure that I'll follow up with a bunch of notes, as will a few others - but for now, there's the heads up that it's time to do a bit of reading.</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/linked-data/design-issue-updates/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>RDF support in node.js</title>
		<link>http://webr3.org/blog/uncategorized/rdf-support-in-node-js/</link>
		<comments>http://webr3.org/blog/uncategorized/rdf-support-in-node-js/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 16:28:42 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blank node]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Data management]]></category>
		<category><![CDATA[FOAF]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[RDFa]]></category>
		<category><![CDATA[RDFLib]]></category>
		<category><![CDATA[Sean B. Palmer]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Tabulator]]></category>
		<category><![CDATA[Value at risk]]></category>
		<category><![CDATA[World Wide Web]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=366</guid>
		<description><![CDATA[Just a short update, I've ported the latest rdflib from the refactor of tabulator over to node.js.
In other words, you can now use the fantastic tabulator code on the client side, and on the server side - the released code is just a quick port to allow you to get hacking, I'm not planning to [...]]]></description>
			<content:encoded><![CDATA[<p>Just a short update, I've ported the latest rdflib from the refactor of <a href="http://www.w3.org/2005/ajar/tab">tabulator</a> over to <a href="http://nodejs.org/">node.js</a>.</p>
<p>In other words, you can now use the fantastic tabulator code on the client side, and on the server side - the released code is just a quick port to allow you to get hacking, I'm not planning to maintain it, because I feel it would be far more beneficial to make the rdflib.js code work on both client and server from a <a href="http://dig.csail.mit.edu/hg/tabulator/">single library</a> rather than forking it and loosing the hard work of all involved.</p>
<p><a href="http://data.fm/rdflib.js">rdflib.js ported to node</a> (was incredibly easy, only had to change a few lines)</p>
<p>A quick example (parsing n3 foaf file and showing everybody with a foaf:name):<br />
<code><br />
var sys = require('sys'), rdf = require('rdflib');<br />
var rdfdata = ''; //some rdf in n3 here; probably a foaf file would be a good idea<br />
var kb = rdf.N3Parser( new rdf.IndexedFormula() , null , uri , uri ).loadBuf( rdfdata );<br />
var FOAF = rdf.Namespace('http://xmlns.com/foaf/0.1/');<br />
var results = kb.each( undefined, FOAF('name') );<br />
for (var i = 0; i < results.length; i++) {<br />
      sys.puts( results[i] + ' ' + kb.the( results[i] , FOAF('name') ) + '\n' );<br />
}<br />
</code></p>
<p>Related, I've also updated <a href="http://inamidst.com/sbp/">Sean B. Palmer</a>'s FOAF example to work on the <a href="http://data.fm/test/">clientside with RDF/XML</a> and <a href="http://data.fm/test/n3">with N3</a>.</p>
<p>Back to node.js stuff, I've also <a href="http://groups.google.com/group/nodejs/browse_thread/thread/1d42da4cb2e51536">released a patch which exposes all the details needed for FOAF+SSL in node to node_cryto.js</a> (hopefully it'll get added to the main git repo v soon) - next step is to get a JS FOAF+SSL library working, which shouldn't take too long.</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/uncategorized/rdf-support-in-node-js/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>server side js with v8</title>
		<link>http://webr3.org/blog/experiments/server-side-js-with-v8/</link>
		<comments>http://webr3.org/blog/experiments/server-side-js-with-v8/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 01:09:50 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[Apache HTTP Server]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Computer programming]]></category>
		<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Curly bracket programming languages]]></category>
		<category><![CDATA[Ecma International]]></category>
		<category><![CDATA[ECMAScript]]></category>
		<category><![CDATA[haXe]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript engine]]></category>
		<category><![CDATA[JavaScript programming language]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ryan Dahl]]></category>
		<category><![CDATA[Scripting languages]]></category>
		<category><![CDATA[Server-side JavaScript]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[V8]]></category>
		<category><![CDATA[Web Sockets]]></category>
		<category><![CDATA[Web Worker]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=363</guid>
		<description><![CDATA[Just logging some thoughts and scoping work..
v8 and server side ecma-262 (javascript) is a fantastic thought, and definitely the future imho (universal language).
To get going and start making server side js web applications there are two good approaches, v8cgi which aims more at letting you run js programs as a cgi app (like you do [...]]]></description>
			<content:encoded><![CDATA[<p>Just logging some thoughts and scoping work..</p>
<p><a href="http://code.google.com/p/v8/">v8</a> and server side <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ecma-262</a> (javascript) is a fantastic thought, and definitely the future imho (universal language).</p>
<p>To get going and start making server side js web applications there are two good approaches, <a href="http://code.google.com/p/v8cgi/">v8cgi</a> which aims more at letting you run js programs as a cgi app (like you do with php cgi) under apache and similar, seems to be picking up speed, nice approach (workable) - the other is <a href="http://nodejs.org/">node.js</a> which is off to a great start as a pure server side environment where 'HTTP is a first class protocol' which just proves what a good start <a href="http://twitter.com/ryah">Ryan Dahl</a> has made.</p>
<p>Briefly to touch on v8, it allows you expose C code to javascript, which is.. well perfect, would be good to see far more lib's exposed to js using tools like <a href="http://code.google.com/p/cproxyv8/">cproxyv8</a> and <a href="http://code.google.com/p/v8-juice/">v8-juice</a> - in particular I'm looking at you <a href="http://librdf.org/">librdf</a> (and an interesting sub-thought, apache and openssl).</p>
<p>Back to node.js, seems to be exciting already has a strong <a href="http://nodejs.org/api.html">API</a> to get some <a href="http://wiki.github.com/ry/node/">great demo's and projects</a> off the ground, and very well aligned with the W3C work (or maybe what-wg..), specifically on the <a href="http://www.whatwg.org/specs/web-workers/current-work/">Web Worker API</a> front; in fact there are already <a href="http://www.web2media.net/laktek/2010/05/04/implementing-web-socket-servers-with-node-js/">implementations of Web Sockets for node.js</a> (and <a href="http://github.com/LearnBoost/Socket.IO-node">socket.io</a>) - <a href="http://github.com/tav/nodelint.js">nodelint (jslint for node)</a> is a handy addition, whilst some projects seem to be <a href="http://www.persvr.org/">going all in, like Persevere</a>.</p>
<p>As for adapting current code to work on the server side, you'll want to be looking in to the <a href="http://wiki.github.com/ry/node/modules">modules</a> .. which.. well to be honest that's a new link I just found, and <a href="http://nodejs.org/api.html">not what I was thinking off</a>.. emm, I think that provides almost everything I need - might be about to jump back in with two feet!</p>
<p>The rest of this post was about to mention <a href="http://phpjs.org/">php.js</a>, <a href="http://www.harmony-framework.com/">harmony framework</a> (Converts PHP 5 code into Javascript), and then <a href="http://ecmascript4.com/">mascara</a> and of course <a href="http://haxe.org/">haxe</a> which compiles to js amongst many other targets.</p>
<p>Might have to come back to this post.. for anybody who follow what I do, thus far I'd figured out that node.js is http+tls friendly, you can get a clients certificate (for <a href="http://esw.w3.org/Foaf%2Bssl">foaf+ssl</a>) and you can send application webid+ssl certs too, although up till now I hadn't found a way to generate certificate (let alone using <a href="http://en.wikipedia.org/wiki/Spkac">spcak</a>) but that could be wrong..</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/experiments/server-side-js-with-v8/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Something&#039;s missing in the Web of Linked Data</title>
		<link>http://webr3.org/blog/linked-data/somethings-missing-in-the-web-of-linked-data/</link>
		<comments>http://webr3.org/blog/linked-data/somethings-missing-in-the-web-of-linked-data/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 15:34:59 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[linked data]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=360</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://webr3.org/blog/wp-content/uploads/2010/06/elephant.jpg"><img src="http://webr3.org/blog/wp-content/uploads/2010/06/elephant.jpg" alt="" title="elephant" width="738" height="2230" class="alignnone size-full wp-image-359" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/linked-data/somethings-missing-in-the-web-of-linked-data/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Maybe we don&#039;t need Named Graphs</title>
		<link>http://webr3.org/blog/semantic-web/maybe-we-dont-need-named-graphs/</link>
		<comments>http://webr3.org/blog/semantic-web/maybe-we-dont-need-named-graphs/#comments</comments>
		<pubDate>Sun, 16 May 2010 15:48:27 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[linked data]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[ACL]]></category>
		<category><![CDATA[ACL processor]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Graph]]></category>
		<category><![CDATA[Graph theory]]></category>
		<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[Online social networking]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[RDFLib]]></category>
		<category><![CDATA[Reference]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[Resource Description Framework]]></category>
		<category><![CDATA[Semantically-Interlinked Online Communities]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Tim Berners-Lee]]></category>
		<category><![CDATA[Uniform Resource Identifier]]></category>
		<category><![CDATA[web server]]></category>
		<category><![CDATA[web server administrators]]></category>
		<category><![CDATA[web servers]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[Web standards]]></category>
		<category><![CDATA[World Wide Web]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=332</guid>
		<description><![CDATA[In this post I'll put forward an argument that perhaps the "web of linked data", and thus RDF(2)/OWL(2), doesn't need any concept of Named Graphs.
This is quite a dry subject, and I could be wrong (in fact in some ways I want to be proved wrong, this is how we learn), but do read on [...]]]></description>
			<content:encoded><![CDATA[<p>In this post I'll put forward an argument that perhaps the "web of linked data", and thus RDF(2)/OWL(2), doesn't need any concept of Named Graphs.</p>
<p>This is quite a dry subject, and I could be wrong (in fact in some ways I want to be proved wrong, this is how we learn), but do read on if you're interested.</p>
<h3>Example</h3>
<p>Over the past few months I've hit on a number of occasions where I was convinced I needed Named Graphs in order to address the task at hand.</p>
<p>A notable example is the scenario where using WebAccessControl and the ACL ontology, a system would have to figure out just who should be given access to a resource, and who should be denied.</p>
<p>In this example I'll cover the notion of ACL for "groups" in a linked data world.</p>
<p>The task at hand is to allow access if:<br />
<code>the graph serialized within the document obtained by dereferencing the URI of the group states the &lt;webid#me> is a member.</code></p>
<p>Otherwise written as:<br />
<code>if we dereference &lt;groups#admin> does the graph returned include the following { &lt;groups#admin> sioc:has_member &lt;webid#me> }</code></p>
<p>Or in SPARQL:</p>
<pre>ASK
GRAPH &lt;groups> {
  &lt;groups#admin> sioc:has_member &lt;webid#me>
}</pre>
<p>In this example we *do not* want to dereference the users webid to see if the graph returned specifies that { &lt;webid#me> sioc:member_of &lt;groups#admin> } , or indeed consider the open world possibilities that another yet unknown graph could assert that the user is a member of our admin group, as that would breach security.</p>
<h4>The ACL</h4>
<p>To proceed with the example, consider the following ACL:</p>
<pre>[] a acl:Authorization ;
	acl:accessTo &lt;https://example.org/sensitive> ;
 	acl:agentClass :mygroup ;
 	acl:mode acl:Read .

:mygroup owl:equivalentClass [
 	a owl:Restriction ;
 	owl:hasValue &lt;groups#admin> ;
 	owl:onProperty [ owl:inverseOf sioc:has_member ];
 	] .
</pre>
<h4>The Problem</h4>
<p>The problem proposed by this ACL is that any of the following four sets of triples would infer that &lt;webid#me> would qualify as an instance of :mygroup (or a member of &lt;groups#admin> if you prefer).</p>
<ul>
<li>
<pre>&lt;webid#me> sioc:member_of &lt;groups#admin> .</pre>
<li>
<pre>&lt;webid#me> _:x &lt;groups#admin> .
_:x owl:inverseOf sioc:has_member .</pre>
</li>
<li>
<pre>&lt;groups#admin> sioc:has_member &lt;webid#me> .</pre>
</li>
<li>
<pre>&lt;groups#admin> _:y &lt;webid#me> .
_:y owl:inverseOf sioc:member_of .</pre>
</li>
</ul>
<p>In other words, the ACL does not specify a "Named Graph" to query, and at the moment, no way exists to specify with (OWL or RDF) which "Named Graph" to query / trust.</p>
<p>This, point in case, is one example where I saw the need for Named Graphs in RDF and OWL.</p>
<h4>Another way of looking at it</h4>
<p>You will have noticed the notion of "Named Graphs" creeping in above, seems like a logical thing to say, especially when you consider that to process this ACL and grant access you'd probably use SPARQL, and specify a Named Graph to query over. However, much of what follows arose because I'd decided not to use SPARQL, and rather to code an ACL processor in my preferred language.</p>
<p>If you consider the situation, the ACL processor which decides if access should be granted or not, must implicitly "trust" the document which contains the serialized ACL graph. That is to say, that it must by extension trust any resources pointed to by said ACL, and if it doesn't then the ACL isn't fit for the purpose.</p>
<p>It's also important to note that "trust" is context specific, in this case we trust the resources pointed to by the ACL for the purpose of WebAccessControl.</p>
<p>One could then pretty quickly conclude that in this scenario the ACL processor already know's how to process the ACL, it must only use resources it trusts, therefore it must only  allow access if <code>the graph serialized within the document obtained by dereferencing the URI of the group states the &lt;webid#me> is a member.</code> </p>
<p>(because &lt;groups#admin> is specified in the ACL, and thus by extension, trusted)</p>
<h4>Named Graphs in SPARQL</h4>
<p>The aforementioned logic would also apply if I was using SPARQL to process the ACL, it would equate to the ACL processor asking:</p>
<pre>ASK
GRAPH &lt;groups> {
  &lt;groups#admin> sioc:has_member &lt;webid#me>
}</pre>
<p>But again this is very context specific to the example, let's consider for a moment that the URI for the group could have been a non-fragment URI, &lt;groups/admin> for example.</p>
<p>This leads us to an important problem, when we dereference &lt;groups/admin> it would have to 303 See Other through to a different URI, let's say &lt;data/groups/admin> - which would then mean that the Named Graph to be used was &lt;data/groups/admin> - this URI, you may note, we do not know when we are writing our ACL; so if we ASKed the above SPARQL, the results would always come back negative, since their is no GRAPH &lt;groups>.</p>
<p>The URI of the Named Graph issue is compounded by modern web servers and publishing practises, because &lt;data/groups/admin> could easily be content negotiated (or rewritten), thus giving various final URI's of &lt;data/groups/admin> or &lt;data/groups/admin.rdf> or &lt;data/groups/admin.ttl> or &lt;data/groups/admin.n3> and so forth. One could quite easily (and often does) end up with the same Graph repeated multiple times within a quad store, all under "different" "Named Graphs".</p>
<p>I'll expand on a possible way of addressing this problem further on.</p>
<h4>Directionality</h4>
<p>Previously I mentioned that the ACL processor didn't have a problem with the above ACL, because it by nature trusted all resources which were mentioned in the ACL graph. However, again this is very context specific.</p>
<p>Let's consider for a moment an inverted ACL, where we want to allow access if:<br />
<code>the graph serialized within the document obtained by dereferencing the URI of the users <strong>webid</strong> states that &lt;webid#me> is a sioc:member_of &lt;groups#admin>.</code></p>
<p>We don't know the users webid ahead of time when we write the ACL, so again we have no way of writing how to trust a resource - it is critical to note that even if RDF(2) did support the concept of Named Graphs, it still wouldn't address the situation because we wouldn't know the Named Graph ahead of time, in order to trust it!</p>
<p>If we now consider the following ACL:</p>
<pre>[] a acl:Authorization ;
	acl:accessTo &lt;https://example.org/sensitive> ;
 	acl:agentClass :mygroup ;
 	acl:mode acl:Read .

:mygroup owl:equivalentClass [
 	a owl:Restriction ;
 	owl:hasValue &lt;groups#admin> ;
 	owl:onProperty sioc:member_of;
 	] .
</pre>
<p>The outcome of our previous logic concludes that again we should be querying the "trusted" resource &lt;groups#admin>, which gives us another problem, that's not the resource we want to be asking in this scenario.</p>
<p>The only thing that remains, and I'll later argue the only thing that ever matters in a web of linked data, is direction.</p>
<p>If we analyse the first ACL closer, we can see that we ultimately used the direction inferred by the presence of owl:inverseOf to place &lt;groups#admin> in the subject position, rather than the value/object position it could have been in, indicated by the presence of owl:hasValue. (bare with me).</p>
<p>In this example, we can use the strong semantics of owl:hasValue (and lack of owl:inverseOf) to place &lt;groups#admin> in the value/object position, and thus our ACL processor can come to the outcome we want, which is to look for the a triple with the meaning { &lt;webid#access> sioc:member_of &lt;groups#admin> }, and that means dereferencing the URI in the subject position, in other words asking the graph serialized in the document returned by GETting &lt;webid> if it contains such a triple.</p>
<p>I've applied some understanding to OWL that quite simply isn't there though, as I earlier stated both ACL examples could easily equate to looking for any one of those four sets of triples.</p>
<p>However, this is the point - machine understanding of data is in the domain of the machine, the application doing the processing. And "truth" or "trust" is entirely context specific.</p>
<p>I'm increasingly convinced that the combined context of the data in a graph and the context under which that graph is being queried, specifies or infers in which direction you want to be reading, and directionality can be determined with linked data by dereferencing whichever uri you place on the left / in the subject position.</p>
<p>I recently found that Tim Berners-Lee wrote about this in a blog post entitled <a href="http://dig.csail.mit.edu/breadcrumbs/node/72">Backward and Forward links in RDF just as important</a>:</p>
<blockquote><p>One meme of RDF ethos is that the direction one choses for a given property is arbitrary: it doesn't matter whether one defines "parent" or "child"; "employee" or "employer". This philosophy (from the Enquire design of 1980) is that one should not favor one way over another. One day, you may be interested in following the link one way, another day, or somene else, the other way.</p></blockquote>
<p>Key here is the sentence "One day, you may be interested in following the link one way, another day, or somene else, the other way.", and that is exactly what all these examples are doing, following a link one way, or the other way.</p>
<p>To conclude this part, in every scenario thus far where I've thought I needed Named Graphs, it turns out that I in-fact needed directionality - and because I'm dealing with Linked Data, whatever I place in the subject position defines the URI which I need to dereference, and ultimately the Graph(s) which are considered when resolving the answer to the question being ASKed.</p>
<p>I'd thus suggest that "Named Graphs", do not exist in a web of data, they are needed in N3 and when using rules, because all data is often in a single file, however that is not the case for Linked Data, where we dereference.</p>
<h3>Back to SPARQL and Named Graphs</h3>
<p>Previously I mentioned the complications with the way we currently use named graphs in SPARQL and in our quad stores, where the URI we end up using could literally be, anything; and often we get duplicate data under different graphs.</p>
<p>To address this, I'd suggest that what we should be storing as the graph ?g value, is not some made up "named graph" but rather: <code>the dereferenced URI which we initially requested</code>.</p>
<ul>
<li>in the case of &lt;group#admins> this would be &lt;group>.
<li>in the case of &lt;group/admins> this would be &lt;group/admins></li>
</ul>
<p>To clarify, *never* the URI that a GET request finally resolves to, and *always* the initial dereferenced URI we requested.</p>
<p>The above ensure that we'd never have duplicate data in our quad stores again, that SPARQL queries including a FROM clause always dereferenced, that publishers and web server administrators were free to relocate and restructure their data, and ultimately make for a much nicer, healthier web of data.</p>
<p>Cool URIs don't change, and they wouldn't, just because the final document serializing a graph may move to a different URI, doesn't mean the original URI has to change.</p>
<h3>Conclusion</h3>
<p>Apologies for the length of the post, but I figured everything needed covered, in context. Simply put we need to focus less on Named Graphs (which IMHO aren't needed) and focus more on directionality. Every problem I've encountered thus far is covered by what Tim said years ago: "One day, you may be interested in following the link one way, another day, or somene else, the other way."</p>
<p>Comments?</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/semantic-web/maybe-we-dont-need-named-graphs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Web of Data illustrated, meet Bob.</title>
		<link>http://webr3.org/blog/general/web-of-data-illustrated-meet-bob/</link>
		<comments>http://webr3.org/blog/general/web-of-data-illustrated-meet-bob/#comments</comments>
		<pubDate>Sat, 08 May 2010 14:43:22 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Cross-platform software]]></category>
		<category><![CDATA[Data management]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IBM software]]></category>
		<category><![CDATA[linked data]]></category>
		<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[Negation]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Subdomain]]></category>
		<category><![CDATA[Technology/Internet]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=325</guid>
		<description><![CDATA[
Something to try
Next time you start an application, why not create a subdomain for your data tier, create a script for each SQL query and call it via HTTP (honestly you won't notice a speed difference), similarly expose all static files your system uses on the same (or a different) sub domain. Here's the advantages:

You [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-328" title="bob" src="http://webr3.org/blog/wp-content/uploads/2010/05/bob1.jpg" alt="bob" width="738" height="2230" /></p>
<h2>Something to try</h2>
<p>Next time you start an application, why not create a subdomain for your data tier, create a script for each SQL query and call it via HTTP (honestly you won't notice a speed difference), similarly expose all static files your system uses on the same (or a different) sub domain. Here's the advantages:</p>
<ol>
<li>You can scale without changing your application</li>
<li>You can swap servers without changing your application</li>
<li>You can move data around your server and take advantage of all the HTTP servers features.</li>
<li>You can cache your resources and utilize HTTP caching.</li>
<li>You can distribute or relocation your application anywhere on the net without worrying about data.</li>
<li>You can migrate over to different data systems (swap database vendors etc) without changing your application.</li>
<li>You can call every resource on the web in the same manner, from APIs through to linked data and all in between.</li>
<li>You're critical SQL and data mapping code will be fully abstracted and in self contained files (ultra easy to edit, bug fix, maintain).</li>
<li>You can take advantage of HTTP logging, and HTTP status codes instead of custom exceptions.</li>
<li>You have a ready made RESTful API in to your data tier, so you can hook on other applications, or open it up to third parties, or the entire net.</li>
</ol>
<p>So much more, all by one simple step - and that's only the first half of the cartoon ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/general/web-of-data-illustrated-meet-bob/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
		<item>
		<title>Generations of the Web - an Overview.</title>
		<link>http://webr3.org/blog/general/generations-of-the-web-an-overview/</link>
		<comments>http://webr3.org/blog/general/generations-of-the-web-an-overview/#comments</comments>
		<pubDate>Fri, 07 May 2010 06:23:39 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Data management]]></category>
		<category><![CDATA[Entity-attribute-value model]]></category>
		<category><![CDATA[FOAF]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[legacy systems]]></category>
		<category><![CDATA[linked data]]></category>
		<category><![CDATA[proprietry systems]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[Resource Description Framework]]></category>
		<category><![CDATA[Roy T. Fielding]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[server side web applications]]></category>
		<category><![CDATA[server side web applications coul]]></category>
		<category><![CDATA[social services]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[Tim Berners-Lee]]></category>
		<category><![CDATA[Versa]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Access Control]]></category>
		<category><![CDATA[Web application]]></category>
		<category><![CDATA[World Wide Web]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=317</guid>
		<description><![CDATA[I feel it's very important to note where we are coming from, and where we are headed with regards the web.
Generations One and Two
Historically we have been through two generations of the web so far, not web 1 and web 2.0, but rather the first round of mounting the presentation tier on the web (static [...]]]></description>
			<content:encoded><![CDATA[<p>I feel it's very important to note where we are coming from, and where we are headed with regards the web.</p>
<h2>Generations One and Two</h2>
<p>Historically we have been through two generations of the web so far, not web 1 and web 2.0, but rather the first round of mounting the presentation tier on the web (static publishing documents and media), then the second round of mounting the application tier on the web (from forms through to the current api's we see everywhere).</p>
<p>The next round, and what many are currently hacking at, is mounting the data tier on the web, mainly via the "<a href="http://en.wikipedia.org/wiki/Linked_Data">Linked Data</a>" movement which you may have noted.</p>
<p>This third round is critical for two primary reasons:</p>
<ol>
<li>By mounting the data tier on the web, it allows us to remount the application tier again, but this time properly, where <a href="http://tools.ietf.org/wg/httpbis/">HTTP</a> is the API between the Application tier and the Data tier. (true <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm">REST</a>)</li>
<li> The "<a href="http://en.wikipedia.org/wiki/Internet_of_Things">Internet of Things</a>" is very much dependant on the "Things" speaking the same language and sharing a single <a href="http://en.wikipedia.org/wiki/Data_model">Data Model</a>, where the model remains the same but the vocabulary can change.</li>
</ol>
<h2>Generation Three</h2>
<p>"Linked Data" is in many ways the solution to the above, because it has a Universal Data Model (<a href="http://en.wikipedia.org/wiki/Entity-attribute-value_model">EAV</a>), a Universal API (HTTP), and Universal Addressing &amp; Identification (the <a href="http://en.wikipedia.org/wiki/Dereferenceable_Uniform_Resource_Identifier">duality</a> of http URIs) - more importantly though, "Linked Data" provides the means to mount and expose both <a href="http://en.wikipedia.org/wiki/Abox">ABox</a> and <a href="http://en.wikipedia.org/wiki/TBox">TBox</a> statements on the web - this is the key detail where <a href="http://en.wikipedia.org/wiki/Resource_Description_Framework">RDF</a> wins over other EAV based data models; the ability to store both the data and the vocabularies on the web, and both in the same manner.</p>
<p>Linked Data is currently tied (but not bound) to RDF. However, RDF still has very critical limitations, primarily it doesn't have any notion of Named Graphs or Quads. <a href="http://www2005.org/cdrom/docs/p613.pdf">Trust and provenance</a> are essential moving forwards (with quads you can <a href="http://www.semanticoverflow.com/questions/757/which-owl-reasoners-understand-named-graphs">select which data your application trusts</a>, and which it doesn't, based on the source, the Named Graph - without it you can't), as is the ability to transfer data from multiple sources at the same time (update streams, batch operations, merged data with provenance - again needing quads).</p>
<p>The above means we need an <a href="http://www.w3.org/2009/12/rdf-ws/">RDF2</a> (or standardisation &amp; adoption of <a href="http://www.w3.org/2000/10/swap/doc/cwm">N3+rules</a>), and moreover we need standardized non-xml serializations of said RDF(+2), the most important being <a href="http://n2.talis.com/wiki/RDF_JSON_Specification">rdf/json</a>.</p>
<p>This brings me to <a href="http://www.w3.org/TR/html5/">HTML5</a>, the key here isn't the new HTML5 document format, the semantics, the ability to embed microdata or anything like that - it's the introduced (or implied) dependency on JS /ECMAScript via the <a href="http://apirocks.com/html5/html5.html">JS APIs</a>. This leads to JS being rolled out on to the majority of devices - it's also important to note the server side JS movement in this too.</p>
<h2>Generation Four</h2>
<p>We've had a "Web of Documents", we're building a "Web of Data", the next logical step is to have a "Web of Applications", for this we need two things: a Universal Programming Language (JS...) and an "Internet of Things" which support the universal data model and the universal programming language.</p>
<p>As far as I'm concerned HTML5 plays a critical part in the big picture:</p>
<p>- Short term, it at least unites the browser vendors to better support the techs which developers use.<br />
- Presently (and from here on) it allows us to start hacking at the web of applications.<br />
- In the future it's legacy will be it's introduction of JS as a Universal Programming Language.</p>
<p><strong>Sides:</strong><br />
It stands to reasons that RDF/JSON (or whatever supersedes RDF serialized in JSON) will also play a major part in this round.</p>
<p>We may well see a shift from client-server, server-server to application-application; where each machine on both sides comprises of HTTP Client, Server and Cache.</p>
<h2>Generation Five</h2>
<p>Leading on from here we get to the fifth round of the web, remounting the Presentation Tier, but this time where the presentation tier speaks to the application tier through HTTP, the Universal Interface.</p>
<p>HTML (together with JS and CSS) again plays a critical role in round five, because up until this point it remains the only way for the hackers to create this fifth generation, notably it will be a lot more than we are have now, after years of maturity, hacking and support universally. Naturally then we can assert that HTML will remain the core of the Web's presentation tier so long as the Web exists.</p>
<h2>Additional Shifts</h2>
<p>Widespread adoption and understanding of REST, truly without this we'll never get past generation three.</p>
<p>Data transformation, for a very long time <a href="http://virtuoso.openlinksw.com/">data transformation</a> will be an everyday service we all require, for legacy systems, legacy data, proprietry systems, data model conversion and so on - the key isn't to be able to understand all kinds of data / serializations / models, but to transform it in to what you do understand, easily.</p>
<p>The enabling of the <a href="http://en.wikipedia.org/wiki/Semantic_Web">Semantic Web</a>, Linked Data provides the means to do this, it is the enabler - each EAV triple we put out is also a triple that can be reasoned over, full machine understanding of all our data is an ultimate goal that will take many years. Generation three very much pushes the semantic web in to the realms of the real world, no longer for the strictly academic.</p>
<p>The great cleanse, all the data from generations one through three (and possibly beyond) will need cleansed - as primary universal vocabularies emerge the task will be to clean what's on the web and migrate it in to the new models, reasoning and cleaning it as we go.</p>
<p>Cross compilation and seperation of syntax from machine code - another movement that is gaining momentum, no longer are we tied to a specific syntax for a specific JVM - not far off is the day where we can program in our preffered language, and compile it to whatever target we need. This is all ready happening in many quarters (like <a href="http://haxe.org/">haxe</a>) and soon will be the norm.</p>
<p>Seperation of human readable data syntax and data storage/transfer serialization. This has long been understood, however with <a href="http://www.w3.org/XML/EXI/">EXI</a> comes a light serialization of XML for the machine &amp; transfer; logically from there we can expect the same in the future for RDF(2) and most data moving forwards.</p>
<p>Much of the code needed for the Application Tier will disappear over time, typically most application code involves taking some data and turning it in to some new data, processing it - when you can do this on the fly via data transformations, rules, reasoning, inference, querying and similar, you remove the need for most f the code in between. It is entirely possible that most server side web applications could disappear.</p>
<h2>End</h2>
<p>It is testament to the strength and design of the web that it can support every incarnation of the web thus far and in the future all at the same time - All credit to Tim Berners-Lee, Roy T Fielding and the many, many others who contributed, evolved and continue to forge this thing we call the web.</p>
<p><strong>Disclaimer</strong><br />
Obviously, this is all just my humble opinion, none of it is fact - but from stepping back a bit this is what I conclude, for now.</p>
<p>I've skipped loads of things, most of the techs I work on and think about daily, FOAF+SSL, web access control, read write web of structured linked data, loads more - the above is just a summary of where I think we're headed, primarily for my own reference :)</p>
<p>Universal doesn't necessarily mean universal - but it's a good enough word to convey what I'm thinking. Any other use of terminology you don't quite agree with, likewise, terminology is not the point of the post ;)</p>
<p>Best &amp; happy to hear your thoughts and additions,</p>
<p>Nathan</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/general/generations-of-the-web-an-overview/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>linked data extractor prototype details</title>
		<link>http://webr3.org/blog/experiments/linked-data-extractor-prototype-details/</link>
		<comments>http://webr3.org/blog/experiments/linked-data-extractor-prototype-details/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 18:53:43 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[linked data]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[virtuoso]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[DBpedia]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[extractor]]></category>
		<category><![CDATA[Open access]]></category>
		<category><![CDATA[World Wide Web]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=308</guid>
		<description><![CDATA[I recently released a prototype linked data semantic extraction demo which combines OpenCalais, Zemanta and Openlink Virtuoso to effectively categorize and work out what a given peice of text / document is about.
OpenCalais and Zemanta usage details and service comparison.
The demo leverages OpenCalais in order to pick up references to things, which are returned in [...]]]></description>
			<content:encoded><![CDATA[<p>I recently released a <a href="http://extractor.data.fm/?test">prototype linked data semantic extraction</a> demo which combines <a href="http://www.opencalais.com/">OpenCalais</a>, <a href="http://developer.zemanta.com/">Zemanta</a> and <a href="http://virtuoso.openlinksw.com/">Openlink Virtuoso</a> to effectively categorize and work out what a given peice of text / document is about.</p>
<h3>OpenCalais and Zemanta usage details and service comparison.</h3>
<p>The demo leverages OpenCalais in order to pick up references to things, which are returned in most cases as string literals; OpenCalais can also be configured to return back socialtags which give a broad stroke idea of what the document is about, again with string literal "tags". With regards the references (semantic metadata, Entities, Facts, Events etc.) which OpenCalais returns, whilst it is generally string literals, it also returns back vital Type and Relevance information, so in the case of "London" it will also assert that London is a City. Even in the case where it doesn't previously know what a thing is, it can work out that say "Frank Neverbeenheardofbefore" is a Person.</p>
<p>Zemanta is also leveraged, the primary difference between Zemanta and OpenCalais (and thus the need for both services) is that Zemanta focuses more on accurate tagging of text. Primarily though, Zemanta tags (again string literals) are meaningful tags which are commonly known and are referenced to either existing Linked Data identifiers such as http://dbpedia.org/resource/London and further information about the tag (or thing), in the case of the aforementioned London, then it will often also provide links to the wikipedia page for London, the official homepage to the city of London and a link to show the position of London on google maps.</p>
<p>I should point out that ever increasingly OpenCalais also returns back Linked Data too, for instance in the case of London they have given it an HTTP URI which can be dereferenced to retrieve more information about London. At a very crude estimation I would suggest that (depending on the subject matter) OpenCalais returns Linked Data URIs for about 15% of all references it finds to well known "things".</p>
<p>Weighing up the two services I couldn't say that one is better than the other, both have advantages and disadvantages, the only way to get a decent overall picture is to use both. for the benefits of feedback to both of these great services though, here is a general comparison:</p>
<p>note: none of these figures are from exact tests, they are from extensive developer usage of both services as I've used them both since they were made public.</p>
<p>Zemanta is generally 2x as fast for average texts (the size of this post for instance) and as much as 5x as fast for longer texts. Average for Zemanta being 0.7 to 2 seconds. Average for OpenCalais being 1.5 to 10 seconds. It may also be worth noting that the availability of Zemanta is somewhat higher than that of OpenCalais, perhaps 1 in 250 calls to OpenCalais will fail.</p>
<p>OpenCalais does a lot more heavy work than Zemanta though, and *really* semantically analyzes the text to figure out a wealth of information. In this respect the tables are completely turned and Zemanta consitently deals with providing a few high quality known tags; where as OpenCalais often provides at least 10x as much information about a given text, including relevance and type as mentioned before. OpenCalais also extracts Facts / Events, and further it can figure out that "Jim" is also "Jim Bob", and that Jim said X about Y on date D.</p>
<p>Generally you can trust the data from Zemanta 99% as it deals with "known" things, however due to this in some cases very new topics (such as IPad for the first few days after its announcement) remain unknown. Due to the nature of OpenCalais and it's dealing with the unknown you need to take more time to verify what it has returned, however when OpenCalais assigns a LinkedData identifier to something or provides more information you can 99.99% trust that it is entirely accurate.</p>
<p>It's worth noting that both of these services do different things though, and both do it extremely well, Zemanta "tags" and OpenCalais "semantically extracts information", in some respects I was hesitant about comparing the two, as in the context of what I'm doing both are needed and both are equal, however in different contexts both do different jobs and there is a need for people to select one over the other.</p>
<p>Out of all the competition though, I would highly recommend both Zemanta and OpenCalais over their respective competitors, and do hope that neither of these great services ever decide to target each others markets. (e.g. they compliment each other well and both do so well because they stick to what they are good at).</p>
<h3>extractor.data.fm details</h3>
<p>This demo deals primarily with figuring out what a document is about; in that it aims to provide back a list of:</p>
<ul>
<li><strong>Categories</strong><br />A list of 1-5 dbpedia (and therefore wikipedia) categories which the provided document would be categorized under if it were a wikipedia article and had been categorized by a huma who was knowledgeable in the subject domain(s) of the text.</li>
<li><strong>General Topics</strong><br />A short list of the general and broad-strokes Subjects covered by the document, these can are distinct from the primary specific subjects covered and the categories, and in many ways can be seen as the most common intersections between the primary specific subjects discussed.</li>
<li><strong>Primary Subjects</strong><br />These are the specific subjects covered in the document, not just the things mentioned, but the things actively discussed within the document, the primary subject matter as it were.</li>
<li><strong>Related or Mentioned Subjects</strong><br />Whilst I've termed them "related" as in dcterms:related, these are simply things which have been detected in the document or text and which are not primary subjects; in many ways "mentions" may be a more appropriate term.</li>
</ul>
<p>Out of the above list, the two services do the heavy lifting to give the demo it's Primary Subjects and Related Subjects; in short OpenCalais' SocialTags and Zemanta's Tags give us back our Primary Subjects. Whilst OpenCalais by way of the semantic extraction provide us with the Related Subjects, namely all those extracted semantics which have the Type of a real thing (not an IndustryTerm or Event) and which are not all ready a Primary Subject; additionally those extracted semantics which are not tags but have a relevance higher than a certain score are boosted up to be Primary Subjects too.</p>
<p>A primary and initial function of the demo is to associate the tags returned by both services together, and figure out when each is talking about the same thing; this is covered first by dealing with the linked data they return; where both services are talking about the same thing you simply know this unambiguously due to the nature of http URIs and them both being the "sameAs" each other. After this two chunks of unhandled data remain, Zemanta tags which have not determined to be the sameas OpenCalais ones; and OpenCalais semantics which we have a string literal name for and a type.</p>
<p>In step <a href="http://virtuoso.openlinksw.com/">Openlink Virtuoso</a> 6.1 (<a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VOSIndex">open source edition</a>!) with most of dbpedia 3.4 loaded in to do the heavy lifting from here on; Virtuoso is a really powerful bit of kit and has replaced  mysql/sql server/postgres, rdf store and web dav server in my typical server stack. The public lod and dbpedia endpoints really do no justice as to just how powerful and fast Virtuoso is, queries which take a few seconds on the public endpoint return in hundredths of a second on my local (low spec) server, and the comparative performance to the aforementioned RDBMS solutions is not to be sniffed at.</p>
<p>To handle the typed string literals from OpenCalais, I built a custom dbpedia lookup service (using sparql over the aforementioned Virtuoso + dbpedia setup) which tries to unambiguously determine the identifier for a string literal, if it is known; the results are pretty good and I'd safely say that it gets it right in 98% of cases. This essentially turns the remaining unknown string literals in to known Linked Data URIs, and as a side benefit gives the correct full Name for the thing identified along with the correct casing and obviously much more linked data.</p>
<p>Remaining now the demo has a few OpenCalais semantics which are still unknown, but we know the Type and have a name for the thing; and as URIs are given to things that can be Named, I simply mint my own uri's for these and specify the OpenCalais identifier as a "seeAlso" (to be future compatible with a time where they do associate there own hash uris through to linked data).</p>
<p>At this point the demo has all of the Primary Subjects and Related Subjects determined and where possible linked through to additional LinkedData and human readable web documents about the subjects.</p>
<h4>Categorization</h4>
<p>This is where the script comes in to it's own and really leverages virtuoso, up till this point it's all been about cleaning, validating, looking up, associating and suchlike.</p>
<p>Given that we now have linked data HTTP URIs for all the subjects we are dealing with, and in all Primary Subject cases we also have dbpedia.org URIs the demo can start to use some of Virtuoso's more powerful features. First point of call is to get the Category intersection of all primary subjects (including the inferred categories!) via a slightly complex transitive sparql query over the dbpedia dataset. From here the demo calculates a set of primary categories which the text is related to, then it finds the general category intersection (again including inferred categories) between the primary categories, and the primary subjects. with the results returned is a wealth of numerical information which the demo dually considers and can then infer which are the General Subjects and the Categories for the text.</p>
<p>At some point I'll cover this part of the script in more details and give some virtuoso specific transitive SPARQL queries for you to use in your own such creations, but for now the above will have to do.</p>
<h3>Conclusion</h3>
<p>This extractor demo is something I've been working on and trying to achieve for about 5 years, and whilst it is still early days it's the first time the technologies have been available to both make it possible, and to utilize the results correctly to achieve what I'm aiming for overall.</p>
<p>The overall goal is to create a system which allows users to simply drop in content, and the system "files" it in the correct categories, lists it under the correct subjects and interlinks it with other resource via typed links such as "related resources" and looser resource lists of "also mentioned here", further benefits of such a system are that you can accurately figure out what readers are interested in and promote new content to them, you can give users the option of content streams where they can watch specific subjects or combination of subjects to be notified of their "ideal" reading. On the flip side you can also identify users and contributers interests and expertise, and correlate these together (with geo-location) to suggest others users who they may wish to collaborate with, other organisations doing the same work in the same fields and many such uses. In reality I have much of this implemented in a site I've been working on for the last year, which is just being rolled out again, and the system works extremely well with huge benefits to all involved, the site you see deals with climate adaptation and both provides a service to the general adaptation community where they can share and find knowledge, and more importantly serves organisations working on critical issues by letting them see which people / organisations / projects are doing what, where and allows them to both co-ordinate efforts and perhaps more importantly not duplicate efforts and waste resources where it counts most. This has a positive impact on the worlds poorest nations and those suffering people who these organisations are trying to work with and help.</p>
<p>Back to the demo, and with the context described, the extractor.data.fm demo is a quick UI around an API which is in many ways the backbone of the aforementioned system. The API is used in a semi-automated way, where the data returned by it is verified in a UI by the content author / admins who remove any unambiguous data and then hit save, from there everything is automated again and the system functions as above.</p>
<p>I'm unsure whether this kind of system will ever be able to be fully automated (or whether its wise to allow this) as certain scenarios just can't be covered yet, a real life example of this is an initiative called "TEA", ambiguity at this level, and with entities which are unknown to systems or even the web of data, will always be an issue at some point, as things progress it may be they are only ambiguous once, on their first discovery, but that is still once; hence why this may always have to be a semi-automated process.</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/experiments/linked-data-extractor-prototype-details/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A lighter way to configure Apache for FOAF+SSL</title>
		<link>http://webr3.org/blog/optimization/a-lighter-way-to-configure-apache-for-foafssl/</link>
		<comments>http://webr3.org/blog/optimization/a-lighter-way-to-configure-apache-for-foafssl/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 17:31:00 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[linked data]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[Apache Corporation]]></category>
		<category><![CDATA[Computer networking]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Cryptographic protocols]]></category>
		<category><![CDATA[Electronic commerce]]></category>
		<category><![CDATA[FOAF]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Internet protocols]]></category>
		<category><![CDATA[Secure communication]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[Transport Layer Security]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=303</guid>
		<description><![CDATA[Just a snippet post to say that I've found a lighter (and imho preferable) way to configure Apache to accept client side SSL certificates (with regards to FOAF+SSL).
The Standard Way
This way essentially exports all SSL data, certs, client and server side if you read the notes has performance penalty.

   SSLVerifyClient optional_no_ca
   [...]]]></description>
			<content:encoded><![CDATA[<p>Just a snippet post to say that I've found a lighter (and imho preferable) way to configure Apache to accept client side SSL certificates (with regards to FOAF+SSL).</p>
<p><strong>The Standard Way</strong><br />
This way essentially exports all SSL data, certs, client and server side if you read the notes has performance penalty.<br />
<code><br />
   SSLVerifyClient optional_no_ca<br />
   SSLVerifyDepth 1<br />
   SSLOptions +StdEnvVars<br />
   SSLOptions +ExportCertData<br />
</code></p>
<p><strong>The Lighter Way</strong><br />
This way simply passes in the SSL_CLIENT_CERT in to the env REMOTE_USER and skips the rest which you don't use (for FOAF+SSL).<br />
<code><br />
   SSLVerifyClient optional_no_ca<br />
   SSLVerifyDepth 1<br />
   SSLUserName SSL_CLIENT_CERT<br />
</code></p>
<p>Tested and works very nicely (again, imho).</p>
<p>note: Enabling SSLOptions +FakeBasicAuth will overwrite this with the Subject from the client side certificate.</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/optimization/a-lighter-way-to-configure-apache-for-foafssl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Released some RDF Graph update related things..</title>
		<link>http://webr3.org/blog/general/released-some-rdf-graph-update-related-things/</link>
		<comments>http://webr3.org/blog/general/released-some-rdf-graph-update-related-things/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 03:19:58 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Diff]]></category>
		<category><![CDATA[GUO]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Knowledge representation]]></category>
		<category><![CDATA[Metadata]]></category>
		<category><![CDATA[Patch]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[Resource Description Framework]]></category>
		<category><![CDATA[semantic web]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=298</guid>
		<description><![CDATA[This is a short post to say I've managed to get 2 of 3 parts of RDF graph update / synchronisation done and live on the net; still need to do the PATCH but for now:
GUO Graph Diff is a prototype script for performing "diffs" on RDF Graphs - not text based, rather it's graph [...]]]></description>
			<content:encoded><![CDATA[<p>This is a short post to say I've managed to get 2 of 3 parts of RDF graph update / synchronisation done and live on the net; still need to do the PATCH but for now:</p>
<p><a href="http://bit.ly/9APYnQ">GUO Graph Diff</a> is a prototype script for performing "diffs" on RDF Graphs - not text based, rather it's graph / trple based as discussed in the <a href="http://www.w3.org/DesignIssues/Diff">DesignIssue</a>. An implementation of patch/diff for RDF.</p>
<p><a href="http://webr3.org/specs/guo/">GUO - Graph Update Ontology</a> pretty self explanatory, an intentionally skinny ontology aimed at enabling lightweight RDF graph updates and graph synchronisation on a per triple level.</p>
<p>Next up is GUO Patch in the very near future; and hopefully a full demo / implementation using HTTP Patch and such like.</p>
<p>More soon, all info available on the respective pages above. Any feedback or comments most welcome!</p>
<p>Regards,</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/general/released-some-rdf-graph-update-related-things/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
