我使用简单的 SPARQL 查询来查询 API:
PREFIX ...
SELECT DISTINCT *
WHERE {
?item dct:date ?date .
?item dct:title ?title .
?item rdfs:info ?info .
}
这给我一个xml
<results>
<result>
<binding name='title'>
<literal>titletitle</literal>
</binding>
<binding name='info'>
<uri>link</uri>
</binding>
<binding name='date'>
<literal datatype='http://www.w3.org/2001/XMLSchema#dateTime'>2012-12-21T02:26:00+00:00</literal>
</binding>
<binding name='item'>
<uri>link</uri>
</binding>
</result>
...
</results>
但问题是:我知道,与该项目匹配的 rdfs:info 链接不止一个。我怎样才能查询这样我得到
...
<binding name='info'>
<uri>link1</uri>
</binding>
<binding name='info'>
<uri>link2</uri>
</binding>
<binding name='info'>
<uri>link3</uri>
</binding>
...
? 这很简单,还是我需要一个子查询或一些奇怪的UNION
?如果我只是尝试
PREFIX ...
SELECT DISTINCT *
WHERE {
?item dct:date ?date .
?item dct:title ?title .
OPTIONAL (?item rdfs:info ?info1 ).
OPTIONAL (?item rdfs:info ?info2 ).
}
?info1
这将返回和的值的所有可能排列?info2
。另外,我不知道信息项的数量。
如果我添加FILTER (?info1 != ?info2)
,我仍然会得到一些排列。FILTER (?info1 < ?info2)
我认为从代数的角度来看,丢弃排列是可能的。但是我如何申请<
uris?