Ограничения количества элементов в SPARQL

Мой вопрос касается языка запросов SPARQL для троек RDF, предположим, что у нас есть семейная онтология, написанная в формате RDF/XML.

Теперь я хочу запросить все родители, например, по крайней мере с двумя дочерними элементами (количество элементов в отношении hasChild) с помощью SPARQL.

Мой вопрос в том, можно ли написать этот запрос на языке SPARQL, однако я знаю, что этот запрос можно написать на языке запросов DL (логика описания)

В более общем виде можно ли применить некоторые ограничения мощности в языке SPARQL?


person frogatto    schedule 30.01.2015    source источник
comment
онтология семейства, написанная в формате RDF/XML. Вы имеете в виду онтологию OWL? Онтология RDFS? RDF/XML — это всего лишь один из форматов сериализации для RDF, но в RDF можно закодировать ряд различных языков онтологий.   -  person Joshua Taylor    schedule 30.01.2015


Ответы (1)


Теперь я хочу запросить всех родителей, например, по крайней мере с двумя дочерними элементами (мощность по отношению hasChild) с помощью SPARQL.

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

select ?parent where {
  ?parent :hasChild ?child
}
group by ?parent
having (count(distinct ?child) >= 2)

Остерегайтесь, хотя; В OWL у вас может быть человек, который должен иметь как минимум двух детей, но этот запрос не вернет. Например, если у вас есть

TwoChildParent subClassof (hasChild min 2)
Joe a TwoChildParent

но у меня нет

Joe hasChild ?x

утроится, этот запрос не вернет Джо, даже если Джо имеет как минимум двух дочерних элементов.

person Joshua Taylor    schedule 30.01.2015
comment
Спасибо Джошуа! моя онтология относится к типу OWL, и ваш запрос сработал идеально - person frogatto; 30.01.2015
comment
@abforce Будьте осторожны; В OWL у вас может быть человек, который должен иметь как минимум двух детей, но этот запрос не вернет. Например, если у вас есть TwoChildParent subClassof (hasChild min 2) и Joe a TwoParentChild, но нет троек Joe hasChild x, этот запрос не вернет Джо, даже если у Джо есть по крайней мере два потомка. - person Joshua Taylor; 30.01.2015
comment
Я могу неправильно понять, но разве не должно быть Joe a TwoChildParent вместо Joe a TwoParentChild? - person Barry NL; 22.06.2020
comment
@BarryNL Хороший улов! Исправлено сейчас. - person Joshua Taylor; 22.06.2020