- From: François Scharffe <francois.scharffe@sti2.at>
- Date: Thu, 21 Aug 2008 21:24:12 +0800
- To: Lee Feigenbaum <lee@thefigtrees.net>
- CC: public-sparql-dev@w3.org, public-lod@w3.org
- Message-ID: <48AD6C7C.6040507@sti2.at>
Hi Lee !
Here are queries demonstrating the use of SPARQL CONSTRUCT for data
transformation between heterogeneous vocabularies. The following queries
allow to transform FOAF resources into vCard ones:
PREFIX vCard: http://www.w3.org/2001/vcard-rdf/3.0#
PREFIX foaf: http://xmlns.com/foaf/0.1/
CONSTRUCT { ?X vCard:FN ?name . }
WHERE { ?X foaf:name ?name . FILTER isLiteral(?name) }
CONSTRUCT {?X vCard:N _:a .
_:a vCard:Family ?fname .
_:a vCard:Given ?gname .}
WHERE { ?X foaf:firstName ?gname .
?X foaf:surname ?fname . }
CONSTRUCT { ?X vCard:URL ?url . }
WHERE { ?X foaf:workplaceHomepage ?url . FILTER isURI(?url) }
CONSTRUCT { ?X vCard:URL ?url . }
WHERE { ?X foaf:homepage ?url . FILTER isURI(?url) }
CONSTRUCT { ?X vCard:TITLE ?title }
WHERE { ?X foaf:title ?title . FILTER ( isLiteral(?T1) }
CONSTRUCT { ?X vCard:ORG _:a .
_:a vCard:Orgname ?name .
_:a vCard:URL ?url . }
WHERE { ?X foaf:currentProject ?Y
?Y foaf:name ?name .
?Y foaf:homepage ?url . }
CONSTRUCT { ?X vCard:ORG _:a .
_:a vCard:Orgname ?name . }
WHERE { ?X foaf:Group ?Y
?Y foaf:name ?name . }
One can remark this is only a partial transformation. That's because the
current SPARQL spec misses some features like aggregates and individual
generation. We would like for example to express the following CONSTRUCT
queries:
CONSTRUCT { ?X vCard:TEL _:a .
_:a rdf:value fn:substring(?T1,5) .
_:a a http://www.w3.org/2001/vcard-rdf/3.0#voice }
WHERE { ?X foaf:phone ?T1 .
FILTER ( isURI(?T1) )
Removing the "tel:" prefix of vCard:TEL, or
CONSTRUCT { ?X vCard:EMAIL _:a .
_:a rdf:value fn:concat("mailto:",?email) .
_:a a http://www.w3.org/2001/vcard-rdf/3.0#internet }
WHERE { ?X foaf:mbox ?email . }
adding the mailto: prefix to the vCard:EMAIL.
This is not possible in the current SPARQL spec. Our SPARQL++ [1]
extension tackle this. Maybe a future recommendation ? ;)
Cheers,
François
[1]http://www.scharffe.fr/pub/sparql++-for-mapping-between-rdf-vocabularies-ODBASE-2007.pdf
Lee Feigenbaum wrote:
>
> Hi everyone,
>
> I'm putting together a "SPARQL by Example" tutorial, which is, as the
> name suggests, a step-by-step introduction to SPARQL taught almost
> entirely through complete, runnable SPARQL queries.
>
> So far, I've gathered a great deal of example queries myself, but I know
> that many subscribers to these lists probably have favorite queries of
> their own that you might be willing to share with me.
>
> I'm looking for:
>
> 1) SPARQL queries
> 2) ...that can be run by anyone (no private data sets)
> 3a)...either by running the query against a public SPARQL endpoint
> 3b)...or by using a public SPARQL endpoint that will fetch
> HTTP-accessible RDF data (e.g. sparql.org or demo.openlinksw.com)
> 4) ...that answers a real* question
> 5) ...and that is fun!**
>
> * real is in the eye of the beholder, I imagine, but I'm not looking for
> "finds the predicates that relate ex:s and ex:o in this sample RDF graph"
>
> ** fun is also in the eye of the beholder. fun can be a query on fun
> data; a clever query that may illustrate a particular SPARQL construct
> ("trick"); a query that integrates interesting information; a query with
> surprising results; etc.
>
> thanks to anyone who is able to contribute!
> Lee
>
> PS I plan to make the tutorial slides available online under an
> appropriate CC license once they are completed.
>
>
>
Received on Thursday, 21 August 2008 13:23:01 UTC