Apache Jena не поддерживает , не поддерживает OWL2, только интерфейс от OWL11 до org.apache.jena.ontology.OntModel . Смотрите также документация .
Но вы все равно можете работать с OWL2 в Jena, используя некоторые внешние API и инструменты на основе jena, например, ONT-API , то есть OWL-API -api ( v5 ) над Йеной.
В ONT-API есть два основных представления данных OWL2, которые инкапсулированы в форме RDF-графика: ru.avicomp.ontapi.jena.model.OntGraphModel
и ru.avicomp.ontapi.OntologyModel
.
Представление OntGraphModel является полным аналогом Jena OntModel
, средства для работы с тройками.
И представление OntologyModel является расширенным org.semanticweb.owlapi.model.OWLOntology
, средством для работы с аксиоматическими данными, которое поддерживается представлением OntGraphModel
и наоборот.
Например, следующий фрагмент:
String uri = "https://stackoverflow.com/questions/54049750";
String ns = uri + "#";
OntGraphModel m = OntModelFactory.createModel()
.setNsPrefixes(OntModelFactory.STANDARD).setNsPrefix("q", ns);
m.setID(uri);
OntClass c = m.createOntClass(ns + "c");
OntNOP p = m.createObjectProperty(ns + "p");
OntIndividual i = c.createIndividual(ns + "i");
m.createComplementOf(m.createUnionOf(c, m.getOWLThing(),
m.createObjectSomeValuesFrom(p, m.createOneOf(i))));
m.write(System.out, "ttl");
создаст следующую онтологию:
@prefix q: <https://stackoverflow.com/questions/54049750#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<https://stackoverflow.com/questions/54049750>
a owl:Ontology .
q:c a owl:Class .
q:p a owl:ObjectProperty .
q:i a owl:NamedIndividual , q:c .
[ a owl:Class ;
owl:complementOf [ a owl:Class ;
owl:unionOf ( q:c owl:Thing
[ a owl:Restriction ;
owl:onProperty q:p ;
owl:someValuesFrom [ a owl:Class ;
owl:oneOf ( q:i )
]
]
)
]
] .