Запрос свойства без значения с помощью SPARQL в WikiData - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть список из 1200 географических объектов, таких как города, озера или горы в виде строк.Я хотел бы обогатить эти данные авторитетным файлом WikiData ID.Это работает, но в результате я иногда получаю более одного предложения WikiDataID.Мне нужно определить правильный по появлению страны в заявлениях.

В качестве примера я попробовал город Карлсруэ.Для строки «Карлсруэ» я получаю три результата.Но мне нужен только один конкретный идентификатор WikiData (в данном случае: https://www.wikidata.org/wiki/Q1040) с меткой и altLabel (также известный как) на немецком, английском и французском языках. В качестве условия сущность должна быть частью страны. Этовы можете определить по свойству P17 или как значение Q6256.

Есть ли способ просто запросить свойство без значения в Filter of the Query Helper?

Большое спасибо за вашhelp!

Вот запрос:

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
prefix schema: <http://schema.org/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>

SELECT DISTINCT ?country ?item ?itemLabel ?altLabel ?label_en ? 
label_de ?label_fr 
WHERE {
 ?item rdfs:label "Karlsruhe"@de.
 ?item skos:altLabel ?altLabel.
?item rdfs:label ?label_en.
 ?item rdfs:label ?label_de.
 ?item rdfs:label ?label_fr.
FILTER(LANGMATCHES(LANG(?altLabel), "de"))
 FILTER((LANG(?label_en)) = "en")
FILTER((LANG(?label_de)) = "de")
FILTER((LANG(?label_fr)) = "fr")
SERVICE wikibase:label { bd:serviceParam wikibase:language " 
[AUTO_LANGUAGE],de, en, fr". }
} 

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Этот запрос работает для моих целей:

    PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
    PREFIX schema: <http://schema.org/>
    PREFIX wikibase: <http://wikiba.se/ontology#>
    PREFIX wd: <http://www.wikidata.org/entity/>
    PREFIX wdt: <http://www.wikidata.org/prop/direct/>

    SELECT DISTINCT  * 

    WHERE {
      ?item rdfs:label "Karlsruhe"@de.   

      ?item rdfs:label ?label_de.
      FILTER((LANG(?label_de)) = "de").

      SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE], de, en, fr". }

        bind(if(exists{?item wdt:P17 []}, "yes", "no") as ?country_)

      optional {

          ?item rdfs:label ?label_en.     
          FILTER((LANG(?label_en)) = "en").      
          ?item rdfs:label ?label_fr.  
          FILTER((LANG(?label_fr)) = "fr").

        ?item skos:altLabel ?altLabel_de.
        FILTER(LANGMATCHES(LANG(?altLabel_de), "de"))

        optional {
        ?item skos:altLabel ?altLabel_en.
        FILTER(LANGMATCHES(LANG(?altLabel_en), "en"))
          }

        optional {
        ?item skos:altLabel ?altLabel_fr.
        FILTER(LANGMATCHES(LANG(?altLabel_fr), "fr"))
          }
      }  
    } 
    order by ?item
0 голосов
/ 23 февраля 2019

Как условие, субъект должен быть частью страны.Это вы можете определить по свойству P17 или как значение Q6256.Есть ли способ просто запросить свойство без значения в Filter of the Query Helper?

Если я правильно понимаю, вы спрашиваете, можете ли вы изменить запрос так, чтобы он возвращал результаты только в том случае, еслик этому предмету прикреплена некоторая страна (нам все равно, какая).Если это так, вы можете просто добавить следующий шаблон графика в ваш запрос:

?item wdt:P17 ?country .

или даже:

?item wdt:P17 [] .

([] - это пустой узел, которыйв SPARQL означает анонимную переменную, то есть переменную-заполнитель для значения, которое нас не интересует).

...