RDF/RDFS/OWL

RDF(Resource Description Framework 资源描述框架)

  • 知识总是以三元组形式出现: (subject, predicate, object)
    (主,谓,宾)
  • 资源和属性用URI来定义(http://demo.com/KG
  • 属性值可以一个值,或者一个资源(URI)
  • 可用命名空间替代uri来简化
<RDF>
  <Description about="https://www.runoob.com//rdf">
    <author>Jan Egil Refsnes</author>
    <homepage>https://www.runoob.com/</homepage>
  </Description>
</RDF>
<?xml version="1.0"?>

<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">

<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
  <cd:artist>Bob Dylan</cd:artist>
  <cd:country>USA</cd:country>
  <cd:company>Columbia</cd:company>
  <cd:price>10.90</cd:price>
  <cd:year>1985</cd:year>
</rdf:Description>

</rdf:RDF>

RDF序列化的方式主要有:RDF/XML,N-Triples,Turtle,RDFa,JSON-LD

N-Triples

<http://www.kg.com/person/1> <http://www.kg.com/ontology/chineseName> "罗纳尔多·路易斯·纳萨里奥·德·利马"^^string.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/career> "足球运动员"^^string.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/fullName> "Ronaldo Luís Nazário de Lima"^^string.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/birthDate> "1976-09-18"^^date.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/height> "180"^^int.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/weight> "98"^^int.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/nationality> "巴西"^^string.
<http://www.kg.com/person/1> <http://www.kg.com/ontology/hasBirthPlace> <http://www.kg.com/place/10086>.
<http://www.kg.com/place/10086> <http://www.kg.com/ontology/address> "里约热内卢"^^string.
<http://www.kg.com/place/10086> <http://www.kg.com/ontology/coordinate> "-22.908333, -43.196389"^^string.

Turtle

@prefix person: <http://www.kg.com/person/> .
@prefix place: <http://www.kg.com/place/> .
@prefix : <http://www.kg.com/ontology/> .

person:1 :chineseName "罗纳尔多·路易斯·纳萨里奥·德·利马"^^string.
person:1 :career "足球运动员"^^string.
person:1 :fullName "Ronaldo Luís Nazário de Lima"^^string.
person:1 :birthDate "1976-09-18"^^date.
person:1 :height "180"^^int. 
person:1 :weight "98"^^int.
person:1 :nationality "巴西"^^string. 
person:1 :hasBirthPlace place:10086.
place:10086 :address "里约热内卢"^^string.
place:10086 :coordinate "-22.908333, -43.196389"^^string.

Trutle简化:

@prefix person: <http://www.kg.com/person/> .
@prefix place: <http://www.kg.com/place/> .
@prefix : <http://www.kg.com/ontology/> .

person:1 :chineseName "罗纳尔多·路易斯·纳萨里奥·德·利马"^^string;
         :career "足球运动员"^^string;
         :fullName "Ronaldo Luís Nazário de Lima"^^string;
         :birthDate "1976-09-18"^^date;
         :height "180"^^int;
         :weight "98"^^int;
         :nationality "巴西"^^string; 
         :hasBirthPlace place:10086.
place:10086 :address "里约热内卢"^^string;
            :coordinate "-22.908333, -43.196389"^^string.

RDFS(Resource Description Framework Schema)

是RDF的扩展,表现形式上就是RDF。常用的方式是RDF/XML,Turtle

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <http://www.kg.com/ontology/> .

### 这里我们用词汇rdfs:Class定义了“人”和“地点”这两个类。
:Person rdf:type rdfs:Class.
:Place rdf:type rdfs:Class.

### rdfs当中不区分数据属性和对象属性,词汇rdf:Property定义了属性,即RDF的“边”。
:chineseName rdf:type rdf:Property;
        rdfs:domain :Person;
        rdfs:range xsd:string .

:career rdf:type rdf:Property;
        rdfs:domain :Person;
        rdfs:range xsd:string .

常见属性:

  • rdfs:Class 用于定义类。
  • rdfs:domain 用于表示该属性属于哪个类别。
  • rdfs:range 用于描述该属性的取值类型。
  • rdfs:subClassOf 用于描述该类的父类。比如,我们可以定义一个运动员类,声明该类是人的子类。
  • rdfs:subProperty. 用于描述该属性的父属性。比如,我们可以定义一个名称属性,声明中文名称和全名是名称的子类。

借用一下知乎中的图(图片来自文章:https://zhuanlan.zhihu.com/p/32122644
aaa

OWL(Web Ontology Language)

可用于自动推理

  • 数据属性(DatatypeProperty): 指向某个值
  • 对象属性(ObjectProperty): 指向另一个实体
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix : <http://www.kg.com/ontology/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .

### 这里我们用词汇owl:Class定义了“人”和“地点”这两个类。
:Person rdf:type owl:Class.
:Place rdf:type owl:Class.

### owl区分数据属性和对象属性(对象属性表示实体和实体之间的关系)。词汇owl:DatatypeProperty定义了数据属性,owl:ObjectProperty定义了对象属性。
:chineseName rdf:type owl:DatatypeProperty;
        rdfs:domain :Person;
        rdfs:range xsd:string .

:hasBirthPlace rdf:type owl:ObjectProperty;
        rdfs:domain :Person;
        rdfs:range :Place .

aaa

描述属性特征的词汇

  • owl:TransitiveProperty : 属性具有传递性质。(若A位于B,B位于C,那么A肯定位于C)
  • owl:SymmetricProperty : 属性具有对称性。(若A认识B,那么B肯定认识A)。
  • owl:FunctionalProperty : 该属性取值的唯一性。(我们定义“母亲”是具有唯一性的属性,若A的母亲是B,在其他地方我们得知A的母亲是C,那么B和C指的是同一个人)。
  • owl:inverseOf : 定义某个属性的相反关系。(A是B的父母,那么B肯定是A的子女)。

本体映射词汇(Ontology Mapping)

  • owl:equivalentClass : 表示某个类和另一个类是相同的。
  • owl:equivalentProperty : 表示某个属性和另一个属性是相同的。
  • owl:sameAs : 表示两个实体是同一个实体。

owl补充

  • owl:oneOf
  • owl:disjointWith :两个类不相交
  • unionOf : 并
  • minCadinality :
  • maxCadinality
  • InverseFunctionalProperty
  • hasValue

总结

rdfs的常见属性:

  • rdfs:Class 用于定义类。
  • rdfs:domain 用于表示该属性属于哪个类别。
  • rdfs:range 用于描述该属性的取值类型。
  • rdfs:subClassOf 用于描述该类的父类。比如,我们可以定义一个运动员类,声明该类是人的子类。
  • rdfs:subProperty. 用于描述该属性的父属性。比如,我们可以定义一个名称属性,声明中文名称和全名是名称的子类。

owl的常见属性:
描述属性特征的词汇

  • owl:TransitiveProperty : 属性具有传递性质。(若A位于B,B位于C,那么A肯定位于C)
  • owl:SymmetricProperty : 属性具有对称性。(若A认识B,那么B肯定认识A)。
  • owl:FunctionalProperty : 该属性取值的唯一性。(我们定义“母亲”是具有唯一性的属性,若A的母亲是B,在其他地方我们得知A的母亲是C,那么B和C指的是同一个人)。
  • owl:inverseOf : 定义某个属性的相反关系。(A是B的父母,那么B肯定是A的子女)。

本体映射词汇(Ontology Mapping)

  • owl:equivalentClass : 表示某个类和另一个类是相同的。
  • owl:equivalentProperty : 表示某个属性和另一个属性是相同的。
  • owl:sameAs : 表示两个实体是同一个实体。

  • rdf其实描述了数据,但是数据之间的关系不够明确;我们可以自定义一些关系,但是关系与关系之间也是有联系的,这在rdf中并无法表示出来
  • rdfs/owl是在rdf的基础上增加的约束;“边”不再是rdf中的直接定义,而也是需要用rdfs:domain, rdfs:range来描述。在拥有更清晰的语义的情况下,就可以进行推理

参考文章: https://zhuanlan.zhihu.com/p/32122644

posted @ 2020-07-27 11:25  twilight0402  阅读(175)  评论(0编辑  收藏  举报