我对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子句相匹配,但我只需要一个在新数据库输出中。与哪一个无关。
答案 0 :(得分:0)
不考虑示例查询中的明显错误,解决方案是使用 SELECT
而不是CONSTRUCT
。前者允许您限制结果数量。
如果您完全需要三元组作为结果,则可以使用有限的 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
这将选择第一个结果(未定顺序)。
不,由SPARQL Grammar判断,不可能将LIMIT
子句与SPARQL更新一起使用。