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