gpt4 book ai didi

api - SPARQL 获取多个子项

转载 作者:行者123 更新时间:2023-12-02 02:07:23 24 4
gpt4 key购买 nike

我使用简单的 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) , 丢弃排列。但是如何申请<在尿?

最佳答案

恐怕你不能这样做。 SELECT(或者,事实上,任何 WHERE)的结果是表格形式的,您不能有嵌套表(如某些关系数据库中所见)或任何其他合适的结构。

直接的选择是将 ORDER BY ?item 添加到您现有的查询中。这至少会将所有内容放在一起,因此您可以逐项处理。在过去,我编写了包装器来像这样迭代关系数据,允许这样的事情:

foreach (item: iterateOverBy(results, "item")
foreach (date: iterateOverBy(results, "date")
foreach (title: iterateOverBy(results, "title")
foreach (info: iterateOverBy(results, "info")
...do something...

当然,SPARQL 可以返回 RDF,因此您可以使用:

CONSTRUCT { ?item dct:date ?date ; dct:title ?title ; rdfs:info ?info }
WHERE ...

在内部它会做同样的工作,但结果不会像 SELECT 那样包含很多重复。

我的最终建议与给定的问题不相符,但我应该提一下。

到目前为止,实际的查询处理并没有真正改变,只是结果的形式发生了改变。但是假设查询 where 的形式:

WHERE {
...some condition to select items...
?item dct:date ?date .
?item ... as before ...
}

条件可能是 FILTER (?date > ...something...)?item rdf:type ex:InterestingItem 或其他。

在这种情况下,您可能会考虑DESCRIBE:

DESCRIBE ?item WHERE { ...some condition to select items... }

这将返回(在 rdf 中)关于匹配该条件的项目的信息。这里的查询只是挑选出项目,而不是我们想知道的关于它们的事情。

关于api - SPARQL 获取多个子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com