#sparql #owl
#sparql #owl
Вопрос:
Я хотел бы протестировать онтологию OWL. Поскольку он большой, я хотел бы автоматически создавать именованных пользователей в качестве членов каждого класса, по одному на класс, с именем класса, к которому добавляется «1». Насколько я знаю, в обновлении SPARQL нет механизма итерации. Но могут быть и другие способы достижения этой цели. Любые идеи будут оценены.
Комментарии:
1. «Итерация» заключается в сопоставлении SPARQL. Способ думать об этом заключается в том, что движок создает результирующий набор, содержащий каждое совпадение в
WHERE
предложении. Затем он выполняетSELECT
/CONSTRUCT
/DELETE
/INSERT
/ … предложение для каждого соответствия. Следовательно, SPARQL — это скорее декларативный язык, и попытка представить его в процедурных терминах не соответствует парадигме.
Ответ №1:
Не должно быть так сложно:
SELECT ?cls ?ind {
?cls a owl:Class .
BIND(IRI(CONCAT(STR(?cls), "1")) AS ?ind)
}
Этот запрос генерирует индивидуума для каждого класса. Вы можете поместить этот запрос SELECT в WHERE часть запроса обновления SPARQL (непроверенный):
INSERT {
?ind a ?cls .
} WHERE {
?cls a <http://www.w3.org/2002/07/owl#Class>
BIND(iri(concat(str(?cls), "1")) AS ?ind)
}