RDF 资源描述框架
⚠️ 本章为选读内容
本章定位 :理解 RDF 作为"语义网基石"的核心概念——三元组模型(主语-谓语-宾语)、rdf:RDF 根元素、rdf:Description 描述单元,以及 RDF 如何为机器提供"可理解的"数据。
定义与作用
RDF (Resource Description Framework,资源描述框架)是 W3C 制定的 元数据描述标准 。它解决的核心问题:如何以机器可理解的方式描述"关于 Web 资源的元数据"。
传统 HTML 记录的信息是人类可读的,但机器很难理解语义:
<h1>XML入门指南</h1>
<p>作者:大翔</p>
<p>价格:59元</p>
RDF 将同样的信息转化为结构化的"声明":
资源(XML入门指南)— 创建者 → 大翔
资源(XML入门指南)— 价格 → 59元
RDF 的核心思想:把关于资源的陈述,统一为"主语-谓语-宾语"的三元组模型。
核心原理:RDF 三元组模型
图解释 :每个 RDF 陈述都由主语(被描述的资源URI)、谓语(属性URI)、宾语(值或另一个资源URI)三部分组成。字面量用引号表示,URI 资源可直接链接其他 RDF 描述——由此形成"语义网络"。
语法/结构要点
RDF 核心元素
| 元素 | 说明 |
|---|---|
<rdf:RDF> | RDF 文档的根元素 |
<rdf:Description> | 描述一个资源,用 rdf:about 指定资源 URI |
rdf:about | 被描述资源的标识符 |
rdf:resource | 引用另一个资源 |
rdf:datatype | 指定字面量的数据类型 |
RDF 常用的命名空间
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/" (Dublin Core — 元数据标准)
xmlns:foaf="http://xmlns.com/foaf/0.1/" (Friend of a Friend — 人物描述)
RDF 的序列化格式
| 格式 | 扩展名 | 说明 |
|---|---|---|
| RDF/XML | .rdf | 基于 XML 的序列化(本章重点) |
| Turtle | .ttl | 人类友好的简洁语法 |
| N-Triples | .nt | 最简单的三元组格式 |
| JSON-LD | .jsonld | JSON 格式的 RDF |
完整示例
场景说明
飞翔科技的 黄俪 需要整理公司内部的知识库。她用 RDF 描述公司的技术文档,让机器能自动发现文档之间的关系——哪篇文档是"参考了"哪篇文档,谁写的,主题是什么。
RDF/XML 示例:技术文档目录
feixiang-docs.rdf :
<?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/"
xmlns:fx="http://www.feixiang.com/vocabulary#">
<!-- 文档1:XML入门指南 -->
<rdf:Description rdf:about="http://docs.feixiang.com/xml-guide">
<dc:title>XML入门指南</dc:title>
<dc:creator rdf:resource="http://people.feixiang.com/daxiang"/>
<dc:date>2025-03-15</dc:date>
<dc:subject>XML, 教程, 入门</dc:subject>
<fx:wordCount rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">
45000
</fx:wordCount>
<fx:version>2.1</fx:version>
</rdf:Description>
<!-- 文档2:微服务架构设计 -->
<rdf:Description rdf:about="http://docs.feixiang.com/microservice">
<dc:title>微服务架构设计</dc:title>
<dc:creator rdf:resource="http://people.feixiang.com/baige"/>
<dc:date>2024-11-20</dc:date>
<dc:subject>微服务, 架构, 分布式</dc:subject>
<!-- 引用文档1:本文档参考了 XML入门指南 -->
<fx:references rdf:resource="http://docs.feixiang.com/xml-guide"/>
</rdf:Description>
<!-- 人物1:大翔 -->
<rdf:Description rdf:about="http://people.feixiang.com/daxiang">
<fx:fullName>大翔</fx:fullName>
<fx:role>高级工程师</fx:role>
<fx:email>daxiang@feixiang.com</fx:email>
</rdf:Description>
<!-- 人物2:白歌 -->
<rdf:Description rdf:about="http://people.feixiang.com/baige">
<fx:fullName>白歌</fx:fullName>
<fx:role>架构师</fx:role>
<fx:email>baige@feixiang.com</fx:email>
</rdf:Description>
</rdf:RDF>
三元组提取
从上述 RDF/XML 可提取出以下三元组:
| 主语 | 谓语 | 宾语 |
|---|---|---|
| xml-guide | dc:title | "XML入门指南" |
| xml-guide | dc:creator | people/daxiang |
| xml-guide | dc:date | "2025-03-15" |
| xml-guide | fx:wordCount | 45000^^xsd:integer |
| xml-guide | fx:version | "2.1" |
| microservice | dc:creator | people/baige |
| microservice | fx:references | docs/xml-guide |
| people/daxiang | fx:fullName | "大翔" |
| people/baige | fx:role | "架构师" |
操作结果
RDF 让机器能够"理解"知识库结构:
- 自动发现"微服务架构设计"引用了"XML入门指南"
- 查询所有"大翔"创建的文档
- 按主题分类汇总所有技术文档
- 这些操作 不需要人工标注——机器直接解析 RDF 三元组即可
语义网络可视化
从上述三元组可构建出一个 语义网络 :
易错场景
混淆 rdf:resource 和字面量
<!-- 正确:字面量 — 直接写值 -->
<dc:title>XML入门指南</dc:title>
<!-- 正确:引用资源 — 用 rdf:resource -->
<dc:creator rdf:resource="http://people.feixiang.com/daxiang"/>
<!-- 错误:引用资源时写了文本内容 -->
<dc:creator>大翔</dc:creator> <!-- 字面量,不是资源引用 -->
当宾语是另一个资源时,用 rdf:resource;当宾语是纯文本值时,直接写内容。
RDF/XML 的语法过于冗长
RDF/XML 是规范,但人类编写和阅读都很痛苦。实际项目中使用 Turtle 等简洁格式:
@prefix fx: <http://www.feixiang.com/vocabulary#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
<http://docs.feixiang.com/xml-guide> dc:title "XML入门指南" ;
dc:creator <http://people.feixiang.com/daxiang> .
忘记 rdf:datatype 声明
<fx:wordCount>45000</fx:wordCount> <!-- 被当作文本 "45000",不是数字 45000 -->
显式声明数据类型:<fx:wordCount rdf:datatype="...#integer">45000</fx:wordCount>。
面试考点
| 考点 | 参考答案要点 |
|---|---|
| RDF 三元组的三个组成部分? | 主语(被描述的资源URI)、谓语(属性URI)、宾语(字面量值或另一个资源URI) |
| RDF 和 XML 是什么关系? | RDF 是一种"用 XML 表达"的数据模型(RDF/XML 序列化),但 RDF 本身是三元组模型而非 XML 特有。Turtle、JSON-LD 也是 RDF 的序列化格式 |
| RDF 的实用价值? | 语义网基石;知识图谱构建;SEO(Schema.org);数据互操作;链接数据(Linked Data) |
| rdf:about 和 rdf:ID 的区别? | rdf:about 引用已有资源;rdf:ID 定义新资源并生成完整 URI(基于 xml:base) |