Problema na recuperação de valor de propriedade de uma instância de uma classe de OWL
-
10-07-2019 - |
Pergunta
Eu tenho algumas classes coruja que têm casos. Estas classes também têm propriedades que têm valor para cada exemplo. Eu fiz a minha ontologia por Protege3.4, e fez c # biblioteca por Rowlex deles.
Por exemplo, a classe 'Programa', tem uma instância de 'Software' e propriedade 'atGrade'. valor da propriedade para esta instância é 'PHD' (atGrade é uma propriedade do objeto que mapeia domínio para classe Grade). Este é o 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>
A propriedade atGrade também é definido na ontologia:
<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>
Agora, quando eu faço uma das instâncias em C #, por exemplo:
Program prog = new Program("http://www.owl-ontologies.com/Ontology1243411901.owl#Management", new RdfDocument());
o atGrade propriedade retornará null.
Eu fiz o seguinte, mas o problema não resolveu:
-que uma classe cheia (novo Programa _ (...))
-entered um arquivo RDF existente:. novo programa (uri, novo RdfDocument (URI))
-deleted dos rdfs: subClassOf '. tag da ontologia
Alguma idéia de como este problema pode resolver?
Talvez eu deva excluir as instâncias da ontologia e inseri-los em um RDF, em seguida, recuperá-los de lá?
Solução
Você prescrevem em sua ontologia que o que os indivíduos cumprir a sua classe de programas. Um indivíduo é "Program" se o seu URI é um dos seus entes enumerados e tem uma propriedade atGrade apropriado.
Quando você cria sua RdfDocument e criar uma nova instância do programa, tudo que você está indo para obter é um triplo como "myUri typeof Programa". ROWLEX não preencher os padrões e adicionar a propriedade extra atGrade como você espera. É por isso que você começa nulo quando você recuperar a propriedade. Você precisará adicionar a propriedade atGrade aos indivíduos, caso contrário, não é mesmo um exemplo de programa válido.