Запрос свойства без значения с помощью SPARQL в WikiData

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

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

Есть ли способ просто запросить свойство без значения в фильтре помощника запросов?

Большое спасибо за Вашу помощь!

Вот запрос:

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". }
} 

person 43ndr1k    schedule 22.02.2019    source источник


Ответы (2)


В качестве условия предприятие должно быть частью страны. Это можно определить свойством P17 или значением Q6256. Есть ли способ просто запросить свойство без значения в фильтре помощника запросов?

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

?item wdt:P17 ?country .

или даже:

?item wdt:P17 [] .

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

person Jeen Broekstra    schedule 22.02.2019
comment
Это то, о чем просила ОП. Что интересно, однозначного результата тоже недостаточно. - person rickhg12hs; 23.02.2019
comment
@ rickhg12hs да, я заметил. Я уверен, что дальнейшее различие возможно путем добавления дополнительных ограничений, но, не зная больше о сценарии использования OP, я не могу сказать, какими должны быть эти ограничения. - person Jeen Broekstra; 23.02.2019
comment
это не удивительно. особенно географические объекты существуют с разной степенью детализации. города, регионы, штаты, что угодно - в зависимости от моделирования всем им можно назначить расположение в стране. - person UninformedUser; 23.02.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
person 43ndr1k    schedule 26.02.2019