2016-10-03 5 views
0

Я бы хотел протестировать онтологию OWL. Поскольку он большой, я хотел бы автоматически создавать именованных лиц как членов каждого класса, по одному на класс, с именем класса, с добавлением «1». Насколько я знаю, в обновлении SPARQL нет итерационного механизма. Но могут быть и другие способы его достижения. Любые идеи были бы хорошы.Создание тестовых лиц для всех классов онтологии

+0

«Итерация» находится в соответствии с SPARQL. Способ думать об этом заключается в том, что двигатель создает набор результатов, содержащий каждое соответствие в предложении 'WHERE'. Затем он выполняет условие 'SELECT' /' CONSTRUCT'/'DELETE' /' INSERT'/... для каждого совпадения. Следовательно, SPARQL является скорее декларативным языком, и попытка думать об этом в процедурных терминах не соответствует парадигме. – scotthenninger

ответ

2

Не должно быть так сложно:

SELECT ?cls ?ind { 
    ?cls a owl:Class . 
    BIND(IRI(CONCAT(STR(?cls), "1")) AS ?ind) 
} 

Этот запрос генерирует индивидуальный для каждого класса. Вы можете поместить этот запрос SELECT в часть WHERE запроса обновления SPARQL (untested):

INSERT { 
    ?ind a ?cls . 
} WHERE { 
    ?cls a <http://www.w3.org/2002/07/owl#Class> 
    BIND(iri(concat(str(?cls), "1")) AS ?ind) 
}