我们假设三元组为(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