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 编辑器将其呈现如下: