Соответствие пути внутри предложения VALUES - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь выполнить сопоставление пути внутри предложения VALUES в sparql, чтобы сопоставить все экземпляры и подклассов как сражений, так и осад в викиданных.Следующий запрос повторяется время ожидания .

SELECT DISTINCT ?battle ?battleLabel WHERE {
  {
    SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
    VALUES ?type {wd:Q178561 wd:Q188055} ?battle (wdt:P31/wdt:P279*) ?type .
    ?battle rdfs:label ?queryByTitle.
    FILTER(REGEX(?queryByTitle, "saratoga", "i"))
  }
}

1 Ответ

0 голосов
/ 30 января 2019

Кажется, что VALUES, особеннов сочетании с / сбивает с толку оптимизатор запросов Blazegraph в этом случае.

Используйте UNION вместо VALUES:

SELECT DISTINCT ?battle ?battleLabel WHERE {
    { ?battle wdt:P31/wdt:P279* wd:Q178561 }
    UNION
    { ?battle wdt:P31/wdt:P279* wd:Q188055 }
    ?battle rdfs:label ?queryByTitle.
    FILTER(REGEX(?queryByTitle, "saratoga", "i"))
    SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}

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

SELECT DISTINCT ?battle ?battleLabel WHERE {
    hint:Query hint:optimizer "None" .
    VALUES ?type {wd:Q178561 wd:Q188055}
    ?subtype wdt:P279* ?type .
    ?battle wdt:P31 ?subtype .
    ?battle rdfs:label ?queryByTitle.
    FILTER(REGEX(?queryByTitle, "saratoga", "i"))
    SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
}
...