我有一些有实例的猫头鹰类。这些类还具有对每个实例都有价值的属性。我用Protege3.4制作了本体,并用Rowlex制作了c#库。
例如,“程序”类具有“软件”和“atGrade”属性的实例。此实例的属性值为“PHD”(atGrade 是将域映射到成绩类的对象属性)。这是猫头鹰:

<owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Program">
    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Student"/>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Teacher"/>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Rank"/>
    <rdfs:subClassOf>
        <owl:Restriction>
            <owl:onProperty>
                <owl:ObjectProperty rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#atGrade"/>
            </owl:onProperty>
            <owl:allValuesFrom rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Grade"/>
        </owl:Restriction>
    </rdfs:subClassOf>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Course"/>
    <owl:disjointWith>
        <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#LearningResource"/>
    </owl:disjointWith>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Note"/>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#ClassOfCourse"/>
    <owl:equivalentClass>
        <owl:Class>
            <owl:oneOf rdf:parseType="Collection">
                <Program rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Management">
                    <atGrade rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#PHD"/>
                </Program>
                <Program rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Literature">
                    <atGrade rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#PHD"/>
                </Program>
                <Program rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Software">
                    <atGrade rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#MasterOfResearch"/>
                </Program>
                <Program rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Information_Technology">
                    <atGrade rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#MasterOfScience"/>
                </Program>
            </owl:oneOf>
        </owl:Class>
    </owl:equivalentClass>
    <owl:disjointWith>
        <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Project"/>
    </owl:disjointWith>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Grade"/>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#ResourceType"/>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Language"/>
    <rdfs:comment xml:lang="en">Study branch in which the members are working (e.g. MBA)</rdfs:comment>
    <owl:disjointWith>
        <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Discussion"/>
    </owl:disjointWith>
    <owl:disjointWith rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Question"/>
</owl:Class>

atGrade 属性也在本体中定义:

<owl:ObjectProperty rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#atGrade">
    <rdfs:range rdf:resource="http://www.owl-ontologies.com/Ontology1243411901.owl#Grade"/>
    <rdfs:domain>
        <owl:Class>
            <owl:unionOf rdf:parseType="Collection">
                <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Program"/>
                <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Teacher"/>
                <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Project"/>
                <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Course"/>
                <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1243411901.owl#Student"/>
            </owl:unionOf>
        </owl:Class>
    </rdfs:domain>
</owl:ObjectProperty>

现在,当我在 c# 中创建实例之一时,例如:

Program prog = new Program("http://www.owl-ontologies.com/Ontology1243411901.owl#Management", new RdfDocument());

atGrade 属性返回 null。我做了以下操作,但问题没有解决:
-做了一个完整的课程(新的Program_(...))
-输入现有的 RDF 文件:新程序(uri,new RdfDocument(uri))。
-从本体中删除了“rdfs:subClassOf”标签。

有什么想法可以解决这个问题吗?
也许我应该从本体中删除实例并将它们插入到 RDF 中,然后从那里检索它们?

有帮助吗?

解决方案

您在本体中规定哪些个体符合您的程序类别。如果某个个体的 URI 是您枚举的 URI 之一并且具有适当的 atGrade 属性,则该个体是“计划”。

当您创建 RdfDocument 并创建新的 Program 实例时,您将获得的只是一个三元组,例如“myUri typeof Program”。ROWLEX 不会按照您的预期填写默认值并添加额外的 atGrade 属性。这就是为什么当您检索该属性时会得到 null 的原因。您需要将 atGrade 属性添加到个人中,否则它甚至不是有效的程序实例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top