Re: How to write a UNION in SPARQL.

On Wed, Feb 16, 2011 at 10:49 AM, Olivier Rossel <datao@datao.net> wrote:
> In DBPedia, I want to get a list of presidents born in 1945.
> A president is either a "onto:President" or a "yago:President".
> So a UNION is needed to manage both.
>
> One way to write the corresponding SPARQL query is :
>
> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> PREFIX onto: <http://dbpedia.org/ontology/>
> PREFIX yago: <http://dbpedia.org/class/yago/>
> SELECT DISTINCT ?uri ?string
> WHERE
> {
> � � � �{
> � � � � � � � �?uri rdf:type onto:President .
> � � � � � � � �?uri onto:birthDate ?date .
> � � � � � � � �FILTER regex(?date, "^1945") .
> � � � � � � � �OPTIONAL {?uri rdfs:label ?string .}
> � � � � � � � �FILTER (lang(?string) = "en")
> � � � �}
> � � � �UNION
> � � � �{
> � � � � � � � �?uri rdf:type yago:President.
> � � � � � � � �?uri onto:birthDate ?date .
> � � � � � � � �FILTER regex(?date, "^1945") .
> � � � � � � � �OPTIONAL {?uri rdfs:label ?string .}
> � � � � � � � �FILTER (lang(?string) = "en")
> � � � �}
> }
>
> Another way is :
>
> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> PREFIX onto: <http://dbpedia.org/ontology/>
> PREFIX yago: <http://dbpedia.org/class/yago/>
> SELECT DISTINCT ?uri ?string
> WHERE
> {
> � � � �{{
> � � � � � � � �?uri rdf:type onto:President .
>
> � � � �}
> � � � �UNION
> � � � �{
> � � � � � � � �?uri rdf:type yago:President.
>
> � � � �}}.
>       ?uri onto:birthDate ?date .
> � � � � � � � �FILTER regex(?date, "^1945") .
> � � � � � � � �OPTIONAL {?uri rdfs:label ?string .}
> � � � � � � � �FILTER (lang(?string) = "en")
> }
>

(Oops, I sent the mail a bit too fast :)
So:
Which syntax is considered to be optimal?
Are there some best practices when using UNIONs?

Any help is welcome.

Olivier Rossel
--
Datao.net

Received on Wednesday, 16 February 2011 09:53:20 UTC