ИЛИ в запросе sparql

Этот sparql-запрос к викиданным показывает все места в Германии (Q183) с именами, оканчивающимися на -ow или -itz.

Я хочу расширить это, чтобы найти места в Германии и, скажем, в Австрии.

Я попытался изменить 8-ю строку на что-то вроде:

wdt:P17 (wd:Q183 || wd:Q40);

для поиска мест в Австрии (Q40), но это неверный запрос.

Как можно расширить запрос, включив в него другие страны?


person the.real.gruycho    schedule 18.12.2016    source источник


Ответы (1)


Afaik, нет более простого синтаксиса. Однако вы можете использовать UNION для того же эффекта, например:

SELECT ?item ?itemLabel ?coord
WHERE 
{
    ?item wdt:P31/wdt:P279* wd:Q486972;
              rdfs:label ?itemLabel;
              wdt:P625 ?coord;
    {?item wdt:P17 wd:Q183} 
    UNION 
    {?item wdt:P17 wd:Q40}
    FILTER (lang(?itemLabel) = "de") . 
    FILTER regex (?itemLabel, "(ow|itz)$").
}

или в качестве альтернативы создайте новую переменную, содержащую обе страны, используя VALUES :

SELECT ?item ?itemLabel ?coord
WHERE 
{
  VALUES ?country { wd:Q40 wd:Q183 }
  ?item wdt:P31/wdt:P279* wd:Q486972;
        wdt:P17 ?country; 
        rdfs:label ?itemLabel;
        wdt:P625 ?coord;
  FILTER (lang(?itemLabel) = "de") . 
  FILTER regex (?itemLabel, "(ow|itz)$").
}
person Sirko    schedule 18.12.2016