« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
|
Blog信息 |
blog名称: 日志总数:2 评论数量:0 留言数量:-1 访问次数:43121 建立时间:2004年12月16日 |

| |
[语义网]使用RDF开发网络服务的经验 心得体会, 软件技术
nlany 发表于 2004/12/16 23:24:23 |
采用RDF(资源描述框架)可以用来帮助你的项目处理元数据。因为元数据是用来定义和描述其他数据的,所以利用元数据就可以推断有哪些方法可以用来处理被描述的数据,而不用关心数据本身的具体内容。
RDF::Core 是一个面向对象的Perl模块,可以用RDF的模型来创建、保存、查询元数据,还可以把数据用RDF/XML语法输出为XML文档。我把它用在一个处理URL重定向的软件项目里:s
在这个项目里我有一个需求是输出用户已经注册过的URL注册和重定向信息,但是我希望根据用户的喜好来选择输出格式。这样这些输出的数据就可以被支持某种特定格式的工具打开,可选的常用格式如 HTML、RDF/RSS、OPML等等。
于是,我首先用RDF语义模型对待输出数据做了描述,但是这就涉及到应该用什么词汇来描述,网上搜了一下,并没有现成的词汇合适描述URL重定向信息的,
我就只好自己规定了一套词汇,还好,W3C已经为制定词汇提供了RDFS词汇,例如定义一个 SymURL (Symbolic URL) 类:
<rdfs:Class rdf:about="#SymURL"
rdfs:label="Symbolic URL"
rdfs:comment="A symbolic URL link item">
<rdfs:isDefinedBy rdf:resource=""/>
</rdfs:Class>
将来只要提供这个词汇集文件的其他新版本,就可以修改元数据的含义,从而改变可以用来处理数据的方法。好了,有了词汇我们终于可以把原始数据用
RDF定义,并把它们保存到一个临时的RDF Store里,RDF::Core提供三种Store存储方式,我选择了直接保存在内存里,你还可以用
dbm文件 或 Postgres 数据库来保存。
现在,如果用户希望以 RDF/RSS 1.0 的格式来输出数据,我就提供一个项目私有词汇和RDF/RSS 1.0
词汇的映射表,这个映射表本身是用来描述两个词汇集之间的关系的,所以我同样可以用RDF来定义,如要映射私有词汇 “SymURL” 为 RSS
的词汇 “item” :
<rdf:Description rdf:about="#SymURL">
<mapto rdf:resource="&rss;item"/>
</rdf:Description>
将来只要对这个映射表进行修改,就可以支持新的词汇,如 RDF/RSS 3.0 5.0 什么的,而不用去修改源程序。
接下来,程序员通过RDF::Core 提供的XML解析器来读取词汇映射表,通过编程按照映射表来给数据添加使用了新词汇的元数据。如果用
RDF::Core 提供的查询功能提取所有用新词汇描述的数据,我们就会得到了一个使用 RDF/RSS 1.0
词汇的数据集。但是,实际上,我还希望这些输出的数据将来还可以再输入回来,所以我如果把词汇映射表一并输出,那么我们的程序还可以把这些外来词汇转换为
私有词汇,以便选择合适的操作。
把RDF定义的数据用XML输出可以用RDF::Core,但是它的输出功能还不能做一些细致的定制,而RDF/RSS
1.0为了照顾对0.91版的兼容性,对格式的要求有比较苛刻的地方,于是我使用 XML::Writer 重新写了一个RDF
Serializer,让它可以使用其他RDF/XML的输出格式:比如支持 rdf:type 属性和匿名属性的简写方式,支持 rdf:li
属性,支持使用默认xml名字空间等。
这些方法在普通的RSS 输出程序中都是罕见的,因为大多数程序都是直接按照 RSS
标准人工确定使用什么词汇、如何转换数据等,而不是依靠RDF/RDFS来定义私有数据的含义,对于小的项目,这是可以接受的,但是大的项目,如果不把数
据的定义和处理逻辑分开,那么维护和升级将必须通过修改源程序来完成,而且必须认真检查每一个处理环节。
如果像 css和xhtml把显示逻辑和结构控制逻辑那样清晰划分网页设计的工作,我们也清楚地分开 “数据的定义” 和
“数据的处理”,当数据定义发生变化的时候,只需要修改 “词汇集”或者
“词汇映射表”就可了,而不用去修改程序;同样当我们希望改变或增加数据的处理方式的时候,数据的定义没有改变,依赖这些定义的旧的和第三方程序仍然可以
同时运行,如果这些程序是花数百万投资开发的话,那意义就更明显了。
OWL 比 RDF 多了一个逻辑层,也增加了这类工具的开发难度和效率开销,但是 RDF 的优势足以让我们期待像 OWL 这样的语义Web技术可以把数据的处理提高到一个更加智能化和人性化的高度。
|
|
|