Я некоторые данные RDF, который выглядит примерно так:SPARQL: Разделить одну переменную по типу объекта
WatchObject -subclassOf-> Accessory
BagObject -subclassOf-> Accessory
Person -hasAccessory-> Accessory
Где WatchObject и BagObject оба подклассы «Аксессуар», который имеет отношение имеет (есть) Аксессуар (с) с Лицом.
Я хотел бы запросить его сейчас, чтобы получить часы и сумки для людей в отдельных переменных. Поэтому я подумал о чем-то вроде:
SELECT DISTINCT ?person ?watch ?bag
WHERE {
?person rdf:type x:Person .
?person x:hasAccessory ?bag^^x:BagObject .
?person x:hasAccessory ?watch^^x:WatchObject .
}
Возможно ли выразить что-то подобное в запросе SPARQL? Другой вопрос был бы, если бы разумно было моделировать мои данные, подобные этому, или было бы лучше добавить еще два объекта ObjectProperties?
WatchObject -subclassOf-> Accessory
BagObject -subclassOf-> Accessory
Person -hasAccessory-> Accessory
Person -hasWatch-> WatchObject
Person -hasBag-> BagObject
Спасибо за ваши предложения. Я пробовал этот подход с помощью перекрестного продукта, но он значительно замедляет мои запросы. В результате я создал дополнительные свойства hasWatch/hasBag как подзадачи hasAccessory, как вы предложили. – del123
Хорошо, вам не нужно приобретать крестик. Вы все еще можете использовать что-то вроде первого подхода. –