最近我在很多SPARQL查詢中使用VALUES,只是意識到在其中一箇中,我沒有得到我期待的結果。SPARQL BIND打破VALUES?
下面是一個簡單的例子:
@prefix ns: <http://some/ns> .
<http://some/uri> a ns:Document ;
ns:A5000 "00003381" ;
ns:A5080 "sredniowiecze" .
我使用VALUES從nsA5080文字到URI來 「翻譯」。簡單的查詢:
PREFIX ns: <http://some/ns>
SELECT ?document ?u ?p ?lp
WHERE
{
?document ns:A5080 ?p .
VALUES (?p ?u) {
("sredniowiecze" ns:MiddleAges)
("other" ns:Other)
}
}
按預期工作:
Document U P LP
<http://some/uri> <http://some/nsMiddleAges> "sredniowiecze"
但是,如果我將其更改爲:
SELECT ?document ?u ?p ?lp
WHERE
{
?document ns:A5080 ?p .
BIND (LCASE(?p) AS ?lp)
VALUES (?lp ?u) {
("sredniowiecze" ns:MiddleAges)
("other" ns:Other)
}
}
我越來越:
Document U P Lp
<http://some/uri> <http://some/nsMiddleAges> "sredniowiecze" "sredniowiecze"
<http://some/uri> <http://some/nsOther> "sredniowiecze" "sredniowiecze"
哪些呢對我不感興趣。額外的元組來自哪裏?在真正的查詢中,我有ca. VALUES中有30多個元組,它們都落在結果中。 什麼是更有趣的查詢看起來幾乎像那樣 - 在其他地方工作得很好。
想法?
我仍然對解決這個難題感興趣,但同時我想報告說,在原始查詢中添加和刪除BIND和變量的一些空格 - 修復了它。但在上面的查詢中做非常類似的格式 - DID不工作。 ( –
)如果這是一個bug,它可能是特定於某個特定的實現。您使用的是什麼SPARQL引擎?Jena?Virtuoso?其他?爲什麼標記爲[tag:switch-statement]?它沒有任何東西 –
第二個查詢並不完全是你正在運行的,你顯示的輸出有一個Document變量,但你的第二個查詢有DocumentA,我不確定是否這樣做在這裏有一個區別或者不是這樣,但是這使得它難以重現... –