精彩的人生

好好工作,好好生活

BlogJava 首页 新随笔 联系 聚合 管理
  147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
我们都知道,RDF只表示二元关系,但在实际应用中,多元关系非常常见,如:小红借给小明语文书,是个三元关系: borrow(小红,语文书,小明); 再如,小明的身高是170cm.也是个三元关系 length(小明,170, cm). 推广来说,n元关系如何在RDF和OWL中表示呢?

我们假设三元组为(a,b,c). a,b.c 都是资源或Literal

1. 方法一
如果三元组中a是老大,即有个资源的地位是支配性的,如:小明的身高是170cm.
表示方法为 把老大提出来,再把三元关系分解为3个二元关系:
  R1(a, a’) , R2(a’,b),  R3(a’,c)  // R1(a, a’) 用RDF三元组表示为 (a , R1 , a’)
例如:小明的例子可以表示为
length(小明,length_obj_1);  //小明是老大, length_obj_1 是一个身高对象 
value(length_obj_1,170);     //值
unit(length_obj_1,cm);      //单位
2. 方法二
如果三元组中没有明显的老大,如: 小红借给小明语文书.
表示方法为提出一个对象,每个元素都和这个对象有关系:
R1(g, a) , R2(g,b),  R3(g, c)
例如:小红借书的例子可以表示为
rdf:type (borrow_obj_1,  BorrowRelation); // BorrowRelation 是一个表示借书关系的类
borrow_owner((borrow_obj_1,小红); 
borrow_agent((borrow_obj_1,小明); //借书的人
borrow_book((borrow_obj_1, 语文书);


3. 结论
1) n-元关系有2exp(n-2) 种表示方法: 二元关系一种表示法,三元关系有如上二种表示法,由数学归纳法得证。
2) 如果用RDF对复杂系统建模,有必要引入一个中间的抽象层,用以表示N元关系,还有named graph, context 等。如引入rdfe:relation(a,b,c,d,….)表示n元关系 
3) n-关系的表示对RDF数据的查询和存储优化很有价值,因为n-关系往往对应了数据库中的表。


注:大部分摘译自: 
http://www.w3.org/2001/sw/BestPractices/OEP/n-aryRelations-20040623/

更为详细的信息也参考它。

原文地址:http://bbs.w3china.org/dispbbs.asp?boardID=2&ID=8416

posted on 2006-05-10 10:31 hopeshared 阅读(807) 评论(0)  编辑  收藏 所属分类: Web Service

只有注册用户登录后才能发表评论。


网站导航: