2

わかりやすくするために、自然なカテゴリツリー構造(フォルダやファイルなど)でデータを記述した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()のサブジェクトを持つすべてのステートメントへの参照を取得することです。この例では:

「http://www.pearltrees.com/dcow/pearltrees-videos/id5296268#rootPearl」

「http://www.pearltrees.com/dcow/pearltrees-videos/id5296268#pearl46838293」

私の目標は、rightPosとleftPosを含む各要素のコンテンツを取得して、ツリーを再構築できるようにすることです。

4

2 に答える 2

3

次のように、コードをいくらか単純化できます。

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

これは、モデルごとに1つのルートがあることを知っていることを前提としています。それが当てはまらない場合は、それに応じてコードを変更してください。

于 2012-06-26T09:52:54.640 に答える
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);
    ...
}
于 2012-06-25T21:37:32.423 に答える