W3C home > Mailing lists > Public > public-lod@w3.org > April 2012

Re: WebIDs and Content-Location

From: Tim Berners-Lee <timbl@w3.org>
Date: Fri, 13 Apr 2012 11:35:34 -0400
Cc: Linked Data community <public-lod@w3.org>, public-webid <public-webid@w3.org>, public-cwm-talk@w3.org, Owen Sacco <owen.sacco@deri.org>
Message-Id: <398BB93E-E275-43C5-B3DA-D9ECA26AE647@w3.org>
To: Henry Story <henry.story@bblfish.net>

1) The base address used for parsing an RDF document should be the request URI,
not the Content-Location: value.   Otherwise randomly clients who can accept
n3 and rdf/xml will get <hada.rdf#me> and <hada.n3#me> which is clearly a bad idea.
(Imagining that there is a hada.n3 option).

Is there is a 302 Moved  redirect, then that new Location:  URI should be used
as the URI for the document and the base URI for parsing it.  (But NOT for 301).

2) You say that rapper is string outputting things as relative URIs as  but i would
support that, as often the absolute URI of a bit of RDF system is actually 
been mapped through proxying, or from looking at the files on a server in file:// space, 
and life is much easier if things default to 

I also like it that, anyone can do
        $ echo '<#a> <#p> 123 .' | cwm --quiet
and get
        @prefix : <#> .
        :a     :p 123 .

without being cluttered with  lots of references to the working directory.

On 2012-04 -13, at 08:54, Henry Story wrote:

> I have an issue about canonicalisation (de-relativisation?) of URLs. cwm and rapper
> don't return the same results, though cwm agrees with http://www.w3.org/RDF/Validator/
> 
> What is the full URL for the rdf:ID="me" in the XML returned below?
> Is it 
> 
>  - <http://vmuss13.deri.ie/foafprofiles/hada#me> as cwm  ( cwm.py,v 1.198 2012-01-30) and the w3 validator state?
>  or is it
>  - <hada.rdf#me> as raptor 2.0.6 returns (bizarrely as a relative url though) and as I thought it should be.
> 
> 
> $ curl -i http://vmuss13.deri.ie/foafprofiles/hada
> HTTP/1.1 200 OK
> Date: Fri, 13 Apr 2012 12:04:11 GMT
> Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny12 with Suhosin-Patch
> Content-Location: hada.rdf
> Vary: negotiate
> TCN: choice
> Last-Modified: Fri, 13 Apr 2012 11:26:38 GMT
> ETag: "8080-6af-4bd8dbeebb780;4bd8dbeebb780"
> Accept-Ranges: bytes
> Content-Length: 1711
> Content-Type: application/rdf+xml
> 
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>       xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
>       xmlns:foaf="http://xmlns.com/foaf/0.1/"
>       xmlns:rsa="http://www.w3.org/ns/auth/rsa#"
>       xmlns:cert="http://www.w3.org/ns/auth/cert#"
>       xmlns:admin="http://webns.net/mvcb/">
> <foaf:PersonalProfileDocument rdf:about="">
>     <foaf:maker rdf:resource="#me"/>
>     <foaf:primaryTopic rdf:resource="#me"/>
> </foaf:PersonalProfileDocument>
> <foaf:Person rdf:ID="me">
>     <foaf:nick>HADAUser1</foaf:nick>
>     <foaf:givenName>Jane</foaf:givenName>
>     <foaf:familyName>Smith</foaf:familyName>
>     <foaf:workplaceHomepage rdf:resource="http://hhs.gov"/>	
>     <foaf:topic_interest rdf:resource="HEAR"/>
>     <foaf:topic_interest rdf:resource="Accounting"/>
> 
>     <cert:key>
>       <cert:RSAPublicKey rdf:ID="key1">
> 	<rdfs:label>HADA Admin</rdfs:label>
>         <cert:modulus rdf:datatype="http://www.w3.org/2001/XMLSchema#hexBinary">95052F88477A3F1ADC1964AFD1AB7438F34EADEF22D9C5BDB8739E671F4626A347A3031E9FD4A5E2176D3048DA52DCA6AFFD67C81588A27A088A7CD27E2F2CBA2FF83DA90700797BE75BB9122FE5375E13BCFA55BE5504176886B0AC0BBB792D5221FE5295C75A3654385B8490A478A64AA117430F88E42852061230CD1C32EE2F01CD5FDD9D6DD4B757163CC9C1DB29BAC3EA9605D82D76AD7D5BE26D53DC9EA7A6C87369F53B4C2BBA149406E4A0FD5B921338DCB5B355D0DBBA95A238924678211ED997657ABC7FEDD28A93F8A5A19B463E72A17EFD204A80BEAFC41B841B079AE49FDBD28B62D01B9675D3508B4BAC98B6BE972A17C27C2415281C650121</cert:modulus>
>         <cert:exponent rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">65537</cert:exponent>
>       </cert:RSAPublicKey>
>     </cert:key>
> </foaf:Person>
> </rdf:RDF>
> 
> In my code  on read-write-web I use the returned Content-Location to form the base URL
> 
>    148           val loc = headers("Content-Location").headOption match {
>    149             case Some(loc) =>  new URL(u,loc)
>    150             case None => new URL(u.getProtocol,u.getAuthority,u.getPort,u.getPath)
>    151           }
>    152           res>>{ in=> modelFromInputStream(in,loc,encoding) }
>    153 
> ( https://dvcs.w3.org/hg/read-write-web/file/c6520ef80d5c/src/main/scala/GraphCache.scala#l148 )
> 
> Where modelFromInputStream uses the Jena libraries like this:
> 
>     12   def modelFromInputStream(
>     13       is: InputStream,
>     14       base: URL,
>     15       lang: Lang): Validation[Throwable, Model] =
>     16     try {
>     17       val m = ModelFactory.createDefaultModel()
>     18       m.getReader(lang.jenaLang).read(m, is, base.toString)
>     19       m.success
>     20     } catch {
>     21       case t =>  {
>     22         logger.info("cought exception turning stream into model ",t)
>     23         t.fail
>     24       }
>     25     }
> ( https://dvcs.w3.org/hg/read-write-web/file/c6520ef80d5c/src/main/scala/util/package.scala )
> 
> 
> Social Web Architect
> http://bblfish.net/
> 
Received on Friday, 13 April 2012 15:35:56 UTC

This archive was generated by hypermail 2.3.1 : Sunday, 31 March 2013 14:24:39 UTC