Я пытаюсь извлечь некоторые данные из dbpedia, используя SERVICE функцию SPARQL.
SERVICE
На самом деле я хочу извлечь имена, последние и многие из всех нью-йоркских театров.Чтобы проверить, является ли экземпляр театром, я могу использовать http://dbpedia.org/class/yago/Theater104417809. Одним из примеров театра может быть http://dbpedia.org/resource/Grand_Theatre_(New_York_City).
Как использовать функцию service для получения того, что мне нужно в SPARQL?
service
** EDIT **
Следующий запрос, который я пытаюсь выполнить, но не возвращает никакого значения.
PREFIX dbpedia: <http://dbpedia.org/ontology/> PREFIX dbp: <http://dbpedia.org/property/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> PREFIX geos: <http://www.opengis.net/ont/geosparql#> PREFIX geof: <http://www.opengis.net/def/function/geosparql/> PREFIX : <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#> SELECT * WHERE { SERVICE <http://dbpedia.org/sparql/> { SELECT ?teatreName ?lat ?long WHERE { ?teatre rdf:type dbpedia:Theatre . ?teatre foaf:name ?teatreName . ?teatre geo:lat ?lat . ?teatre geo:long ?long . ?teatre dbp:city ?ciutat . ?ciutat rdfs:label "New York City"@en } } }
Проблема не в федеративных запросах, а в запросе DBpedia.dbp:city - это не свойство объекта, а просто тип rdf:Property, поэтому он не типизирован.В вашем случае он сопоставляется с литералами, что означает, что вы должны использовать литерал напрямую.Странная вещь в том, что по некоторым причинам вы должны явно использовать тип данных http://www.w3.org/1999/02/22-rdf-syntax-ns#langString вместо "New York City"@en - это явно не интуитивно понятно для любого пользователя.Не уверен, произошло ли это из-за извлечения DBpedia или из-за ожидаемого поведения Virtuoso.
dbp:city
rdf:Property
http://www.w3.org/1999/02/22-rdf-syntax-ns#langString
"New York City"@en
PREFIX dbpedia: <http://dbpedia.org/ontology/> PREFIX dbp: <http://dbpedia.org/property/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> PREFIX geos: <http://www.opengis.net/ont/geosparql#> PREFIX geof: <http://www.opengis.net/def/function/geosparql/> PREFIX : <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#> SELECT * WHERE { SERVICE <http://dbpedia.org/sparql/> { SELECT ?teatreName ?lat ?long WHERE { ?teatre rdf:type dbpedia:Theatre . ?teatre foaf:name ?teatreName . ?teatre geo:lat ?lat . ?teatre geo:long ?long . ?teatre dbp:city "New York City"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#langString> } } }