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 图数据库存储
学习路线
- 简介与规则
- 实例与主要元素
- 容器与集合
- RDF Schema 与都柏林核心
- 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 节