2009-08-02 38 views
1

我有一些有实例的猫头鹰类。这些类也具有对每个实例都有价值的属性。我通过Protege3.4创建了我的本体,并由Rowlex从他们那里制作了c#库。
例如,类“程序”具有“软件”和“atGrade”属性的实例。此实例的属性值为'PHD'(atGrade是将域映射到Grade类的对象属性)。这是OWL:检索OWL类实例的属性值的问题

<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。 我做了以下事情,但问题没有解决:
- 创建了一个完整的类(新程序_(...))
- 已存在的RDF文件:新程序(uri,new RdfDocument(uri)) 。
- 从本体中删除'rdfs:subClassOf'标记。

任何想法如何解决这个问题?
也许我应该从本体中删除实例并将它们插入RDF中,然后从那里检索它们?

回答

0

你在你的本体论中规定哪些人遵守你的程序类。如果一个人的URI是你的枚举之一,并且它有一个合适的atGrade属性,那么他就是“Program”。

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

+0

非常感谢。所以我误解了本体论,现在它已经改革了。 再次感谢 – Ehsan 2009-08-09 10:17:01