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 更新一起使用。
我有一个关于 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 更新一起使用。