Проблема в получении значения свойства экземпляра класса OWL
У меня есть несколько классов совы, у которых есть экземпляры. Эти классы также имеют свойства, которые имеют значение для каждого экземпляра. Я сделал свою онтологию с помощью Protege3.4 и сделал из них библиотеку C# от Rowlex.
Например, класс "Программа" имеет экземпляр свойств "Программное обеспечение" и "atGrade". Значение свойства для этого экземпляра - "PHD" (atGrade - это свойство объекта, которое отображает домен в класс Grade). Это сова:
<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 возвращает ноль. Я сделал следующее, но проблема не решилась:
сделал полный класс (новая программа _ (...))
-внесены в существующий файл RDF: новая программа (uri, новый RdfDocument(uri)).
удалил тег 'rdfs:subClassOf' из онтологии.
Есть идеи, как решить эту проблему?
Может быть, я должен удалить экземпляры из онтологии и вставить их в RDF, а затем извлечь их оттуда?
1 ответ
В своей онтологии вы прописываете, какие лица соответствуют вашему классу Программы. Человек является "Программой", если его URI является одним из перечисленных, и у него есть соответствующее свойство atGrade.
Когда вы создаете свой RdfDocument и создаете новый экземпляр Программы, все, что вы получите, - это тройка, подобная "myUri typeof Program". ROWLEX не будет заполнять значения по умолчанию и добавлять дополнительное свойство atGrade, как вы ожидаете. Вот почему вы получаете ноль, когда вы получаете свойство. Вам нужно будет добавить свойство atGrade отдельным лицам, иначе это даже не будет действительный экземпляр Программы.