W3C home > Mailing lists > Public > semantic-web@w3.org > February 2011

How to write a UNION in SPARQL.

From: Olivier Rossel <datao@datao.net>
Date: Wed, 16 Feb 2011 10:49:05 +0100
Message-ID: <AANLkTinFSOi839GyPc4H5ULYEWXW62ZjHvnVQaObLZj1@mail.gmail.com>
To: Semantic Web <semantic-web@w3.org>
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")
}
Received on Wednesday, 16 February 2011 09:49:39 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 21:45:41 GMT