0

これは、rowlex ライブラリによって生成された私の rdf ドキュメントです。

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
         xmlns:ns="http://xmlns.com/foaf/0.1/" 
         xmlns:privateinfos="http://domain/privateinfos/"> 

    <ns:Person rdf:about="Node 1">
        <ns:depiction rdf:resource="Default.png" />
        <privateinfos:description rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Description</privateinfos:description>
        <ns:knows>
            <ns:Person rdf:about="6779ac10-210b-40d2-8111-711db6988bb9" />
        </ns:knows> 
    </ns:Person>

    <ns:Person rdf:about="Node 2">
        <ns:depiction rdf:resource="Default.png" />
        <privateinfos:description rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Description 2</privateinfos:description>
    </ns:Person>

</rdf:RDF>

そして、このコードでノード 1 とノード 2 の個人を取得しようとしています。

List<Person> person_list = new List<Document>();
OwlThing[] Persons = _rdfDocument.GetIndividuals(Person.Uri, true);

foreach (Person item_found in Persons)
{
    person_list.Add(item_found);
}

return person_list;

残念ながら、person_list は次のデータを返します。

[0] : Node 1
[1] : 6779ac10-210b-40d2-8111-711db6988bb9
[2] : Node 2

リスト内のサブ要素なしでノード1と2のみを取得する方法/方法はありますか? (もちろん、個人の ID は動的に生成されるため、特定の ID を検索することはできません)

ありがとう。

4

1 に答える 1

0

ここで RDF と XML に関して誤解があると思います。RDF は、XML と他のシリアライゼーション形式の両方で表現できる一連のトリプルです。XML とは異なり、RDF は階層的ではないため、RDFには「サブ要素」などはありません。Mr. Guid がちょうど Mr. Node_1 の下にいるという事実は、誤解を招く XML ノード階層によって「示唆された」錯覚です。それを実証するために、あなたの例のトリプルをリストします (RDF のトリプルの順序は無関係であることに注意してください!):

"Node 1" typeOf Person
"Node 1" drawing "Default.png"
"Node 1" description "Description"
"Node 1" know "Mr. Guid"
"Mr. Guid" typeOf Person
"Node 2" typeOf Person
"Node 2 " 描写 "Default.png"
"ノード 2" 説明 "説明"

次のことを試してください: もう 1 つのトリプルを追加します: "Mr. Guid" は次のコードで "Node 1" を認識します:

Person mrGuid = _rdfDocument.GetIndividual("6779ac10-210b-40d2-8111-711db6988bb9") as Person;
Person mrNode1 = _rdfDocument.GetIndividual("Node 1") as Person;
mrGuid.knows = mrNode1;
Console.WriteLine(_rdfDocument.ToRdfXml());

現在、ノード 1 は Guid 氏を知っており、Guid 氏はノード 1 を知っています。これは完全に合法的なシナリオです。誰がルートになり、誰がサブ要素になりますか? XML シリアライザーは、おそらく行の最初のものを「ルート」として、もう一方を「サブ要素」として選択しますが、これは任意です。ネストは、XML シリアライゼーションによって作成された錯覚にすぎません。そのために落ちないでください。

このステートメントで実行するクエリrdfDocument.GetIndividuals(Person.Uri, true);は、 type のすべての個人を単純に除外するPersonため、3 人の男性すべてを正しく返します。

于 2011-09-06T17:08:24.250 に答える