RDF(Resource Description Framework)资源描述框架的基础架构是一个资源(subject)-属性(predicate)-属性值(objecct)这样的一个三元组(triple),这样一个三元组又叫做一个声明(statement),其中属性值也可以是一个资源,要么是资源,要么是文字(literal),且文字只能是原子值,如:数字,日期等;属性描述了资源和属性值之间的关系。
也可以用图来书写一个声明:一条有向边从声明的subject指向object,边上是predicate,一个声明的object可以是另一个声明的subject,如下图所示:
有时,我们需要指向一个特定的声明,RDF提供的两种方式。
一是具体化(reification),其关键思想是引入一个额外的对象,与原来的声明关联,如对上述Location声明进行具体化,现在描述上述Location声明是由一个叫Frank的人创建的:
因为RDF中只存在三元组,所以我们不能直接为一个声明添加一个标识符,这样会变成一个四元组。由于这种具体化的昂贵代价,所以提出了第二种方式:命名图,其关键思想是:一个显式的标识符被赋予一个声明或一个声明集合,然后这个标识符就可以在普通的三元组中引用。简而言之,就是一个命名图允许圈出一个声明或声明的集合,并为它们提供一个新的标识符。
Turtle(Terse RDF Triple Language),文件名后缀为.ttl,用Turtle写一个上述的Location声明:
.
注意格式:URL由尖括号包含,一个声明的主语,谓语,宾语一次出现,注意最后由句号结尾(一个声明结束就有一个句号)
在RDF中引入文字(即原子值),只需简单的将值写在引号中,并在后面采用XMLSchema形式声明数据类型,中间采用^^连接,如果文字右面没有指定类型,默认为字符型,如:
"1"^^
"1982-03-24"^^
"BaronWay Building"
实例:向第一副图中添加Baron Way Apartment有3个房间
"3"^^.
.
.
注意:每个声明后有句号
Turtle允许一些缩写来方便书写,并用@prefix来定义特定的命名空间,这种替代称为限定名
重写:
@prefix swp: .
@prefix dbpedia-owl: .
@prefix dbpedia: .
@prefix xsd: .
swp:BaronWayApartment swp:hasNumberOfBedrooms "3"^^.
swp:BaronWayApartment swp:isPartOf swp:BaronWayBuilding.
swp:BaronWayBuilding dbpedia-owl:location dbpedia:Amsterdam.
注意:每行后都有句号,没有尖括号了,主谓宾之间用空格隔开
当两个声明的主语重复时,可以让前一个声明的末尾是分号(;),这样就不用重复书写主语,使书写更紧凑
@prefix swp: .
@prefix dbpedia-owl: .
@prefix dbpedia: .
@prefix xsd: .
swp:BaronWayApartment swp:hasNumberOfBedrooms "3"^^;
swp:isPartOf swp:BaronWayBuilding.
swp:BaronWayBuilding dbpedia-owl:location dbpedia:Amsterdam.
当主语和谓语都重复时,可以让前一个声明的末尾是逗号(,),例如此时希望BaronWayBuilding不仅位于Amsterdam,还位于Netherland
@prefix swp: .
@prefix dbpedia-owl: .
@prefix dbpedia: .
@prefix xsd: .
swp:BaronWayApartment swp:hasNumberOfBedrooms "3"^^;
swp:isPartOf swp:BaronWayBuilding.
swp:BaronWayBuilding dbpedia-owl:location dbpedia:Amsterdam,
depedia:Netherlands.
还可以简写常见的数据类型,比如数字:如果没有小数点,则会被解释成整型,如果有小数点,则会被解释成浮点型
@prefix swp: .
@prefix dbpedia-owl: .
@prefix dbpedia: .
swp:BaronWayApartment swp:hasNumberOfBedrooms 3;
swp:isPartOf swp:BaronWayBuilding.
swp:BaronWayBuilding dbpedia-owl:location dbpedia:Amsterdam,
depedia:Netherlands.
所有的RDF/XML必须被包含在rdf:RDF中,命名空间由xmlns:引用,包含在rdf:RDF中。
注意rdf的命名空间为:"http://www.w3.org/1999/02/22-rdf-syntax-ns#"一个声明被一个rdf:Description包括,主语由rdf:about声明,包含在rdf:Description中。谓语被rdf:Description包括,且只有谓语能用限定名声明。如果宾语为文字,则由rdf:datatype声明,包含在谓语里,文字内容被谓语包括。如果宾语为资源,则由rdf:resource声明,无内容包括。
对上述RDF书写RDF/XML:
RDFa是在HTML页面中嵌入RDF的语法。命名空间在中由xmlns声明。主语通过about标识,用[]括起来。谓语通过rel或property标识,如果宾语是文字,则用property,如果宾语是资源,则用rel,宾语名用resource声明,用[]括起来
如下:
以上三种RDF语法等价,用于不同场景。
RDF Schema提供的是建模原语:
rdfs:Resource 所有资源的类 rdfs:Literal 所有文字的类 rdfs:Class 所有类的类
rdf:Property 所有属性的类 rdf:Statement 所有具体化声明的类
rdf:type 将一个资源关联到它的类,该资源被声明为该类的一个实例
rdfs:subClassOf 将一个类关联到它的父类
rdfs:domain 指定一个属性的定义域 rdfs:range 指定一个属性的值域
rdf:subject 将一个声明关联到它的主语 rdf:predicate 将一个声明关联到它的谓语
rdf:object 将一个声明关联到它的宾语
rdf:Bag 包的类(无序) rdf:Seq(有序) rdf:Alt(选其一) rdf:Container 所有容器的父类
示例:
1.
@prefix swp: .
@prefix rdf: .
@prefix rdfs: .
swp:Person rdf:type rdf:Class.
swp:Person rdfs:comment "The class of person".
swp:Unit rdf:type rdf:Class.
swp:Unit rdfs:comment "A self-contained section of accommodations in a larger building or group of buildings".
........
swp:residesAt rdf:type rdfs:Property.
swp:residesAt rdfs:comment "Relates persons to their residence".
swp:residesAt rdfs:domain swp:Person.
swp:residesAt rdfs:range swp:ResidentialUnit.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xml:base="http://www.animals.fake/animal#">
<rdfs:Class rdf:ID="animal" />
<rdfs:Class rdf:ID="horse" >
<rdfs:subClassOf rdf:resource="#animal" />
rdfs:Class>
rdf:RDF>