SPARQL: запрос меток Wikidata для нескольких языков

Я пытаюсь получить ярлыки на нескольких языках из конечной точки SPARQL Wikidata. Следующий пример приведен здесь:

SELECT ?country ?country_EN ?country_DE ?country_FR
   WHERE {
     ?country wdt:P31 wd:Q185441. # member state of the European Union
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en".
            ?country rdfs:label ?country_EN.
     }
     SERVICE wikibase:label { bd:serviceParam wikibase:language "de".
            ?country rdfs:label ?country_DE.
     }
     SERVICE wikibase:label { bd:serviceParam wikibase:language "fr".
            ?country rdfs:label ?country_FR.
     }
}

Попробуй здесь

Тем не менее, это возвращает следующую ошибку:

Неизвестная ошибка: в любой группе может быть только одно "последнее выполнение"

Есть ли решение получить ярлыки на нескольких языках?

2 ответа

Решение

rdfs:label можно использовать напрямую без wikibase:label оказание услуг:

SELECT ?country ?country_en ?country_de ?country_fr
   WHERE {
     ?country wdt:P31 wd:Q185441. # member state of the European Union
     OPTIONAL {?country rdfs:label ?country_en filter (lang(?country_en) = "en")}.
     OPTIONAL {?country rdfs:label ?country_de filter (lang(?country_de) = "de")}.
     OPTIONAL {?country rdfs:label ?country_fr filter (lang(?country_fr) = "fr")}.
}

Попробуй здесь

Оптимизатор сервиса меток добавляет hint:Prior hint:runLast true подсказка службе меток, если нет другой явной подсказки:

LabelServiceUtils.getLabelServiceNodes(op).forEach(service -> {
    if (service.getProperty(QueryHints.RUN_LAST)  != null ||
        service.getProperty(QueryHints.RUN_FIRST) != null) {
        return;
    }
    service.setProperty(QueryHints.RUN_LAST, TRUE);
});

Нужно просто добавить hint:Prior hint:runLast false на все вызовы службы меток после первого.

Ваш запрос должен быть:

SELECT ?country ?country_EN ?country_DE ?country_FR
   WHERE {
     ?country wdt:P31 wd:Q185441. # member state of the European Union
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en".
            ?country rdfs:label ?country_EN.
     }
     SERVICE wikibase:label { bd:serviceParam wikibase:language "de".
            ?country rdfs:label ?country_DE.
     } hint:Prior hint:runLast false.
     SERVICE wikibase:label { bd:serviceParam wikibase:language "fr".
            ?country rdfs:label ?country_FR.
     } hint:Prior hint:runLast false.
}

Попытайся!

Очевидно, что можно выбирать метки на нескольких языках с помощью обычного SPARQL, и это менее многословно. Однако служба меток предоставляет языковые резервы, в том числе последний Q-id.

Источник:

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