0

我有一个 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");

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

4

1 回答 1

2

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

在这种情况下,您的数据不包含“嵌套属性”,而是有一个个体 (001),具有另一个个体 (005) 作为 has_englishkeywords 属性的值,并且该个体具有 rdfs:label 的值属性(一些文字4)。

你所说的“OWL 命名空间”和“嵌套命名空间”并没有真正的意义。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 查询的示例,以及属性路径、通配符等。

于 2016-07-20T16:40:44.210 回答