2016-05-29 7 views
1

Я все еще чувствую себя новичком SPARQL, поэтому я могу быть в стороне от того, что делает SPARQL GROUP BY, но вот мои вопросы.получить сгруппированные результаты с запросом sparql

Предположим, я хотел запросить все ресурсы в базе данных графов под названием «Категории», и я хотел получить все элементы, связанные с этими категориями, а также имена предметов и их цену.

Сейчас мои запросы SPARQL дают меня что-то вроде следующей таблице:

**Categories Item ItemName ItemPrice** 
Tools HammerID Hammer $12 
Tools SawID Saw $13 
Tools WrenchID Wrench $10 
Food AppleID Apple $5 
Food CornID Corn $1 

Я хотел использовать GROUP BY для группировки элементов в рамках одной категории, так что, когда я начинаю обрабатывать его, я могут просматривать каждую уникальную категорию, а затем отображать элементы, принадлежащие этой категории.

Прямо сейчас, если я Переберите выше результаты, я буду итерация 5 записей вместо 2.

Другого способа я могу описать результаты, я хочу это путем формирования изображения, что соответствующий данные JSON будет выглядеть , Я хочу что-то вроде:

[ 
    tools: [ 
     {id: hammerId 
      title: hammer 
      price: $12}, 
     {id: sawId 
      title: saw 
      price: $13}, 
     {id: wrenchId 
      title: wrench 
      price: $10} 
     ], 
    food: [ 
     {id: appleId 
      title: apple 
      price: $5}, 
     {id: cornId 
      title: corn 
      price: $1} 
     ] 
    ] 

результатов, как это я могу непосредственно цикл по пунктам верхнего уровня, а затем отобразить результаты для каждого.

Могу ли я использовать GROUP BY, чтобы сообщить SPARQL, чтобы дать мне такие результаты?

ответ

2

Нет, вы не можете. Результат запроса SPARQL SELECT определяется как последовательность решений, причем каждое решение представляет собой набор пар переменных-значений (со значением, определяемым как IRI, BNode или буквальное значение). В принципе, это простая таблица. Не существует никаких «вложенных» решений, подобных вам, для вашей JSON-подобной структуры.

Однако разница является чисто синтаксической. Если вы группируете группу, вы знаете, что результат предоставит все решения, принадлежащие одной группе друг к другу (один за другим), - поэтому при обработке результата вы можете просто обрабатывать сгруппированную переменную в качестве маркера. И, конечно, если вы действительно этого хотите, вы можете легко переписать результат запроса в эту синтаксическую структуру самостоятельно - это просто другой способ записать ту же самую информацию.

+0

спасибо. Это очень полезно. – Jeff