<?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; Markup languages</title>
	<atom:link href="http://webr3.org/blog/tag/markup-languages/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>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>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>Restarting Linked Data from scratch, part 2</title>
		<link>http://webr3.org/blog/linked-data/restarting-linked-data-from-scratch-part-2/</link>
		<comments>http://webr3.org/blog/linked-data/restarting-linked-data-from-scratch-part-2/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 02:02:22 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[linked data]]></category>
		<category><![CDATA[atompub style protocol]]></category>
		<category><![CDATA[author]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Content negotiation]]></category>
		<category><![CDATA[DTD]]></category>
		<category><![CDATA[FOAF]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Los Angeles]]></category>
		<category><![CDATA[manager]]></category>
		<category><![CDATA[Markup languages]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[RDFa]]></category>
		<category><![CDATA[representation chain]]></category>
		<category><![CDATA[Representational State Transfer]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[Roy T. Fielding]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[web browsers]]></category>
		<category><![CDATA[Web standards]]></category>
		<category><![CDATA[World Wide Web]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=278</guid>
		<description><![CDATA[This post is part of a series, following on from my earlier post Restarting Linked Data from scratch, part 1. In this post I'm going to take the first step by trying to approach publishing and exposing linked data RESTfully.
I'm assuming that if you are reading this, you know what linked data is, and REST [...]]]></description>
			<content:encoded><![CDATA[<p>This post is part of a series, following on from my earlier post <a href="http://webr3.org/blog/linked-data/restarting-linked-data-from-scratch-part-1/">Restarting Linked Data from scratch, part 1</a>. In this post I'm going to take the first step by trying to approach publishing and exposing linked data RESTfully.</p>
<p>I'm assuming that if you are reading this, you know what linked data is, and REST as per the dissertation of Roy T. Fielding. If not go do some reading :)</p>
<h3>Interface Constraints</h3>
<p>REST is defined by four interface constraints:</p>
<ol>
<li>identification of resources</li>
<li>manipulation of resources through representations</li>
<li>self-descriptive messages</li>
<li>hypermedia as the engine of application state.</li>
</ol>
<p>From here I'll look at each of these four constraints and build up the approach as I go.</p>
<h3>What a resource is</h3>
<p>Quoting extensively from <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_1_1">  REST 5.2.1.1 Resources and Resource Identifiers</a>:</p>
<blockquote><p>The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author's hypertext reference must fit within the definition of a resource...</p>
<p>A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time...</p>
<p>The values in the set may be resource representations and/or resource identifiers...</p>
<p>A resource can map to the empty set, which allows references to be made to a concept before any realization of that concept exists...</p>
<p>The only thing that is required to be static for a resource is the semantics of the mapping, since the semantics is what distinguishes one resource from another...
</p></blockquote>
<h3>What a representation is</h3>
<p>Again, quoting extensively from <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_2_1_2">  REST 5.2.1.2 Representations</a>:</p>
<blockquote><p>
... A representation is a sequence of bytes, plus representation metadata to describe those bytes. Other commonly used but less precise names for a representation include: document, file, and HTTP message entity, instance, or variant...</p>
<p>If the value set of a resource at a given time consists of multiple representations, content negotiation may be used to select the best representation for inclusion in a given message...</p>
<p>The data format of a representation is known as a media type
</p></blockquote>
<h2>Identification of resources</h2>
<p>To do this properly I need to identify some resources, so for this I'm going to work with "Something" :)</p>
<ul>
<li><strong>"Something"</strong> - a resource, a non-virtual object</li>
</ul>
<p>At any point in time I have a description of Something which has multiple representations in different mediatypes, all semantically matching or equivalent:</p>
<ul>
<li><strong>"something.rdf"</strong> - representation of Something with mediatype RDF+XML</li>
<li><strong>"something.n3"</strong> - representation of Something with mediatype  RDF+N3</li>
<li><strong>"something.en.html"</strong> - representation of Something, in english, with mediatype text/html</li>
<li><strong>"something.de.html"</strong> representation of Something, in german, with mediatype text/html</li>
</ul>
<p>Each one of those representations is also a resource because they can be the target of a hyperlink. Of course by resource I mean a conceptual mapping to each of the things listed, and I haven't assigned URIs but will..</p>
<p>To be able to make this set of representations manageable and to indicate they are in a set, I'm going to add in another resource which is a collection of resources, which can be considered a set of these equivalent representations of Something at a fixed point in time. For the purpose of this exercise, that point in time is today.</p>
<ul>
<li><strong>"Something-20100311"</strong> - a resource which is a collection of equivalent representations of Something on the 11th March 2010.</li>
</ul>
<p>Additionally, for the sake of argument, I'm going to say that a new set of representations (or version) is added every day - to handle this I then need one more resource, a collection of resources, where each resource in the collection is itself a collection of resources (<em>one of the aforementioned and including the example "Something-20100311"</em>). This will give me a conceptual mapping which covers time, and therefore everything I could need.</p>
<ul>
<li><strong>"Somethings"</strong> - a resource which is a collection of resources, see above for full description!</li>
</ul>
<p>Finally, I'm going to add in two shortcut resources which have no representation and are simply conceptual maps to the first and most current sets of representations.</p>
<ul>
<li><strong>"first"</strong> - a resource which always maps to the first collection of representations of Something.</li>
<li><strong>"latest"</strong> - a resource which maps to the most recent collection of representations of Something.</li>
</ul>
<h4>Giving the resources URIs</h4>
<p>Now to assign some URIs for this use case, there is no set structure and I'm not going to define one because it is up to each server (or manager of) to control it's own URI space, but for the sake of this exercise I'll define mine as follows:</p>
<p><code><br />
base: http://data.webr3.org<br />
  ...<br />
  /d/Something<br />
  /rg/Somethings<br />
  /rg/Somethings/first<br />
  /rg/Somethings/latest<br />
  /rg/Somethings/Something-20100311<br />
  /rg/Somethings/Something-20100311/something.rdf<br />
  /rg/Somethings/Something-20100311/something.n3<br />
  /rg/Somethings/Something-20100311/something.en.html<br />
  /rg/Somethings/Something-20100311/something.de.html<br />
  ...<br />
  /rg/Somethings/Something-20100305<br />
  /rg/Somethings/Something-20100305/something.rdf<br />
  /rg/Somethings/Something-20100305/something.n3<br />
  /rg/Somethings/Something-20100305/something.en.html<br />
  /rg/Somethings/Something-20100305/something.de.html<br />
  ...<br />
</code></p>
<p>From the above you can see that every possible representation has its own URI, in addition every collection of equivalent representations has its own URI, as does the collection of all those collections; and so does "Something" our non virtual object.</p>
<p>Also we've exposed multiple resources which could also be RESTful CRUD access points operating on an atompub style protocol. Small sentence, big potential, will cover approaches and protocols in later posts.</p>
<h2>The Key resource</h2>
<p>The most important thing, which I haven't yet covered, is that we've exposed a key resource, namely <code>/rg/Somethings</code>. This is a resource at the top of the representation chain which can be used to expose content negotiation, be it server or agent driven (or a mix of both), and regardless of the mappings and levels of collection further down the line this can always be a single point of entry to get representations.</p>
<p>I'll cover just how in a moment, but for now something important.</p>
<h3>Important</h3>
<p>I've had to give a fixed example just to make some progress, but we have to remember that every system has different needs, in some cases it may be that there is only a single fixed representation for a resource, whilst in others each strand of representation (like something.de.html) may take it's own versioning / temporal path. This could indicate that a structure such as the following may be in order:<br />
<code><br />
  ...<br />
  /d/Something<br />
  /rg/Somethings<br />
  /rg/Somethings/first<br />
  /rg/Somethings/latest<br />
  /rg/Somethings/Something-20100311<br />
  /rg/Somethings/Something-20100305<br />
  /rg/Somethings/Something-rdf<br />
  /rg/Somethings/Something-rdf/20100311.rdf<br />
  /rg/Somethings/Something-rdf/20100305.rdf<br />
  /rg/Somethings/Something-html-en<br />
  /rg/Somethings/Something-html-en/20100311.html<br />
  /rg/Somethings/Something-html-en/20100305.html<br />
  /rg/Somethings/Something-html-de<br />
  /rg/Somethings/Something-html-de/20100308.html<br />
  /rg/Somethings/Something-html-de/20100303.html<br />
</code></p>
<p>The above highlights that whilst we may have added more resources, the core resources are still the same; remember that they are "conceptual maps", meaning that Something-20100311 may "map" to the version of en-html on the 11th and de-html on the 8th, because the de version was written first, then translated to english and from there rdf and so forth, but they are all semantically equivalent, containing the same information even though they were created at different times.</p>
<p>The Conceptual Maps are as follows, from what I can tell this should always cover any use-case, no matter how complex.</p>
<p><code><br />
Thing 1-1 CollectionOfCollections<br />
CollectionOfCollections 1-* CollectionOfEquivalentRepresentations<br />
CollectionOfEquivalentRepresentations 1-* Representation<br />
</code></p>
<p>aside:<em>At times like this I wish I'd had a chance to study computer science so that I could express these things formally, so you'll have to make sense of it as best you can :( sorry.</em></p>
<h2>Exposing via Content Negotiation</h2>
<p>In my research so far, I've been able to figure out how to expose all of the aforementioned via HTTP, RESTfully using content negotiation in a manner which seems to be transparent to existing web browsers, but exposes all the information needed in a manner that is visible to machines; without using any additional extensions headers. As follows:</p>
<p><strong>1</strong> The client does a normal GET request on our "Something", notice that no content negotiation is happening yet, we are simply asserting via a 303 "that the requested resource does not have a representation of its own that can be transferred by the server over HTTP."<br />
<code><br />
#Request<br />
GET /d/Something HTTP/1.1<br />
Host: data.webr3.org<br />
Accept: text/html;q=0.5, application/rdf+xml<br />
<br/><br />
#Response<br />
HTTP/1.1 303 See Other<br />
Location: http://data.webr3.org/rg/Somethings<br />
</code></p>
<p><strong>2</strong>The client does a GET on the URI we specified in the Location field, namely to our key resource that can be used for content negotiation over all the representations.<br />
<code><br />
#Request<br />
GET /rg/Somethings HTTP/1.1<br />
Host: data.webr3.org<br />
Accept: text/html;q=0.5, application/rdf+xml<br />
<br/><br />
#Response<br />
HTTP/1.1 300 Multiple Choices<br />
Location: http://data.webr3.org/rg/Somethings/latest<br />
Content-Type: application/xhtml+xml<br />
Content-Length: 17400<br />
<br/><br />
&lt;?xml version="1.0" encoding="UTF-8"?><br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"<br />
    "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"><br />
&lt;html xmlns="http://www.w3.org/1999/xhtml"<br />
    xmlns:foaf="http://xmlns.com/foaf/0.1/"<br />
    xmlns:dc="http://purl.org/dc/elements/1.1/"<br />
    version="XHTML+RDFa 1.0" xml:lang="en"><br />
...<br />
</code></p>
<p>Here's where it gets interesting and clients can take different routes; first the route of the typical user agent:</p>
<h3>User Agent Route</h3>
<p><code><br />
#Request<br />
GET /rg/Somethings/latest HTTP/1.1<br />
Host: data.webr3.org<br />
Accept: text/html;q=0.5, application/rdf+xml<br />
<br/><br />
#Response<br />
HTTP/1.1 307 Temporary Redirect<br />
Location: http://data.webr3.org/rg/Somethings/Something-20100311<br />
<br/><br />
#Request<br />
GET /rg/Somethings/Something-20100311 HTTP/1.1<br />
Host: data.webr3.org<br />
Accept: text/html;q=0.5, application/rdf+xml<br />
<br/><br />
#Response<br />
HTTP/1.1 302 Found<br />
Vary: Accept<br />
ETag: W/"xyzzy"<br />
Last-Modified: Wed, 11 Mar 2010 12:45:26 GMT<br />
Content-Type: application/xhtml+xml<br />
Content-Length: 17400<br />
Content-Language: en<br />
Content-Location: http://data.webr3.org/rg/Somethings/Something-20100311/something.en.html<br />
<br/><br />
&lt;!DOCTYPE html...<br />
</code></p>
<p>First you can see that the user agent simply goes straight through to the most recent content and what they expect to see; which is nice, with additional Server driven content negotiation.</p>
<p>Further, we can see that full cache control is in there which as we know speeds up the net, and further still we have a rather nifty "weak" entity tag; this entity tag is shared by all representations which are semantically equal, and asserts they are equal via the entity tag. It's also worth noting that you could add this entity tag to your RDF graphs and further assert provenance which could come in very handy down the line for POST and PUT implementations.</p>
<p>To recap, common user agents just go straight through to the expected resource via server driven content negotiation and can take full advantage of cache / control data.</p>
<h3>The Machine Route</h3>
<p>Back at <strong>2</strong> the server returned a <code>300 Multiple Choices</code> as soon as <code>/rg/Somethings</code> was requested. All important was that the entity returned was XHTML+RDFa (<em>although this could have been Atom or similar..</em>), which means we can give both a human and machine readable list of all our various representations, the "machine" can then select which one it finds most fitting. The choices could be expressed using any suitable ontology; and further both <code>Alternative</code> and <code>Link</code> headers could be added if publishers wished.</p>
<p>I <em>think</em> that covers it all, if there are any errors or things I've missed please do let me know asap; but for now that'll do me - it's verbose, but I like verbose - prove it works then optimise it later :)</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/linked-data/restarting-linked-data-from-scratch-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Semantic Web &amp; XHTML+RDFa Resources</title>
		<link>http://webr3.org/blog/semantic-web/semantic-web-xhtmlrdfa-resources/</link>
		<comments>http://webr3.org/blog/semantic-web/semantic-web-xhtmlrdfa-resources/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 11:53:28 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[RDFa]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Knowledge representation]]></category>
		<category><![CDATA[Markup languages]]></category>
		<category><![CDATA[Metadata]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[Semantic HTML]]></category>
		<category><![CDATA[Semantic Web Resources]]></category>
		<category><![CDATA[Technology/Internet]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=158</guid>
		<description><![CDATA[This week I've been having a refresher / catch-up on all things semantic and rdf on the net; from a developer standpoint.
To save everything going to waste, here's a quick list of multiple handy resources which I've found (save you a bit of googling and time).
XHTML + RDFa and related techs.


Wikipedia RDFa
RDFa info
W3C RDFa Primer, [...]]]></description>
			<content:encoded><![CDATA[<p>This week I've been having a refresher / catch-up on all things semantic and rdf on the net; from a developer standpoint.</p>
<p>To save everything going to waste, here's a quick list of multiple handy resources which I've found (save you a bit of googling and time).</p>
<p><strong>XHTML + RDFa and related techs.<br />
</strong></p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/RDFa" target="_blank">Wikipedia RDFa</a></li>
<li><a href="http://rdfa.info/" target="_blank">RDFa info</a></li>
<li>W3C <a href="http://www.w3.org/TR/xhtml-rdfa-primer/" target="_blank">RDFa Primer</a>, <a href="http://www.w3.org/MarkUp/2009/rdfa-for-html-authors" target="_blank">RDFa for HTML Authors</a>, <a href="http://www.w3.org/TR/rdfa-syntax/" target="_blank">RDFa Syntax</a>, <a href="http://www.w3.org/TR/xhtml-rdfa-scenarios/" target="_blank">RDFa Usage Scenarios</a></li>
<li><a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=146898" target="_blank">Google RDFa</a> Support help for webmasters.</li>
<li>Drupal 7 <a href="http://groups.drupal.org/node/22231" target="_blank">RDFa Intro</a>, <a href="http://drupal.org/node/574624" target="_blank">RDF / RDFa Details</a></li>
<li><a href="http://arc.semsol.org/" target="_blank">ARC RDF/RDFa Classes for PHP</a></li>
<li><a href="http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/" target="_blank">OpenLink Virtuoso Open Source Database</a> (RDBMS, ORDBMS, virtual database, RDF, XML, free-text, web application server, file server, sparql, ws-* etc)</li>
<li>Notation3 on <a href="http://www.w3.org/DesignIssues/Notation3" target="_blank">W3C</a>, <a href="http://en.wikipedia.org/wiki/Notation3" target="_blank">Wikipedia</a></li>
<li>Turtle on <a href="http://en.wikipedia.org/wiki/Turtle_%28syntax%29" target="_blank">Wikipedia</a>, <a href="http://www.w3.org/TeamSubmission/turtle/" target="_blank">W3C</a>, <a href="http://www.dajobe.org/2004/01/turtle/" target="_blank">Authors Site</a></li>
<li>N-Triples on <a href="http://en.wikipedia.org/wiki/N-Triples" target="_blank">Wikipedia</a>, <a href="http://www.w3.org/2001/sw/RDFCore/ntriples/" target="_blank">W3C</a></li>
<li>GRDDL on <a href="http://en.wikipedia.org/wiki/GRDDL" target="_blank">Wikipedia</a>, <a href="http://www.w3.org/TR/grddl/" target="_blank">W3C Spec</a>, <a href="http://www.w3.org/TR/grddl-primer/" target="_blank">W3C Primer</a>, <a href="http://www.w3.org/TR/grddl-scenarios/" target="_blank">W3C Usage Scenarios</a></li>
</ul>
<p><strong>Semantic Web Resources</strong></p>
<ul>
<li><a href="http://esw.w3.org/topic/TaskForces/CommunityProjects/LinkingOpenData/DataSets" target="_blank">Semantic Linked Data W3C ESW Wiki</a></li>
<li><a href="http://sioc-project.org/" target="_blank">SOIC</a>, <a href="http://www.foaf-project.org/" target="_blank">FOAF</a>, <a href="http://en.wikipedia.org/wiki/SKOS" target="_blank">SKOS</a></li>
<li><a href="http://www.w3.org/TR/rdf-sparql-query/" target="_blank">SPARQL Query Language</a>, <a href="http://www.w3.org/TR/rdf-sparql-protocol/" target="_blank">SPARQL Protocol</a>, <a href="http://www.w3.org/TR/rdf-sparql-XMLres/" target="_blank">SPARQL Result Format</a>, <a href="http://jena.sourceforge.net/ARQ/Tutorial/" target="_blank">SPARQL Tutorial</a></li>
<li><a href="http://en.wikipedia.org/wiki/RDF_Schema" target="_blank">RDF Schema (RDFS) on Wikipedia</a>, <a href="http://www.w3.org/TR/rdf-schema/" target="_blank">W3C RDFS Spec</a>, <a href="http://opencalais.com/documentation/calais-web-service-api/rdfs" target="_blank">Calais RDFS</a></li>
<li><a href="http://wiki.dbpedia.org/Applications" target="_blank">DBPedia Applications</a>, and <a href="http://wiki.dbpedia.org/OnlineAccess" target="_blank">DBPedia Open Access</a></li>
<li><a href="http://www.freebase.com/docs/" target="_blank">Freebase Developer Docs</a>, <a href="http://rdf.freebase.com/" target="_blank">Freebase RDF</a></li>
<li><a href="http://developer.yahoo.com/search/content/V1/termExtraction.html" target="_blank">Yahoo Term Extraction Service</a></li>
<li><a href="http://developer.zemanta.com/docs/Home" target="_blank">Zemanta Contextual Information Service Developer Documentation</a></li>
<li><a href="http://opencalais.com/documentation/opencalais-documentation" target="_blank">Open Calais Documentation</a></li>
<li><a href="http://blog.alchemyapi.com/" target="_blank">AlchemyAPI</a></li>
<li><a href="http://www.commontag.org/Home" target="_blank">Common Tag</a></li>
</ul>
<p>Hopefully that'll be enough to get most people going!</p>
<p><img class="alignnone size-full wp-image-159" title="rdfa_what" src="http://webr3.org/blog/wp-content/uploads/2009/10/rdfa_what.jpg" alt="rdfa_what" width="600" height="250" /></p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/semantic-web/semantic-web-xhtmlrdfa-resources/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to Skin an RSS feed with XSL</title>
		<link>http://webr3.org/blog/secrets/how-to-skin-an-rss-feed-with-xsl/</link>
		<comments>http://webr3.org/blog/secrets/how-to-skin-an-rss-feed-with-xsl/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 00:59:27 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[secrets]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Extensible Stylesheet Language]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Markup languages]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Web browser]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=118</guid>
		<description><![CDATA[
Figured this one out years ago and have just never used it, you can display your rss feeds however you want using XSL to apply XHTML and CSS.
Take a look at mine here to see.
I'm not going to tell you too much about it, except for the fact that you need to pad out a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-119" title="butnicer" src="http://webr3.org/blog/wp-content/uploads/2009/08/butnicer.jpg" alt="butnicer" width="600" height="250" /></p>
<p>Figured this one out years ago and have just never used it, you can display your rss feeds however you want using XSL to apply XHTML and CSS.</p>
<p>Take a <a href="http://webr3.org/blog/feed/" target="_blank">look at mine here to see</a>.</p>
<p>I'm not going to tell you too much about it, except for the fact that you need to pad out a chunk of atleast 512 bytes before the &lt;rss&gt; block in order for the xsl to be applied by browsers ;) check the source of my feed and you'll see a couple of comments - ahh something so simple that has stopped the entire world from skinning there rss and making it pretty.</p>
<p>should be fun to see what people do with this one!</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/secrets/how-to-skin-an-rss-feed-with-xsl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Experiments Upgraded</title>
		<link>http://webr3.org/blog/general/experiments-upgraded/</link>
		<comments>http://webr3.org/blog/general/experiments-upgraded/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 13:58:05 +0000</pubDate>
		<dc:creator>nathan</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[Extensible Stylesheet Language]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Markup languages]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XSL Transformations]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://webr3.org/blog/?p=20</guid>
		<description><![CDATA[
It's a bit premature, seeing as I haven't even blogged about what the existing experiments are yet, however I'm glad to say that the section is finished and ready for veiwing.
Seeing as most of the audience of this blog will be using more recent browsers, I've opted for XSLT templates and small XML descriptors for [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-22" title="xslt-labs" src="http://webr3.org/blog/wp-content/uploads/2009/06/xslt-labs.jpg" alt="xslt-labs" width="600" height="250" /><br />
It's a bit premature, seeing as I haven't even blogged about what the existing experiments are yet, however I'm glad to say that the section is finished and ready for veiwing.</p>
<p>Seeing as most of the audience of this blog will be using more recent browsers, I've opted for XSLT templates and small XML descriptors for each item - this saves me writing tonnes of html, saves the server some weight, saves you some bandwidth and let's me palm off all rendering on to the client.</p>
<p>Inkeeping with the spirit of experiments, one of the main reasons I've done this is to see how the xml documents get listed in google (if at all); and to check if analytics works with XSLT.</p>
<p>On this note, I had to do a little bit of fiddling with the recommended embed code from google to get it to work; if anybody else hits this problem here's a modified version.</p>
<p><code><br />
&lt;script src="http://www.google-analytics.com/ga.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
try {<br />
var pageTracker = _gat._getTracker("UA-3391780-6");<br />
pageTracker._trackPageview();<br />
} catch(err) {}<br />
&lt;/script&gt;<br />
</code></p>
<p>And as for the listings, well thats just a quick and dirty PHP 5 class which iterates the directories, loads them in to a dom document and spits out the xml - ultra simples.</p>
]]></content:encoded>
			<wfw:commentRss>http://webr3.org/blog/general/experiments-upgraded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

