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

时间:2016-08-15 07:04:31

标签: match sparql rdf

我对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子句相匹配,但我只需要一个在新数据库输出中。与哪一个无关。

1 个答案:

答案 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更新一起使用。