如何避免使用 OWLAPI 按字母顺序表示实例

How to avoid representing instances in alphabetical order using OWLAPI

我使用 OWL-API 创建了 Ontology。我添加了使用 array.But Ontology 的实例,以字母顺序表示它,而不是根据我在数组中包含的顺序。因此,其他实例不匹配。

       String Item1_List[]={"PencilBox","Box"};        
       int Item1_QuntList[] = {5,4};
       Set<OWLAxiom> axioms = new HashSet<OWLAxiom>();
       for( int i=0 ; i<Item1_List.length ; i++){  
       axioms.add(df.getOWLDataPropertyAssertionAxiom(Item1_Name, Item1,Item1_List[i])); }

      for( int i=0 ; i<Item1_QuntList.length ; i++){
      axioms.add(df.getOWLDataPropertyAssertionAxiom(Item1_Quantity,Item1,Item1_QuntList[i])); }

      manager.addAxioms(ontology2, axioms);

这是输出 Ontology。

<!-- Item1 -->

<owl:NamedIndividual rdf:about="http://www.semanticweb.org/imesha/ontologies/2015/7/untitled-ontology-26#Item1">
    <rdf:type rdf:resource="http://www.semanticweb.org/imesha/ontologies/2015/7/untitled-ontology-26#Item"/>
    <Item1_Name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Box</Item1_Name>
    <Item1_Name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">PencilBox</Item1_Name>
    <Item1_Quantity rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">4</Item1_Quantity>
    <Item1_Quantity rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">5</Item1_Quantity>
    <has rdf:resource="http://www.semanticweb.org/imesha/ontologies/2015/7/untitled-ontology-26#Item2"/>
</owl:NamedIndividual>

实例 "Box" 在实例 "PencilBox" 之前。我怎样才能避免这种情况?

ontology 被定义为一组公理。未指定顺序,并且在语义上不相关。 owl api 试图在编辑本体时保持不变,以减少对可能保存在源代码控制系统中的文件的更改 - 例如 git 存储库。

为什么需要以特定顺序表示实例?

编辑:添加示例以跟进评论。

PencilBox 字符串似乎代表具有附加属性的个体,例如 quantity 属性。可以通过以下代码获得不依赖订单将数量附加到个人的替代模型:

代码:

    OWLIndividual Item1 = df.getOWLNamedIndividual(IRI.create("http://test.com/test#Item1"));
    OWLObjectProperty Item1_Name = df.getOWLObjectProperty(IRI.create("http://test.com/test#Item"));
    OWLDataProperty Item1_Quantity = df.getOWLDataProperty(IRI.create("http://test.com/test#Quantity"));
    OWLIndividual Item1_List[] = { df.getOWLNamedIndividual(IRI.create("http://test.com/test#PencilBox")), df
        .getOWLNamedIndividual(IRI.create("http://test.com/test#Box")) };
    int Item1_QuntList[] = { 5, 4 };
    Set<OWLAxiom> axioms = new HashSet<OWLAxiom>();
    for (int i = 0; i < Item1_List.length; i++) {
        axioms.add(df.getOWLObjectPropertyAssertionAxiom(Item1_Name, Item1, Item1_List[i]));
        axioms.add(df.getOWLDataPropertyAssertionAxiom(Item1_Quantity, Item1_List[i], Item1_QuntList[i]));
    }

输出:

<?xml version="1.0"?>
<rdf:RDF xmlns="owlapi:ontology#ont1#"
 xml:base="owlapi:ontology#ont1"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 xmlns:test="http://test.com/test#"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:owl="http://www.w3.org/2002/07/owl#"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:xml="http://www.w3.org/XML/1998/namespace">
<owl:Ontology rdf:about="owlapi:ontology#ont1"/>
<owl:ObjectProperty rdf:about="http://test.com/test#Item"/>
<owl:DatatypeProperty rdf:about="http://test.com/test#Quantity"/>
<owl:NamedIndividual rdf:about="http://test.com/test#Box">
    <test:Quantity rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">4</test:Quantity>
</owl:NamedIndividual>
<owl:NamedIndividual rdf:about="http://test.com/test#Item1">
    <test:Item rdf:resource="http://test.com/test#Box"/>
    <test:Item rdf:resource="http://test.com/test#PencilBox"/>
</owl:NamedIndividual>
<owl:NamedIndividual rdf:about="http://test.com/test#PencilBox">
    <test:Quantity rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">5</test:Quantity>
</owl:NamedIndividual>
</rdf:RDF>