Предикат / подчиненное свойство SPARQL не переменный
Я хочу связать свойство, а не любую переменную в sparql. в соответствии с http://www.w3.org/TR/sparql11-query/ я могу связать любую переменную, например BIND ( 42 AS ?price )
Мой вопрос, можем ли мы определить что-то вроде этого
BIND ( ?product rdf:price 42 )
или же BIND ( ?product rdf:price ?price )
ИЛИ идеальный случай для меня 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 }
}
}
Спасибо
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 .
}