2016-07-20 2 views
0

OWL 파일을 가지고 있는데, 그 샘플 스 니펫은 다음과 같습니다.중첩 된 OWL 속성을 읽는 방법?

<owl:NamedIndividual rdf:ID="001"> 
    <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">some literal 1</rdfs:label> 
    <has_legislative_reference rdf:resource="#002"/> 
    <has_legislative_reference rdf:resource="#003"/> 
    <has_legislative_reference rdf:resource="#004"/> 
    <has_name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">some literal 2</has_name> 
    <has_name rdf:datatype="http://www.w3.org/2001/XMLSchema#string">some literal 3</has_name> 
    <rdf:type rdf:resource="#some_class"/> 
    <has_englishkeywords> 
    <owl:NamedIndividual rdf:ID="005"> 
     <rdf:type rdf:resource="#006"/> 
     <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">some literal 4</rdfs:label> 
    </owl:NamedIndividual> 
    </has_englishkeywords> 
</owl:NamedIndividual> 

지금, 나는 각 문장의 첫 번째 수준에서 사용할 수있는 모든 리터럴, 즉 some literal 1, some literal 2some literal 3를 가져올 수 있었다. 그러나 나는 some literal 4을 가져 오는 방법에 관해서는 손해를보고 있습니다.

추신 : 주 OWL 네임 스페이스와 같은 수준 인 모든 경우에 대해 아래 주어진 방법을 사용하여 각각 NamedIndividuals을 반복합니다. 중첩 된 개체에 대한 지금

AnnotationProperty NamedIndividual = m_model.createAnnotationProperty("http://www.w3.org/2002/07/owl#NamedIndividual"); 

내가 중첩 된 리터럴을 읽을 수있는 임시 공간을 만들 필요가 수행

ResIterator namedIndividuals = m.listResourcesWithProperty(RDF.type, OWL.NamedIndividual); 

OWL.NamedIndividual

는 다음과 같이 정의된다? 그렇다면 어떻게? 아니면 같은 것을 할 수있는 다른 효율적인 방법이 있습니까? 모든 지침을 부탁드립니다.

+0

"OWL : NamedIndividual은 ...으로 정의됩니다."이것은 완전히 잘못되었으므로 의미가 없습니다. 주석 속성 인 이유는 무엇입니까? – AKSW

+1

그리고 나는 a) OWL 용으로 설계된 API, 즉 '클래스 표현식'과 '공리'수준에서 작동하거나 b) Jena Ontology API를 적어도 사용합니다. 즉, OntModel과 같은 것을 사용하십시오. – AKSW

답변

2

이것은 OWL 온톨로지의 RDF 매핑의 RDF/XML 직렬화입니다. RDF로 쿼리 할 수 ​​있습니다.이 경우 RDF API (Jena와 같은) 또는 SPARQL 쿼리 (Jena로도 수행 할 수 있음)를 사용할 수 있습니다. 또는 OWL 기반 API를 사용하여 관심있는 특정 유형의 공리를 찾을 수 있습니다. Jena의 OntModel API는 일부 OWL 지원을 제공하기 때문에 충분할 수 있습니다.

이 경우 데이터에는 "중첩 된 속성"이 포함되어 있지 않지만 개인 (001)이 있고 has_englishkeywords 속성의 값으로 다른 개인 (005)이 있고 그 개인의 값은 rdfs : label 속성 (일부 literal4)

"OWL 네임 스페이스"및 "중첩 네임 스페이스"에 대해 말하는 것은 실제로 의미가 없습니다. RDF는 그래프 기반의 표현입니다. 특성 (URIs)별로 다른 (URI, 빈 노드 및 리터럴)에 링크되는 자원 (URI 및 빈 노드)이 있습니다. 당신은 몇 가지 시작 지점에서 접근 할 리터럴을 찾는 데에만 관심이 있다면이 경우, 그냥 SPARQL 쿼리를 사용하는 것이 아마 가장 쉬운 방법 :

prefix : <urn:ex:> 

select ?literal { 
    values ?start { <http://example.org/001> } #-- value of ?start 
    ?start (:|!:)* ?literal      #-- property path with wildcard 
    filter isLiteral(?literal)     #-- make sure ?literal is a literal 
} 

방법을 실행하는 다른 질문 및 답변의 예를 많이가 있습니다 속성 경로, 와일드 카드 등과 같이 Jena를 사용하는 SPARQL 쿼리

관련 문제