Почему переменная + метка не работает в SPARQL

В примерах SPARQL Викиданных у нас есть это:

    SELECT ?h ?date 
WHERE 
{
    ?h wdt:P31 wd:Q5 .
    ?h wdt:P569 ?date .
    OPTIONAL {?h wdt:P570 ?d } 
    FILTER (?date > "1880-01-01T00:00:00Z"^^xsd:dateTime)
    FILTER (!bound(?d))
}
LIMIT 1000

Я понимаю, что если вы поставите метку после имени переменной, она покажет метку. Итак, я не понимаю, почему это не показывает результат:

    SELECT ?h ?hLabel ?date ...

Заранее спасибо!


person Jack Green    schedule 13.06.2017    source источник
comment
Эта функция предоставляется специфичной для Викиданных службой.   -  person Stanislav Kralin    schedule 13.06.2017


Ответы (1)


Я не знаю об этой конкретной функции для Label после имени переменной.

Однако для rdfs:label вы можете включить rdfs:label в свой запрос. Добавьте следующую строку: ?h rdfs:label ?hLabel.:

SELECT ?h ?hLabel ?date WHERE 
{
    ?h wdt:P31 wd:Q5 .
    ?h wdt:P569 ?date .      
    ?h rdfs:label ?hLabel. 
    OPTIONAL {?h wdt:P570 ?d } 
    FILTER (?date > "1880-01-01T00:00:00Z"^^xsd:dateTime)
    FILTER (!bound(?d))
}
LIMIT 1000

Если вам нужны метки на определенном языке, например. для английского добавить FILTER (langMatches( lang(?hLabel), "EN" ) )

Вот интересный ответ stackoverflow о ярлыки.

person Median Hilal    schedule 13.06.2017
comment
Это решило эту проблему, но теперь есть другая. Это мой новый запрос: ` SELECT ?h ?hLabel ?date WHERE { ?h wdt:P31 wd:Q5 . ?h wdt:P569 ?дата . ?h rdfs:метка ?hLabel. НЕОБЯЗАТЕЛЬНЫЙ {?h wdt:P570 ?d } ФИЛЬТР (?date › 1880-01-01T00:00:00Z^^xsd:dateTime) ФИЛЬТР (!bound(?d)) } LIMIT 1000 ` Теперь в ответе у меня есть несколько элементы более одного раза. Я попробовал DISTINCT и ` SERVICE wikibase:label { bd:serviceParam wikibase:language en }`. Но ни то, ни другое не работает. Спасибо - person Jack Green; 13.06.2017
comment
Я думаю, это из-за языка. Просто добавьте языковой фильтр, который я упомянул в ответе, чтобы включить только результаты на английском языке. Или добавьте ?lang к выбору, а затем добавьте BIND ( lang(?hLabel) as ?lang) в предложении where. - person Median Hilal; 13.06.2017
comment
@JackGreen, если вы используете службу меток Викиданных, вам не нужно использовать тройной шаблон rdfs:label. - person UninformedUser; 13.06.2017
comment
Спасибо. Я обнаружил, что вы имеете в виду это: SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }. - person Jack Green; 13.06.2017