Вы можете использовать различные подходы. Прежде всего, вы можете пройти Jena Model
следующим кодом:
model.read(...);
StmtIterator si = model.listStatements(
model.getResource("required property uri"), RDFS.range, (RDFNode) null);
while (si.hasNext()) {
Statement stmt = si.next();
Resource range = stmt.getObject().asResource();
// get restrictions collection
Resource nextNode = range.getPropertyResourceValue(OWL2.withRestrictions);
for (;;) {
Resource restr = nextNode.getPropertyResourceValue(RDF.first);
if (restr == null)
break;
StmtIterator pi = restr.listProperties();
while (pi.hasNext()) {
Statement restrStmt = pi.next();
Property restrType = restrStmt.getPredicate();
Literal value = restrStmt.getObject().asLiteral();
// print type and value for each restriction
System.out.println(restrType + " = " + value);
}
// go to the next element of collection
nextNode = nextNode.getPropertyResourceValue(RDF.rest);
}
}
Если вы используете OntModel
представление RDF кода графа может быть упрощена путем использования
model.listRestrictions()
ontClass.asRestriction()
etc.
Good example of such approach (благодаря Яну Dickinson)
Другой способ заключается в использовании SPARQL 1.1 запрос с тем же значением
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?datatype ?restr_type ?restr_value {
?prop rdfs:range ?range.
?range owl:onDatatype ?datatype;
owl:withRestrictions ?restr_list.
?restr_list rdf:rest*/rdf:first ?restr.
?restr ?restr_type ?restr_value
}
Я мог бы предположить, что если причина, по которой вы пытаетесь извлечь эти значения, состоит в том, что вы хотите обеспечить их соблюдение, вы смотрите на использование аргументатора, чтобы сделать это для вас. – Michael
Хорошо. Если это возможно, то как его реализовать. т.е. я прочитал целочисленное значение из документа, а затем мне нужно подтвердить, что значение соответствует ограничениям и поэтому может рассматриваться как «YEAR». Я новичок в OWL и Йене. – Vijith
Вам действительно не нужно его реализовывать, вот в чем смысл. Просто убедитесь, что ваша онтология правильная, и рассудитель скажет, если вы что-то непоследовательно. Я предлагаю вам прочитать праймер OWL (http://www.w3.org/TR/owl-primer/), а затем проверить аргументацию. У Йены есть несколько встроенных функций, чтобы вы начали, но вы можете использовать другие варианты, такие как Pellet или Hermit. – Michael