构建于关系型数据库之上的RDFDB
zamin 2002-09-21 05:55:53 最近我在做一个RDF Database,构架于关系型数据库之上。以下是关于RDFDatabase的结构设计(草案),确定后就要code了(java&oracle)。大家有兴趣的话,不妨看一下,给我提些建议,万分感谢!!
Table RDFModel
ModelId int
StatementID int
//Other fields as Click,Channel and so on.
Table RDFStatement
Subject int
Predicate text
Object int
Prefix text
Flag int
Table RDFResource
ID int
Uri text
Value text
Flag int
Table NameSpace
Prefix text
NS text
任何一个RDF文档都可以分解成许多形如主语-动词-宾语(Subject-Predicate-Object)的三元组(triple)形式声明。档得到一个RDF文档后,首先在表RDFModel中进行注册,然后将一个RDF文档分解成三元组之后一一存入表RDFStatement和RDFResource。
RDFStatement.Rredicate字段存放动词词汇、RDFStatement.Subject和RDFStatement.Object指向资源值存放的地址,Prefix字段存放动词前缀(该词汇的名称域),RDFStatement.Flag字段表示该声明的类型,可能是:0,简单三元组(triple)声明;1,复杂三元组声明(一),其宾语部分为一个匿名资源(又一个<rdf:Description>);2,复杂三元组声明(二),其宾于部分为一个RDF Container(<rdf:Bag>或<rdf:Seq>...)。
三元组中的主语和宾语都是资源,他们的值都将存放于RDFResource中。但是资源又可分为直接资源与间接资源(direct resource/indirect resource),由RDFResource.Flag标出。若是直接资源,RDFResource.Value中将存放该值(value),同时RDFResource.Uri为空;若是间接资源,则RDFResource.Uri将存放该资源定位符(uri),则RDFResource.Value为空。
Sample1:
简单三元组声明的处理:
<?xml version="1.0" encoding="GB2312"?>
<rdf:RDF xmlns:rdf="http://www.w3c.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://www.purl.org/dc/elements/1.0/">
<rdf:Description rdf:about="http://jd.sjtu.edu.cn/sail/">
<dc:title>思航网——思想的航程</dc:title>
<dc:creator>f0103405班</dc:creator>
<dc:date>2002-9-1</dc:date>
</rdf:Description>
</rdf:RDF>
数据库:
--RDFModel--
ModelId StatementId
1 1
--RDFStatement--
Subject Predicate Object Prefix Flag
1 title 2 dc 0
1 creator 3 dc 0
1 date 4 dc 0
--RDFResource--
ID Uri Value Flag
1 null http://jd.sjtu.edu.cn/sail/ 0
2 null 思航网——思想的航程 0
3 null f0103405班 0
4 null 2002-9-1 0
--NameSpace--
Prefix NS
dc http://www.purl.org/dc/elements/1.0/
sample2:
复杂三元组声明(一)的处理:
<?xml version="1.0" encoding="GB2312"?>
<rdf:RDF xmlns:rdf="http://www.w3c.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://www.purl.org/dc/elements/1.0/"
xmlns:dcq="http://www.purl.org/dc/qualifiers/1.0/">
<rdf:Description rdf:about="http://jd.sjtu.edu.cn/sail/">
<dc:title>思航网——思想的航程</dc:title>
<dc:creator>
<dc:Description>
<rdf:value>f0103405班</rdf:value>
<dcq:creatorType>Web</dcq:creatorType>
</dc:Description>
</dc:creator>
<dc:date>2002-9-1</dc:date>
</rdf:Description>
</rdf:RDF>
数据库(继续上面的):
--RDFModel--
ModelId StatementId
1 1
2 5
--RDFStatement--
Subject Predicate Object Prefix Flag
1 title 2 dc 0
1 creator 3 dc 0
1 date 4 dc 0
5 title 6 dc 0
5 creator 6 dc 1
6 value 7 rdf 0
6 createType 8 dcq 0
5 date 9 dc 0
--RDFResource--
ID Uri Value Flag
1 null http://jd.sjtu.edu.cn/sail/ 0
2 null 思航网——思想的航程 0
3 null f0103405班 0
4 null 2002-9-1 0
5 null http://jd.sjtu.edu.cn/sail/ 0
6 null 思航网——思想的航程 0
7 null f0103405班 0
8 null Web 0
9 null 2002-9-1 0
--NameSpace--
Prefix NS
dc http://www.purl.org/dc/elements/1.0/
rdf http://www.w3c.org/1999/02/22-rdf-syntax-ns#
dcq http://www.purl.org/dc/qualifiers/1.0/