Rowlex - получение только «корневых» лиц документа - PullRequest
0 голосов
/ 06 сентября 2011

вот мой rdf-документ, сгенерированный библиотекой rowlex:

<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 без их подэлементов в списке?(конечно, идентификаторы личности генерируются динамически, поэтому я не могу найти конкретный идентификатор)

Спасибо.

1 Ответ

0 голосов
/ 06 сентября 2011

Я считаю, что здесь есть некоторое недопонимание относительно RDF и XML.RDF - это набор троек, которые могут быть выражены как в XML, так и в других форматах сериализации.В отличие от XML, RDF не является иерархическим, поэтому в RDF не существует такого понятия, как «подэлемент».Тот факт, что мистер Гуид находится под управлением мистера Node_1, является иллюзией, «предложенной» вводящей в заблуждение иерархией узлов XML.Чтобы продемонстрировать это, я перечисляю тройки ваших примеров (имейте в виду, что порядок троек в RDF не имеет значения!):

"Node 1" typeOf Person
"Node 1" decification "По умолчанию.png "
" Узел 1 "описание" Описание "
" Узел 1 "знает" Мистер Гуид "
Тип" Мистер Гуид "Тип Персоны
Тип" Узел 2 "Тип Персоны
" Узел2 "depiction" Default.png "
" Узел 2 "описание" Описание "

Попробуйте следующее: Добавьте еще одну тройку:" Мистер Гуид "знает" Узел 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 знает мистера Гуида, и мистер Гуид знает Узел 1, и это совершенно законный сценарий.Кто будет корнем, а кто будет субэлементом?Сериализатор XML, вероятно, выберет первый в строке «корень», а другой - «подэлемент», но он произвольный.Вложенность - это иллюзия, созданная сериализацией XML.Не поддавайтесь на это.

Запрос, который вы запускаете с помощью оператора rdfDocument.GetIndividuals(Person.Uri, true);, просто отфильтровывает всех людей, имеющих тип Person, и, следовательно, корректно возвращает всех трех парней.

...