- From: Hugh Glaser <hg@ecs.soton.ac.uk>
- Date: Thu, 17 Mar 2011 17:07:35 +0000
- To: Mark Wallace <mwallace@modusoperandi.com>
- CC: Alan Ruttenberg <alanruttenberg@gmail.com>, Reto Bachmann-Gmuer <reto.bachmann@trialox.org>, Pat Hayes <phayes@ihmc.us>, Ivan Shmakov <oneingray@gmail.com>, Ivan Shmakov <ivan@main.uusia.org>, "<semantic-web@w3.org>" <semantic-web@w3.org>
On 17 Mar 2011, at 14:37, Mark Wallace wrote: > On 3/17/2011 6:34 AM, Hugh Glaser wrote: >> If I take a graph of any kind and use a particular serialisation method, and communicate that somewhere else, and then de-serialise, do I end up with the same graph? >> For most serialisations, the answer will be "no". >> > (Daring with trepidation to enter these waters... :-) ) You and me both mate :-) > > I would think the opposite would be true. I understand that RDF is first and foremost a graph model, independent of serialization. Given that, I would expect that for most serializations, the pre-serialized and post-serialized versions of the graph (i.e., in memory) would be the same. The *serializations* would not be the same, but shouldn't the *logical graph model* be the same? Isn't that the point of the RDF spec separating serialization from logical model? > > E.g. with Jena, given this file (test.ttl) > @prefix : <http://example.com/demo#> . > :joe :has [ a :dog ] . Just to be clear, this is a serialisation already. > I serialize it as RDF-XML: > C> java jena.rdfcat test.ttl > <rdf:RDF > xmlns:rdf=MailScanner has detected a possible fraud attempt from "www.w3.org" claiming to be "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > xmlns=MailScanner has detected a possible fraud attempt from "example.com" claiming to be "http://example.com/demo#"> > <rdf:Description rdf:about=MailScanner has detected a possible fraud attempt from "example.com" claiming to be "http://example.com/demo#joe"> > <has> > <dog/> > </has> > </rdf:Description> > </rdf:RDF> > Or I serialize it as N-Triples: > C> java jena.rdfcat -out ntriple test.ttl > <http://example.com/demo#joe> <http://example.com/demo#has> _:A113e01ecX3aX12ec4399200X3aXX2dX8000 . > _:A113e01ecX3aX12ec4399200X3aXX2dX8000 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.com/demo#dog> . > > Or I serialize it as N-Triples and then de-serialize that back into memory in order to de-serialize it as RDF-XML: > C> java jena.rdfcat -out ntriple test.ttl | java jena.rdfcat -out xml -n - > <rdf:RDF > xmlns:rdf=MailScanner has detected a possible fraud attempt from "www.w3.org" claiming to be "http://www.w3.org/1999/02/22-rdf-syntax-ns#" > xmlns:j.0=MailScanner has detected a possible fraud attempt from "example.com" claiming to be "http://example.com/demo#" > > <rdf:Description rdf:about=MailScanner has detected a possible fraud attempt from "example.com" claiming to be "http://example.com/demo#joe"> > <j.0:has rdf:nodeID="A0"/> > </rdf:Description> > <rdf:Description rdf:nodeID="A0"> > <rdf:type rdf:resource=MailScanner has detected a possible fraud attempt from "example.com" claiming to be "http://example.com/demo#dog"/> > </rdf:Description> > </rdf:RDF> > > I do all that and then pipe it back to N-Triples again: > C> java jena.rdfcat -out ntriple test.ttl | java jena.rdfcat -out xml -n - | java jena.rdfcat -out ntriple -x - > <http://example.com/demo#joe> <http://example.com/demo#has> _:AX2dX59ad73bbX3aX12ec43a94a9X3aXX2dX8000 . > _:AX2dX59ad73bbX3aX12ec43a94a9X3aXX2dX8000 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.com/demo#dog> . > > Yes the serializations all differ, but the graph represented is the same. Right? This graph is pretty simple, so is not likely to show any problems (but a good point to start discussion). If you start with a graph that was a fragment of a graph (that is, it was connected), then things might look different. Consider if the original store also had (in addition to your fragment): _:A113e01ecX3aX12ec4399200X3aXX2dX8000 rdfs:label "Bill" So :joe has a dog called Bill. If I combine your second serialisation with this triple, I do not get the connection. The graph then roughly says that :joe had a dog, and there is a dog in the world called Bill. Clearly the reason is that the b-node identifier being used is not global, so if I move the graph our of the local, to the global and then back again, I have lost information. Unlike if it was a URI, which has a global meaning. So the problem, if it is one, is because of the b-nodes, which is where we came in... :-) Best Hugh > > -Mark -- Hugh Glaser, Intelligence, Agents, Multimedia School of Electronics and Computer Science, University of Southampton, Southampton SO17 1BJ Work: +44 23 8059 3670, Fax: +44 23 8059 3045 Mobile: +44 78 9422 3822, Home: +44 23 8061 5652 http://www.ecs.soton.ac.uk/~hg/
Received on Thursday, 17 March 2011 17:08:47 UTC