VALUES 子句中的路径匹配

Path matching inside a VALUES clause

我正在尝试在 sparql 的 VALUES 子句内执行路径匹配,以便匹配维基数据中战斗和围攻的所有实例 子类。以下请求重复times out

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

似乎 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" }
}