Frage

Hier ist mein RDF -Dokument, das von der Rowlex -Bibliothek generiert wird:

<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>

Und ich versuche, den Knoten 1 und den Knoten 2 Personen mit diesem Code abzurufen:

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;

Leider kehrt Person_List mit den folgenden Daten zurück:

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

Gibt es also einen Weg/eine Methode, um nur den Knoten 1 und 2 ohne ihre Subelemente in der Liste zu erhalten? (Von Kursen werden die Einzelpersonen -IDs dynamisch generiert, sodass ich nicht nach einer bestimmten ID suchen kann)

Vielen Dank.

War es hilfreich?

Lösung

Ich glaube, hier gibt es einige Missverständnisse in Bezug auf RDF und XML. RDF ist ein Haufen Dreifach, die sowohl in XML als auch in anderen Serialisierungsformaten ausgedrückt werden können. Im Gegensatz zu XML ist RDF daher nicht hierarchisch, In RDF gibt es in RDF kein "Subelement". Die Tatsache, dass Mr. Guid gerade unter Mr. Node_1 steht, ist eine Illusion, die durch die irreführende XML -Knotenhierarchie "vorgeschlagen" wird. Um das zu demonstrieren, liste ich die Dreifache Ihrer Beispiele auf (bitte denken Sie daran, dass die Reihenfolge der Dreier in RDF irrelevant ist!):

"Knoten 1" Typof Person
"Knoten 1" Darstellung "default.png"
"Knoten 1" Beschreibung "Beschreibung"
"Knoten 1" weiß "Mr. Guid"
"Mr. Guid" Typof Person
"Knoten 2" Typof Person
"Knoten 2" Darstellung "default.png"
"Knoten 2" Beschreibung "Beschreibung"

Probieren Sie Folgendes aus: Fügen Sie ein weiteres Triple hinzu: "Mr. Guid" kennt "Knoten 1" mit dem folgenden Code:

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());

Jetzt kennt sowohl Node 1 MR GUID als auch MR GUID den Knoten 1, und dies ist ein vollkommen rechtliches Szenario. Wer wäre die Wurzel und wer wäre das Unterelement? Der XML -Serializer wird wahrscheinlich den ersten in der Reihe als "Wurzel" und das andere als "Subelement" auswählen, aber es ist willkürlich. Das Verschachteln ist nur eine Illusion, die durch die XML -Serialisierung erzeugt wird. Fallen Sie darauf nicht herein.

Die Abfrage, die Sie mit dem feuern rdfDocument.GetIndividuals(Person.Uri, true); Die Aussage filtert einfach alle von Typen ausgestatteten Personen Person, und daher kehrt es richtig alle drei Jungs zurück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top