乐途乐途
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
  • 学习路径
  • XML 基础语法

    • XML 概述
    • XML 文档结构
    • XML 元素
    • XML 属性
    • XML 语法规则
    • XML 命名空间
    • XML 注释与处理指令
  • DTD 与文档验证

    • DTD 概述
    • DTD 元素声明
    • DTD 属性声明
    • DTD 实体声明
    • DTD 元素与属性对比
    • DTD 完整示例
  • XML Schema 定义

    • XML Schema 概述
    • XSD 简单类型
    • XSD 复杂类型
    • XSD 命名空间与引用
  • XPath 节点定位

    • XPath 概述
    • XPath 路径表达式
    • XPath 谓词与函数
  • XSLT 转换

    • XSLT 概述
    • XSLT 模板与匹配
    • XSLT 控制结构
    • XSLT 输出控制
  • XML 解析技术

    • XML 解析概述
    • DOM 解析
    • SAX 解析
    • StAX 解析
    • XML 与 Java — JAXP
  • XML 在 Java 中的应用

    • Spring XML 配置
    • MyBatis XML 映射
    • pom.xml 与 Maven
    • web.xml 配置详解
  • 现代数据格式对比

    • XML 与 JSON 对比
    • XML 与 YAML 对比
  • XML 显示与浏览器集成

    • XML 在浏览器中的显示
    • XMLHttpRequest 与 AJAX
    • 服务器端 XML 处理
  • XML 进阶查询与链接

    • XQuery 查询语言
    • XLink 超链接
    • XML 验证工具使用
  • XML Web 服务(选读)

    • XML Web 服务概述
    • SOAP 协议详解
    • WSDL 服务描述
    • RSS 内容聚合
    • RDF 资源描述框架

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.jsonldJSON 格式的 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-guidedc:title"XML入门指南"
xml-guidedc:creatorpeople/daxiang
xml-guidedc:date"2025-03-15"
xml-guidefx:wordCount45000^^xsd:integer
xml-guidefx:version"2.1"
microservicedc:creatorpeople/baige
microservicefx:referencesdocs/xml-guide
people/daxiangfx:fullName"大翔"
people/baigefx: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)
上一页
RSS 内容聚合