RDF 教程

RDF 教程

RDF(Resource Description Framework,资源描述框架)是 W3C 制定的描述资源及其关系的标准数据模型,是语义网(Semantic Web)和知识图谱的基础。

核心概念

  • 三元组:主语-谓语-宾语(类似知识图谱的节点-边-节点)
  • 资源:用 URI 唯一标识的事物
  • 语义化:数据机器可读、可推理
  • 互操作:跨系统共享与链接数据

三元组示例

主语: http://example.org/people/张三
谓语: http://example.org/property/age
宾语: "30"

// 表达: 张三 的 年龄 是 30

张三 → 居住于 → 北京
北京 → 是首都 → 中国

RDF 技术栈

RDF        数据模型
RDFS       类与属性定义(RDF Schema)
OWL        本体语言(推理)
SPARQL     查询语言
Turtle/JSON-LD  序列化格式
Triple Store     图数据库存储

学习路线

  1. 简介与规则
  2. 实例与主要元素
  3. 容器与集合
  4. RDF Schema 与都柏林核心
  5. OWL 与参考手册

RDF 简介

RDF 简介

1. 什么是 RDF

RDF 是 W3C 于 1999 年发布、2004 年修订的标准,用"主语-谓语-宾语"三元组描述资源,让数据具有机器可理解的语义。

2. 为什么需要 RDF

  • 数据孤岛:打破系统间数据隔离
  • 语义互操作:统一描述方式,机器可读
  • 知识图谱:支撑搜索引擎、推荐系统
  • 开放数据:Linked Data 运动的基础

3. 核心思想

# 万物皆资源,用 URI 标识
# 资源之间有属性关系

# 三元组 = 陈述(Statement)
(资源, 属性, 值)
(张三, 出生地, 北京)
(北京, 所属国家, 中国)

# 知识图谱 = 大量三元组组成的图

4. 应用场景

  • Google 知识图谱(Knowledge Graph)
  • 维基数据(Wikidata)
  • 语义搜索引擎
  • 开放数据互联(LOD)
  • 企业数据整合

5. 相关标准

RDF/XML        XML 序列化
Turtle         简洁文本格式(推荐)
N-Triples      简单行格式
JSON-LD        JSON 序列化
RDFa           嵌入 HTML 的 RDF
SPARQL         查询语言
RDFS / OWL     语义层

RDF 规则

RDF 规则

1. 基本规则

# 1. 资源用 URI 标识
# 2. 描述通过属性(三元组)
# 3. 属性值可以是资源或字面量
# 4. URI 全局唯一
# 5. 数据无歧义(机器可读)

2. 资源与 URI

# URI 唯一标识资源
# 可以是网络地址,也可以是抽象标识

http://example.org/people/zhangsan   # 人
http://example.org/place/beijing     # 地点
http://example.org/concept/ai        # 概念

# 命名空间前缀(简化书写)
@prefix ex: <http://example.org/> .
ex:zhangsan ex:age "30" .

3. 主语/谓语/宾语

# 主语(Subject)
# 必须是资源(URI 或空节点)
ex:zhangsan

# 谓语(Predicate)
# 必须是资源(属性 URI)
ex:age

# 宾语(Object)
# 可以是资源或字面量
"30"          # 字面量
ex:beijing    # 资源

4. 字面量规则

# 字符串字面量
"hello"
"hello"@en         # 语言标签
"hello"@zh         # 中文

# 类型化字面量
"30"^^xsd:integer  # 整数
"2026-08-18"^^xsd:date   # 日期
"true"^^xsd:boolean      # 布尔

# 前缀
xsd: http://www.w3.org/2001/XMLSchema#

5. 图与合并

# RDF 数据集合 = 图(Graph)
# 多个三元组组成有向图

# 图的合并
# 相同 URI 的资源自动合并
# 跨数据源实现知识融合

# 命名图(quads)
# 给三元组加上下文/来源

RDF 实例

RDF 实例

1. Turtle 格式示例

# 声明命名空间
@prefix ex: <http://example.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# 描述"张三"
ex:zhangsan
    ex:fullName "张三"@zh ;
    ex:age "30"^^xsd:integer ;
    ex:birthPlace ex:beijing ;
    ex:worksAt ex:techCompany ;
    ex:knows ex:lisi .

# 描述"北京"
ex:beijing
    ex:cityName "北京"@zh ;
    ex:isCapitalOf ex:china .

# 描述"中国"
ex:china
    ex:countryName "中国"@zh ;
    ex:population "14亿"^^xsd:decimal .

2. RDF/XML 格式

<?xml version="1.0"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:ex="http://example.org/">

  <rdf:Description rdf:about="http://example.org/zhangsan">
    <ex:fullName>张三</ex:fullName>
    <ex:age rdf:datatype=
      "http://www.w3.org/2001/XMLSchema#integer">30</ex:age>
    <ex:birthPlace rdf:resource=
      "http://example.org/beijing"/>
  </rdf:Description>
</rdf:RDF>

3. JSON-LD 格式

{
  "@context": {
    "ex": "http://example.org/",
    "xsd": "http://www.w3.org/2001/XMLSchema#"
  },
  "@id": "ex:zhangsan",
  "ex:fullName": "张三",
  "ex:age": { "@value": 30, "@type": "xsd:integer" },
  "ex:birthPlace": { "@id": "ex:beijing" },
  "ex:knows": { "@id": "ex:lisi" }
}

4. 空节点(Blank Node)

# 匿名资源(无 URI)
# 用 _: 表示

ex:zhangsan ex:hasAddress _:addr1 .
_:addr1 ex:street "中关村大街1号" ;
        ex:city "北京" .

# 也可用方括号简写
ex:zhangsan ex:hasAddress [
    ex:street "中关村大街1号" ;
    ex:city "北京"
] .

RDF 主要元素

RDF 主要元素

1. 核心元素

# RDF 命名空间
http://www.w3.org/1999/02/22-rdf-syntax-ns#

# 核心元素
rdf:RDF         根元素(RDF/XML)
rdf:Description 资源描述容器
rdf:about       资源 URI
rdf:resource    属性值引用资源
rdf:ID          资源 ID
rdf:datatype    字面量类型
rdf:li          列表项(容器)
rdf:type        类型声明
rdf:Bag / rdf:Seq / rdf:Alt  容器类型

2. rdf:type 类型

# 声明资源类型(类)
@prefix ex: <http://example.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

ex:zhangsan rdf:type ex:Person .
ex:lisi rdf:type ex:Person .
ex:beijing rdf:type ex:City .

# 简写: a 表示 rdf:type
ex:zhangsan a ex:Person .

3. 属性元素

# 属性名即元素名
ex:zhangsan ex:age "30" .

# RDF/XML 中的属性元素
<rdf:Description rdf:about="ex:zhangsan">
  <ex:age>30</ex:age>
  <ex:birthPlace rdf:resource="ex:beijing"/>
</rdf:Description>

# 属性值为资源
rdf:resource="ex:beijing"

# 属性值为字面量
<ex:age>30</ex:age>

4. 复合属性

# 属性可以继续描述(链式)
ex:zhangsan ex:address ex:addr1 .
ex:addr1 ex:city ex:beijing .
ex:addr1 ex:zip "100000" .

# RDF/XML 嵌套
<rdf:Description rdf:about="ex:zhangsan">
  <ex:address>
    <rdf:Description rdf:about="ex:addr1">
      <ex:city>北京</ex:city>
    </rdf:Description>
  </ex:address>
</rdf:Description>

RDF 容器

RDF 容器

1. 什么是容器

容器用于描述一组资源,如"张三的朋友列表"。RDF 有三种容器类型。

2. 三种容器

# rdf:Bag      无序容器
# rdf:Seq      有序容器
# rdf:Alt      可选项(通常取第一个)

# Bag 示例
ex:zhangsan ex:friends [
  rdf:type rdf:Bag ;
  rdf:_1 ex:lisi ;
  rdf:_2 ex:wangwu ;
  rdf:_3 ex:zhaoliu
] .

# Seq 示例(有序)
ex:course ex:students [
  rdf:type rdf:Seq ;
  rdf:_1 ex:studentA ;
  rdf:_2 ex:studentB
] .

# Alt 示例(备选)
ex:software ex:downloads [
  rdf:type rdf:Alt ;
  rdf:_1 ex:windows ;
  rdf:_2 ex:macos
] .

3. rdf:li 简写

# rdf:li 自动生成 _1, _2...
ex:zhangsan ex:friends [
  rdf:type rdf:Bag ;
  rdf:li ex:lisi ;
  rdf:li ex:wangwu ;
  rdf:li ex:zhaoliu
] .

# RDF/XML
<rdf:Bag>
  <rdf:li rdf:resource="ex:lisi"/>
  <rdf:li rdf:resource="ex:wangwu"/>
</rdf:Bag>

4. 容器的语义

# 注意:容器成员关系不可推理
# "张三知道 A" 不能推出 "知道 B"

# 更推荐的 RDF 集合(rdf:List)
# 见下一节 RDF 集合

RDF 集合

RDF 集合

1. 什么是 RDF 集合

RDF 集合(rdf:List)是链表结构,用于表示明确的、完整的列表,可以推理成员关系。

2. 集合结构

# 链表结构
# rdf:first(第一个) rdf:rest(剩余)

rdf:List
├── rdf:first → 元素1
├── rdf:rest → List
│   ├── rdf:first → 元素2
│   ├── rdf:rest → List
│   │   ├── rdf:first → 元素3
│   │   └── rdf:rest → rdf:nil(空)

# rdf:nil 表示空列表

3. Turtle 简写

# 用圆括号简写集合
ex:zhangsan ex:friends ( ex:lisi ex:wangwu ex:zhaoliu ) .

# 等价于完整写法
ex:zhangsan ex:friends _:l1 .
_:l1 rdf:first ex:lisi ;
     rdf:rest _:l2 .
_:l2 rdf:first ex:wangwu ;
     rdf:rest _:l3 .
_:l3 rdf:first ex:zhaoliu ;
     rdf:rest rdf:nil .

4. 集合 vs 容器

# 集合(rdf:List)
- 列表明确且完整
- 可推理成员关系
- 推荐使用

# 容器(rdf:Bag/Seq/Alt)
- 成员开放
- 不可推理
- 兼容旧数据

RDF Schema

RDF Schema

1. 什么是 RDFS

RDF Schema(RDFS)在 RDF 之上增加类(class)、属性(property)的定义与关系,提供轻量本体描述能力。

2. 核心元素

# 命名空间
http://www.w3.org/2000/01/rdf-schema#

# 核心元素
rdfs:Class          定义类
rdfs:subClassOf     子类关系
rdfs:Property       定义属性
rdfs:subPropertyOf  子属性关系
rdfs:domain         属性定义域(主语类型)
rdfs:range          属性值域(宾语类型)
rdfs:label          标签(人类可读)
rdfs:comment        注释
rdfs:seeAlso        参见
rdfs:isDefinedBy    定义来源

3. 类定义

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ex: <http://example.org/> .

# 定义类
ex:Person a rdfs:Class ;
    rdfs:label "人"@zh ;
    rdfs:comment "人类个体" .

ex:Student a rdfs:Class ;
    rdfs:label "学生"@zh .

# 子类关系
ex:Student rdfs:subClassOf ex:Person .

# 实例
ex:zhangsan a ex:Student .
# 推理: ex:zhangsan 也是 ex:Person

4. 属性定义

# 定义属性
ex:age a rdfs:Property ;
    rdfs:label "年龄"@zh ;
    rdfs:domain ex:Person ;     # 主语是 Person
    rdfs:range xsd:integer .    # 值是整数

ex:worksAt a rdfs:Property ;
    rdfs:domain ex:Person ;
    rdfs:range ex:Company .

# 子属性
ex:employeeOf rdfs:subPropertyOf ex:worksAt .

# 使用
ex:zhangsan ex:age "30"^^xsd:integer .
# 推理: ex:zhangsan 是 Person

5. RDFS 推理

# 典型推理规则
1. 子类传递: A ⊂ B, B ⊂ C → A ⊂ C
2. 实例继承: x : A, A ⊂ B → x : B
3. 域/值域: 属性有 domain/range → 自动推断类型

# 推理引擎
# Apache Jena、RDFLib + owlrl

RDF 都柏林核心

RDF 都柏林核心

1. 什么是都柏林核心

Dublin Core(DC)是一组描述资源的通用元数据元素,1995 年始于都柏林,现为 ISO 15836 标准,广泛用于图书馆、文档、数字资源描述。

2. 15 个核心元素

# 内容相关
Title        标题
Subject      主题
Description  描述
Source       来源
Language     语言
Relation     关联
Coverage     覆盖范围

# 知识产权相关
Creator      创建者
Contributor  贡献者
Publisher    发布者
Rights       权利

# 实例相关
Date         日期
Type         类型
Format       格式
Identifier   标识符

3. 命名空间

# Dublin Core 命名空间
http://purl.org/dc/elements/1.1/    # 传统(15元素)
http://purl.org/dc/terms/           # 扩展(更多元素)

# 前缀
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .

4. 使用示例

@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix ex: <http://example.org/> .

# 描述一篇文章
ex:article1
    dc:title "RDF 入门教程" ;
    dc:creator "张三" ;
    dc:subject "RDF", "语义网" ;
    dc:description "介绍 RDF 基础概念" ;
    dc:publisher "知识出版社" ;
    dc:date "2026-08-18" ;
    dc:type "文章" ;
    dc:format "text/html" ;
    dc:identifier "urn:isbn:1234567890" ;
    dc:language "zh" ;
    dcterms:rights "© 2026 知识出版社" .

5. 应用场景

  • 数字图书馆元数据
  • 网页资源描述(SEO)
  • 出版物的语义标识
  • 开放数据互操作

OWL 简介

OWL 简介

1. 什么是 OWL

OWL(Web Ontology Language,Web 本体语言)是 W3C 推荐的本体描述语言,在 RDFS 基础上提供更强的表达与推理能力,用于构建领域知识模型。

2. OWL 版本

OWL 1.0(2004)  第一版
OWL 2(2009)    当前版本

# OWL 2 三个子语言
OWL 2 EL   轻量,适合大数据(医疗)
OWL 2 QL   轻量,适合查询(数据库)
OWL 2 RL   规则推理,实用均衡

3. 核心能力

# 类的高级描述
- 并集(unionOf)、交集(intersectionOf)
- 补集(complementOf)
- 枚举(oneOf)

# 属性约束
- 函数属性(functional)
- 传递属性(transitive)
- 对称/反对称
- 属性链

# 个体关系
- 等价类/等价属性
- 不相交类
- sameAs 同一事物

4. 示例

@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ex: <http://example.org/> .

# 本体声明
ex: ont a owl:Ontology .

# 不相交类
ex:Man a owl:Class .
ex:Woman a owl:Class .
ex:Man owl:disjointWith ex:Woman .

# 传递属性
ex:partOf a owl:ObjectProperty ;
    rdfs:domain ex:Region ;
    rdfs:range ex:Region ;
    a owl:TransitiveProperty .

# 函数属性(最多一个值)
ex:hasMother a owl:ObjectProperty ;
    a owl:FunctionalProperty .

# 等价
ex:Person owl:equivalentClass ex:Human .

# 个体同一
ex:morningStar owl:sameAs ex:eveningStar .

5. OWL 应用

  • 医学本体(SNOMED CT、Gene Ontology)
  • 金融风控知识模型
  • 搜索引擎语义理解
  • 数据集成与验证

RDF 参考手册

RDF 参考手册

1. 命名空间速查

rdf:     http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs:    http://www.w3.org/2000/01/rdf-schema#
owl:     http://www.w3.org/2002/07/owl#
xsd:     http://www.w3.org/2001/XMLSchema#
dc:      http://purl.org/dc/elements/1.1/
dcterms: http://purl.org/dc/terms/
foaf:    http://xmlns.com/foaf/0.1/
schema:  https://schema.org/

2. 核心词汇速查

# RDF 词汇
rdf:type  rdf:Property  rdf:Bag  rdf:Seq  rdf:Alt
rdf:List  rdf:first  rdf:rest  rdf:nil  rdf:value

# RDFS 词汇
rdfs:Class  rdfs:subClassOf  rdfs:Property
rdfs:subPropertyOf  rdfs:domain  rdfs:range
rdfs:label  rdfs:comment  rdfs:seeAlso

# OWL 词汇
owl:Class  owl:ObjectProperty  owl:DatatypeProperty
owl:equivalentClass  owl:equivalentProperty
owl:disjointWith  owl:sameAs  owl:TransitiveProperty
owl:SymmetricProperty  owl:FunctionalProperty

3. 数据类型

xsd:string    字符串
xsd:integer   整数
xsd:decimal   小数
xsd:double    浮点
xsd:boolean   布尔
xsd:date      日期(YYYY-MM-DD)
xsd:dateTime  日期时间
xsd:anyURI    URI
xsd:language  语言标签

4. 常用工具

# 解析与存储
RDFLib(Python)      常用库
Apache Jena(Java)   完整平台
Virtuoso            图数据库
GraphDB             图数据库
Stardog             推理图数据库

# 查询
SPARQL 查询语言

# 验证
# SHACL 形状约束

# 在线
# https://www.w3.org/RDF/Validator

5. 序列化格式选择

# Turtle
# 最易读,推荐人工编辑
# RDF/XML
# 标准但冗长,适合交换
# JSON-LD
# Web 友好,易于 JS 处理
# N-Triples
# 简单行格式,适合流处理
# RDFa
# 嵌入 HTML,利于 SEO
第 1 / 11 节