All the queries in this tutorial can be verified against the following live instances:
For each of these instances you have /sparql (basic SPARQL Endpoint) and /isparql (SPARQL Query By Example UI and Endpoint).
## Find a Person Entities named "Stefan Jenkner"
## that knows at least on person named "Christin":
SELECT ?x
WHERE
{
?x foaf:name "Stefan Jenkner" .
FILTER
(
bif:exists
( (
SELECT *
WHERE
{
?x foaf:knows ?y .
?y foaf:name "Christin"
}
) )
)
}
## See LOD live results.
## "Nested DISTINCT subquery
## with Scalars and Order By":
SELECT DISTINCT ?n
((
SELECT COUNT (*)
WHERE
{
?p foaf:interest ?i .
?ps foaf:interest ?i
}
))
((
SELECT COUNT (*)
WHERE
{
?p foaf:interest ?i
}
))
WHERE
{
?ps foaf:nick "brisch"@en .
{
SELECT DISTINCT ?p ?psi
WHERE
{
?p foaf:interest ?i .
?psi foaf:interest ?i
}
} .
FILTER
(
?ps = ?psi
)
?p foaf:nick ?n
}
ORDER BY DESC 2
LIMIT 50
## See LOD live results.
## "Find pairs of people interested
## in the same specialty where the two people
## do not know each other":
SELECT ?i
?cnt
?n1
?n2
?p1
?p2
WHERE
{
{
SELECT ?i
COUNT (*) AS ?cnt
WHERE
{
?p foaf:interest ?i
}
GROUP BY ?i
}
FILTER
(
?cnt > 1
&&
?cnt < 10
) .
?p1 foaf:interest ?i .
?p2 foaf:interest ?i .
FILTER
(
?p1 != ?p2
&&
!bif:exists
((
SELECT (1)
WHERE
{
?p1 foaf:knows ?p2
}
)) &&
!bif:exists
((
SELECT (1)
WHERE
{
?p2 foaf:knows ?p1
}
))
) .
?p1 foaf:nick ?n1 .
?p2 foaf:nick ?n2
}
ORDER BY ?cnt
LIMIT 10
## See LOD live results.
## "Use subqueries to enable literal values based joins:"
PREFIX nie: <http://www.semanticdesktop.org/ontologies/nie#>
PREFIX nao: <http://www.semanticdesktop.org/ontologies/nao#>
SELECT DISTINCT ?r
WHERE
{
graph ?g
{
?r nie:url ?url .
} .
?g nao:maintainedBy ?app .
FILTER (?app = (SELECT ?a WHERE { ?a nao:identifier "nepomukindexer" }))
}
## "Use subqueries to enable literal values based joins:"
PREFIX nie: <http://www.semanticdesktop.org/ontologies/nie#>
PREFIX nao: <http://www.semanticdesktop.org/ontologies/nao#>
SELECT DISTINCT ?r
WHERE
{
graph ?g
{
?r nie:url ?url .
} .
?g nao:maintainedBy
`(
SELECT ?a
WHERE
{
?a nao:identifier "nepomukindexer"
}
)` .
}
## "Find all names and optionally mailboxes
## of friends of all Melvin Carvalho who know a Michael Hausenblas":
SELECT ?f+>foaf:name
?f*>foaf:mbox
WHERE
{
?x foaf:name "Melvin Carvalho" .
?x foaf:knows ?f .
FILTER
(
?f+>foaf:name = "Michael Hausenblas"
)
}
The same query could be written:
SELECT ?fname
?mbox
WHERE
{
?x foaf:knows ?f .
OPTIONAL
{
?f foaf:mbox ?mbox
} .
?f foaf:name ?fname .
?x foaf:name "Melvin Carvalho" .
?x foaf:knows ?f2 .
?f2 foaf:name "Michael Hausenblas"
}
## See LOD live results.
## "Entity Ranking":
PREFIX yago: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT DISTINCT ?s2 AS ?c1
( <LONG::IRI_RANK> (?s2) ) AS ?Rank
WHERE
{
?s1 ?s1textp ?o1 .
?o1 bif:contains 'Shakespeare' .
?s1 a yago:Writer110794014 .
?s2 prop:writer ?s1
}
ORDER BY DESC ( <LONG::IRI_RANK> (?s2) )
## See dbpedia live results.
## See LOD live results.
## Searching over labels, with text match
## scores and additional ranks for each
## iri / resource:
SELECT ?s ?page ?label
?textScore AS ?Text_Score_Rank
( <LONG::IRI_RANK> (?s) ) AS ?Entity_Rank
WHERE
{
?s foaf:page ?page .
?s rdfs:label ?label .
FILTER( lang( ?label ) = "en" ) .
?label bif:contains 'adobe and flash'
OPTION (score ?textScore ) .
}
## See LOD live results.
## "xcontains usage":
SELECT *
FROM <http://mygraph.com>
WHERE
{
?s ?p ?o .
?o bif:xcontains "//Hello[text-contains (., 'world')]"
}
## "Operatior IN usage":
SELECT ?s1 ?s2 COUNT (1)
WHERE
{
?s1 ?p ?o .
FILTER (
?s1 IN
(
<http://dbpedia.org/resource/Climate_change>,
<http://dbpedia.org/resource/Disaster_risk_reduction>,
<http://dbpedia.org/resource/Tanzania>,
<http://dbpedia.org/resource/Capacity_building>,
<http://dbpedia.org/resource/Poverty>,
<http://dbpedia.org/resource/Construction>,
<http://dbpedia.org/resource/Vulnerability>,
<http://dbpedia.org/resource/Mount_Kilimanjaro>,
<http://dbpedia.org/resource/Social_vulnerability>
)
)
?s2 ?p ?o .
FILTER (
?s2 IN
(
<http://dbpedia.org/resource/Climate_change>,
<http://dbpedia.org/resource/Disaster_risk_reduction>,
<http://dbpedia.org/resource/Tanzania>,
<http://dbpedia.org/resource/Capacity_building>,
<http://dbpedia.org/resource/Poverty>,
<http://dbpedia.org/resource/Construction>,
<http://dbpedia.org/resource/Vulnerability>,
<http://dbpedia.org/resource/Mount_Kilimanjaro>,
<http://dbpedia.org/resource/Social_vulnerability>
)
)
FILTER ( ?s1 != ?s2 )
FILTER ( str( ?s1 ) < str ( ?s2 ) )
}
LIMIT 20
## See dbpedia live results.
## See LOD live results.
SELECT DISTINCT ?x ?o
WHERE
{
?x a foaf:Agent .
?x ?p ?o .
FILTER (
!bif:exists
(
(
SELECT (1)
WHERE
{
?x a foaf:Person
}
)
)
)
}
LIMIT 10
## See LOD live results.
DESCRIBE ?x
WHERE
{
?x a foaf:Agent .
FILTER (
!bif:exists
(
(
SELECT (1)
WHERE
{
?x a foaf:Person
}
)
)
)
}
LIMIT 200
## See LOD live results.
## "Find which town or city in
## the UK has the largest proportion of students":
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpedia-owl-uni: <http://dbpedia.org/ontology/University/>
PREFIX dbpedia-owl-inst: <http://dbpedia.org/ontology/EducationalInstitution/>
SELECT ?town COUNT(?uni)
?pgrad ?ugrad
MAX(?population)
( ((?pgrad+?ugrad)/ MAX(?population))*100 ) AS ?percentage
WHERE
{
?uni dbpedia-owl-inst:country dbpedia:United_Kingdom ;
dbpedia-owl-uni:postgrad ?pgrad ;
dbpedia-owl-uni:undergrad ?ugrad ;
dbpedia-owl-inst:city ?town .
OPTIONAL
{
?town dbpedia-owl:populationTotal ?population .
FILTER (?population > 0 )
}
}
GROUP BY ?town ?pgrad ?ugrad
HAVING ( ( ( (?pgrad+?ugrad)/ MAX(?population) )*100 ) > 0 )
ORDER BY DESC 6
## "Aggregate Distance Values Over Years":
PREFIX dst: <http://linkedgeodata.org/vocabulary#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT (bif:year( bif:stringdate(?sdate)) AS ?syear)
(bif:sum( bif:number(?dist)) AS ?distance)
FROM <urn:dates:distances>
WHERE
{
?row dc:date ?sdate .
?row dst:distance ?dist
}
GROUP BY (bif:year(bif:stringdate(?sdate)))
ORDER BY ASC(bif:year(bif:stringdate(?sdate)))
## "Sample listing of musicians that includes age at time of death":
SELECT ?s ?genre ?died ?born
(bif:datediff('year', xsd:dateTime(str(?born)), xsd:dateTime(str(?died)))) AS ?age
WHERE
{
{
SELECT DISTINCT ?s ?genre ?died ?born
FROM <http://dbpedia.org>
WHERE
{
?s a <http://dbpedia.org/ontology/MusicalArtist> ;
<http://dbpedia.org/ontology/genre> ?genre ;
<http://dbpedia.org/ontology/deathDate> ?died ;
<http://dbpedia.org/ontology/birthDate> ?born .
}
LIMIT 20
}
}
## See dbpedia live results.
## See LOD live results.
## "Sample listing of musicians (includes use of
## IF for data cleansing) that includes age at time of death ":
SELECT ?person ?genre ?died ?born
(
IF
(
( datatype (?born) in (xsd:dateTime, xsd:date) )
and
( datatype (?died) in (xsd:dateTime, xsd:date) ),
bif:datediff
(
'year',
xsd:dateTime( str(?born) ),
xsd:dateTime( str(?died) )
),
"error"
)
) AS ?age
WHERE
{
{
SELECT DISTINCT ?person ?genre ?died ?born
FROM <http://dbpedia.org>
WHERE
{
?person a <http://dbpedia.org/ontology/MusicalArtist> ;
<http://dbpedia.org/ontology/genre> ?genre ;
<http://dbpedia.org/ontology/deathDate> ?died ;
<http://dbpedia.org/ontology/birthDate> ?born .
}
ORDER BY DESC ( <LONG::IRI_RANK> (?person) )
LIMIT 100
}
}
## See dbpedia live results.
## See LOD live results.
## "Sample listing of musicians that includes birth date, death date,
## and age ordered by musicians entity rank ":
SELECT DISTINCT ?person ?plabel ?genre ?glabel ?died
?born ( <LONG::IRI_RANK> (?person) ) as ?rank
(
IF
(
( datatype (?born) in (xsd:dateTime, xsd:date) )
and
( datatype (?died) in (xsd:dateTime, xsd:date) ),
bif:datediff
(
'year',
xsd:dateTime( str(?born) ),
xsd:dateTime( str(?died) )
),
"error"
)
) AS ?age
WHERE
{
{
SELECT DISTINCT ?person ?plabel ?genre ?glabel ?died ?born
FROM <http://dbpedia.org>
WHERE
{
?person a <http://dbpedia.org/ontology/MusicalArtist> ;
<http://dbpedia.org/ontology/genre> ?genre ;
<http://dbpedia.org/ontology/deathDate> ?died ;
rdfs:label ?plabel ;
<http://dbpedia.org/ontology/birthDate> ?born .
?genre rdfs:label ?glabel .
FILTER (lang(?plabel) = "en")
FILTER (lang(?glabel) = "en")
}
ORDER BY DESC ( <LONG::IRI_RANK> (?person) )
LIMIT 100
}
}
## See dbpedia live results.
## See LOD live results.
## "Sample listing of musicians that includes
## average age at time of death, by genre":
SELECT ?genre, (avg(?age)) AS ?avg
WHERE
{
{
SELECT DISTINCT ?genre ?person
(
bif:datediff
(
'year',
xsd:dateTime( str(?born) ),
xsd:dateTime( str(?died) )
)
) as ?age
WHERE
{
{
SELECT DISTINCT ?person ?genre ?died ?born
FROM <http://dbpedia.org>
WHERE
{
?person a <http://dbpedia.org/ontology/MusicalArtist> ;
<http://dbpedia.org/ontology/genre> ?genre ;
<http://dbpedia.org/ontology/deathDate> ?died ;
<http://dbpedia.org/ontology/birthDate> ?born .
FILTER ( datatype (?born) IN (xsd:dateTime, xsd:date) )
FILTER ( datatype (?died) IN (xsd:dateTime, xsd:date) )
}
}
}
}
}
GROUP BY (?genre)
ORDER BY DESC (?avg)
LIMIT 100
## "Sample listing of musicians that includes
## average age at time of death with entity rank, by genre":
SELECT ?genre, (avg(?age)) AS ?avg,
( <LONG::IRI_RANK> (?person) ) as ?rank
WHERE
{
{
SELECT DISTINCT ?genre ?person
(
bif:datediff
(
'year',
xsd:dateTime( str(?born) ),
xsd:dateTime( str(?died) )
)
) as ?age
WHERE
{
{
SELECT DISTINCT ?person ?genre ?died ?born
FROM <http://dbpedia.org>
WHERE
{
?person a <http://dbpedia.org/ontology/MusicalArtist> ;
<http://dbpedia.org/ontology/genre> ?genre ;
<http://dbpedia.org/ontology/deathDate> ?died ;
<http://dbpedia.org/ontology/birthDate> ?born .
FILTER ( datatype (?born) IN (xsd:dateTime, xsd:date) )
FILTER ( datatype (?died) IN (xsd:dateTime, xsd:date) )
}
}
}
ORDER BY DESC ( <LONG::IRI_RANK> (?person) )
}
}
ORDER BY DESC (?avg)
LIMIT 100
## "Sample listing of musicians that includes
## average age at time of death with entity rank,
## by genre and pretty labels":
SELECT ?genre, str(?glabel) as ?genre_names, (avg(?age)) AS ?avg,
( <LONG::IRI_RANK> (?person) ) as ?rank
WHERE
{
{
SELECT DISTINCT ?genre ?person ?glabel
(
IF
(
( datatype (?born) in (xsd:dateTime, xsd:date) )
and
( datatype (?died) in (xsd:dateTime, xsd:date) ),
bif:datediff
(
'year',
xsd:dateTime(str(?born)),
xsd:dateTime(str(?died))
),
"error"
) as ?age
WHERE
{
{
SELECT DISTINCT ?person ?genre ?glabel ?died ?born
FROM <http://dbpedia.org>
WHERE
{
?person a <http://dbpedia.org/ontology/MusicalArtist> ;
<http://dbpedia.org/ontology/genre> ?genre ;
<http://dbpedia.org/ontology/deathDate> ?died ;
<http://dbpedia.org/ontology/birthDate> ?born .
FILTER ( datatype (?born) IN (xsd:dateTime, xsd:date) )
FILTER ( datatype (?died) IN (xsd:dateTime, xsd:date) )
?genre rdfs:label ?glabel .
FILTER ( lang(?glabel) = "en" ) .
FILTER (?born < ?died) .
}
}
}
ORDER BY DESC ( <LONG::IRI_RANK> (?person) )
}
}
ORDER BY DESC (?avg)
LIMIT 100
## "Sample listing of musicians that includes
## Entity Rank, Grouping and Pretty Labels":
SELECT DISTINCT ?person str(?plabel) ?genre str(?glabel)
?died ?born ( <LONG::IRI_RANK> (?person) ) as ?rank
(
IF
(
( datatype (?born) in (xsd:dateTime, xsd:date) )
and
( datatype (?died) in (xsd:dateTime, xsd:date) ),
bif:datediff
(
'year',
xsd:dateTime(str(?born)),
xsd:dateTime(str(?died))
),
"error"
)
) AS ?age
WHERE
{
{
SELECT DISTINCT ?person ?plabel ?genre ?glabel ?died ?born
FROM <http://dbpedia.org>
WHERE
{
?person a <http://dbpedia.org/ontology/MusicalArtist> ;
<http://dbpedia.org/ontology/genre> ?genre ;
<http://dbpedia.org/ontology/deathDate> ?died ;
rdfs:label ?plabel ;
<http://dbpedia.org/ontology/birthDate> ?born .
?genre rdfs:label ?glabel .
FILTER ( lang(?plabel) = "en" )
FILTER ( lang(?glabel) = "en" )
}
ORDER BY DESC ( <LONG::IRI_RANK> (?person) )
LIMIT 100
}
}
## See dbpedia live results.
## See LOD live results.
## "Index-friendly filter for Date range ( bif:dateadd ) within SPARQL query":
SELECT ?wiki,
?dbp,
bif:datediff('second', xsd:DateTime(str(?extracted)) , now()) AS ?secondsAgo
WHERE
{
?wiki foaf:primaryTopic ?dbp .
?dbp <http://dbpedia.org/ontology/activeYearsEndDate> ?extracted .
FILTER ( xsd:DateTime(str(?extracted)) > bif:dateadd('minute', -10, now()))
}
ORDER BY DESC (xsd:DateTime(str(?extracted)))
LIMIT 30
## See dbpedia live results.
## See LOD live results.
## "Find best lang matching City,
## containing "London" in its name":
SELECT DISTINCT ?cityUri ?cityName
(
sql:BEST_LANGMATCH ( ?cityName,
'en, en-gb;q=0.8, fr;q=0.7, *;q=0.1',
''
)
) as ?bestCityName
WHERE
{
?cityUri ?predicate ?value.
?cityUri a <http://dbpedia.org/ontology/City>.
?value bif:contains "London".
OPTIONAL
{
?cityUri rdfs:label ?cityName
}
}
## See dbpedia live results.
## See LOD live results.
##"Find all albums using parts of the Album Name":
SELECT ?s ?o ?an ( bif:search_excerpt ( bif:vector ( 'In', 'Your' ) , ?o ) )
WHERE
{
?s rdf:type mo:Record .
?s foaf:maker ?a .
?a foaf:name ?an .
?s dc:title ?o .
FILTER ( bif:contains ( ?o, '"in your"' ) )
}
LIMIT 10
## See LOD live results.
## "Find all movies from DBpedia
## where Title contains the words:
## 'Broken' and 'Flowers'":
SELECT ?s ?an ?dn ?o( bif:search_excerpt ( bif:vector ( 'Broken', 'Flowers' ) , ?o ) )
WHERE
{
?s rdf:type dbpedia-owl:Film .
?s dbpprop:name ?o .
FILTER ( bif:contains ( ?o, '"broken flowers"' ) )
OPTIONAL { ?s dbpprop:starring ?starring . }
OPTIONAL { ?s dbpprop:director ?director . }
OPTIONAL { ?starring dbpprop:name ?an . }
OPTIONAL { ?director dbpprop:name ?dn . }
}
LIMIT 100
## See dbpedia live results.
## See LOD live results.
## This example shows usage of dateTime column
truncation to date only and performs a group by
on this column
## Insert some triples in a graph:
INSERT INTO GRAPH <http://BookStore.com>
{
<http://www.dajobe.org/foaf.rdf#i> <http://purl.org/dc/elements/1.1/title> "SPARQL and RDF" .
<http://www.dajobe.org/foaf.rdf#i> <http://purl.org/dc/elements/1.1/date> <1999-01-01T00:00:00>.
<http://www.w3.org/People/Berners-Lee/card#i> <http://purl.org/dc/elements/1.1/title> "Design notes" .
<http://www.w3.org/People/Berners-Lee/card#i> <http://purl.org/dc/elements/1.1/date> <2001-01-01T00:00:00>.
<http://www.w3.org/People/Connolly/#me> <http://purl.org/dc/elements/1.1/title> "Fundamentals of Compiler Design" .
<http://www.w3.org/People/Connolly/#me> <http://purl.org/dc/elements/1.1/date> <2002-01-01T00:00:00>.
<http://www.ivan-herman.net/foaf.rdf#me> <http://purl.org/dc/elements/1.1/title> "RDF Store" .
<http://www.ivan-herman.net/foaf.rdf#me> <http://purl.org/dc/elements/1.1/date> <2001-03-05T00:00:00>.
<http://bblfish.net/people/henry/card#me> <http://purl.org/dc/elements/1.1/title> "Design RDF notes" .
<http://bblfish.net/people/henry/card#me> <http://purl.org/dc/elements/1.1/date> <2001-01-01T00:00:00>.
<http://hometown.aol.com/chbussler/foaf/chbussler.foaf#me> <http://purl.org/dc/elements/1.1/title> "RDF Fundamentals" .
<http://hometown.aol.com/chbussler/foaf/chbussler.foaf#me> <http://purl.org/dc/elements/1.1/date> <2002-01-01T00:00:00>.
};
## Find Count of Group by Dates
SELECT (xsd:date(bif:subseq(str(?a_dt), 0, 10))), count(*)
FROM <http://BookStore.com>
WHERE
{
?s <http://purl.org/dc/elements/1.1/date> ?a_dt
}
GROUP BY ( xsd:date( bif:subseq( str( ?a_dt ), 0, 10 ) ) )
## See LOD live results.
## "Calling SQL from SPARQL via use of sql: namespace prefix":
create procedure DB.DBA.ComposeInfo (
in pname varchar,
in pnick varchar := '',
in pbox varchar := '' )
{
declare ss varchar;
ss := concat(pname, ' ', pnick, ' ', pbox);
ss := rtrim (ss, ' ');
return ss;
};
GRANT EXECUTE ON DB.DBA.ComposeInfo to SPARQL_SELECT;
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ( sql:ComposeInfo ( ?name, ?nick, ?box ) )
FROM <http://www.w3.org/People/Berners-Lee/card>
WHERE
{
?s rdf:type foaf:Person .
OPTIONAL { ?s foaf:name ?name } .
OPTIONAL { ?s foaf:nick ?nick } .
OPTIONAL { ?s foaf:box ?box } .
FILTER ( ?nick like '%TimBL%' ) .
}
## See LOD live results.
## "Pragma for Controlling SPARUL DESCRIBE behaviour
## e.g. Concise Bound Graphs":
DEFINE sql:describe-mode "CBD"
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
DESCRIBE ?friend
WHERE
{
?s foaf:knows ?friend .
?friend foaf:nick ?nick .
FILTER ( ?s =
<http://melvincarvalho.com/#me> )
}
LIMIT 100
## See LOD live results.
## "Pragma for Controlling SPARQL INSERT behaviour":
DEFINE input:default-graph-uri <http://mygraph.com>
INSERT INTO <http://mygraph.com>
{
<http://myopenlink.net/dataspace/Kingsley#this>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://rdfs.org/sioc/ns#User>
}
## "Use of SPARUL CONSTRUCT to add triples to a Named Graph:
## 1) Execute a CONSTRUCT query.
## 2) View the generated triples to ensure they are correct.
## 3) Replace CONSTRUCT with INSERT INTO."
-- The CONSTRUCT query:
CONSTRUCT
{
?s <http://www.w3.org/2002/07/owl#equivalentClass>
`iri (bif:replace(?o,'http://schema.rdfs.org/', 'http://schema.org/'))`
}
FROM <http://www.openlinksw.com/schemas/rdfs>
WHERE
{
?s <http://www.w3.org/2002/07/owl#equivalentClass> ?o
}
-- Replaced CONSTRUCT with INSERT INTO:
SPARQL INSERT INTO <http://www.openlinksw.com/schemas/rdfs>
{
?s <http://www.w3.org/2002/07/owl#equivalentClass>
`iri (bif:replace(?o,'http://schema.rdfs.org/', 'http://schema.org/'))`
}
FROM <http://www.openlinksw.com/schemas/rdfs>
WHERE
{
?s <http://www.w3.org/2002/07/owl#equivalentClass> ?o
}
## "Pragma for Controlling SPARQL LOAD behaviour":
SPARQL
load bif:concat (
"http://", bif:registry_get("URIQADefaultHost"),
"/DAV/n3_collection/kidehen.n3"
)
INTO GRAPH <http://mygraph.com>
## "Pragma for Controlling SPARQL DELETE behaviour":
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
DELETE FROM GRAPH <http://BookStore.com> { ?book ?p ?v }
WHERE
{
GRAPH <http://BookStore.com>
{
?book dc:date ?date
FILTER (
xsd:dateTime( ?date ) <
xsd:dateTime( "2000-01-01T00:00:00" )
).
?book ?p ?v.
}
}
## "Pragma for Controlling SPARQL UPDATE behaviour"
## convert all properties to string:
INSERT INTO GRAPH <http://ucb.com/nbeabase>
{
?sa <http://ucb.com/nbeabase/resource/sampleId> `str (?oa)`
}
WHERE
{
?sa <http://ucb.com/nbeabase/resource/chemAbsNo> ?oa . FILTER REGEX (?oa, '-','i')
}
## "MODIFY GRAPH usage as form of UPDATE operation:"
MODIFY GRAPH <http://schema.org/docs/schemaorg>
DELETE { ?s ?p ?o}
INSERT
{
`iri (bif:concat (str (?s), "#this"))` ?p ?o
}
FROM <http://schema.org/docs/schemaorg>
WHERE
{
?s ?p ?o .
?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Class> .
FILTER ( !isblank (?s) )
}
## "NOT EXISTS usage:"
SELECT COUNT(*)
WHERE
{
?s ?p "Novosibirsk" .
FILTER NOT EXISTS { ?s ?p "Новосибирск" }
}
## See LOD live results.
## "MINUS usage:"
SELECT COUNT(*)
WHERE
{
?s ?p "Novosibirsk" .
FILTER MINUS { ?s ?p "Новосибирск" }
}
## See LOD live results.
## "DELETE Triple Patterns that are Not Scoped to a Named Graph:"
## "Presuming this triple exists in one or more graphs in the store:"
{
<http://kingsley.idehen.net/dataspace/person/kidehen#this>
<http://xmlns.com/foaf/0.1/knows>
<http://id.myopenlink.net/dataspace/person/KingsleyUyiIdehen#this>
}
## The SQL query below will delete that triple
## from all graphs in the store:
DELETE
FROM DB.DBA.RDF_QUAD
WHERE p = iri_to_id
('http://xmlns.com/foaf/0.1/knows')
AND s = iri_to_id
('http://kingsley.idehen.net/dataspace/person/kidehen#this')
AND o = iri_to_id
('http://id.myopenlink.net/dataspace/person/KingsleyUyiIdehen#this')
;
## According to SPARQL 1.1 Update, the FROM clause which scopes the
## query to a single graph is optional. Thus, the SQL query above can
## be rewritten to the SPARQL query below, again deleting the matching
## triple from all graphs in the store:
DELETE
{
GRAPH ?g
{
<http://kingsley.idehen.net/dataspace/person/kidehen#this>
<http://xmlns.com/foaf/0.1/knows>
<http://id.myopenlink.net/dataspace/person/KingsleyUyiIdehen#this>
}
}
WHERE
{
GRAPH ?g
{
<http://kingsley.idehen.net/dataspace/person/kidehen#this>
<http://xmlns.com/foaf/0.1/knows>
<http://id.myopenlink.net/dataspace/person/KingsleyUyiIdehen#this>
}
}
## "Find all the people known by Kingsley Idehen
## to a depth between 1 and 4 applications of
## the subquery":
SELECT ?o ?dist
(
(
SELECT COUNT (*)
WHERE
{
?o foaf:knows ?xx
}
)
)
WHERE
{
{
SELECT ?s ?o
WHERE
{
?s foaf:knows ?o
}
}
OPTION ( TRANSITIVE,
t_distinct,
t_in(?s),
t_out(?o),
t_min (1),
t_max (4),
t_step ('step_no') as ?dist ) .
FILTER ( ?s = <http://id.myopenlink.net/dataspace/person/KingsleyUyiIdehen#this> )
}
ORDER BY ?dist DESC 3
LIMIT 50
## See LOD live results.
## Find all entities associated with the entity denoted by
## <http://id.myopenlink.net/dataspace/person/KingsleyUyiIdehen#this>
## via the foaf:knows relation.
## Do so in a manner that uses a Transitive Closure
## to include aggregates and distances between
## the entities in the foaf:knows relation
SELECT ?o ?dist
(
(
SELECT COUNT (*)
WHERE
{
?o foaf:knows ?xx
}
)
)
WHERE
{
{
SELECT ?s ?o
WHERE
{
?s foaf:knows ?o
}
}
OPTION ( TRANSITIVE,
t_distinct,
t_in(?s),
t_out(?o),
t_min (2),
t_max (4) ,
t_step ('step_no') as ?dist ) .
FILTER ( ?s = <http://id.myopenlink.net/dataspace/person/KingsleyUyiIdehen#this> )
FILTER ( !(isblank(?o))) .
}
ORDER BY ?dist DESC 3
LIMIT 50
## See LOD live results.
## Determine how two entities (type: Person)
## are connected using the foaf:knows relation:
SELECT ?link ?g ?step ?path
WHERE
{
{
SELECT ?s ?o ?g
WHERE
{
graph ?g {?s foaf:knows ?o }
}
}
OPTION ( TRANSITIVE,
t_distinct,
t_in(?s),
t_out(?o),
t_no_cycles,
t_shortest_only,
t_step (?s) as ?link,
t_step ('path_id') as ?path,
t_step ('step_no') as ?step,
t_direction 3 ) .
FILTER ( ?s = <http://www.w3.org/People/Berners-Lee/card#i>
&& ?o = <http://myopenlink.net/dataspace/person/kidehen#this> )
}
LIMIT 20
## See LOD live results.
## Find all co-referents of the
## IRI <http://dbpedia.org/resource/New_York>
## i.e., other IRIs that denote the same
## thing as <http://dbpedia.org/resource/New_York> .
SELECT ?syn
WHERE
{
{
SELECT ?x ?syn
WHERE
{
{
?x owl:sameAs ?syn
}
UNION
{
?syn owl:sameAs ?x
}
}
}
OPTION ( transitive, t_in (?x), t_out (?syn), t_distinct, t_min (0) )
FILTER ( ?x = <http://dbpedia.org/resource/New_York> ) .
}
## See dbpedia live results.
## See LOD live results.
## "Find all graphs that contain
## owl:sameAs for "New York":
SELECT ?g ?x count (*) as ?count
WHERE
{
{
SELECT ?x ?alias ?g
WHERE
{
{
GRAPH ?g
{
?x owl:sameAs ?alias
}
}
UNION
{
GRAPH ?g
{
?alias owl:sameAs ?x
}
}
}
}
OPTION ( TRANSITIVE,
t_in (?x),
t_out (?alias),
t_distinct,
t_min (1)
) .
FILTER ( ?x = <http://dbpedia.org/resource/New_York> ) .
}
## See dbpedia live results.
## See LOD live results.
## Transitivity enhanced Subsumption Reasoning
## Meaning: subClasses of subClasses are incorporated
## into the query solution by way of Transitive Closure
SELECT ?y
FROM <http://dbpedia.org/resource/classes/yago#>
WHERE
{
{
SELECT *
WHERE
{
?x rdfs:subClassOf ?y .
}
}
OPTION ( TRANSITIVE, t_distinct, t_in (?x), t_out (?y) ) .
FILTER ( ?x = <http://dbpedia.org/class/yago/AlphaReceptor105609111> )
}
## See dbpedia live results.
## Transitivity enhanced Subsumption Reasoning
## Meaning: subClasses of subClasses of
## <http://dbpedia.org/class/yago/Receptor105608868>
## are incorporated into the query solution
## by way of Transitive Closure
SELECT ?y
FROM <http://dbpedia.org/resource/classes/yago#>
WHERE
{
{
SELECT *
WHERE
{
?x rdfs:subClassOf ?y .
}
}
OPTION ( TRANSITIVE, t_distinct, t_in (?y), t_out (?x) ) .
FILTER ( ?y = <http://dbpedia.org/class/yago/Receptor105608868> )
}
## See dbpedia live results.
## Incorporate Transitive Closures into determining 10
## relations that associate the entity denoted by
## <http://dbpedia.org/resource/New_York>
## with other entities
SELECT DISTINCT ?s ?p ?o
bif:either(isIri(?o),'URI',datatype(?o)) AS ?type
WHERE
{
?anchor ?pp ?s
OPTION ( TRANSITIVE,
t_min (0),
t_max (2),
t_in (?anchor),
t_out (?s),
t_no_cycles,
t_distinct ) .
FILTER ( ?anchor = <http://dbpedia.org/resource/New_York>)
?s ?p ?o .
}
ORDER BY ?s
LIMIT 100
## See dbpedia live results.
## See LOD live results.
## Create an Inference Rule denoted by the
## literal identifier "skos-trans"
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
INSERT INTO GRAPH <urn:rules.skos>
{
skos:broader rdfs:subPropertyOf skos:broaderTransitive .
skos:narrower rdfs:subPropertyOf skos:narrowerTransitive
};
rdfs_rule_set ('skos-trans', 'urn:rules.skos');
## Find entities that are subcategories of "category:Protestant_churches"
## placed no deeper than 3 levels within the concept
## scheme hierarchy, filtered by a specific subcategory.
## This query demonstrates use of Inference Rule Context,
## sub-queries, and FILTER to find entities
## associated with "category:Protestant_churches".
## It also leverages the use of the TRANSITIVE OPTION
## which sets a 3-level traversal down a SKOS concept scheme hierarchy.
DEFINE input:inference "skos-trans"
PREFIX p: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX category: <http://dbpedia.org/resource/Category:>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX geo: <http://www.georss.org/georss/>
SELECT DISTINCT ?c AS ?skos_broader
?trans AS ?skos_narrower
?dist AS ?skos_level
?m ?n ?p AS ?geo_point
WHERE
{
{
SELECT ?c ?m ?n ?p ?trans ?dist
WHERE
{
?m rdfs:label ?n .
?m skos:subject ?c .
?c skos:broaderTransitive
category:Protestant_churches .
?c skos:broaderTransitive ?trans
OPTION ( TRANSITIVE,
t_distinct,
t_in (?c),
t_out (?trans),
t_max (3),
t_step ( 'step_no' ) as ?dist
) .
?m p:abstract ?d .
?m geo:point ?p
FILTER ( lang(?n) = "en" )
FILTER ( lang(?d) = "en" )
}
}
FILTER ( ?trans =
<http://dbpedia.org/resource/Category:Churches_in_London> )
}
ORDER BY ASC (?dist)
## See URIBurner live results.
## This query makes use of Transitivity,
## Inference Rule Context, Sub-Queries and FILTERs:
SPARQL
DEFINE input:inference "skos-trans"
PREFIX p: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX category: <http://dbpedia.org/resource/Category:>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX geo: <http://www.georss.org/georss/>
SELECT DISTINCT ?m ?n ?p ?d
WHERE
{
?m rdfs:label ?n .
?m skos:subject ?c .
?c skos:broaderTransitive category:Churches_in_Paris
OPTION (TRANSITIVE) .
?m p:abstract ?d .
?m geo:point ?p
FILTER ( lang(?n) = "fr" )
FILTER ( lang(?d) = "fr" )
}
## See URIBurner live results.
## Execution of SQL stored procedure for loading
## Yago Class hierarchy rule into a Named Graph
SELECT ttlp_mt
(
file_to_string_output ( 'yago-class-hierarchy_en.nt'),
'',
'http://dbpedia.org/resource/classes/yago#'
);
## Create an Inference Rule that references
## the Yago Class Hierarchy Named Graph
rdfs_rule_set
(
'http://dbpedia.org/resource/inference/rules/yago#',
'http://dbpedia.org/resource/classes/yago#'
);
## Retrieve all individuals instances
## of Fiction Class which should include all Novels":
DEFINE input:inference "http://dbpedia.org/resource/inference/rules/yago#"
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbpedia: <http://dbpedia.org/property/>
PREFIX yago: <http://dbpedia.org/class/yago/>
SELECT ?s ?n
FROM <http://dbpedia.org>
WHERE
{
?s a <http://dbpedia.org/class/yago/Fiction106367107> .
?s dbpedia:name ?n .
}
## See dbpedia live results.
## Find all Fiction Books associated with a
## property "dbpedia:name" that has literal
## value: "The Lord of the Rings":
DEFINE input:inference "http://dbpedia.org/resource/inference/rules/yago#"
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbpedia: <http://dbpedia.org/property/>
PREFIX yago: <http://dbpedia.org/class/yago/>
SELECT ?s
FROM <http://dbpedia.org>
WHERE
{
?s a <http://dbpedia.org/class/yago/Fiction106367107> .
?s dbpedia:name "The Lord of the Rings"@en .
}
## See dbpedia live results.
## Variant with Virtuoso's Full Text Index
## extension via the bif:contains
## function/magic predicate
DEFINE input:inference "http://dbpedia.org/resource/inference/rules/yago#"
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbpedia: <http://dbpedia.org/property/>
PREFIX yago: <http://dbpedia.org/class/yago/>
SELECT ?s ?n
FROM <http://dbpedia.org>
WHERE
{
?s a <http://dbpedia.org/class/yago/Fiction106367107> .
?s dbpedia:name ?n .
?n bif:contains 'Lord and Rings'
}
## See dbpedia live results.
## "Relationship Vocabulary":
## Create Instance Data for Relationship Ontology
## Verify Ontology Data is in Quad Store
## Ontology: <http://vocab.org/relationship/> (Relationship Ontology)
## Use pragma to put latest in Quad store.
DEFINE get:soft "replace"
SELECT *
FROM <http://vocab.org/relationship/>
WHERE
{
?s ?p ?o
}
## Clean up instance data graph
CLEAR GRAPH <urn:owl:inference:tests>
## Create Instance Data for Relationship Ontology
PREFIX rel: <http://purl.org/vocab/relationship/>
INSERT into GRAPH <urn:owl:inference:tests>
{
<http://dbpedia.org/resource/Prince_William_of_Wales> rel:siblingOf <http://dbpedia.org/resource/Prince_Harry_of_Wales> .
<http://dbpedia.org/resource/Elizabeth_Bowes-Lyon> rel:ancestorOf <http://dbpedia.org/resource/Elizabeth_II_of_the_United_Kingdom> .
<http://dbpedia.org/resource/Elizabeth_II_of_the_United_Kingdom> rel:ancestorOf
<http://dbpedia.org/resource/Charles%2C_Prince_of_Wales> .
<http://dbpedia.org/resource/Charles%2C_Prince_of_Wales> rel:ancestorOf <http://dbpedia.org/resource/Prince_William_of_Wales> .
};
## Verify Data
SELECT *
FROM <urn:owl:inference:tests>
WHERE
{
?s ?p ?o
}
## SQL mode
## Load data for http://vocab.org/relationship/
sparql clear graph <http://vocab.org/relationship/>;
sparql load <http://vocab.org/relationship/.turtle> into <http://vocab.org/relationship/>;
## Create Inference Rule that references the
## Relationship Ontology Named Graph
rdfs_rule_set ('urn:owl:inference:rules:tests', 'http://vocab.org/relationship/') ;
## Verify Rule's existence
SELECT *
FROM sys_rdf_schema;
## Test owl:TransitiveProperty Reasoning
## Start with a specific URI
## Goal: See inferred Triples
## In this case, relationship between:
<http://dbpedia.org/resource/Elizabeth_Bowes-Lyon>
## and her descendants:
Queen Elizabeth, Prince Charles, Prince William, and Prince Harry)
DEFINE input:inference 'urn:owl:inference:rules:tests'
PREFIX rel: <http://purl.org/vocab/relationship/>
SELECT *
FROM <urn:owl:inference:tests>
WHERE
{
<http://dbpedia.org/resource/Elizabeth_Bowes-Lyon>
rel:ancestorOf ?o
}
## See URIBurner live results.
## See Tutorial Demonstrating Reasoning via SPARQL
## Test owl:SymmetricalProperty Reasoning
## Should show same result irrespective of
## rel:siblingOf URI in Subject or Object slots of Triple
DEFINE input:inference 'urn:owl:inference:rules:tests'
PREFIX rel: <http://purl.org/vocab/relationship/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT *
FROM <urn:owl:inference:tests>
WHERE
{
<http://dbpedia.org/resource/Prince_William_of_Wales>
rel:siblingOf ?o
}
## See URIBurner live results.
## See Tutorial Demonstrating Reasoning via SPARQL
## Test owl:SymmetricalProperty Reasoning
## Should show same result irrespective of
## rel:siblingOf URI in Subject or Object slots of Triple
DEFINE input:inference 'urn:owl:inference:rules:tests'
PREFIX rel: <http://purl.org/vocab/relationship/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT *
FROM <urn:owl:inference:tests>
WHERE
{
?s rel:siblingOf
<http://dbpedia.org/resource/Prince_William_of_Wales>
OPTION (TRANSITIVE,T_DISTINCT)
}
## See URIBurner live results.
## Test owl:inverseOf Reasoning
## Should show triples exposing the inverseOf relation.
## In this case rel:ancestorOf instance data
## triples exist, so the system must infer
## rel:descendant Of triples
DEFINE input:inference 'urn:owl:inference:rules:tests'
PREFIX rel: <http://purl.org/vocab/relationship/>
SELECT *
FROM <urn:owl:inference:tests>
WHERE
{
<http://dbpedia.org/resource/Elizabeth_II_of_the_United_Kingdom>
rel:descendantOf ?o
}
## See URIBurner live results.
## See Tutorial Demonstrating Reasoning via SPARQL
## Test owl:inverseOf Reasoning
## Should show triples exposing the inverseOf relation.
## In this case rel:ancestorOf instance data
## triples exist, so the system must infer
## rel:descendant Of triples
DEFINE input:inference 'urn:owl:inference:rules:tests'
PREFIX rel: <http://purl.org/vocab/relationship/>
SELECT *
FROM <urn:owl:inference:tests>
WHERE
{
<http://dbpedia.org/resource/Prince_William_of_Wales>
rel:descendantOf ?o OPTION (T_DISTINCT)
}
## See URIBurner live results.
## "Relationship Vocabulary and SKOS":
## Graph Cleanup
SPARQL
CLEAR GRAPH <urn:owl.test2.tbox>;
SPARQL
CLEAR GRAPH <urn:turnguard.com:test2.tbox>;
## Load Instance Data into Quad Store
## PL Procedure
## SQL realm
DB.DBA.RDF_LOAD_RDFXML
(
http_get('http://www.w3.org/2009/08/skos-reference/skos-owl1-dl.rdf'),
'no',
'urn:owl.test2.tbox'
);
DB.DBA.RDF_LOAD_RDFXML
(
http_get ('http://www.w3.org/2002/07/owl.rdf'),
'no',
'urn:owl.test2.tbox'
);
SPARQL
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX turng: <http://www.turnguard.com/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
INSERT
{
GRAPH <urn:turnguard.com:test2.tbox>
{
turng:Music rdf:type skos:Concept .
turng:Music skos:prefLabel "Music"@en .
turng:Music skos:narrower turng:Pop .
turng:Pop rdf:type skos:Concept .
turng:Pop skos:prefLabel "POP"@en .
turng:Pop skos:narrower turng:TechnoPop .
turng:TechnoPop rdf:type skos:Concept .
turng:TechnoPop skos:prefLabel "TECHNOPOP"@en .
turng:TechnoPop skos:narrower turng:ElectroPop .
turng:ElectroPop rdf:type skos:Concept .
turng:ElectroPop skos:prefLabel "ELECTROPOP"@en .
}
};
SPARQL
SELECT * from <http://www.w3.org/2004/02/skos/core>
WHERE
{
{
<http://www.w3.org/2004/02/skos/core#related> ?p ?o
}
UNION
{
?s ?p <http://www.w3.org/2004/02/skos/core#related>
}
};
## Create Rules
## SQL Realm
rdfs_rule_set ('urn:owl.test2.rules', 'urn:owl.test2.tbox');
## Transitivity Query with SKOS concept hierarchy
DEFINE input:inference "urn:owl.test2.rules"
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT *
FROM <urn:turnguard.com:test2.tbox>
WHERE
{
<http://www.turnguard.com/ElectroPop> skos:broaderTransitive ?o
OPTION (T_DISTINCT).
}
## See URIBurner live results.
## "Negation using "COUNT"":
## with inference: "Find celebrities which"
## are not fans of their own fans:
SPARQL
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
INSERT INTO GRAPH <urn:rules.sioc>
{
foaf:knows rdfs:subPropertyOf sioc:follows .
};
rdfs_rule_set ('foaf-trans', 'urn:rules.sioc');
## "Negation using "COUNT"
## with inference: "Find celebrities which"
## are not fans of their own fans":
SPARQL
DEFINE input:inference "foaf-trans"
PREFIX sioc: <http://rdfs.org/sioc/ns#>
SELECT ?celeb COUNT (*)
WHERE
{
?claimant sioc:follows ?celeb .
FILTER
(
!bif:exists
(
(
SELECT (1)
WHERE
{
?celeb sioc:follows ?claimant
}
)
)
)
}
GROUP BY ?celeb
ORDER BY DESC 2
LIMIT 10
## See URIBurner live results.
## "Negation with "COUNT"
## without inference":
PREFIX sioc: <http://rdfs.org/sioc/ns#>
SELECT ?celeb COUNT (*)
WHERE
{
?claimant sioc:follows ?celeb .
FILTER
(
!bif:exists
(
(
SELECT (1)
WHERE
{
?celeb sioc:follows ?claimant
}
)
)
)
}
GROUP BY ?celeb
ORDER BY DESC 2
LIMIT 10
## See URIBurner live results.
## "Conditional use of owl:sameAs inference rule":
DEFINE input:same-as "yes"
PREFIX geonames: <http://www.geonames.org/ontology#>
SELECT ?s ?z
WHERE
{
?s geonames:parentFeature ?z
}
LIMIT 100
## See URIBurner live results.
## "Condition usage of
bif:either ( in cond any,
in arg1 any,
in arg2 any )
built-in SQL function":
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
SELECT ?team
( ( bif:either( ?ew = 'W', -1, 1)) * (?d + (((?m * 60) + ?s) / 3600.0)) as ?v )
{
?team a dbo:HockeyTeam .
?team rdfs:label 'New Jersey Devils'@en .
?team dbp:city ?cityname .
?city rdfs:label ?cityname .
?city dbp:longd ?d ;
dbp:longm ?m ;
dbp:longs ?s ;
dbp:longew ?ew .
}
## "Usage of
bif:locate ( in string_exp1 varchar,
in string_exp2 varchar,
[in start integer] )
built-in SQL function":
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/property/>
SELECT ?team
( ( bif:locate( 'W', ?ew )) * (?d + (((?m * 60) + ?s) / 3600.0)) as ?v )
{
?team a dbo:HockeyTeam .
?team rdfs:label 'New Jersey Devils'@en .
?team dbp:city ?cityname .
?city rdfs:label ?cityname .
?city dbp:longd ?d ;
dbp:longm ?m ;
dbp:longs ?s ;
dbp:longew ?ew .
}
## "Usage of FILTER .. !BOUND()" expression
## It should be used with an OPTIONAL.
## Without OPTIONAL all variables from triple
## patterns will be bound in every result by definition."
SELECT DISTINCT ?s
WHERE
{
?s <http://dbpedia.org/ontology/position> ?pos.
?s <http://purl.org/dc/terms/subject>
<http://dbpedia.org/resource/Category:Premier_League_clubsgt>.
?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#typegt>
<http://dbpedia.org/class/yago/PremierLeagueClubs>.
OPTIONAL {?s <http://dbpedia.org/property/leaguegt> ?o.}
FILTER (!BOUND (?o))
}
LIMIT 10
## "Usage of IFP inference as a transparent
## addition of a subquery into the join sequence."
SELECT ?f
WHERE
{
?k foaf:name "Kjetil Kjernsmo" .
{
SELECT ?org ?syn
WHERE
{
?org ?p ?key .
?syn ?p ?key .
FILTER
( bif:rdf_is_sub
( "b3sifp", ?p, <b3s:any_ifp>, 3 )
&&
?syn != ?org
)
}
}
OPTION
(
TRANSITIVE ,
T_IN (?org),
T_OUT (?syn),
T_MIN (0),
T_MAX (1)
)
FILTER ( ?org = ?k ) .
?syn foaf:knows ?f .
}
## See URIBurner live results.