質問

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を検索できません)

ありがとう。

役に立ちましたか?

解決

ここでは、RDFとXMLに関していくつかの誤解があると思います。 RDFは、XMLと他のシリアル化形式の両方で表現できるトリプルの束です。したがって、XMLとは異なり、RDFは階層的ではありません RDFには「サブエレメント」のようなものはありません. 。 GUID氏がNode_1氏の下にあるという事実は、誤解を招くXMLノード階層によって「示唆されている」幻想です。それを実証するために、私はあなたの例のトリプルをリストします(RDFのトリプルの順序は無関係であることに注意してください!):

「ノード1」タイプの人
「ノード1」描写「default.png」
「ノード1」説明「説明」
「ノード1」は「Mr. Guid」を知っています
「Mr. Guid」タイプの人
「ノード2」タイプの人
「ノード2」描写「default.png」
「ノード2」説明「説明」

次のことを試してください。もう1つのトリプルを追加します。「Mr. Guid」は、次のコードで「ノード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シリアイザーは、おそらく最初の列を「ルート」にし、もう1つを「サブエレメント」として選択しますが、それは任意です。ネスティングは、XMLシリアル化によって作成された幻想です。そのために落ちないでください。

あなたが火をつけるクエリ rdfDocument.GetIndividuals(Person.Uri, true); ステートメントは、タイプのすべての個人を単に除去するだけです Person, 、したがって、3人全員が正しく戻ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top