在关系数据库中存储RDF

原创 2003年07月09日 07:22:00

本文分类应该在XML大类下,但CSDN目光短浅,只在网站制作技术和.NET下有XML分类。RDF与M$无任何关系,所以姑且放在网站制作技术-XML之下。

 

hax 译自 http://www-db.stanford.edu/~melnik/rdf/db.html

版权开放,欢迎转载 copyleft 2003, hax<hax@sjtu.edu.cn>.

========================
术语译名:

RDF model      RDF模型
RDF statement  RDF语句
literal        文字常量
namespace      命名空间

table          表
field          字段
========================


本页概述了当前在关系数据库里存储RDF的几种方法,
*THIS IS A REQUEST FOR COMMENTS*,请将您的想法投稿
到 (www-rdf-interest@w3.org)!


动机(Motiviation)
-------------------

我们需要永久存储和操作(大量的)RDF数据。一个可选的做法是使
用关系数据库技术。这个方法的主要优点是它提供了一个可升级的
通用方案。


准则(Criteria)
----------------

这个不完全的列表指出了数据库模式设计需要考虑的准则(无先后顺序):

  * 可伸缩性:我们能存储和查询超过十亿(1B+)的triples吗?
  * 查询:支持哪一类的查询?它们可以被容易的公式化表述和处理吗?
  * 效率:查询的耗费多大?交付查询结果的耗费呢?
  * 优化:我们能如何处理refication?
  * 组织:怎样在存储数据之上建立关联?我们能对RDF models进行
    易分辨的混合并仍能确定triples来自何处吗?

以下的提议方案从不同方面满足上述准则。本页的维护者对可伸缩性
问题尤感兴趣。请将反映你需求的准则提交给我!


出版物(Publications)
----------------------

下面这个论文讨论了以垂直模式存储和查询稀疏的关系表,这与一些
提议方案的精神非常相似:

R. Agrawal, A. Somani, and Y. Xu: Storage and Querying of
E-Commerce Data, Proc. VLDB 2001, Roma, Italy, available as
http://www.vldb.org/conf/2001/P149.pdf


存储RDF的数据库模式
-------------------

(最近的投稿在前)

清晰的模型(Explicit models)
-------------------------------

贡献者:Brian MacBride<bwm@hplb.hpl.hp.com>

日期:2000/5/11

摘要:本表示法清晰的表现模型并使用了视图

数据库模式(Oracle)和作者的描述:

                sql = "CREATE TABLE RDFRESOURCE"
                        + "("
                        +   "Id INTEGER not null primary key,"
                        +   "NS INTEGER not null,"
                        +   "RoName varchar(255)"
                        + ")";

资源表保存所有的资源,Id是内部的标识符字段,NS是个指针,指向
namespace表的条目以给出资源的命名空间。RoName应该叫做‘localname’,
是Qname的局部命名部分。


                sql = "CREATE TABLE RDFNameSpace"
                        + "("
                        +   "Id INTEGER not null primary key,"
                        +   "NsName varchar(255)"
                        + ")";

命名空间表。


                sql = "CREATE TABLE RDFLiteral"
                        + "("
                        +   "Id INTEGER not null primary key,"
                        +   "VAL varchar (4000)"
                        + ")";

literals [hax注:可译作文字常量] 表。 4000字符的限制对当前目
标来说足够。[hax注:Oralce的可变字符串的上限是4000字节]
              

                sql = "CREATE TABLE RDFStatement"
                        + "("
                        +   "Id INTEGER not null primary key,"
                        +   "Subject INTEGER not null,"
                        +   "Predicate INTEGER not null,"
                        +   "ObjResource INTEGER not null,"
                  +   "ObjLiteral INTEGER not null,"
                        +   "Res CHAR(1) not null"
                        + ")";

Statement [hax注:可译作语句或陈述] 表。最初是单个对象字段,
可以有一个对象或者文字常量的ID。使用一个复杂的JOIN表达式来列
举陈述,但并不如期望的运行。可能是我对SQL经验不足。而这个工
作和感觉更“正确”。Res是一个标志以说明对象是资源还是文字常
量。


                sql = "CREATE TABLE RDFModel"
                        + "("
                        +   "ModelId INTEGER not null,"
                        +   "Statement INTEGER not null,"
                        +   "Asserted CHAR(1) not null,"
                        +   "Reified CHAR(1) not null,"
                        +   "primary key(ModelId, Statement)"
                        + ")";

数据库可以处理多个models [hax注:可译作模型]。这个表保存了每
个模型的语句列表。最初该表由语句表组合,但当执行集合操作时不
能工作。

Asserted标志说明该语句用于给模型作断言。
Reified标志说明该模型用于使模型具体化。
后者是留给未来实现的挂钩(hook)。具体化(Reification)没有
被实现,因此这个方法是未经测试的。

每个模型都是资源,并在资源表里有一个记录。ModelId字段是该资
源的标识符。这样,就可以写关于某个模型的语句。这里有一个模型
的类,这样可以在确认模型有效性时列出需要被加载的模式(schemas)。


                sql = "CREATE OR REPLACE VIEW RootModel"
                     +  " AS SELECT UNIQUE Id, Subject, Predicate,
                          ObjResource, ObjLiteral, Res, Asserted, Reified"
                     +    " FROM RDFModel, RDFStatement"
                     +    " WHERE RDFModel.Statement = RDFStatement.Id";

这创建一个人造的模型视图,包含数据库里所有的语句,无论语句在
哪一个“实际的”模型里。

视图被大量使用。每个模型都是一个视图,即一个在其他模型视图或
者RootModel视图之上的查询。因此每次Stanford API 调用一个创建
模型的操作——如某个查询,数据库里就创建一个新的视图。这必然
会导致一些对数据库的查询引擎来说异乎寻常的查询,而我就依靠数
据库的查询优化器来整理之。这里也存在因陈旧失效的视图被留在数
据库里而可能的应用崩溃问题。


                sql = "CREATE TABLE RDFKEYS"
                        + "("
                        +   "TableName char(10) not null primary key,"
                        +   "Key INTEGER not null"
                        + ")";
                sql = "INSERT INTO RDFKEYS (TableName, Key)
                       VALUES('Resource', 0)";
                sql = "INSERT INTO RDFKEYS (TableName, Key)
                       VALUES('NameSpace', 0)";

一个键发生表。可能可以使用序列器(sequencer) [hax注:Oracle
使用序列产生自动递增或循环的数字],但看起来有点数据库特性相
关,至少不是我一开始想要的,尽管真的只需要一个发生器。


关于模式(schemas)有个问题。当前,模式像模型一样处理,并可以
输入到模式有效性校验器。没有尝试使用模式来定义一个更特殊的数
据库结构。


原贴:http://lists.w3.org/Archives/Public/www-rdf-interest/2000May/0094.html

RDF数据库前十名

摘自DB-Engines,观察了一下,分数主要通过人们讨论、使用、搜索引擎有效结果数量以及找工作中的需求进行排名,另外这些主要是原生支持的数据库进行对比,不涉及使用Hbase、Cassandra或者关...
  • hanyueqi
  • hanyueqi
  • 2015年04月24日 13:53
  • 4394

RDF存储查询技术

随着互联网的飞速发展,大量的RDF数据在互联网上被发布,对于大规模RDF数据管理与查询已经变成了 一个非常具有挑战性的问题。很多公司以及高校开发了许多关于针对RDF的管理工具[1],例如Oracle的...
  • qiuhui19941118
  • qiuhui19941118
  • 2017年01月25日 15:08
  • 2354

jena处理RDF数据入门程序小例子

jena是提供Java语义开发的一个API,由Apache软件基金会下的Apache Jena来进行维护,目前最新版本为jena-3.0.0,官网地址为:http://jena.apache.org/...
  • shijing_0214
  • shijing_0214
  • 2015年09月19日 18:54
  • 2660

RDF-资源描述框架

http://www.metadata.com.cn/RDF.htm 资源描述框架(Resource Description Framework) RDF--Web数据集成的元数据解决方案   ...
  • u013045749
  • u013045749
  • 2015年09月26日 16:55
  • 656

RDF数据库Stardog安装(Ubuntu)

原文 RDF是资源描述框架(Resource Description Framework)的简称,RDF是一种用于描述网络资源的标准。很多知识图谱把数据存储成RDF格式,使用RDF数据库来管理这些数...
  • kjcsdnblog
  • kjcsdnblog
  • 2017年12月22日 22:03
  • 156

rdf(图数据)数据集发布:医疗诊断用药方面的

医疗诊断患病数据集如果喜欢可以给个小星星。Github传送门: https://github.com/xjtushilei/pdd_data_set数据集介绍该数据集是rdf数据集,关于理疗的,里面有...
  • i_iphone
  • i_iphone
  • 2017年10月13日 20:22
  • 212

使用Jena访问RDF数据库环境搭

RDF:资源描述框架,RDF使用XML语法和RDF Schema(RDFS)来将元数据描述成为数据模型。 XML:可扩展标记语言 元数据:即Metadata,又称中介数据、中继数据,为描述数据的...
  • lanxiangru
  • lanxiangru
  • 2017年10月12日 16:16
  • 271

知识图谱学习之存储与查询(一 )

2017-1.10 知识图谱的学习最近半年在研究,感觉都是大数据的一个分支. 1.知识图的存储 本次研究知识图的存储主要只用RDF(资源描述框架 Rcourse Describle Framew...
  • huadudududud
  • huadudududud
  • 2017年01月10日 20:34
  • 3070

如何生成 RDF 数据?

版权声明:可以任意转载,转载时请标明文章原始出处和作者信息:石磊 背景知识图谱越来越火,技术人员开始习惯使用Sparql查询RDF数据。但是,我们如何构建一个RDF数据呢?因为之前互联网上没有相关工具...
  • i_iphone
  • i_iphone
  • 2017年10月13日 20:16
  • 762
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在关系数据库中存储RDF
举报原因:
原因补充:

(最多只允许输入30个字)