Похоже, вам нужно DatatypeRestriction с двумя ограничениями: xsd:minInclusive
и xsd:maxInclusive
.
Это конструкции OWL2.
org.apache.jena.ontology.OntModel
не поддерживает OWL2, только OWL1.1 частично (см. документация ), и, следовательно, нет встроенных методов для создания таких диапазонов данных (есть только DataOneOf
данные выражение диапазона, см. OntModel#createDataRange(RDFList)
).
Таким образом, вы должны создать нужный тип данных вручную, трижды за тройкой, используя общий интерфейс org.apache.jena.rdf.model.Model
.
В RDF это будет выглядеть так:
_:x rdf:type rdfs:Datatype.
_:x owl:onDatatype DN.
_:x owl:withRestrictions (_:x1 ... _:xn).
См. Также owl2-краткое руководство .
Или, чтобы построить такую онтологию, вы можете использовать некоторые внешние утилиты или API.
Например, в ONT-API следующий фрагмент
String ns = "https://stackoverflow.com/questions/54131709#";
OntGraphModel m = OntModelFactory.createModel()
.setNsPrefixes(OntModelFactory.STANDARD).setNsPrefix("q", ns);
OntDT floatDT = m.getOntEntity(OntDT.class, XSD.xfloat);
OntFR min = m.createFacetRestriction(OntFR.MinInclusive.class, floatDT.createLiteral("0.0"));
OntFR max = m.createFacetRestriction(OntFR.MaxInclusive.class, floatDT.createLiteral("15.0"));
OntDT myDT = m.createOntEntity(OntDT.class, ns + "MyDatatype");
myDT.addEquivalentClass(m.createRestrictionDataRange(floatDT, Arrays.asList(min, max)));
m.createResource().addProperty(m.createOntEntity(OntNDP.class, ns + "someProperty"),
myDT.createLiteral("2.2"));
m.write(System.out, "ttl");
создаст следующую онтологию:
@prefix q: <https://stackoverflow.com/questions/54131709#> .
@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#> .
[ q:someProperty "2.2"^^q:MyDatatype ] .
q:MyDatatype a rdfs:Datatype ;
owl:equivalentClass [ a rdfs:Datatype ;
owl:onDatatype xsd:float ;
owl:withRestrictions ( [ xsd:minInclusive "0.0"^^xsd:float ]
[ xsd:maxInclusive "15.0"^^xsd:float ]
)
] .
q:someProperty a owl:DatatypeProperty .