2009-07-10 58 views
1

我在我的语义Web项目中有一个RDF文件,我使用Rowlex处理它。 我需要从RDF删除个人,所以我用从RDF中删除个人和财产

<RDFDoc instance>.RemoveIndividual(new OwlThing(<individual URI>, <RDFDoc instance>)); 

有了这个代码,我有我的个人走了,但它的性能仍然存在。所以我想通了,我应该先删除它的属性。此外,我没有找到一个命令一起去除所有属性。所以,问题1:有没有办法删除个人及其所有的属性?或者,我可以删除一行代码中的所有属性而不是逐个删除?我怎样才能删除多个值的属性。例如三个StudyLists,在下面的例子中。

在另一方面,当我试图从学生个体删除一个属性,例如 'useSudyList',通过这个代码:

student.RemoveuseStudyList(student.useStudyList); 

我发现我的RDF文件:

<Ontologyowl:Student rdf:about="ehsanm"> 
//other properties 
    <Ontologyowl:useStudyList> 
     <Ontologyowl:StudyList rdf:about="stdl184516"/> 
    </Ontologyowl:useStudyList> 
</Ontologyowl:Student> 

...变成这样:

<Ontologyowl:Student rdf:about="ehsanm"> 
    //other properties 

</Ontologyowl:Student> 
<Ontologyowl:StudyList rdf:about="stdl184516"/> 

因此,财产被抛出。我没有这个问题的文字属性。 Question2:有什么问题?

感谢您的关注,并提前给予帮助。

回答

2

你的问题与ROWLEX无关,但它是一个典型的图形问题:如果你删除一个节点,你有多远级联删除?当你用文字删除一个属性时,情况很简单,因为没有图的延续。当你删除一个指向另一个节点的属性时,你应该删除该节点吗?您的示例中的删除看起来很明显,因为您的图形既不包含循环引用也不包含共享关系。想象下面的图:你有3个人:A(亚当),B(比尔)和他们的父亲F(弗雷德)。你有A - F和B - F之间的父亲关系。 你删除了Adam和他父亲之间的关系。是否应该删除父节点并将Bill变为不一致(孤立:)状态?这里的答案是“否”。你只能删除关系。

在UML图中,您可以选择聚合关系来区分“拥有”和“共享”。它以行尾的菱形颜色(黑色或白色)表示。在关系数据库中,您可以定义或忽略通过外键的“级联删除”。他们代表了相同的概念。不幸的是,RDF不提供此属性的额外元数据。如果RDF具有这些信息,我们可以确定何时以及在多大程度上应该在图上级联删除。但我们不。这为坏消息设定了一个案例:你是独立的,你可以在你认为合适的时候实施删除。

+0

您注意了这一点! – 2009-07-11 18:44:26

3

您确实删除了该属性,但是还有其他与您未删除的<stdl184516>相关的声明。

这里有你有实际的语句(龟格式):

<ehsanm> a Ontologyowl:Student . 
## Other statements 
<ehsanm> Ontologyowl:useStudyList <stdl184516> . 
<stdl184516> a Ontologyowl:StudyList . 

所以它是有道理的,你<ehsanm>主题去除Ontologyowl:useStudyList谓词(以及包含它的语句)将保留其余断言关于<stdl184516>的类型。

你没有文字问题的原因是你没有文字作为语句的主题(它们只是语句的对象)。因此删除该语句会删除文字(以及对它的所有引用)。以资源作为陈述的对象,可能会有关于该资源的其他陈述(如您的示例中的情况)。

RDF认为文字不相交,意味着它们都是不同的(即使它们具有相同的值)。这就是为什么删除一个谓词到文字(如果你想这样想的话,它的“链接”)也会删除文字。

更新(添加到拉梅先生的回应):概念,RDF是关于边缘节点(资源)的图表(关系/谓词)。删除节点的概念与RDF相反;它意味着节点(资源)本身具有意义。即使通过声明其rdf:type来键入资源也是一个节点/边缘/节点语句。单独的节点URI被认为是不透明的,并且除了作为唯一标识符之外没有任何语义。这就是为什么RDF不允许“裸”节点(一个节点之外的节点) - 它们没有固有含义。

为扩展Ehsan提出的问题,删除节点实际上会删除其所有传入/传出谓词。这并不真正“删除”节点,它实际上删除了引用它的所有语句/断言(当没有语句引用它时,将其视为“隐藏”)。

+0

非常感谢您的指导。我会再次检查,并添加一些代码,看看它是否工作。 再次感谢 – Ehsan 2009-07-11 09:43:47