<?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 &#187; Web services</title>
	<atom:link href="http://webr3.org/blog/tag/web-services/feed/" rel="self" type="application/rss+xml" />
	<link>http://webr3.org/blog</link>
	<description>brain&#039;s on fire!</description>
	<lastBuildDate>Tue, 19 Jul 2011 15:38:29 +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>Uniform Data</title>
		<link>http://webr3.org/blog/semantic-web/uniform-data/</link>
		<comments>http://webr3.org/blog/semantic-web/uniform-data/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 17:49:16 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[semantic web]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Data management]]></category>
		<category><![CDATA[deployable technologies]]></category>
		<category><![CDATA[deployed technology]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[FOAF]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[linked data]]></category>
		<category><![CDATA[mobile devices]]></category>
		<category><![CDATA[Ontology]]></category>
		<category><![CDATA[RDBMS]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[RDF Schema]]></category>
		<category><![CDATA[RDFLib]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[Resource Description Framework]]></category>
		<category><![CDATA[semantic web adoption]]></category>
		<category><![CDATA[semantic web compatible]]></category>
		<category><![CDATA[sensor networks]]></category>
		<category><![CDATA[social web]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[Versa]]></category>
		<category><![CDATA[web applications]]></category>
		<category><![CDATA[Web Developers]]></category>
		<category><![CDATA[Web Ontology Language]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[World Wide Web]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XML schema]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=488</guid>
		<description><![CDATA[Why a need for uniform data?
a) The web is currently converging around web applications and mobile devices, a lot of focus is being placed on sensor networks, internet of things, and augmented reality to display information. Simply, how can these applications make use of published data readily from multiple sources if that data is not [...]]]></description>
			<content:encoded><![CDATA[<h3>Why a need for uniform data?</h3>
<p>a) The web is currently converging around web applications and mobile devices, a lot of focus is being placed on sensor networks, internet of things, and augmented reality to display information. Simply, how can these applications make use of published data readily from multiple sources if that data is not in a uniform standard?</p>
<p>b) The core web which people use on a daily basis is ever more silo focussed, and the size of those silo's is ever increasing - the social sector is a great example of this, and whilst there are core movements to create a more federated and distributed social web, a key blockage in the way is a lack of uniform data, often new formats are being developed, or poorly modelled application (rather than domain) specific models are making it out on to the web, and interoperability is several times harder than it could be, given the presence of uniform data. This has significant social and economic repercussions.</p>
<p>c) Time, a significant amount of time is invested daily by thousands (if not millions) in to re-solving the same old problems, creating a schema for this, a model for that, learning the same lessons countless people have learned before them, often the learning curve spans several years. A standard way to publish and share reusable model specific schemas (/not/ format specific like XML schema and JSON schema) would save vast amounts of developer time per annum. In addition to having significant economic impacts this would also lend to far more innovation (since more time free to innovate!) within an already important and innovative sector.</p>
<h3>Why not "plain" RDF?</h3>
<p>RDF has failed to be understood, adopted or loved by the general masses of the web, even many who use RDF often do not fully understand it and have many issues. Adoption has been... let's just say not good.</p>
<p>There are 3196 APIs on ProgrammableWeb, out of those:</p>
<ul>
<li>2152 produce XML</li>
<li>1255 produce JSON</li>
<li>36 produce RDF</li>
</ul>
<p>Perhaps more indicative though, is that those 36 are spread over 6 years, with only 1 updated so far this year, meanwhile there have been 58 new JSON based APIs in the last month alone.</p>
<p>Over on stack overflow, there have been 1,569,512 questions asked, 273 that's 0.017% of them, are RDF related.</p>
<p>The numbers are pretty clear, for all RDF's merits, and the countless benefits of the uniformity of RDF, it's just not being adopted.</p>
<p>To use RDF correctly requires RDF tooling, and not just tooling to parse the data (like JSON, and common usage of XML), but to use the data, to handle triples and graphs and queries, all of which requires significant investment in skills, time, and deployable technologies.</p>
<p>Further more, RDF data published using multiple different ontologies is difficult for people to use, the infrastructure and tooling simply doesn't exist to follow ones nose around the web and make practical use of several thousand different ontologies, that level of understanding is  a good generation away, and for now all it does is serve as a blockage to adoption, and primarily as a blockage to people actually using or presenting the data. Time and time again we have seen a rallying around core ontologies, with successful mixing and matching happening more at the ontology level, than the data level. For now applications will be looking for mentions of Classes and Properties they "understand" (have a hard coded usage for).</p>
<p>Additionally, these difficulties in usage have lead to a second layer of centralization on the web, one which was borne from RDF, and rather ironically many of the architectural benefits of uniformity and universality are being lost. That is SPARQL, we are seeing a huge increase in SPARQL enabled datastores on the web, each of which holds a specific set of data, and each of which has key resource limitations. Practically this means that:<br />
 - clients are tightly coupled to servers<br />
 - all processing and storage weight is being handled by the servers<br />
 - data on the wire is non uniform<br />
 - clients are not using the web of data, rather they are using a datasource on the web, a datasilo.<br />
This is a pattern which is not optimized for anybody, servers, clients, developers, data, the web, the network.</p>
<p>The core benefits of a web of linked data have not realized, RDF has failed to deliver them, primarily due to complexity and tooling requirements. SPARQL (positioned on the server/silo) is only compounding matters. That's not to say it cannot deliver them, or that these technologies are bad, only that they have not delivered the core benefits, yet.</p>
<p>Perhaps another way to put it, is that if you break things like RDBMS and Classes and Objects down you can get to triples of some sort (EAV, RDF, or to atomic relations / predicate based logic), and RDF did just this, however it was done in such a way that the data format (RDF) required a full new stack of technologies to /use/ the data, rather than being a uniform data format acting as a bridge between say classes and objects and RDBMS, a webized data model; that is to say, you can't really use "it" (RDF, the model people don't really speak of) with 95% of the deployed technology out there, you can provide an RDF view of the data from that technology, map it to RDF, but you cannot easily pull it back in and use it, and unusable data, isn't much use. There are many shades of grey between, but it's certainly more at the unusable end of the spectrum.</p>
<h3>What can we do?</h3>
<p>If we look at what people already do, a large proportion of web developers (most) continue to publish data via web services as XML and JSON, the common process is simple, create a schema, document it somewhere out of band (perhaps call it API documentation), publish data using that schema in some arbitrary way as XML and JSON. On the client side the same process continues, find a new API, get an XML or JSON parser, map the data as described by the API to some classes and start using it. All of this is needless work, they are showing us what works, what they can do, and how they can work with data easily. Tersely, they are missing the benefits of Uniform Data.</p>
<p>We can bring the benefits of uniform data to the current web 2.0, class and objects, rdbms, xml and json focussed web.</p>
<p>We can not only address these core issues, and bring the benefits of linked data and the semantic web to the general developer population, but we can also:<br />
 - ensure it's RDF and traditional semantic web compatible (giving "us" mountains of useful every-day data)<br />
 - provide that clear migration path to the "full" semantic web that's missing now.<br />
 - increase semantic web adoption exponentially, bringing big benefits without the high cost.</p>
<h3>Approaches</h3>
<p>There are two key approaches I can personally see to this:</p>
<ol>
<li>Webize Classes and Objects (Java style POJOs, Data Objects, subset of UML)</li>
<li>Provide a Classes and Objects view over RDF</li>
</ol>
<p>The first of these approaches - providing an abstract syntax for classes and objects and then defining mappings for that to XML and JSON - would bring the benefits of OWL 2 and XSD to schemas, and the benefits of "linked data" to both the schemas (/class blueprints) and instance data. It would allow data validation rules to be augmented on from sources external to the schema, it could be codified in libraries across multiple languages, it could also serve as a translation layer between Classes and Objects, NoSQL, and RDBMS, and other formats such as CSV. Additionally it would lend each schema openly being mapped to vendor specific databases, as well as vendor neutral schemas such as ANSI SQL. Furthermore, it would also lend to innovation in each layer, for example standardized queries for each kind of data could be created, with translations of those to each specific vendor or to well defined standardized languages, and even codified to work in memory in libraries (for example within instance methods or to run on GPU enabled hardware and languages). Many benefits could come from webizing what the masses already do. Other examples include providing an opportunity to refine the core datatypes on the web in a serialization agnostic way (think xsd types merged with webidl types), ensuring the correct entailments for equality are baked in to the core, providing first level support for things like lists and sets, providing a foundation upon which diff, patch, versioning can all be accomplished, providing canonicalized forms so that encryption and a data signing can be accomplished... and more I'm sure.</p>
<p>The second of these approaches has less wide scale benefits, but would provide a more usable abstraction layer on top of RDF, which is currently (dare I say painfully) missing. This would ultimately make working with data more familiar, a codified example could be:</p>
<pre><code>
var person = new Class('foaf:Person');      // external class definitions loaded from the web
person.load('http://example.org/bob#me');   // instance data loaded
print(person.name);                         // simple access to pre-known properties
person.validate();                          // in built validation from OWL 2
                                            // and XSD data type restrictions

// work with a schema class at a time..

var man = new Class('gender:Male');         // different class for different data
man.load('http://example.org/bob#me');      // same data
print(man.wife);                            // different, domain specific properties
man.expand();                               // full entailment regimes support to get
                                            // the most from schema definitions 

</code></pre>
<p>The best approach will become clear as time progresses, for now I'm keen and happy to work on either or both.</p>
<p>Just some musings..</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/semantic-web/uniform-data/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>RDF API, JSON Serialization and Standardization</title>
		<link>http://webr3.org/blog/semantic-web/rdf-api-json-serialization-and-standardization/</link>
		<comments>http://webr3.org/blog/semantic-web/rdf-api-json-serialization-and-standardization/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 05:06:28 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[semantic web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Application programming interface]]></category>
		<category><![CDATA[Computer programming]]></category>
		<category><![CDATA[Computer science]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript programming language]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Markup languages]]></category>
		<category><![CDATA[mobile devices]]></category>
		<category><![CDATA[Persistence]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[RDFa]]></category>
		<category><![CDATA[Serialization]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[web browsers]]></category>
		<category><![CDATA[web development communities]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=408</guid>
		<description><![CDATA[Since there's been a lot of discussion about JSON serializations of RDF, and the need for an RDF API, I thought I'd offer my own personal thoughts on what we need from a JSON serialization and an RDF API.
A JSON compatible serialization of RDF
JSON is a lightweight text-based open standard designed for human-readable data interchange.
That's [...]]]></description>
			<content:encoded><![CDATA[<p>Since there's been a lot of discussion about JSON serializations of RDF, and the need for an RDF API, I thought I'd offer my own <em>personal</em> thoughts on what we need from a JSON serialization and an RDF API.</p>
<h3>A JSON compatible serialization of RDF</h3>
<p>JSON is a lightweight text-based open standard designed for human-readable data interchange.</p>
<p><em>That's not what we need.</em></p>
<p>We need a lightweight text-based JSON<em>-compatible</em> open standard designed for machine optimized RDF data interchange.</p>
<p>We need it to be JSON compatible because JSON tooling is widely implemented, JSON is well supported, embraced by most web development communities, and of course it's fast and simple.</p>
<p>Stress: It won't be JSON, it'll be JSON-compatible, and to avoid any confusion or indicating that it may be human friendly, we probably would be wise <em>not</em> to put the term "json" in it's name, although we will need to put it in the media type identifier "+json".</p>
<p>We need to standardize because there are numerous competing and differing JSON serializations at the minute, so when somebody asks for a JSON serialization on the web, they get back different results in different places - that's unexpected behaviour, and it's not interoperability - so we need to standardize a JSON-compatible serialization of RDF, with an IANA registered mediatype.</p>
<p>The serialization needs to be machine optimized and usable in multiple different scenarios, else there's no point standardizing it, because other JSON compatible serializations will still be needed and therefore created. Thus we need to define the various use-cases and create a JSON-compatible serialization which caters for them.</p>
<h3>An RDF API</h3>
<p>There's been a lot of call for cool RDF tooling, specifically in javascript, mentions of a jquery extension and a jquery-like library - I agree that would be nice, but also say why just one? I like and want choice, freedom and to see innovation in the marketplace, I don't just use jquery, I use more libraries and modules than I could name - however..</p>
<p>A library is not an API, and that's not what we need to standardize.</p>
<p>We need to enable interoperability between libraries, and where multiple libraries may or do have overlapping and conflicting functionality, we need to align and standardize it, but only when it produces unexpected behaviour or limits interoperability.</p>
<p>Primarily, this means standardizing interfaces for the RDF Concepts (literals, references, triple and graph) - as soon as we do that, all libraries which implement these interfaces will immediately become interoperable. Web Developers will be able to throw data between libraries, cherry picking the features they want or the coding styles they prefer, library implementers will be able to focus on areas they specialize in, others will be able to stun us with innovative new approaches and tools we'd never have thought of ourselves, and we'll have an open and ever growing <em>truly</em> cool suite of interoperable classes, libraries and tools.</p>
<p>Next up we can standardize interfaces for things like RDF Parsers, because as soon as we do that, all libraries on each specific platform can share parsers, and these can be developed, maintained and improved independent of any specific library - it will also allow the same libraries to be used with specialist low memory parsers optimized for mobile devices, thus broadening their potential user base and giving the end users + developers the best experience possible.</p>
<p>Another set of interfaces which need standardized, are those which are to be implemented by multiple different vendors on the same platform, i.e. the web browsers, i.e. anything near the DOM or HTML, i.e. the RDFa API - which is already being worked on.</p>
<p>Finally, an interface which will make linked data and RDF easier to work with by developers (carrying on from my previous post) is a "Data Object" interface, that is a simple object which holds the description of a single subject, where the properties are keys and the values are native values. I was wrong in my previous post, serving up simple JSON objects will help, but isn't perfect, because we don't know and can't determine whether people will want to use URIs, CURIEs or terms to access properties, thus an interface will be needed to handle this.</p>
<p>This isn't an exhaustive list, and each paragraph above can be considered to handle a different layer in the stack, but standardizing anything substantially more than that will stifle innovation and be counter productive, people need and want different libraries with different coding styles, features and different ways to access and query data. Different tools for different jobs, and for different people doing the same job.</p>
<p><em>If you disagree, please do share and let me know!</em> </p>
<h3>Clarification</h3>
<p>Earlier this week <a href="http://www.jenitennison.com/blog/node/149">I was quoted</a> as follows:</p>
<blockquote><p>
Nathan’s recent post on Opening Linked Data, which is worth reading in its entirety, captures the essence of the issue:</p>
<blockquote><p>You can’t shoe horn RDF in to JSON, no matter how hard you try - well, you can, but you loose all the benefits of JSON in the first place, because the data is RDF, triples and not objects, rdf nodes and not simple values</p></blockquote>
<p>In other words, using JSON as the basis for an RDF syntax doesn’t actually win you anything in terms of the ease of processing of that RDF. In fact, I’ll go further and say it has exactly the same bad qualities as RDF/XML.
</p></blockquote>
<p>However I have to point out that I probably didn't make the context clear, I was referring specifically to making a human friendly/optimized JSON serialization of RDF, you can however, very easily, create a machine optimized JSON-compatible serialization of RDF, without the drawbacks of XML (you just don't pin it as being human friendly JSON as outlined above) because unlike XML which requires a full XML stack, and RDF/XML which can be serialized in any one of a billion ways, we have a chance here to make a clean lightweight unambiguous serialization of RDF, one which is based on a lightweight data interchange format and not on a heavy extensible document interchange format.</p>
<p>Hope that clarifies :)</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/semantic-web/rdf-api-json-serialization-and-standardization/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Opening Linked Data</title>
		<link>http://webr3.org/blog/linked-data/opening-linked-data/</link>
		<comments>http://webr3.org/blog/linked-data/opening-linked-data/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 11:51:29 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[linked data]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Blank node]]></category>
		<category><![CDATA[Computer file formats]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Data management]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[FOAF]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[King]]></category>
		<category><![CDATA[Knowledge representation]]></category>
		<category><![CDATA[Markup languages]]></category>
		<category><![CDATA[Metadata]]></category>
		<category><![CDATA[Open Data]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Procedural programming languages]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[RDF Schema]]></category>
		<category><![CDATA[RDF/XML]]></category>
		<category><![CDATA[RDFa]]></category>
		<category><![CDATA[registered media]]></category>
		<category><![CDATA[Resource Description Framework]]></category>
		<category><![CDATA[sem web community]]></category>
		<category><![CDATA[Semantic HTML]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[the king]]></category>
		<category><![CDATA[Turtle]]></category>
		<category><![CDATA[Twitter Inc]]></category>
		<category><![CDATA[typical web developer]]></category>
		<category><![CDATA[Uniform Resource Identifier]]></category>
		<category><![CDATA[URI scheme]]></category>
		<category><![CDATA[web developer]]></category>
		<category><![CDATA[Web Developers]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[web standard format]]></category>
		<category><![CDATA[Web standards]]></category>
		<category><![CDATA[World Wide Web]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=390</guid>
		<description><![CDATA[Linked Data has done fantastically well so far, but, compared to how well it could be doing, given the calibre and amount of data that's been opened up, it's not doing too well at all.
Why? well the sem web community is packed full of the most technically skilled and decent people I've come across so [...]]]></description>
			<content:encoded><![CDATA[<p>Linked Data has done fantastically well so far, but, compared to how well it could be doing, given the calibre and amount of data that's been opened up, it's not doing too well at all.</p>
<p>Why? well the sem web community is packed full of the most technically skilled and decent people I've come across so far, so it can't be that, the tooling is pretty damn good, there's loads of data, most of the data's of a high quality, wanted by developers, and certainly more than usable. The concepts, theory and technical aspects are all solid as a rock. In short it's all good, apart from one rather important detail.</p>
<p>Our Linked Open Data isn't really open data, not in the eyes of the common web developer at least. To most web developers on the planet, open data is something they can get access to and use easily.</p>
<p>A good example of 'open data' for most developers, is the Twitter API.</p>
<p>Here's how a developer accesses it in PHP:</p>
<pre><code>  $uri = 'http://api.twitter.com/1/statuses/show/7907258268647424.json';
  $tweet = json_decode(file_get_contents($uri));
  echo $tweet->user->description;
</code></pre>
<p>Here's how they access it in Javascript:</p>
<pre><code>  uri = 'http://api.twitter.com/1/statuses/show/7907258268647424.json';
  $.getJSON(uri, function(tweet) {
    write( tweet.user.description );
  });
</code></pre>
<p>The reality of the matter is that you can't do this with Linked Open Data, and that's because you can't do it with RDF - and really, honestly, if it's not that simple, the masses won't use it, because, if it's not that simple, they <i>can't</i> use it.</p>
<h3>The problems with the RDF formats</h3>
<p>They're not perfect, and they are a very mixed bunch, for a change, let's look at the negatives.</p>
<p><strong>RDF/XML</strong><br />
 - Requires full XML tooling<br />
 - Can't read or write by hand<br />
 - butt ugly</p>
<p>Let's be honest, unless you have a full XML and RDF stack and you know what you're doing, RDF/XML is simply a no go zone.</p>
<p><strong>RDFa</strong><br />
 - Requires HTML/DOM/XML tooling<br />
 - An extension to a markup language, designed to augment annotated documents.</p>
<p>RDFa is great, but not for the general <i>data</i> use case, it's not a simple data interchange format like JSON, and you can't publish or consume it without specialist tooling, in fact it requires an even bigger, more complicated, stack than RDF/XML.</p>
<p><strong>Turtle</strong><br />
 - Requires a custom parser<br />
 - It's not <i>yet</i> seen as a data format by the masses.<br />
 - Doesn't have a registered media type.</p>
<p>If we're all honest, Turtle is the king of RDF serializations, it's small, powerful, easy to write and read, requires minimal tooling to parse. In fact, I'd quite happily say that Turtle is the best all round data format, period.</p>
<p><strong>RDF/JSON and JSON-LD</strong><br />
 - Square peg, round hole</p>
<p>You can't shoe horn RDF in to JSON, no matter how hard you try - well, you <i>can</i>, but you loose all the benefits of JSON in the first place, because the data is RDF, triples and not objects, rdf nodes and not simple values - I fear I'd better explain, quickly:</p>
<p>The benefit of JSON is that you can do the following:</p>
<pre><code>  var u = tweet.user;                                // nested, simple objects
  write(u.message);                                  // simply "a string of text"
  if(u.geo_enabled) {                                // a boolean true
    var d = u.statuses_count * u.favourites_count;   // numbers..
  }
</code></pre>
<p>Anything more complicated than that and you've lost 95% of the benefits of JSON.</p>
<p>Here's the code to do that <code>if(u.geo_enabled)</code> with JSON/RDF:</p>
<pre><code>  var tweet = rdf['http://example.org/tweet/12343'];
  var user = rdf[tweet['http://example.org/property/userid']];
  var geoenabled = user['http://example.org/property/geo_enabled'];
  if( Boolean(geoenabled.value) ) {
</code></pre>
<p>and JSON-LD:</p>
<pre><code>  var tweet, user;
  for(o in jsonld) {
    if(jsonld[o]["@"] == 'http://example.org/tweet/12343') tweet = jsonld[o];
  }
  for(o in jsonld) {
    if(jsonld[o]["@"] == tweet['twit:userid']) user = jsonld[o];
  }
  if(user['twit:geo_enabled']) {
</code></pre>
<p>Remember, those two examples are only for the simple if line from the benefits of JSON example, can you even imagine all four lines?</p>
<p>Clearly, RDF in JSON is of little to no use to anybody, you can see plainly yourself, 95% of the benefits are lost and it's just another RDF serialization that's pretty much unusable without tooling. The only benefit JSON serializations of RDF have, are that you don't require an XML stack, which is quite a large benefit tbh.</p>
<h3>The problem with RDF</h3>
<p>I've been a little unfair there, you see the problem isn't with the serializations, we can't make a "better" serialization of RDF for general web developers, because the <i>real problem</i> is that the data's RDF, it's triples not simple objects, URIs rather than simple terms, RDF Nodes with a language or type, and not just simple values.</p>
<p>An array of RDF triples, or a structure of RDF, just simply isn't usable in most (all?) programming languages, by a typical web developer, without specialist tooling and libraries or APIs.</p>
<p>Am I saying RDF is bad? no of course not, it's awesomely brilliant in every way, it powers a paradigm shift and will have huge positive effects on the web and the human race. You know the score :)</p>
<p>What I am saying, is that we're not backwards compatible, we're not making our data open in formats which are usable by normal developers, developers who need and want the data, want the links, but not the semwebbery. Hell even most of us who are heavy sem web users only consider the ontology+reasoning side enabled by properties-with-uris some of the time, most of the time &lt;http://xmlns.com/foaf/0.1/name> might as well just be "name".</p>
<h3>Opening Linked Data</h3>
<p>So, here's what we need to do, we need to just accept that although we publish linked data as RDF, we also need to publish the data as simple objects so the world can use the data.</p>
<p>Given the linked data:</p>
<pre><code>  @prefix : &lt;http://webr3.org/nathan#> .
  @prefix foaf: &lt;http://xmlns.com/foaf/0.1/> .
  @prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#> .

  :me a foaf:Person;
    foaf:age 29;
    foaf:holdsAccount [ foaf:accountName "webr3";
        foaf:homepage &lt;http://twitter.com/webr3>;
        rdfs:label "Nathan's twitter account"@en ];
    foaf:homepage &lt;http://webr3.org>;
    foaf:knows &lt;http://example.com/bob#me>;
    foaf:name "Nathan";
    foaf:nick "webr3", "nath" .

  &lt;http://example.com/bob#me> a foaf:Person;
    foaf:name "Bob" .</pre>
<p></code></p>
<p>We <strong>also</strong> need to publish it like this:</p>
<pre><code>{
  "http://webr3.org/nathan#me": {
    "a": "http://xmlns.com/foaf/0.1/Person",
    "age": 29,
    "holdsAccount": {
      "accountName": "webr3",
      "homepage": "http://twitter.com/webr3",
      "label": "Nathan's twitter account"
    },
    "homepage": "http://webr3.org",
    "knows": "http://example.com/bob#me",
    "name": "Nathan",
    "nick": [ "webr3", "nath" ]
  },
  "http://example.com/bob#me": {
    "a": "http://xmlns.com/foaf/0.1/Person",
    "name": "Bob"
  }
}</code></pre>
<p>and now one can do: <code>me.holdsAccount.label</code> and get back a string, in any language.</p>
<p><strong>What have we lost?</strong><br />
Well nothing in the grand scheme of things because we're still publishing the RDF in other formats via conneg, however in this specific serialization of the data: we've lost the properties, the .language and the .type, although basic types are still there, dates are detectable, numbers are supported, booleans are supported, everything else is just a PlainLiteral, a string.</p>
<p><strong>What's still there?</strong><br />
The data, <code>http</code> names for things, follow your nose, rdf types ++usable-accessible-data in a web standard format. It's 3.5 if not 4.5 star data!</p>
<p><strong>Other considerations</strong><br />
Probably be wise to allow direct access to a .json URI too, so people can simple-GET the data (in addition to exposing via conneg).</p>
<p>Should be an easy hit, any good reasons why not?</p>
<h3>The other RDF Serializations</h3>
<p>While we're here, there are a few other things that need tidied up, properly.</p>
<p><strong>Turtle</strong><br />
Let's make it <i>the standard</i> RDF serialization, with a proper registered media types of application/turtle and text/turtle, fix any bugs in the spec (if any), and possibly allow an optional comma in those lists (1,2,3).</p>
<p>Let's just accept that RDFa is great, but sometimes you just want to embed a chunk of RDF in an HTML document, you know we all want to on occasion, people are shouting for it, it's easy to do, to deploy, doesn't break anything, and it's a really easy hit - so, in the Turtle standard spec pop a note that shows how to include it in an HTML document.</p>
<pre><code>&lt;script type="text/turtle">
  // turtle in here, as-is, no special encoding
&lt;/script></code></pre>
<p><strong>RDF/XML</strong><br />
Leave it as is, let it run it's course naturally, and in many respects just forget it moving forwards, everybody supports it already, that won't change, but there's approximately zero need to keep pushing it.</p>
<p><strong>RDFa</strong><br />
As awesome as it is, just see it for what it is, RDF in attributes, it's like the missing markup features of HTML, for annotating documents and describing the things described in the documents with annotations. It's not a simple data or RDF format, and it's not <i>really</i> suited to just dropping chunks of machine readable RDF in to an HTML document, Turtle in HTML will do that far better.</p>
<p><strong>RDF/JSON and JSON-LD</strong><br />
Standardize a JSON serialization as a replacement / alternative to XML - but, admit and stipulate before hand that it's not usable as-is, or really writable and is arguably human readable. It simply needs to be a fast, unambiguous, optimized for the machine, RDF serialization - no bells and whistles for humans, no "12^^xsd:type" in a string - just something that you can JSON.parse and run circa 10-20 standardized lines of code over to get back an RDFGraph of RDFTriples.</p>
<p>Fin &#038; end.</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/linked-data/opening-linked-data/feed/</wfw:commentRss>
		<slash:comments>12</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>Restarting Linked Data from scratch, part 1</title>
		<link>http://webr3.org/blog/linked-data/restarting-linked-data-from-scratch-part-1/</link>
		<comments>http://webr3.org/blog/linked-data/restarting-linked-data-from-scratch-part-1/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 07:41:51 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[linked data]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[average web page]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[client / server]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Control Data Systems Inc]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[important web caching]]></category>
		<category><![CDATA[Metadata]]></category>
		<category><![CDATA[Query languages]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[real web]]></category>
		<category><![CDATA[Representational State Transfer]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[RESTful protocol]]></category>
		<category><![CDATA[search engines]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[SPARUL]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[traffic site]]></category>
		<category><![CDATA[web application super fast]]></category>
		<category><![CDATA[web applications using desktop clients]]></category>
		<category><![CDATA[Web browser]]></category>
		<category><![CDATA[web server]]></category>
		<category><![CDATA[web servers]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[World Wide Web]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=269</guid>
		<description><![CDATA[I'm going out on a limb and starting my whole journey through Linked Data and "Web 3.0" again - in order to address the challenges many in the community are facing, and which are "blocking" me. I'm going to take everything I've learned so far and go right back to grass roots with linked data.
I'm [...]]]></description>
			<content:encoded><![CDATA[<p>I'm going out on a limb and starting my whole journey through Linked Data and "Web 3.0" again - in order to address the challenges many in the community are facing, and which are "blocking" me. I'm going to take everything I've learned so far and go right back to grass roots with linked data.</p>
<p>I'm primarily documenting this journey for my own benefit, for reference and to unload it from my brain; but hopefully it'll be of use to the wider community and any feedback will be massively appreciated.</p>
<p>Here goes, I'll start by analysing the web thus far:</p>
<h2>The Web till now</h2>
<p>The power and the success of the web so far, <em>in my opinion</em>, has come from four main things:</p>
<ul>
<li>The URI</li>
<li>Hyperlink</li>
<li>The Resource</li>
<li>HTTP and it's RESTful design.</li>
</ul>
<p>More importantly it's the combination of the four working together that makes the web so great, because, they let you cut out everything else and go straight to the resource you want. This is a point that we need to concentrate on for a minute.</p>
<h3>Going straight to the resource</h3>
<p>Back at the start of the web, this allowed people to (for the first time) jump from a resource in the bowels of one companies hierarchy straight to another resource in a different companies hierarchy - very much like reading a book, looking at the references and suddenly having the book or paper it references right there in your lap - amazing to say the least.</p>
<p>Skip forwards a few years and we have the search engines, suddenly simply by typing a few keywords you can jump right to a resource (page/image/...) anywhere on the web. Fast forward some more and we get to web 2.0 where again people are amazed every time direct access to a resource is exposed. Yup.. all your web 2.0 is just this simple principal..</p>
<p>An RSS feed, well it lets you read a resource (a post) outside the context of the website and inside lets say google reader. You can rip a resource (video) out of youtube and embed it anywhere you like. You can interact with a web application super fast thanks to targeting a resource directly with say ajax and only updating that resource rather than updating the entire view (page). You can interact with web applications using desktop clients because they let you access one resource at a time; and so on and so forth, virtually every improvement you see on the web comes down to that one thing, directly accessing a resource (<em>and creating resources at a more granular level</em>).</p>
<h3>How we made the web <em>faster</em></h3>
<p>Negating the rather obvious upgrades in technology over the years, there is one primary thing that speeds up the web and virtually everything computer oriented, the cache.</p>
<p>Before all the web 2.0 stuff, resource caching was at an all time high and was making the web faster for all of us; caching at the resource level is enabled by HTTP and its RESTful design. Control Data allows us to limit how much information needs transferred over the web, request an image once and it gets transferred, request it a second time and thanks to caching and HTTP odds are very high that it won't get transferred again. When you consider that the average web page can easily have 30, 50, 300 images and static files embedded in it this is a huge speed increase, and frankly one we could not live without.</p>
<p>Skipping forwards to web 2.0 and the present day again, we've gone wild with caching; anybody who's been involved with a high traffic site will tell you that the only way to do it is to cache everything you can; from data in memory, through to code and op code caches. But this is only half the story.. a strange this has happened..</p>
<h3>How we made the web <em>slower</em></h3>
<p>Simply, we forgot HTTP and a RESTful web somehow - that all important web caching whether it be at intermediate servers or in a web browser, it's forgotten.</p>
<p>To illustrate, if you view an image and then view it again, it'll be there instantly - why? because last-modified, etag and other control data is sent by great web servers like apache for static files, until you force a refresh or the file changes on the server you'll simply get a 304 response telling whatever cache down the line to use it's own copy instead. Now, try jumping on to a web page, even this one and you'll find the whole thing is reloaded, every time. I'd estimate that circa 80% of all pages you visit are fully reloaded every single time you see them, if not more.</p>
<p>Here's the reason - most pages are generated by scripts now, and something that goes unnoticed by most developers is that the web server (like apache) hand over *full* control to the language runtimes, and in turn to the developer. In other words, unless developers are calculating, receiving and sending control data for each response, and validating every http message in to their scripts, then most of the benefits of HTTP and RESTful design are completely lost; <em>especially caching</em>.</p>
<p>Here's a fact, whether you agree with it or not, to me it is a fact: <em>the web has to be RESTful for it to work properly</em>, whether it's a web of documents, or a web of data, or both.</p>
<h2>Looking at the current state of Linked Data</h2>
<p>Linked Data is amazing because it takes the big four I mentioned earlier (URI, Hyperlink, Resource, HTTP) to a new level; we create resources at the most granular level possible, assign them URIs, link them together with <em>typed</em> hyperlinks then expose them via HTTP.</p>
<p>Notice I didn't mention REST in there? that's because I (and I'm not the only one) don't feel that Linked Data is currently RESTful. And as we can learn from web 2.0, unless this is addressed we'll face major problems down the line. In addition, because of this lack of RESTful-ness I feel like the data isn't linked; simply using URIs from different datasets on both sides of a triple does not link those datasets, well not from a client perspective anyway.</p>
<p>To expand and refining the issues:</p>
<h3>SPARQL Silos</h3>
<p>Issue one, is that SPARQL and the servers with RDF stores which power it are positioned at the wrong side of the client / server relationship imho. Because each major dataset effectively has it's own server and access point (<em>SPARQL interface</em>) it means that when you query it, it can only return the Linked Data which it stores. This leaves us three options at the minute:</p>
<ul>
<li>let that server pull in remote Linked Data and store it too (which makes the server fill up and slow down, and turns it in to a silo).</li>
<li>use one great big server that tries to store <em>all</em> the linked data (which feels like a silo all over again to me, not distributed at all).</li>
<li>Run our own server and only store limited data in it (limited.. and again a silo I guess)</li>
</ul>
<p>If we moved SPARQL to the client side however, then all it would need is a starting point from which it could traverse the web of data, only pulling in what it needed for a query. This may sound slow but if all data was exposed as resources like it should be, and with control data so it could be cached, this slow down would soon disappear; lesson from web 1 and 2!</p>
<p>With regards the caching, this could happen at traditional intermediate caches within the internet and at ISPs, locally in client side triples stores (like a browsers cache) or the existing big servers that attempt to store all the linked data could be repositioned as linked data caches.</p>
<p>For example a small RDF document could simply delegate seeAlso http://datacac.he/http://subject.uri and that linked data cache could return back all the information it knows about the subject by returning the RDF results of a SPARQL describe. This alone would be a HUGE speed up, prevent silos and create a real web of data.</p>
<p>In addition, this would keep all linked data transferred through the web in RDF format, and thus machine readable and typed. At the minute we have lots and lots of SPARQL queries, which essentially are just untyped junk data that a machine couldn't possibly understand - SPARQL results remove all the goodness from RDF and give us something that is domain and developer specific, not re-usable. Think about that for a moment..</p>
<p>Clarification: I'm not saying SPARQL + RDF stores shouldn't be on the server side, they should as they are needed in most cases, I'm simply saying that the primary interface to linked data shouldn't be SPARQL over HTTP to a remote SPARQL endpoint. Rather we should be accessing RDF documents, or entities if you like via HTTP.</p>
<h3>RESTful RDF</h3>
<p>Issue two, the focus has been on getting data on the web, finding ways to link it, access it, store and query these vast datasets; and the work done thus far is amazing! But now that's handled it's time to go back to basics and find ways of both getting and publishing Linked Data RESTfully, at a granular per resource level.</p>
<p>This means handling RDF like ATOM, and essentially making atompub all over for RDF (as many are thinking and working on). I feel that regardless of what's implemented behind the interface, and whether triples stores and SPARUL are used, we still need to manage RDF / Linked Data in terms of documents and entities for it to be RESTful.</p>
<p>An additional issue raised by this is loosing the notion of a quad, g s p o, Named Graphs are vastly important to linked data, but we need to get named graphs in to triples and out of quads so we are always working with RDF through HTTP.</p>
<p>Also worth noting that temporal, provenance, multi-language, multiple representations etc will all need handled too; without using any HTTP extensions; no point half baking it or making the solution dependant on drafts - needs to work with the Universal Interface!</p>
<h2>First Step</h2>
<p>The above means one of the first challenges and things I'll try to tackle, is to find a way to fit a RESTful RDF publishing and exposing protocol in to the shared http space on a web server; taking in to account things like content negotiation, multiple representations, versions / time varying representations, and backwards compatibility with the current web.</p>
<p>note: I'm not going to define the protocols, plenty of more intelligent people than me are working on these things, just leverage a space where a full RESTful protocol can work in unison with the way we currently do things so that it's transparent to browsers and visible to linked data clients. This should then allow a stable test environment to try out different ways of doing things and test that the current web doesn't break.</p>
<p>To be continued.. often and frequently. <em>I'm blocked on my current, v important project, and need to address these things</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/linked-data/restarting-linked-data-from-scratch-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reading List : Web, Linked Data, REST, Semantic Web</title>
		<link>http://webr3.org/blog/internet/reading-list-web-linked-data-rest-semantic-web/</link>
		<comments>http://webr3.org/blog/internet/reading-list-web-linked-data-rest-semantic-web/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 02:03:17 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[1.1 Uniform HTTP Protocol]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Atom Publishing Protocol]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Knowledge representation]]></category>
		<category><![CDATA[linked data]]></category>
		<category><![CDATA[Paging]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Query languages]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[Reification]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[Roy T. Fielding]]></category>
		<category><![CDATA[Roy T. Fielding Dissertation]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[Simple Knowledge Organization System]]></category>
		<category><![CDATA[Software engineering]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[URIs Resources]]></category>
		<category><![CDATA[Web Access Control]]></category>
		<category><![CDATA[Web Architecture]]></category>
		<category><![CDATA[Web Resources     Named Graphs]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[Web Tutorial   Mindswap]]></category>
		<category><![CDATA[World Wide Web]]></category>
		<category><![CDATA[write-enabled Web]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=264</guid>
		<description><![CDATA[Personally, I have two types of reading, the posts etc that I "tweet" and then the heavier reading I do over time; this is a list of the latter for the past month - hopefully it'll help somebody who's looking for the same kind of info I have been.
I've grouped all the links in to [...]]]></description>
			<content:encoded><![CDATA[<p>Personally, I have two types of reading, the posts etc that I "tweet" and then the heavier reading I do over time; this is a list of the latter for the past month - hopefully it'll help somebody who's looking for the same kind of info I have been.</p>
<p>I've grouped all the links in to two main sections, and then sub-grouped by how they make sense in my head! :)</p>
<h3>Web, HTTP and REST</h3>
<p>Roy T. Fielding Dissertation - <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" target="_blank">Architectural Styles and the Design of Network-based Software Architectures</a> Of particular relevance and note are chapters 4-6 (many only ever read chapter 5 and miss the context + summary *needed* in chapters 4 and 6!)</p>
<ul>
<li><a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/web_arch_domain.htm" target="_blank"> Chapter 4 - Designing the Web Architecture: Problems and Insights</a></li>
<li><a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank"> Chapter 5 - Representational State Transfer (REST)</a></li>
<li><a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm" target="_blank"> Chapter 6 - Experience and Evaluation</a></li>
</ul>
<p><a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven" target="_blank"> Roy T. Fielding - REST APIs must be hypertext-driven</a><br />
<a href="http://www.mail-archive.com/whatwg@lists.whatwg.org/msg12443.html" target="_blank"> Discussion on HTML5 and RESTful HTTP in browsers</a><br />
<a href="http://tech.groups.yahoo.com/group/rest-discuss/message/5168" target="_blank"> Discussion on URIs Resources and Switching content types w/ REST angle (v good)</a></p>
<p><a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html" target="_blank">RFC 2616 HTTP/1.1</a> and the HTTPbis Working Group HTTP/1.1 update in parts:</p>
<ol>
<li><a href="http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging" target="_blank">Messaging</a></li>
<li><a href="http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics" target="_blank">Semantics</a></li>
<li><a href="http://tools.ietf.org/html/draft-ietf-httpbis-p3-payload" target="_blank">Payload</a></li>
<li><a href="http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional" target="_blank">Conditional</a></li>
<li><a href="http://tools.ietf.org/html/draft-ietf-httpbis-p5-range" target="_blank">Range</a></li>
<li><a href="http://tools.ietf.org/html/draft-ietf-httpbis-p6-cache" target="_blank">Cache</a></li>
<li><a href="http://tools.ietf.org/html/draft-ietf-httpbis-p7-auth" target="_blank">Authentication</a></li>
</ol>
<h3>Linked Data and the Semantic Web</h3>
<p><a href="http://esw.w3.org/topic/SweoIG/TaskForces/CommunityProjects/LinkingOpenData" target="_blank"> Linking Open Data Community Project</a><br />
<a href="http://esw.w3.org/topic/SweoIG/TaskForces/CommunityProjects/LinkingOpenData/Applications" target="_blank"> Linked Data Applications</a><br />
<a href="http://esw.w3.org/topic/TaskForces/CommunityProjects/LinkingOpenData/EquivalenceMining" target="_blank"> Equivalence Mining and Matching Frameworks</a><br />
<a href="http://esw.w3.org/topic/TaskForces/CommunityProjects/LinkingOpenData/SemWebClients" target="_blank"> Linked Data Browsers, Mashups and other Client Applications</a></p>
<p><a href="http://esw.w3.org/topic/DatasetDynamics" target="_blank"> Dataset Dynamics - On the Dynamics of Linked Datasets</a><br />
<a href="http://esw.w3.org/topic/WriteWebOfData" target="_blank"> Realizing a write-enabled Web of Data</a><br />
<a href="http://esw.w3.org/topic/WebAccessControl" target="_blank"> Web Access Control (WAC)</a>  - a decentralized system for allowing different users and groups various forms of access to resources where users and groups are identified by HTTP URIs.<br />
<a href="http://esw.w3.org/topic/WebAccessControl/Vocabulary" target="_blank"> Discussion of the WAC vocabulary</a><br />
<a href="http://www.w3.org/DesignIssues/CloudStorage.html" target="_blank"> Socially Aware Cloud Storage Design Note</a><br />
<a href="http://www.w3.org/2010/Talks/0303-socialcloud-tbl/" target="_blank"> Distributed Social Networking through Socially Aware Cloud Storage from TimBL</a><br />
<a href="http://esw.w3.org/topic/AwwswHome" target="_blank"> AWWSW - "Architecture of the World Wide Semantic Web" Task Force</a></p>
<p><a href="http://www.w3.org/TR/sparql11-http-rdf-update/" target="_blank"> SPARQL 1.1 Uniform HTTP Protocol for Managing RDF Graphs</a><br />
<a href="http://www4.wiwiss.fu-berlin.de/pubby/" target="_blank"> A Linked Data Frontend for SPARQL Endpoints</a><br />
<a href="http://www4.wiwiss.fu-berlin.de/bizer/rdfapi/index.html" target="_blank"> RAP - RDF API for PHP V0.9.6</a><br />
<a href="http://buzzword.org.uk/2009/posted-data/" target="_blank"> Inav the Terrible - An idea for posting RDF through HTTP.</a></p>
<p><a href="http://n2.talis.com/wiki/Changesets" target="_blank"> Talis Changesets</a><br />
<a href="http://triplify.org/vocabulary/update" target="_blank"> Triplify Update Vocabulary</a></p>
<p><a href="http://inkdroid.org/journal/2009/11/04/skos-as-atom/" target="_blank"> skos as atom</a></p>
<p><a href="http://tools.ietf.org/html/rfc4287" target="_blank"> RFC 4287 - The Atom Syndication Format</a><br />
<a href="http://tools.ietf.org/html/rfc5023" target="_blank"> RFC 5023 - The Atom Publishing Protocol</a><br />
<a href="http://ietfreport.isoc.org/all-ids/draft-snell-atompub-tombstones-06.txt" target="_blank"> AtomPub Tombstones - The Atom "deleted-entry" Element</a><br />
<a href="http://tools.ietf.org/html/rfc5005" target="_blank"> RFC 5005 - Feed Paging and Archiving</a><br />
<a href="http://tools.ietf.org/html/draft-brown-versioning-link-relations-07" target="_blank"> Versioning Link Relations - Link Relation Types for Simple Version Navigation between Web Resources</a></p>
<p><a href="http://www2005.org/cdrom/docs/p613.pdf" target="_blank"> Named Graphs, Provenance and Trust</a><br />
<a href="http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-521/paper1.pdf" target="_blank"> Accessing Site-Specific APIs Through Write-Wrappers From The Web of Data</a><br />
<a href="http://events.linkeddata.org/ldow2009/papers/ldow2009_paper18.pdf" target="_blank"> Provenance Information in the Web of Data - LDOW 2009 paper</a><br />
<a href="http://www.w3.org/2002/Talks/0910-rdf-reification/Overview.html" target="_blank"> Using Reification To Extend RDF</a> (historical reification approach)<br />
<a href="http://dig.csail.mit.edu/2009/presbrey/UAP.pdf" target="_blank"> RDF Policy-based URI Access Control for Content Authoring</a><br />
<a href="http://eprints.ecs.soton.ac.uk/18332/1/opm.pdf" target="_blank"> The Open Provenance Model Core Specification (v1.1)</a><br />
<a href="http://www.w3.org/2005/Incubator/prov/wiki/Main_Page" target="_blank"> W3C Provenance Incubator Group</a></p>
<p><a href="http://www.w3.org/History/" target="_blank"> History of the Web 1945, 1980 through 1997 on W3</a><br />
<a href="http://www.w3.org/TR/leiri/" target="_blank"> LEIRI - Legacy extended IRIs for XML resource identification</a> The type of "URI" used in xml:base<br />
<a href="http://www.slideshare.net/LeeFeigenbaum/cshals-2010-w3c-semanic-web-tutorial" target="_blank"> CSHALS 2010 W3C Semanic Web Tutorial</a><br />
<a href="http://www.mindswap.org/2002/rdfconvert/" target="_blank">Mindswap online RDF Converter</a><br />
<a href="http://www.w3.org/RDF/Validator/" target="_blank">W3 online RDF Validator</a></p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/internet/reading-list-web-linked-data-rest-semantic-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

