How to access permanently removed pages using SPARQL? - sparql

I am facing a problem in using SPARQL with DBPedia.
for example if I call this link directly
http://dbpedia.org/resource/Venice,_Italy
I see a 301 redirect code to
http://dbpedia.org/page/Venice
but if i try to call Venice,_Italy resorce using SPARQL I get nothing back.
define input:default-graph-uri <http://dbpedia.org>
PREFIX ontology: <http://dbpedia.org/ontology/>
PREFIX property: <http://dbpedia.org/property/>
PREFIX resource: <http://dbpedia.org/resource/>
PREFIX position:<http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT DISTINCT ?Abstract ?ThumbnailURL WHERE
{ <http://dbpedia.org/resource/Venice,_Italy> ontology:abstract ?Abstract. <http://dbpedia.org/resource/Venice,_Italy> ontology:thumbnail ?ThumbnailURL.
FILTER (lang(?Abstract)="en")}

You can leverage the ontology:wikiPageRedirects property to ensure your query actually gets an answer by traversing the redirect in your query e.g.
PREFIX ontology: <http://dbpedia.org/ontology/>
PREFIX property: <http://dbpedia.org/property/>
PREFIX resource: <http://dbpedia.org/resource/>
PREFIX position:<http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT DISTINCT ?Abstract ?ThumbnailURL
WHERE
{
<http://dbpedia.org/resource/Venice,_Italy> ontology:wikiPageRedirects ?page .
?page ontology:abstract ?Abstract.
?page ontology:thumbnail ?ThumbnailURL.
FILTER (lang(?Abstract)="en")
}

Related

freetext search in dbpedia

I want to use freetext search against the dbpedia and I'm trying the query I found on the W3C website: https://www.w3.org/2009/Talks/0615-qbe/
If I try the query WITHOUT the bif: prefix by commenting it out I get the error shown below the query:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
# PREFIX bif: <http://www.openlinksw.com/schemas/bif#>
SELECT ?lbl ?est
WHERE {
?country rdfs:label ?lbl .
FILTER(bif:contains(?lbl, "Republic")) .
?country a type:Country108544813 ;
prop:establishedDate ?est .
FILTER(?est < "1920-01-01"^^xsd:date) .
}
Error: Line 9, Parse error: namespace mapping for "bif" not defined
when expanding QName "bif:contains".
[condition type: sparql-lexer-error-namespace-mapping-not-defined]
well: that makes sense, you do need to define your namespace. So let me do the same query again using the bif: prefix that I found on the Virtuoso website (and various other places)
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
PREFIX bif: <http://www.openlinksw.com/schemas/bif#>
SELECT ?lbl ?est
WHERE {
?country rdfs:label ?lbl .
FILTER(bif:contains(?lbl, "Republic")) .
?country a type:Country108544813 ;
prop:establishedDate ?est .
FILTER(?est < "1920-01-01"^^xsd:date) .
}
Now I get a different error: it seems that the bif: namespace is a protected name by Virtuoso
So it seems I cannot live with bif: or without :bif. Has anyone seen this error before? Thanks.
Btw: I really don't care that much about bif: What I really want is to do freetext queries against dbpedia. So any alternative is welcome. YES: there are earlier questions on SO about this but note that each of those answers contain bif: as well.
Added later: so just to be sure I changed bif: into bof: and now I get a new error that shows that contains no longer is a valid operator. See below. So anyway: I guess the only thing I care about from here on is: how do you do freetext queries against dbpedia :-)
bif: is a Virtuoso built-in, for "built-in function".
You're going through some sort of SPARQL pre-parser, not directly against the SPARQL endpoint, so you do need to define the prefix in your query. Most such pre-parsers will do the right thing if you just --
PREFIX bif: <bif:>
Alternatively, you can change your query from using the bif:contains function --
FILTER(bif:contains(?lbl, "Republic"))
-- to use SPARQL regex --
FILTER regex(?lbl, "Republic")

How to display list using SPARQL

I am trying to show the list of Charities from this page - http://dbpedia.org/page/Category:Charitable_organizations
The list is in is dct:subject of property, I have made a query but it doesn't work.
QUERY
WHERE {
?s dbo:type dbr:Charitable_organization .
}
I do kind of know how to use SPARQL with DBPEDIA but am unsure how to use the dct:subject part and display the `dbr:'
Using the site- http://dbpedia.org/sparql to execute queries. So any help on how I can show the list of charities from that website? Thanks for reading.
Your query should be:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
PREFIX dbr: <http://dbpedia.org/resource/>
## Added ##
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT *
WHERE {
?s dbo:type dbr:Charitable_organization .
}
Links
Live Results Page Link.
Live Query Definition Link.

SPARQL query not returning any data

I am new to RDF, so it will be very nice if you can help me with this!
I am trying to query the subject of pickles called "Umeboshi"(It is japanese pickles) as follows:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
PREFIX onto: <http://dbpedia.org/ontology/>
SELECT ?label ?subject
WHERE {
?Thing
rdfs:label ?label;
prop:subject?subject.
FILTER (?label = "Umeboshi")
}
This query doesn't give me any data.
As I don't know where to find available properties I am referring to the Umeboshi page on dbpedia http://live.dbpedia.org/page/Umeboshi.
Thank you very much for your help!
Two things I found:
In the page you give, the label is given in English, but in your query you omit the language.
subject has a different namespace. It is a dcterm concept and not a dbpedia property.
This leads to the following, changed query, which results in three bindings:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dct: <http://purl.org/dc/terms/>
SELECT ?label ?subject
WHERE {
?Thing
rdfs:label ?label;
dct:subject ?subject.
FILTER (?label = "Umeboshi"#en)
}

Sparql result not containing specified property included in results

I have this query
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX dbpedia_property: <http://dbpedia.org/property/>
PREFIX dbpedia_ontology: <http://dbpedia.org/ontology/>
PREFIX yago: <http://dbpedia.org/class/yago/>
PREFIX schema: <http://schema.org/>
SELECT * WHERE
{
{
SELECT ?school
WHERE
{
?school rdf:type yago:EducationalInstitution108276342 .
FILTER ( contains(str(?school), "Australia") )
}
ORDER BY ?school
}
}
Don't mind the extra brackets as this is part of a larger query.
What I want to know is why thi http://dbpedia.org/page/Academic_structure_of_the_Australian_National_University is included in the results since I specify rdf:type yago:EducationalInstitution108276342. This property is not included in the resource page. I'm using this endpoint: http://dbpedia.org/sparql
Looks like a bug in the Pubby Web interface or in the query that is used to get the data that will be shown.
The query
SELECT * WHERE{
<http://dbpedia.org/resource/Academic_Structure_of_the_Australian_National_University> ?p ?o
}
returns the necessary rdf:type statement.
The other strange thing is that even a SPARQL DESCRIBE query does not return the rdd:type triples:
DESCRIBE <http://dbpedia.org/resource/Academic_Structure_of_the_Australian_National_University>
Although DESCIBE is not really defined in the specs, a user would expect those triples for sure. And maybe this kind of query is used to retrieve the data for the Web pages of resources.

simple sparql query from dbpedia

I have a question about a SPARQL query that I'm trying to build from a tutorial. I want to generate triples that return a list of band members and the bands that they are in using a DBPedia endpoint.
my query
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?bandname where {
?person foaf:name ?name .
?band dbo:bandMember ?person .
?band dbo:genre dbpedia:Punk_rock .
?band dbp:name ?bandname .
}
I'm also using a [SPARQL query validator][2] to try to figure out my problem and it seems I'm using an incorrect prefix for "dbp:name ?bandname"I just want the triples returned in JSON if possible.
Once I can get this to run, I'd like to add another prefix, from GeoNames, to see the places associated with the bands, if possible (but that part is in the future). Any insights would be greatly appreciated!
There are some issues with your query.
The "name" property for a band has the following URI : http://dbpedia.org/property/name. It is a property, and not a resource, but you defined it as such in the prefixes. You shoud define it as follows :
PREFIX dbp: <http://dbpedia.org/property/>
I just had a quick check at what a band page has as properties, and saw that, apart from the dbo:bandMember one you are using, there is another property, currentMembers, that seems to retrieve more information. This seems logical though, in so far as dbo:bandMember only retrieves entities (members URIs), whereas dbp:currentMembers also retrieves literals. It depends on your use case here...
You use the dbpedia:prefix in your query, that does not seem to have been defined beforehand.
Here is the query I used to retrieve a list of bands associated with their members :
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?members ?bandName where {
?band dbo:genre dbr:Punk_rock .
?band dbp:currentMembers ?members.
?band foaf:name ?bandName
FILTER(langMatches(lang(?bandName), "en"))
}
The filter part allows us to avoid duplicates in case the literals are also defined in other languages.
But if you still want to use the dbo:bandMember property, this query also does the job :
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?personName ?bandName where {
?band dbo:bandMember ?person .
?person foaf:name ?personName .
?band dbo:genre dbr:Punk_rock .
?band foaf:name ?bandName
FILTER(langMatches(lang(?bandName), "en"))
FILTER(langMatches(lang(?personName), "en"))
}
Hope that helps !
The problem is with undefined prefix dbpedia. Also I think you have to replace dbp:name with foaf:name:
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbp: <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?bandname where {
?person foaf:name ?name .
?band dbo:bandMember ?person .
?band dbo:genre dbp:Punk_rock .
?band foaf:name ?bandname .
}
Alas, with SELECT you won't get triples, but just the names (or other stuff) in tabular results. Much like SQL. If you want triples, you need CONSTRUCT