JENA API 是否支持 OWL 2?
Does JENA API support OWL 2?
我可以知道 Apahe JENA 是否支持 Java 中的 OWL 2 语法吗?它确实在文档 (https://jena.apache.org/documentation/ontology/) 中提到它仅提供有限的基数限制。我想从专家那里确认一下。
Apache Jena does not support OWL2, only OWL11 through org.apache.jena.ontology.OntModel interface. See also documentation.
但是您仍然可以使用一些外部基于 jena 的 APIs 和工具在 Jena 中使用 OWL2,例如ONT-API, that is OWL-API-api(v5) impl over Jena.
在ONT-API中有两个主要的OWL2数据视图,它们封装了相同的RDF图:com.github.owlcs.ontapi.jena.model.OntModel
和com.github.owlcs.ontapi.Ontology
(在旧版本中( ONT-API:v1.x.x) 这些类分别有名字ru.avicomp.ontapi.jena.model.OntGraphModel
和ru.avicomp.ontapi.OntologyModel
) .
com.github.owlcs.ontapi.jena.model.OntModel 视图完全类似于 Jena org.apache.jena.ontology.OntModel
,它是处理三元组的工具。
com.github.owlcs.ontapi.Ontology 视图是扩展的 org.semanticweb.owlapi.model.OWLOntology
,用于处理公理化数据的工具,由 com.github.owlcs.ontapi.jena.model.OntModel
视图支持,反之亦然。
例如,以下片段:
String uri = "";
String ns = uri + "#";
OntModel m = OntModelFactory.createModel()
.setNsPrefixes(OntModelFactory.STANDARD).setNsPrefix("q", ns);
m.setID(uri);
OntClass c = m.createOntClass(ns + "c");
OntObjectProperty p = m.createObjectProperty(ns + "p");
OntIndividual i = c.createIndividual(ns + "i");
m.createObjectComplementOf(m.createObjectUnionOf(c, m.getOWLThing(),
m.createObjectSomeValuesFrom(p, m.createObjectOneOf(i))));
m.write(System.out, "ttl");
将产生以下 ontology:
@prefix q: <#> .
@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#> .
<>
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 )
]
]
)
]
] .
我可以知道 Apahe JENA 是否支持 Java 中的 OWL 2 语法吗?它确实在文档 (https://jena.apache.org/documentation/ontology/) 中提到它仅提供有限的基数限制。我想从专家那里确认一下。
Apache Jena does not support OWL2, only OWL11 through org.apache.jena.ontology.OntModel interface. See also documentation.
但是您仍然可以使用一些外部基于 jena 的 APIs 和工具在 Jena 中使用 OWL2,例如ONT-API, that is OWL-API-api(v5) impl over Jena.
在ONT-API中有两个主要的OWL2数据视图,它们封装了相同的RDF图:com.github.owlcs.ontapi.jena.model.OntModel
和com.github.owlcs.ontapi.Ontology
(在旧版本中( ONT-API:v1.x.x) 这些类分别有名字ru.avicomp.ontapi.jena.model.OntGraphModel
和ru.avicomp.ontapi.OntologyModel
) .
com.github.owlcs.ontapi.jena.model.OntModel 视图完全类似于 Jena org.apache.jena.ontology.OntModel
,它是处理三元组的工具。
com.github.owlcs.ontapi.Ontology 视图是扩展的 org.semanticweb.owlapi.model.OWLOntology
,用于处理公理化数据的工具,由 com.github.owlcs.ontapi.jena.model.OntModel
视图支持,反之亦然。
例如,以下片段:
String uri = "";
String ns = uri + "#";
OntModel m = OntModelFactory.createModel()
.setNsPrefixes(OntModelFactory.STANDARD).setNsPrefix("q", ns);
m.setID(uri);
OntClass c = m.createOntClass(ns + "c");
OntObjectProperty p = m.createObjectProperty(ns + "p");
OntIndividual i = c.createIndividual(ns + "i");
m.createObjectComplementOf(m.createObjectUnionOf(c, m.getOWLThing(),
m.createObjectSomeValuesFrom(p, m.createObjectOneOf(i))));
m.write(System.out, "ttl");
将产生以下 ontology:
@prefix q: <#> .
@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#> .
<>
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 )
]
]
)
]
] .