Rowlex - 仅获取文档的“根”个体

时间:2011-09-05 21:21:31

标签: c# rowlex foaf

这是我的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而没有列表中的子元素? (个人ID的课程是动态生成的,因此我无法搜索特定的ID)

感谢。

1 个答案:

答案 0 :(得分:0)

我认为这里存在一些关于RDF和XML的误解。 RDF是一组三元组,可以用XML和其他序列化格式表示。与XML不同,RDF不是分层的,因此在RDF中没有“子元素”这样的东西。 Guid先生只是在Node_1之下的事实是误导性的XML节点层次结构“暗示”的错觉。为了证明这一点,我列出了你的例子的三元组(请注意,RDF中三元组的顺序是无关紧要的!):

“节点1”类型为人员 “节点1”描述“Default.png”
“节点1”描述“描述”
“节点1”知道“Guid先生” “Guid先生”类型的人 “节点2”类型为人 “节点2”描述“Default.png”
“节点2”描述“描述”

尝试以下方法: 添加一个三元组: “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序列化程序可能会选择第一行作为“根”,另一行作为“子元素”,但它是任意的。嵌套只是XML序列化创建的错觉。不要为此而堕落。

使用rdfDocument.GetIndividuals(Person.Uri, true);语句触发的查询只会过滤掉Person类型的所有个体,因此它会正确地返回所有这三个人。