如何获取表示具有某个[property,object]对的对象的RDF资源?

时间:2012-06-25 20:22:22

标签: java xml rdf jena rdfs

好的,澄清一下,我有一个XML / RDF文件,用于描述具有自然分类树结构(如文件夹和文件)的数据。数据不是在树中构建的,而是有解释如何重建树的信息(即每个节点的嵌套设置值)。除了假设文件中的某些语句具有RootTree属性之外,我开始时没有任何知识,该对象是描述树的根节点的语句的URI。

获取该对象很简单,我只需使用:

// Obtain the node describing the root of the Pearltree.
mRootProp = mModel.createProperty(Pearltree.RDF.PearlTreeNS, "rootTree");

NodeIterator roots = mModel.listObjectsOfProperty(mRootProp);

现在,我还能够列出所有具有属性pt:parentTree和对象roots.nextNode()的语句:

StmtIterator sit = mModel.listStatements(null, RDF.ParentTree, rootNode);

这给了我所有这些陈述的清单。这些语句是元素的一部分,在RDF / XML文件中看起来像这样(注意这些语句具有不同的parentTree值但出现在相同的上下文中):

<pt:RootPearl rdf:about="http://www.pearltrees.com/dcow/pearltrees-videos/id5296268#rootPearl">
   <dcterms:title><![CDATA[Pearltrees videos]]></dcterms:title>
   <pt:parentTree rdf:resource="http://www.pearltrees.com/dcow/pearltrees-videos/id5296268" />
   <pt:inTreeSinceDate>2012-06-11T20:25:55</pt:inTreeSinceDate>
   <pt:leftPos>1</pt:leftPos>
   <pt:rightPos>8</pt:rightPos>
</pt:RootPearl>

<pt:PagePearl rdf:about="http://www.pearltrees.com/dcow/pearltrees-videos/id5296268#pearl46838293">
   <dcterms:title><![CDATA[why Pearltrees?]]></dcterms:title>
   <dcterms:identifier>http://www.youtube.com/watch?v%3di4rDqMMFx8g</dcterms:identifier>
   <pt:parentTree rdf:resource="http://www.pearltrees.com/dcow/pearltrees-videos/id5296268" />
   <pt:inTreeSinceDate>2012-06-11T20:25:55</pt:inTreeSinceDate>
   <pt:leftPos>2</pt:leftPos>
   <pt:rightPos>3</pt:rightPos>
</pt:PagePearl>

...

现在,我想要做的是获取对主题为sit.nextStatement()主题的所有语句的引用。在这个例子中:

&#34; HTTP://www.pearltrees.com/dcow/pearltrees-videos/id5296268#rootPearl"

&#34; HTTP://www.pearltrees.com/dcow/pearltrees-videos/id5296268#pearl46838293"

我的目标是获取每个元素的内容,包括rightPos和leftPos,以便我可以重建树。

2 个答案:

答案 0 :(得分:3)

您可以按照以下方式简化代码:

mRootProp = mModel.createProperty(Pearltree.RDF.PearlTreeNS, "rootTree");
Resource root = mModel.listResourcesWithProperty( mRootProp ).next();

这假设您知道每个模型只有一个根。如果可能不是这样,请相应地修改代码。

答案 1 :(得分:1)

方法:

getSubject()
语句

主题作为资源返回。然后,您可以使用

getProperty(Property p) 

返回的资源的方法,以获取包含相关属性的语句

所以,就我而言,我使用:

Resource r;
Statement title, id, lpos, rpos;
while(sit.hasNext()) {
    r = sit.nextStatement().getSubject();

    title = r.getProperty(DCTerms.title);
    id    = r.getProperty(DCTerms.identifier);
    lpos  = r.getProperty(PearlTree.RDF.leftPos);
    rpos  = r.getProperty(PearlTree.RDF.rightPos);
    ...
}