【发布时间】:2018-01-04 00:08:25
【问题描述】:
我正在使用 Apache Jena 的 API,其中由于 unionOf 和 intersectionOf,一个图还包含一些匿名/空白节点。这样的例子之一是:
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.summyUrl.com/something#Entity1"/>
<rdf:Description rdf:about="http://www.summyUrl.com/something#Entity2"/>
</owl:unionOf>
</owl:Class>
这是一个匿名节点/资源。当我尝试获取它的 URI 时,它类似于:
“-50a5734d:15d839467d9:-1b8b”
我既无法使用此类 URI 进行 SPARQL 查询(由于解析此类 URI 时出现异常),也无法找到合适的 Jena 方法来处理它。
我正在寻找一种方法来分解这些节点并获取它的所有嵌套资源。
例如在下面的情况下,它应该返回<http:/.../Entity1>、<http:/.../Entity2>和<http:/.../Entity3>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.summyUrl.com/something#Entity1"/>
<owl:unionOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://www.summyUrl.com/something#Entity2"/>
<rdf:Description rdf:about="http://www.summyUrl.com/something#Entity3"/>
</owl:unionOf>
</owl:unionOf>
</owl:Class>
有没有 Jena 的内置方法来处理它?
如果没有,我怎样才能有效地做到这一点?
【问题讨论】:
-
您应该始终查看数据的 Turtle 序列化而不是 RDF/XML 序列化。然后您将看到您可以使用 SPARQL 属性路径。确实,这不适用于任意嵌套类,但由于它是 OWL,因此 OWL 推理器是要走的路
-
最好先查看整个查询,但原则上,如果您正在寻找由 OWL 中的类联合定义的超类,则常见的模式是
?subclass rdfs:subClassOf/(owl:unionOf/rdf:rest*/rdf:first)+ ?superclass。
标签: java sparql jena semantic-web blank-nodes