- From: Sean B. Palmer <sean@mysterylights.com>
- Date: Fri, 5 Sep 2003 10:56:18 +0100
- To: "Libby Miller" <Libby.Miller@bristol.ac.uk>, "Graham Klyne" <gk@ninebynine.org>
- Cc: "www-rdf-rules" <www-rdf-rules@w3.org>
> Damian Steer has come up with an implementation of > an RDF path syntax as an addition to Saxon: That's interesting, especially in that it doesn't appear to conflate nodes and arcs since it uses RDF/XML's striping. But I wonder how it handles stuff such as <foaf:Person><foaf:knows><foaf:Person/></></>--will it make the internally nested Person available from the root, or does one have to //foaf:Person to get it? And if so, would //rdf:type match rdf:type as a node or an arc, or both? (I've not got Java on this box... will test shortly; I looked at the "README", which made some things clearer). > I really like the idea of an RDF path syntax, because I think > that it might enable the huge community of XSLT users to > get to grips with RDF quickly without dealing with the syntax, > and using the XML tools they are used to. Absolutely! > What I'd love to see is a mapping from (some subset of?) > RDF-path type queries to say Squish or RDQL I don't think that you can necessarily do it like that. For example, let's take the RDF-Path that I used in my previous email:- *[rdf:type/foaf:Person foaf:name/"Sean B. Palmer"] /foaf:knows/*[rdf:type/foaf:Person]/foaf:mbox/* As stated, this is equivalent to the following query:- ?x rdf:type foaf:Person . ?x foaf:name "Sean B. Palmer" . ?x foaf:knows ?y . ?y rdf:type foaf:Person . ?y foaf:mbox ?z . But it only returns ?z in the results. In fact, I'd go about it by breaking the path up into a smaller set of queries and conditions. Here's how I'd do it, procedurally:- "*" Query all nodes, i.e. { ?nodeSubj ?arcPred ?nodeObjt }. "[rdf:type/foaf:Person " For each ?nodeSubj and ?nodeObjt in the bindings, assign to ?node, and query for {?node rdf:type foaf:Person}. For each ?node, continue if there are > 0 results. " foaf:name/"Sean B. Palmer"]" For each ?node, query for {?node foaf:name "Sean B. Palmer"}. For each ?node, continue if there are > 0 results. "/foaf:knows/*" Query for {?node foaf:knows ?objt}. "[rdf:type/foaf:Person]" For each ?objt, query for {?objt rdf:type foaf:Person}, and continue only if there are > 0 results. "/foaf:mbox/*" Query for { ?objt foaf:mbox ?mbox }, and return each ?mbox. Phew. So it's actually made up of lots of little queries and conditions. I'm not sure whether the compilation method would be faster or slower, and which is the best route to implementation. Perhaps I ought to try both and thne compare them. The former looks easiest, but flat RDF Queries are still pretty complicated things because you constantly have to sift through all of the triples, unless you've mapped masks in your Graph class, whereas in the Path case--with all the little queries and conditions--you're pruning away branches all the time. It's very interesting to compare the two, and I'm glad Graham brought it up so quickly. Cheers, -- Sean B. Palmer, <http://purl.org/net/sbp/> "phenomicity by the bucketful" - http://miscoranda.com/
Received on Friday, 5 September 2003 05:59:53 UTC