gpt4 book ai didi

java - 遍历耶拿中的匿名/空白节点

转载 作者:行者123 更新时间:2023-11-30 06:47:47 25 4
gpt4 key购买 nike

我正在使用 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>
  1. Jena 有没有内置的方法来处理它?<​​/p>

  2. 如果没有,我怎样才能有效地做到这一点?

最佳答案

我试过这样做,效果很好:

/**
* Explodes <b>Anonymous resource</b> (Collection resource) in recursive way and provides
* nested resources. Mainly considers <code>owl:unionOf</code>, <code>owl:intersactionOf</code>, <code>rdf:first</code> and <code>rdf:rest</code>
* while traversing.
*
* @param resource
* @return LinkedList<Resource>
*/
private List<Resource> explodeAnonymousResource(Resource resource)
{
private static List<Property> collectionProperties = new LinkedList<Property>(Arrays.asList(OWL.unionOf,OWL.intersectionOf,RDF.first,RDF.rest));

List<Resource> resources=new LinkedList<Resource>();
Boolean needToTraverseNext=false;

if(resource.isAnon())
{
for(Property cp:collectionProperties)
{
if(resource.hasProperty(cp) && !resource.getPropertyResourceValue(cp).equals(RDF.nil))
{
Resource nextResource=resource.getPropertyResourceValue(cp);
resources.addAll(explodeAnonymousResource(nextResource));

needToTraverseNext=true;
}
}

if(!needToTraverseNext)
{
resources.add(resource);
}
}
else
{
resources.add(resource);
}

return resources;
}

关于java - 遍历耶拿中的匿名/空白节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45364725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com