Предикат / подчиненное свойство 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 .
}
Другие вопросы по тегам