Как сопоставить строковые метки из внешней конечной точки SPARQL с строковыми метками в моей локальной онтологии?

PREFIX ex: <http://www.semanticweb.org/caeleanb/ontologies/twittermap#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?name (STR(?name) AS ?strip_name) ?name2
WHERE {
  ?p ex:displayName ?name2 .
  SERVICE <http://dbpedia.org/sparql> {
    { ?s rdfs:label ?name .
      ?s rdf:type foaf:Person . }
    UNION
    { ?x rdfs:label ?name .
      ?x dbo:wikiPageRedirects ?s . }

  }
  FILTER(STR(?name) = ?name2) .
}

Это запрос SPARQL, который я отправляю на конечную точку SPARQL Stardog (размещается локально). Я знаю, что некоторые префиксы отсутствуют, но я обещаю, что это не проблема префиксов, Stardog содержит остальные префиксы.

В запросе предполагается найти все foaf:Persons, которые разделяют строку метки с ресурсом отображаемого имени в моей собственной онтологии. Причиной создания UNION является попытка перехватить все страницы, которые также перенаправляют на Персона (но дайте мне знать, если эта часть выглядит испорченной).

В основном проблема в том, что приведенный выше запрос дает мне вывод, например:

name              strip_name    name2
John McCain (en) | John McCain | John McCain
John McCain (de) | John McCain | John McCain
John McCain (es) | John McCain | John McCain
...

Но Джон Маккейн - не местозаполнитель, он единственный, кто появляется, только на нескольких языках. Тем не менее, я ожидаю, что появится гораздо больше, так как я могу выполнять такие запросы:

PREFIX ex: <http://www.semanticweb.org/caeleanb/ontologies/twittermap#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT ?name (STR(?name) AS ?strip_name) ?name2
WHERE {
  ?p ex:displayName ?name2 .
  SERVICE <http://dbpedia.org/sparql> {
    { ?s rdfs:label ?name .
      ?s rdf:type foaf:Person . 
      FILTER(?name="Bill Nye"@en)}
    UNION
    { ?x rdfs:label ?name .
      ?x dbo:wikiPageRedirects ?s . 
    FILTER(?name="Bill Nye"@en)}

  }
  FILTER(STR(?name) = ?name2) .
}

и получить вывод как:

name           strip_name  name2
Bill Nye (en) | Bill Nye | Bill Nye

Я могу повторить этот трюк с другими именами, которые, как я знаю, должны совпадать в моей онтологии, такими как "Джейми Оливер" и "Дональд Трамп", но по какой-то причине единственное имя, которое отображается в общей версии запроса, - это Джон Маккейн. Кто-нибудь может мне это объяснить? Я уверен, что не понимаю какую-то часть блока SERVICE, но я пробовал много разных конфигураций и не могу заставить этот запрос работать должным образом. Спасибо за любую помощь.

0 ответов

Другие вопросы по тегам