올빼미 클래스 인스턴스의 속성 가치 검색 문제
-
10-07-2019 - |
문제
인스턴스가있는 올빼미 수업이 있습니다. 이 클래스에는 각 인스턴스에 대한 값이있는 속성도 있습니다. 나는 protege3.4에 의해 온톨로지를 만들었고, 그들로부터 C# 라이브러리를 만들었습니다.
예를 들어 클래스 '프로그램'에는 '소프트웨어'및 'Atgrad'속성 인스턴스가 있습니다. 이 인스턴스의 속성 값은 '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을 반환합니다. 다음을 수행했지만 문제는 해결되지 않았습니다.
-전체 클래스 제작 (새로운 프로그램 _ (...))
-기존 RDF 파일을 입력했습니다 : 새 프로그램 (URI, New RDFDocument (URI)).
-온톨로지에서 'rdfs : subclassof'태그를 삭제했습니다.
이 문제가 어떻게 해결 될 수 있는지 아이디어가 있습니까?
아마도 온톨로지에서 인스턴스를 삭제하고 RDF에 삽입 한 다음 거기에서 검색해야합니까?
해결책
귀하는 개인이 귀하의 프로그램 수업에 준수하는 것을 온톨로지에 처방합니다. URI가 열거 된 사람 중 하나이고 적절한 Atgrade 속성이있는 경우 개인은 "프로그램"입니다.
rdfdocument를 만들고 새 프로그램 인스턴스를 만들 때 "myuri typeof program"과 같은 트리플입니다. Rowlex는 기본값을 채우지 않고 예상대로 추가 Atgrade 속성을 추가하지 않습니다. 그렇기 때문에 속성을 회수 할 때 무효가됩니다. Atgrade 속성을 개인에게 추가해야합니다. 그렇지 않으면 유효한 프로그램 인스턴스가 아닙니다.