我想在sparql中绑定属性而不是任何变量。
根据{{3}}
我可以绑定任何变量,如BIND ( 42 AS ?price )
我的问题是我们可以定义类似这样的东西
BIND ( ?product rdf:price 42 )
要么
BIND ( ?product rdf:price ?price )
OR对我来说理想的情况是
BIND ( ?product ?property ?price ) // where ?property can be minPrice, maxPrice or avgPrice
我的用例是获取此类信息。
SELECT * WHERE {
?product :title ?title; :brand ?brand; :id ?productID.
?product :totalOffers =(assign) {
select COUNT(?oid) WHERE {?oid :isOfferOf ?productID}
}
// or like this
?product (:totalOffers :minPrice :maxPrice ) =(assign) {
select COUNT(?oid) MIN(?price) MAX(?price) WHERE {?oid :isOfferOf ?productID. ?oid :price ?price }
}
}
谢谢
答案 0 :(得分:1)
首先要了解的是SPARQL执行是自下而上的,因此将首先评估子查询。因此,如果要分配一些值以供在子查询中使用,则需要在子查询中执行此操作。
要分配多个变量,您可以使用多个BIND
语句,例如
BIND("foo" AS ?a)
BIND("bar" AS ?b)
# etc
或者您可以使用单个VALUES
语句,例如
VALUES ( ?a ?b ) { ( "foo" "bar" ) }
所以你只需要在查询中使用它,例如
SELECT * WHERE
{
{
SELECT
?product
(COUNT(?oid) AS ?offers)
(MIN(?price) AS ?minPrice)
(MAX(?price) AS ?maxPrice)
WHERE
{
VALUES ( ?product )
{
( <http://example.org/product> )
}
?product :id ?productID .
?oid :isOfferOf ?productID .
?oid :price ?price .
}
GROUP BY ?product
}
?product :title ?title ;
:brand ?brand .
}