知识表示:RDF

知识表示:RDF

文章目录

  • 知识表示:RDF
    • 一、概述
    • 二、知识表示方法
      • 2.1 一阶谓词逻辑
      • 2.2 框架表示法
      • 2.3 语义网
    • 三、RDF数据模型
    • 四、RDF语法
    • 五、RDFS:添加语义
    • 六、RDF模式:语言
    • 七、将JSON文件转化为RDF
    • 八、总结

一、概述

  HTML是可编辑的网页的标准语言,它用于传递有关面向人类的文档的结构的信息,包括语法、数据模型和语义三个部分。而对于语义网,需要其数据模型能够被各种应用所使用,而且要领域无关。
  RDF(资源描述框架)恰好提供了这样一个灵活并且领域无关的数据模型。其基础构件是一个实体-属性-取值三元组,称为声明。用户必须定义他们在这些声明中使用的术语,利用RDF模式,即RDFS,允许用户精确定义他们的词汇表。
  因此,RDF可以视为下面几部分的总称:

  • RDF——数据模型
  • RDFS——语义
  • Turtle/RDFa/RDF-XML——语法

二、知识表示方法

2.1 一阶谓词逻辑

  谓词逻辑(Lp)可以对原子命题做进一步分析,分析出其中的个体词、谓词、量词,研究它们的形式结构的逻辑关系、正确的推理形式和规则。

  一阶逻辑之所以是“一阶”的,是因为它所包含的谓词逻辑是一阶的。谓词就是表示对象属性的语词,对象的属性具有层次。所谓一阶谓词就是指刻画个体属性的谓词,如“大于”等只适用于个体概念,而“传递性”等用来描述“大于”这种谓词的谓词就是高阶谓词了,刻画的是属性的属性。

  一阶谓词逻辑具有自然性、接近自然语言、容易接受、严密性、易于转化为计算机内部形式等优点,但同时也具有无法表示不确定性知识、难以表示启发性知识及元知识、组合爆炸、效率低等缺点。

2.2 框架表示法

  框架表示法是明斯基于1975年提出来的,其最突出的特点是善于表示结构性知识,能够把知识的内部结构关系以及知识之间的特殊关系表示出来,并把与某个实体或实体集的相关特性都集中在一起。

  框架是一种描述固定情况的数据结构,一般可以把框架看成是一个节点和关系组成的网络。框架的最高层次是固定的,并且它描述对于假定情况总是正确的事物,在框架的较低层次上有许多终端,被称为槽(Slots)。在槽中填入具体值,就可以得到一个描述具体事务的框架,每一个槽都可以有一些附加说明,被称为侧面(Facet),其作用是指出槽的取值范围和求值方法等。
知识表示:RDF_第1张图片

  框架表示法具有以下优点:

  • 框架系统的数据结构和问题求解过程与人类的思维和问题求解过程相似;
  • 框架结构表达能力强,层次结构丰富,提供了有效的组织知识的手段,只要对其中某些细节作进一步描述,就可以将其扩充为另外一些框架;
  • 可以利用过去获得的知识对未来的情况进行预测,而实际上这种预测非常接近人的知识规律,因此可以通过框架来认识某一类事物,也可以通过一些列实例来修正框架对某些事物的不完整描述(填充空的框架,修改默认值)。

2.3 语义网

  语义网络是一种表达能力强而且灵活的知识表示方法。语义网络利用节点和带标记的边结构的有向图描述事件、概念、状况、动作及客体之间的关系。

  采用语义网络表示的知识库的特征是利用带标记的有向图描述可能事件。结点表示客体、客体性质、概念、事件、状况和动作,带标记的边描述客体之间的关系。

  语义网络的基本形式为 ( H e a d _ n o d e , R e l a t i o n , T a i l _ n o d e ) (Head\_node,Relation,Tail\_node) (Head_node,Relation,Tail_node)。节点表示各种事物、概念、情况、属性、动作、状态等,每个节点可以带有若干属性,一般用框架或元组表示;弧表示各种语义联系,指明它所连接的节点间某种语义关系。节点和弧都必须带有标示,来方便区分不同对象以及对象间各种不同的语义联系。语义网本质上是将逻辑运算符和逻辑项映射到了图中的元素。

  语义网络具有以下优点:

  • 把各个节点之间的联系以明确、简洁的方式表示出来;
  • 着重强调事物间的语义联系,符合人们表达事物间的关系;
  • 具有广泛的表示范围和强大的表示能力;
  • 把事物的属性以及事物间的各种语义联系显示地表示出来,是一种结构化的知识表示法;

三、RDF数据模型

  RDF中的基本概念包括资源、属性、声明和图。

  资源

  资源是一个对象,每一个资源都有一个唯一的URI,从而能够避免歧义,解决一词多义的问题。使用URI不必能访问到一个资源,但是使用可以解引用的URL既能获得资源本身,还能够获取其进一步描述。

  属性

  属性是一类特殊的资源,描述了资源之间的关系。属性也由URI标识,也可以解引用属性的URL来找到它们的描述。

  声明

  声明断言了资源的属性,是一个实体-属性-取值的三元组。属性值是一个资源或者文字(literal)。文字是原子值,如数字、字符串或日期。常使用主语一词来指称三元组里的实体,而使用宾语来指称其取值。

  

  可以使用图形化的方式来书写相同的声明,为了提高可读性没用URI。带标签的节点通过带标签的边连接。边是有向的,从声明的主语到声明的宾语,声明的属性被标记在边上。节点上的标签时主语和宾语的标识符。图强调了RDF是一个以图为中心的数据模型。
知识表示:RDF_第2张图片

  可以采用链接数据原则(Linked Data principle)重用信息:

  • 使用URL作为事物名称
  • 利用HTTP URI查询
  • 查询到URI后使用RDF提供有用信息
  • 包含到其它URI的链接

  指向声明和图

  RDF提供了两种实现机制:

  • 具体化(reification):引入一个额外的对象,并将它和原来声明中的三个部分通过属性subject、predicate、object关联。这种方式的代价比较高。
  • 命名图:一个显式的标识符被赋予一个声明和声明集合。一个命名图允许圈出一个 RDF声明的集合并为这些声明提供一个标识符。
    知识表示:RDF_第3张图片

  处理更丰富的谓语

  将三元组 ( x , P , y ) (x,P,y) (x,P,y)看作逻辑公式 P ( x , y ) P(x,y) P(x,y)。RDF只提供二元谓词,可以将多元谓语通过添加新的额外资源转化为二元谓词组。

四、RDF语法

  Tutle

  Turtle( Terse RDF Triple Language ) 是一种基于文本的RDF语法。URL包含在尖括号中。一个声明的主语、属性和宾语依次出现,由句号结尾。

  • 文字(literal):将值写在引号中,并附上值的数据类型
  • 缩写:引入@prefix语法来定义命名空间的替代形式。主语重复使用在一个声明的结尾处使用一个分号,主语谓语重复使用可以添加逗号。
  • 命名图:Trig 是 Turtle 的一个扩展,将一组想要的声明用’ { } \{\} {}'括起来并赋予这组声明一个URL。

  RDF/XML

  RDF/XML是RDF在XML语言中的编码。允许RDF被已有XML处理工具使用。


<rdf:RDF xmlns:dbpedia-owl="http://dbpedia.org/ontology/"
    xmlns:dbpedia="http://dbpedia.org/resource/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:swp="http://www.semanticwebprimer.org/ontology/apartments.ttl#">
<rdf:Description
rdf:about="http://www.semanticwebprimer.org/ontology/apartments.ttl#BaronWayAppartment">
    <swp:hasNumberOfBedrooms
    rdf:datatype="http:www.w3.org/2001/XMLSchema#integer">
        3
    <swp:hasNumberOfBedrooms>
rdf:Description>

  RDFa

  RDFa用来简化RDF描述和标注HTML网页。RDFa在HTML标签的属性(attribute)中嵌入RDF。

<html xmlns:dbpedia="http://dbpedia.org/resource/"
    xmlns:dbpediaowl="http://dbpedia.org/ontology/"
    xmlns:swp="http://www.semanticwebprimer.org/ontology/apartments.ttl#"
    xmlns:geo="http://www.geonames.org/ontology#">
<body>
<H1>Baron Way Flat For SaleH1>
The Baron Way Flat has <span property="swp:hasNumberOfBedrooms">3span> bedrooms and is located in the family friendly <span rel="swp:isPartOf" resource="[swp:BaronWayBuilding]">Baron Way Buildingspan> ···

五、RDFS:添加语义

  RDF既不假设与任何特定应用领域有关,也不定义任何领域的语义。用户需要通过RDF模式中定义的一组基本的领域无关的结构来定义其词汇表的含义。

  类和属性

  为了描述特定的领域,除了需要个体对象外,还有类,它定义了对象的类型。一个类可以视为一个元素的集合。RDF通过使用一个特殊属性rdf:type来定义实例和类之间的联系。类可以施加限制来约束在一个RDF文档中使用模式可以声明什么。

  类层次和继承

  一个类可以是另一个类的子类,也可以是另一个类的超类,还可以继承。RDF模式不要求所有的类形成一个严格的层次结构,即不一定是一棵树。
知识表示:RDF_第4张图片

  属性层次

  对某个属性 P P P Q Q Q的子属性,仅当 P ( x , y ) P(x,y) P(x,y)成立时 Q ( x , y ) Q(x,y) Q(x,y)总成立。

  RDF和RDFS的分层对比

  下图中,方块是属性,虚线以上的圆圈是类,而虚线以下的圆圈是实例。
知识表示:RDF_第5张图片

六、RDF模式:语言

  RDF模式提供建模原语来表达信息,使用资源和属性定义。

  核心类

  • rdfs:Resource,所有资源的类
  • rdfs:Class,所有类的类
  • rdfs:Literal,所有文字(字符串)的类。
  • rdf:Property,所有属性的类。
  • rdf:Statement,所有具体化声明的类。

  联系属性

  • rdf:type,将一个资源关联到它的类。该资源被声明为该类的一个实例。
  • rdfs:subClassOf,将一个类关联到它的超类。一个类的所有实例都是它的超类的实例。
  • rdfs:subPropertyOf,将一个属性关联到它超属性中的一个。

  限制属性

  • rdfs:domain,指定一个属性 P P P的定义域,声明任何拥有某个给定属性的资源是定义域类的一个实例。
  • rdfs:range,指定一个属性 P P P的值域,声明一个属性的取值是值域类的实例。

  具体化属性

  • rdf:subject,将一个具体化声明关联到它的主语。
  • rdf:predicate,将一个具体化声明关联到它的谓语。
  • rdf:object,将一个具体化属性关联到它的宾语。

  容器类

  • rdf:Bag,包的类
  • rdf:Seq,序列的类。
  • rdf:Alt,选择的类。
  • rdfs:Container,所有容器类的超类,包括前面的3种。

  效用属性

  • rdfs:seeAlso,将一个资源关联到另一个解释它的资源。
  • rdfs:isDefinedBy,rdfs:seeAlso的子属性,将一个资源关联到它的定义之处,一般是RDF模式。
  • rdfs:comment,注释,一般是长的文本,可以与一个资源关联。
  • rdfs:label,讲一个人类友好的标签(名字)与一个资源相关联。

七、将JSON文件转化为RDF

  Python提供了RDF的API:rdflib库,可以将JSON格式(或者其它文本转化为dict)的数据信息构造为RDF模型。

  首先读取json格式的数据,存入data变量中。

with open("json/orrigin_data.json", "rb") as jsonfile:
    data = json.load(jsonfile)

  通过rdflib构造Graph模型,并将json数据写入到模型中,最后用.rdf格式的文件存储。这个库所采用的RDF表示方式为RDF/XML。

mygraph = rdflib.Graph()
base_url = data["@context"].values()
print(base_url)

subdata = data["@graph"]
for item in subdata:
    s = rdflib.URIRef(base_url + item['name'].replace(' ','-').replace('\\',''))
    for key in item:
        try:
            txt = item[key]
            p = rdflib.URIRef(base_url' + key.replace('@', ''))
            if key == '@type':
                for object in txt:
                    o = rdflib.URIRef(base_url' + object)
                    mygraph.add((s, p, o))
            elif key == 'address':
                o = rdflib.URIRef(base_url' + txt["addressCountry"].replace(' ','-'))
                mygraph.add((s, p, o))

            elif key == 'geo':
                o = rdflib.URIRef(base_url' + txt["latitude"])
                mygraph.add((s, p, o))
                o = rdflib.URIRef(base_url' + txt["longitude"])
                mygraph.add((s, p, o))

        except Exception as e:
            pass

  构造完成后,将原始的json格式的数据以RDF/XML的形式呈现,并且添加了www.w3.org的命名空间。


<rdf:RDF
   xmlns:ns1="http://www.openkg.cn/dataset/microeconomy/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
  <rdf:Description rdf:about="http://cnschema.org/Bata">
    <ns1:geo rdf:resource="http://www.openkg.cn/dataset/microeconomy/1.905469"/>
    <ns1:type rdf:resource="http://www.openkg.cn/dataset/microeconomy/Airport"/>
    <ns1:address rdf:resource="http://www.openkg.cn/dataset/microeconomy/Equatorial-Guinea"/>
    <ns1:type rdf:resource="http://www.openkg.cn/dataset/microeconomy/CivicStructure"/>
    <ns1:geo rdf:resource="http://www.openkg.cn/dataset/microeconomy/9.805681"/>
    <ns1:type rdf:resource="http://www.openkg.cn/dataset/microeconomy/Place"/>
    <ns1:type rdf:resource="http://www.openkg.cn/dataset/microeconomy/Thing"/>
  rdf:Description>

八、总结

  • RDF为表示和处理及其可理解的数据提供了基础。
  • RDF使用基于图的数据模型。它的核心概念包括资源、属性、声明和图。一个声明是一个资源-属性-值的三元组。
  • RDF拥有三种标准语法(Turtle、RDF/XML和RDFa)来支持语法层的互操作性。
  • RDF使用分布式思想,允许递增式的构建知识,以及知识的共享和复用。
  • RDF是领域无关的,RDF模式提供了一种描述特定领域的机制。
  • RDF模式是一种基本的本体语言。它提供一组具有固定含义的建模原语。RDF模式的核心概念有类、子类关系、属性、子属性关系,以及定义域和值域的限制。

你可能感兴趣的:(知识表示:RDF)