Ontology Apache Jena 的嵌套节点模型(列表)API
Ontology model with nested nodes(Lists) by Apache Jena API
我如何通过 Jena API 以编程方式为字符串数组创建 Ontology 模型
String["First_1", "Second_2"]
model.print(System.out) 产生这个:
<owl:DatatypeProperty rdf:about="http://example.com#test_one">
<rdfs:domain rdf:resource="http://example.com#test"/>
<rdfs:range>
<rdfs:Datatype>
<owl:oneOf>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
<rdf:first>First_1</rdf:first>
<rdf:rest>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
<rdf:first>Second_2</rdf:first>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
</rdf:rest>
</rdf:Description>
</owl:oneOf>
</rdfs:Datatype>
</rdfs:range>
<rdfs:label>Test one</rdfs:label>
</owl:DatatypeProperty>
使用RDF/XML漂亮的作家:
RDFDataMgr.write(System.out, model, Lang.RDFXML)
如果调用model.write
,则调用"RDF/XML-ABBREV"
https://jena.apache.org/documentation/io/rdf-output.html
确切的输出布局因数据而异 - 它始终输出相同的三元组,这是最重要的。
既然您编辑了问题,问题就更容易理解了。对于未来,第一个切入点确实是Jena documentation. And for a Java developer indeed the Javadoc最有参考价值的来源。
我只是针对数据范围 属性 进行了此操作,通过应用 OntModel
resp. Model
:
的方法,域和标签的工作方式类似
import org.apache.jena.ontology.DataRange;
import org.apache.jena.ontology.DatatypeProperty;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.ontology.OntModelSpec;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode;
import java.util.Arrays;
public class RangeExample {
public static void main(String[] args) {
String NS = "http://example.com#";
String[] values = new String[]{"First_1", "Second_2"};
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
DatatypeProperty testOne = m.createDatatypeProperty(NS + "test_one");
DataRange range = m.createDataRange(
m.createList(
Arrays.asList(values)
.stream()
.map(v -> (RDFNode) m.createLiteral(v))
.iterator()));
testOne.addRange(range);
m.write(System.out);
}
}
生成的模型将有效OWL,Protege 编辑器将其呈现如下:
我如何通过 Jena API 以编程方式为字符串数组创建 Ontology 模型
String["First_1", "Second_2"]
model.print(System.out) 产生这个:
<owl:DatatypeProperty rdf:about="http://example.com#test_one">
<rdfs:domain rdf:resource="http://example.com#test"/>
<rdfs:range>
<rdfs:Datatype>
<owl:oneOf>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
<rdf:first>First_1</rdf:first>
<rdf:rest>
<rdf:Description>
<rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
<rdf:first>Second_2</rdf:first>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
</rdf:rest>
</rdf:Description>
</owl:oneOf>
</rdfs:Datatype>
</rdfs:range>
<rdfs:label>Test one</rdfs:label>
</owl:DatatypeProperty>
使用RDF/XML漂亮的作家:
RDFDataMgr.write(System.out, model, Lang.RDFXML)
如果调用model.write
,则调用"RDF/XML-ABBREV"
https://jena.apache.org/documentation/io/rdf-output.html
确切的输出布局因数据而异 - 它始终输出相同的三元组,这是最重要的。
既然您编辑了问题,问题就更容易理解了。对于未来,第一个切入点确实是Jena documentation. And for a Java developer indeed the Javadoc最有参考价值的来源。
我只是针对数据范围 属性 进行了此操作,通过应用 OntModel
resp. Model
:
import org.apache.jena.ontology.DataRange;
import org.apache.jena.ontology.DatatypeProperty;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.ontology.OntModelSpec;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode;
import java.util.Arrays;
public class RangeExample {
public static void main(String[] args) {
String NS = "http://example.com#";
String[] values = new String[]{"First_1", "Second_2"};
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
DatatypeProperty testOne = m.createDatatypeProperty(NS + "test_one");
DataRange range = m.createDataRange(
m.createList(
Arrays.asList(values)
.stream()
.map(v -> (RDFNode) m.createLiteral(v))
.iterator()));
testOne.addRange(range);
m.write(System.out);
}
}
生成的模型将有效OWL,Protege 编辑器将其呈现如下: