{"id":819,"date":"2012-03-01T00:29:52","date_gmt":"2012-03-01T00:29:52","guid":{"rendered":"http:\/\/blog.soton.ac.uk\/webteam\/?p=819"},"modified":"2012-03-04T20:48:16","modified_gmt":"2012-03-04T20:48:16","slug":"firing-range-14","status":"publish","type":"post","link":"https:\/\/blog.soton.ac.uk\/webteam\/2012\/03\/01\/firing-range-14\/","title":{"rendered":"Firing Range-14"},"content":{"rendered":"<p>So there&#8217;s a <a href=\"http:\/\/www.w3.org\/2001\/tag\/doc\/uddp\/change-proposal-call.html\">call for suggestions to fix\/replace http range14<\/a>.<\/p>\n<p>If you&#8217;re not familiar with this. The basic sitution is that we use URIs to represent real world things, and if you resolve them they give a &#8220;303 See Other&#8221; to redirect you to a document of interest, presumably about the subject you asked about.<\/p>\n<p>eg.<\/p>\n<p>I, the person, am identified by URI: <a href=\"http:\/\/id.ecs.soton.ac.uk\/person\/1248\">http:\/\/id.ecs.soton.ac.uk\/person\/1248<\/a><\/p>\n<p>My profile page, an HTML document, is identified (&amp; located) by URL: <a href=\"http:\/\/www.ecs.soton.ac.uk\/people\/cjg\">http:\/\/www.ecs.soton.ac.uk\/people\/cjg<\/a><\/p>\n<p>My FOAF Profile, an RDF+XML document containing machine-readable facts about me is identified (&amp; located) by URL: <a href=\"http:\/\/rdf.ecs.soton.ac.uk\/person\/1248\">http:\/\/rdf.ecs.soton.ac.uk\/person\/1248<\/a><\/p>\n<p>If you resolve my URI in a web browser, it&#8217;ll pop up my profile page. You can see how by typing this on the UNIX or OSX terminal:<\/p>\n<pre>curl -I http:\/\/id.ecs.soton.ac.uk\/person\/1248<\/pre>\n<p>The response will be more or less like this:<\/p>\n<pre>HTTP\/1.1 <strong>303 See Other<\/strong>\r\nDate: Wed, 29 Feb 2012 23:52:16 GMT\r\nServer: Apache\r\nX-Powered-By: PHP\/5.3.3\r\n<strong>Location: http:\/\/www.ecs.soton.ac.uk\/people\/cjg<\/strong>\r\nConnection: close\r\nContent-Type: text\/html; charset=utf-8<\/pre>\n<p>Which means go look at the URL in the &#8220;Location:&#8221; bit. The 303 indicates &#8220;See Other&#8221; rather than the normal &#8220;Moved&#8221;, which implies it might not actually be the same thing.<\/p>\n<p>For added complexity, if you tell the web server you prefer to get RDF+XML documents, by typing<\/p>\n<pre>curl -H'accept:application\/rdf+xml' -I http:\/\/id.ecs.soton.ac.uk\/person\/1248<\/pre>\n<p>You get back<\/p>\n<pre>HTTP\/1.1<strong> 303 See Other<\/strong>\r\nDate: Wed, 29 Feb 2012 23:54:39 GMT\r\nServer: Apache\r\nX-Powered-By: PHP\/5.3.3\r\n<strong>Location: http:\/\/rdf.ecs.soton.ac.uk\/person\/1248<\/strong>\r\nConnection: close\r\nContent-Type: text\/html; charset=utf-8<\/pre>\n<p>This is bloody hard for people to get their heads around, and not obvious unless you really grok how the web was designed. However, for me, the real screw-up in all of this is using &#8220;http:&#8221; to represent something which isn&#8217;t a document&#8230; It&#8217;s not like we weren&#8217;t already using http: https: gopher: ftp: urn: mailto: tel: etc. (OK, nobody remembrs gopher)<\/p>\n<p>I think it&#8217;s daft to use the same protocol to unqiuely identify real-world objects AND documents on the web. I have to explain this again and again to each person learning RDF, and it won&#8217;t take off if people can&#8217;t figure it out for themselves, like HTML, JSON, XML etc.<\/p>\n<h2>\ufeffSchema.org<\/h2>\n<p>If you&#8217;ve not yet seen <a href=\"http:\/\/schema.org \">schema.org<\/a>; it&#8217;s a website which presents a schema for information friendly to search engnges. It mostly doesn&#8217;t idenify &#8216;things&#8217; at all, just defines a structure and literal properties of items in that structure (eg. start time of an event, name of a person). I hear it uses URLs to identify things which isn&#8217;t as crazy as it sounds if you define the relationships correctly. eg.<\/p>\n<p>&lt;http:\/\/www.soton.ac.uk&gt; *hasMember* &lt;http:\/\/www.ecs.soton.ac.uk\/person\/cjg&gt; .<\/p>\n<p>That&#8217;s an utterly reasonable statement if *hasMember* is defined as meaning &#8220;the group or organization which is the primary topic of the first document, has a member which is the primary topic of the second document&#8221;. It&#8217;s ugly, but entirely semantically sane. In <em>slightly<\/em> more formal terms;<\/p>\n<p>?X *hasMember* ?Y<\/p>\n<p>implies<\/p>\n<p>?X foaf:primaryTopic ?X-topic .<br \/>\n?Y foaf:primaryTopic ?Y-topic .<br \/>\n?X-topic foaf:member ?Y-topic .<\/p>\n<h2>My proposal; infra:<\/h2>\n<p>UPDATE 3: So it turns out that just like my &#8216;primaryTopic.net&#8217; namespace idea, this is also an idea that&#8217;s been suggested before, in far more careful detail: <a href=\"tools.ietf.org\/html\/draft-masinter-dated-uri-10\">tools.ietf.org\/html\/draft-masinter-dated-uri-10<\/a><\/p>\n<p>So my analysis stands, but as regards the tdb: (thing-described-by) system described in the above link.<\/p>\n<p>and I admit I&#8217;ve not got the 10 years of literature review as some of the community, but can&#8217;t we just do:<\/p>\n<p>infra:http:\/\/www.ecs.soton.ac.uk\/person\/cjg<\/p>\n<p>and specify that http:\/\/www.ecs.soton.ac.uk\/person\/cjg is assumed to be a document about that thing, and it could optionally content-negotiate if it wants.<\/p>\n<p>Effectively, there&#8217;s a standing definiation that &lt;XYZ&gt; foaf:primaryTopic &lt;infra:XYZ&gt; .<\/p>\n<p>NOTE: My first draft used &#8220;resource:&#8221; not &#8220;infra:&#8221; but that was very muddling to type in an RDF+XML document. I don&#8217;t really care about the choice of name, just the approach.<\/p>\n<h3>Pros:<\/h3>\n<ul>\n<li>Visible distinction between Document &amp; Non-Information URIs<\/li>\n<li>Does not invalidate http: URIs, just provides a better method<\/li>\n<li>Allows URIs to be created from popular websites without\u00a0 formal buy in; eg. infra:http:\/\/www.imdb.com\/title\/tt0133093\/ or infra:http:\/\/xkcd.com\/327\/<\/li>\n<li>Should not break existing software, such a triple stores.<\/li>\n<li>Allows a bridge to the schema.org approach (refer to things by a URL which describes them)<\/li>\n<li>You can still use content negotiation on the URL to give back HTML or RDF.<\/li>\n<li>Provides similar functionality to &#8220;&amp;&#8221; and &#8220;*&#8221; operators in C<\/li>\n<li>Allows existing URLs to be cleanly used as identifiers in a semantically correct way.<\/li>\n<li>Works with # elements in documents, eg. infra:http:\/\/en.wikipedia.org\/wiki\/University_of_Southampton#Malaysia_Campus<\/li>\n<\/ul>\n<h3>Cons:<\/h3>\n<ul>\n<li>Will require some trivial changes to existing systems to allow them to resolve these URIs into additional data.<\/li>\n<li>Current URIs may still confuse new users as they start with http:\/\/<\/li>\n<li>It is entirely reasonable to have infra:infra:infra:http:\/\/totl.net\/ but that&#8217;s going to tramatise anybody who didn&#8217;t absorb C pointer de-referencing through the skin in their formative years.<\/li>\n<li>Obviously, my abilitiy to identify cons is limited by proximity.<\/li>\n<li>People might just slap &#8220;infra:&#8221; on the front of everything, even standard URIs.<\/li>\n<li>&#8220;it&#8217;s not great for sites with high traffic; tends to encourage conflation with REST. Be nice if could message intent.&#8221; &#8211; from <a href=\"http:\/\/twitter.com\/derivadow\">@derivadow<\/a><\/li>\n<\/ul>\n<p>I doubt I&#8217;ve got the whole picutre, but in that statement lies much of the problem. I&#8217;m now definitely an expert, and I still don&#8217;t &#8216;get&#8217; the subtle issues. If the linked-data-web is going to work we&#8217;ve got to make it workable by the hacky pragmatists who didn&#8217;t make their RSS feeds valid XML, just made sure they worked in a few major readers. They aren&#8217;t jerks, they just have different priorities to us university types!<\/p>\n<p>UPDATE 1:<\/p>\n<p>I&#8217;ve created an <a href=\"http:\/\/lemur.ecs.soton.ac.uk\/~cjg\/foaf.rdf\">example FOAF profile using this approach<\/a>. It uses a mixture of &#8216;traditional&#8217; URIs and normal URIs, and <a href=\"http:\/\/graphite.ecs.soton.ac.uk\/browser\/?uri=http%3A%2F%2Flemur.ecs.soton.ac.uk%2F~cjg%2Ffoaf.rdf\">ARC2 and Graphite seem to be fine with it<\/a>, but a stricter test is the W3 validatior &amp; <a href=\"http:\/\/www.w3.org\/RDF\/Validator\/ARPServlet?URI=http%3A%2F%2Flemur.ecs.soton.ac.uk%2F~cjg%2Ffoaf.rdf&amp;PARSE=Parse+URI%3A+&amp;TRIPLES_AND_GRAPH=PRINT_TRIPLES&amp;FORMAT=PNG_EMBED\">it passes that too!<\/a>, so won&#8217;t break existing software, except for requiring a quick fiddle to make the URIs resolvable, which should be simple enough.<\/p>\n<p>I&#8217;ve also edited the proptocol name from &#8220;resource:&#8221; to &#8220;infra:&#8221;<\/p>\n<p>The code to create the implied triples from infra: URIs is trivial; running the previous FOAF example through <a href=\"http:\/\/lemur.ecs.soton.ac.uk\/~cjg\/infrainferer.source\">a scrap of PHP<\/a> produces this <a href=\"http:\/\/lemur.ecs.soton.ac.uk\/~cjg\/infrainferer.php?url=http%3A%2F%2Flemur.ecs.soton.ac.uk%2F~cjg%2Ffoaf.rdf\">version with primaryTopic realtions injected<\/a>.<\/p>\n<p>UPDATE 2:<\/p>\n<p>On reflection &#8216;primary topic&#8217; might be too loaded and a different predicate may be more appropriate. It doesn&#8217;t really matter to the basic idea.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So there&#8217;s a call for suggestions to fix\/replace http range14. If you&#8217;re not familiar with this. The basic sitution is that we use URIs to represent real world things, and if you resolve them they give a &#8220;303 See Other&#8221; to redirect you to a document of interest, presumably about the subject you asked about. [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[136],"tags":[],"class_list":["post-819","post","type-post","status-publish","format-standard","hentry","category-rdf"],"_links":{"self":[{"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/posts\/819","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/comments?post=819"}],"version-history":[{"count":8,"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/posts\/819\/revisions"}],"predecessor-version":[{"id":823,"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/posts\/819\/revisions\/823"}],"wp:attachment":[{"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/media?parent=819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/categories?post=819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.soton.ac.uk\/webteam\/wp-json\/wp\/v2\/tags?post=819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}