SPARQL:从多个匹配中选择一个三元组?

SPARQL: Choose one triple from multiple match?

我有一个关于 SPARQL 查询的有趣问题。我正在查询一个三元组并且我有多个匹配项 - 可能是 2 个。但是我需要代码来只选择一个。哪一个完全无关紧要。 例如:我正在查询一本 5 岁的书,它在数据库中找到了 2 本书,但我只需要将其中一本书保存在变量中(哪一本书无关紧要)。 这在 SPARQL 中甚至可能吗?如果您需要任何其他信息,请告诉我。提前感谢大家的宝贵时间! 输入数据库的更改是我最不想做的事情。

示例:

<Book rdf:ID = 0001>
<Book.Title>Title1</Book.Title>
<Book.For>5 years old</Book.For>
<Book.Date>2000</Book.Date>
</Book>

<Book rdf:ID = 0002>
<Book.Title>Title2</Book.Title>
<Book.For>5 years old</Book.For>
<Book.Date>2005</Book.Date>
</Book>
Construct {?NewDatabase Example_of_book_for_5_years_old ?Title .}
Where {?Example Book.For "5 years old" .
       ?Example Book.Title ?Title .
      };

两本书都匹配 Where 子句,但我只需要一本就可以出现在新的数据库输出中。哪个都无所谓。

不考虑示例查询中的明显错误,解决方案是使用 SELECT 而不是 CONSTRUCT。前者允许您限制结果的数量。

如果你完全需要一个三元组作为结果,你可以使用有限的 SELECT 作为子查询

To select 只有一个来自 CONSTRUCT 查询的三元组,你可以使用 LIMIT 子句,就像 SELECT

Construct { ?Example <urn:Book:Title> ?Title }
Where {
   ?Example <urn:Book:For> "5 years old" .
   ?Example <urn:Book:Title> ?Title .
} 
limit 1

这将 select 第一个结果(顺序未定)。


不,根据 SPARQL Grammar 判断,无法将 LIMIT 子句与 SPARQL 更新一起使用。