劳力士-只得到“根”;文件中的个体

本文关键字:文件 -只 | 更新日期: 2023-09-27 18:07:45

这是我的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)

谢谢。

劳力士-只得到“根”;文件中的个体

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

"Node 1" typeOf Person
"Node 1"描述"Default.png"
"Node 1" description " description "
"节点1"认识" Guid先生"
" Guid先生"人物类型
"Node 2" typeOf Person
"Node 2"描述"Default.png"
"Node 2" description " description "

尝试以下操作:再加一个三重:"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的所有个体,因此它正确返回所有三个家伙。