- From: Richard Newman <rnewman@franz.com>
- Date: Sun, 16 Aug 2009 22:43:49 -0700
- To: "On Lee" <onlee2000@hotmail.com>
- Cc: <public-sparql-dev@w3.org>
On 16 Aug 2009, at 10:12 PM, On Lee wrote: > Many FOAF files leverage other vocabulary such as http://purl.org/dc/elements/1.1/,http://xmlns.com/wot/0.1/ > , etc. > > Given a FOAF file, how to write SPARQL that can do the following? > > 1. List all statements that use foaf vocabulary such as > foaf:name, foaf:mbox, etc? > 2. List all statements that do *not* use foaf vocabulary? > > Thanks in advance for your help. > > Best, > -- On Lee If you have the ontology loaded, in an appropriate named graph, with sufficient reasoning, you can write a query such as CONSTRUCT { ?s ?p ?o } FROM <your.data> FROM NAMED <http://xmlns.com/foaf/0.1/> WHERE { ?s ?p ?o . GRAPH <http://xmlns.com/foaf/0.1/> { ?p a rdf:Property . } } to construct the subgraph of triples where the property is defined in the FOAF graph. Note that reasoning will need to be tightly constrained, here, to avoid undesirable entailments arising from that graph (such as rdf:type a rdf:Property, and thus all type statements appearing in your output). The other way to do this in SPARQL is to write a query like CONSTRUCT { ?s ?p ?o } WHERE { ?s ?p ?o . FILTER (regex(str(?p), "^http://xmlns\.com/foaf/0.1/")) } ... i.e., matching the namespace string. You'll have to check the regex escaping, or -- if your implementation supports it -- use fn:starts-with instead. Extending this to also match classes is an exercise for the reader. :) This is likely to be quite expensive; implementations are typically not designed to do this kind of thing. URIs are meant to be opaque. I'd be tempted to do this a completely different way, not using SPARQL: dump the FOAF file as N-Triples, and simply use grep. This is much simpler and more general than the SPARQL solutions above. E.g., wheeljack:~ rnewman$ rapper -q -i rdfxml -o ntriples http://heddley.com/edd/foaf.rdf | fgrep "http://xmlns.com/foaf/0.1/" <http://heddley.com/edd/foaf.rdf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type > <http://xmlns.com/foaf/0.1/PersonalProfileDocument> . <http://heddley.com/edd/foaf.rdf> <http://xmlns.com/foaf/0.1/maker> <http://heddley.com/edd/foaf.rdf#edd > . <http://heddley.com/edd/foaf.rdf> <http://xmlns.com/foaf/0.1/primaryTopic > <http://heddley.com/edd/foaf.rdf#edd> . <http://heddley.com/edd/foaf.rdf#edd> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type > <http://xmlns.com/foaf/0.1/Person> . <http://heddley.com/edd/foaf.rdf#edd> <http://xmlns.com/foaf/0.1/myersBriggs > "ENFJ" . <http://heddley.com/edd/foaf.rdf#edd> <http://xmlns.com/foaf/0.1/aimChatID > "EddDumbill" . Finding the non-FOAF properties is trivial; just add "-v" to the fgrep incantation. -R
Received on Monday, 17 August 2009 05:44:33 UTC