首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

有效地使用 RDF/XML 中的 rdf:about 和 rdf:ID

有效地使用 RDF/XML 中的 rdf:about 和 rdf:ID

本技巧文章涉及到了 2003 年 1 月 23 日的 RDF/XML 语法规范。如果您不熟悉最近的 RDF规范,那么您可能要回顾一下最新的 W3C RDF Primer(请参阅 )。在RDF/XML 中,语句的主语被组织成节点元素,这些元素使用如         rdf:about 和         rdf:ID 这样的属性来设置有关该主语的一组语句的主语。一些规则控制从这些属性构造实际的 RDF 主语 URI的方式,但如果您不小心的话,在不同环境解析结果时,存在很多让人不解之处,甚至是不稳定性。本技巧文章提供一些实践,这些实践可以有助于将这些错误和混乱降至最少。      
指定基人们常常按  所示方式来使用         rdf:ID 。      
清单 1. rdf:ID 的简单用法(listing1.rdf)
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<rdfescription rdf:ID="local-record">
  <dc:title>Local Record</dc:title>
</rdfescription>
</rdf:RDF>




在该示例中,RDF/XML 规定了语句的主语是井号和随后的标识名称(         #local-resource ),然后会将这个主语附加到        作用域内的基 URI。后者会使人迷惑。在  中,没有显式地说明这个作用域内的基 URI。解析器通常根据被解析文件的位置来提供这个URI。例如,如果清单 1 位于 URI         http://rdfhost/listing1.rdf ,则实际的主语 URI 可能是         http://rdfhost/listing1.rdf#local-resource 。如果这个清单位于本地文件系统路径         /code/rdf/listing1.rdf ,则解析的 URI 可能是         file:///code/rdf/listing1.rdf#local-resource 。解析器也可以用其它较复杂的方式来执行解析。RDF/XML不对被解析 RDF 文档规定任何基 URI 决定过程。      
只要解析器的行为合理,根据被解析文件位置的不同,可以按您想的变化主语 URI。您想让文件断言的 RDF语句可能取决于文件本身的上下文。然而,在许多情况下,您只记得文件中所描述的资源的绝对URI,所以这一变化会产生问题。
一种解决方案是总是使用         rdf:about 和绝对 URI — 我将在稍后讨论这一方法。另一种解决方案是使用         XML Base,这是一种规范,它使我们可以断言一个附加到 XML 文件中某一元素的基 URI。通过将         xml:base 属性放在 XML 文件正确的位置上,您可以控制使用哪个基 URI 来解析         rdf:ID 。 提供了这样一个示例。      
清单 2. 使用带 XML Base 的 rdf:ID(listing2.rdf)
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:base="http://spam.com/eggs/listing.rdf"
>
<rdfescription rdf:ID="local-record">
  <dc:title>Local Record</dc:title>
</rdfescription>
</rdf:RDF>




请注意添加的         xml:base 属性。我将它添加到顶层元素,您通常希望用这种方式控制整个文件的基 URI,因为通常元素会继承其父元素的基 URI。不管  是位于 URI(譬如         http://rdfhost/listing.rdf )所指定的地方,还是位于本地文件系统,解析器必须在         rdfescription 处生成主语         http://spam.com/eggs/listing.rdf#local-resource 。      
rdf:about 如何适应这种情况使用         rdf:about 而不使用         rdf:ID 的 RDF 节点元素有另一种解析机制。这种机制最简单,如果属性值是绝对 URI,则逐字将这个 URI 作为主语。所以,从所表达的 RDF 模型这个角度来看, 和  等价。      
清单 3. 使用带绝对 URI 的 rdf:about(listing3.rdf)
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<rdfescription
    rdf:about="http://spam.com/eggs/listing.rdf#local-record">
  <dc:title>Local Record</dc:title>
</rdfescription>
</rdf:RDF>




然而,您可以在         rdf:about 中使用相对 URI,这时,会根据基 URI进行解析。这意味着,您可以再次看到         xml:base 的方便之处:可以不管上下文是什么而确保得到用于主语的准确的 URI。从所表达的 RDF 模型这个角度来看, 与 等价。      
清单 4. 使用带相对 URI 的 rdf:about(listing4.rdf)
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:base="http://spam.com/eggs/"
>
<rdfescription rdf:about="listing.rdf#local-record">
  <dc:title>Local Record</dc:title>
</rdfescription>
</rdf:RDF>




结束语在相对 URI 方面,         rdf:about 的行为也可以应用到类似的属性(譬如         rdf:resource )。         rdf:ID 的行为与         rdf:bagID 等属性的行为类似。在整个 RDF/XML 文件中,您应该充分了解任何有效的基 URI,这样可以确保您理解了生成 RDF 模型的过程。      
至于在         rdf:ID 和         rdf:about 两者之间的权衡,如果您正在描述的资源在描述该资源的RDF 文件之外实际没有意义的位置,则您很可能希望用前者。也许它是一条局部或便利的记录,或者甚至是一个抽象或现实世界物体的代理(虽然我建议您,在用 RDF描述这样的事物时要极其小心,因为它会导致各种莫名其妙的混乱;我曾经只用 RDF描述对计算机有意义的记录)。当您正在引用其标识和位置都广为人知的资源时,通常使用         rdf:about 。
返回列表