如何读取嵌套的OWL属性?

时间:2016-07-20 16:00:57

标签: jena owl triples

我有一个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 1some literal 2some literal 3。但是我对如何获取some literal 4感到茫然。

PS:对于与主OWL命名空间处于同一级别的所有情况,我使用下面给出的方法,然后迭代每个NamedIndividuals

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

OWL.NamedIndividual定义为:

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

现在对于嵌套对象,我是否需要创建一个临时命名空间来读取嵌套文字?如果有,怎么样?或者还有其他有效的方法来做同样的事情吗?任何指导都表示赞赏。

1 个答案:

答案 0 :(得分:2)

这是OWL本体的RDF映射的RDF / XML序列化。您可以将其查询为RDF,在这种情况下,您可能希望使用RDF API(如Jena)或SPARQL查询(您也可以使用Jena)。或者,您可以使用基于OWL的API并查找您感兴趣的特定类型的公理.Jena的OntModel API提供了一些OWL支持,这对您来说可能已经足够了。

在这种情况下,您的数据不包含&#34;嵌套属性&#34;,而是个人(001),其他人(005)作为其值has_englishkeywords属性,该个人的值为rdfs:label属性(某些为literal4)。

您所说的&#34; OWL名称空间&#34;和#34;嵌套命名空间&#34;没有意义。 RDF是基于图表的表示。存在按属性(URI)链接到其他(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查询的其他问题和答案中,有很多例子,以及属性路径,通配符等。