实现语义网的四个关键技术:
Explicit Metadata,元数据
Ontologies,本体
Logic and Inference,逻辑与推理
Agents,代理
元数据:
描述数据的数据,主要用于描述数据的属性信息。就是一个个的键值对,其中键是数据的属性,值时候数据的内容。
本体:
可以理解为Class类,本体描述了一个类的属性以及不同类之间的关系。多个相关的类之间就可以构成一个完整的知识图谱。
本体相关的概念有:Term(类名),Relationship(Term之间的关系),Properties(Term的属性),Value Restriction,Disjointness Statement,Logical relationships between objects
本体为某一领域提供了一种可以通用的数据格式,元数据负责填充数据内容。
实现本体的最常用规则:RDF
RDF(RDF (Resource Description Framework)是一种数据组织结构,并不是某种特定的语言。
OWL(Ontology Web Language)则是一种基于RDF规则的语言。
逻辑推理:
逻辑推理可以发现本体之间的隐藏关系。并且可以给出一种可重复的推理过程。
XML提供最基础的语法结构,RDF提供数据的组织规则,OWL利用多种多样的关键词提供更强的描述能力。逻辑推导可以进一步丰富本体所提供的内容,
XML中,一个element的属性可以用来描述一个本体类的属性,element中的其他element可以用来表示本体类之间的包含关系。
XML的两种写法:
<element1 attribute1=111/>
<element>
<attribute2>222<arrtibute2>
</element>
描述elements之前,还需要一个Prolog(序言)用来声明当前XML文件的版本,编码等信息,常见例如:
<?xml version="1.0" encoding="UTF16"?>
XML中的注释以格式为:
<!-- description -->
一个标准的XML文件最外层只能是一个元素,称为根元素(root element)。
标准的XML文件中各个element和属性的名称必须唯一,但是各个不同的element之间可能需要相同类型的变量,例如name。此时可以使用一个前缀(prefix)来避免重复。
<prefix0:element>
<prefix1:element1 prefix1:name="name1">
<prefix2:element2 prefix2:name="name2">
</prefix0:element>
在实际应用中,由于前缀也有可能重复,因此xml中通常使用URI做前缀,但由于URI通常长度都很长,编写十分不便,因此XML提供了命名空间的功能。一个element可以定义一个自己的命名空间,命名空间相当于为URI起了一个别名:
<book xmlns="http://www.atguigu.com/xml/b"
xmlns:a="http://www.atguigu.com/xml/a">
<name>name in b</name>
<a:name>name in a<name>
</book>
其中xmlns是XML Namespace的缩写,代表该属性表示的是命名空间。在此声明之后,前缀a就可以用来表示前缀http://www.atguigu.com/xml/a。而xmlns后没有接冒号的即为默认前缀,默认前缀只能有一个。xmlns的作用相当于java中的包名。
命名空间中定义的应该是可重用资源,类似于头文件。
RDF
RDF相关的三个概念:
Resource(资源):资源是想要描述的事物,在RDF中,每个资源都有一个唯一的URI与之对应。
Properties(属性):属性关系,可以用来连接两个Resource。
Statements(陈述):Statements是一个由object-attribute-value构成的三元组,该三元组与一个句子的主谓宾相对应。
object是一个resource,attribute是一个property,而value可以是另一个resource或者一个原子级的字符串。
RDF XML文件
使用XML描述RDF时,root element需要是rdf:RDF,其中rdf是http://www.w3.org/1999/02/22 rdf syntax ns#的简称。
RDF文件的每一个element都应该是rdf:Description,每个Description可以有一个about或ID属性,about属性表示该Description在别处被定义了,ID表示该Description在该处被定义。
rdf:datatype标签定义了一个资源的数据类型。
rdf:resource标签表示该当前element与某一已存在的相同。
RDF有两条化简原则,一是如果一个element没有内置element,可以将其简化为一个属性。二是如果一个rdf:Description有一条rdf:type类型的element,可以使用rdf:type中声明的名称来替换rdf:Description。
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22 rdf syntax ns#">
<rdf:Description rdf:about="id1"></rdf:Description>
<rdf:Description rdf:ID="id2"></rdf:Description>
</rdf:RDF>
rdf集合:
rdf中有三种集合,分别是rdf:Bag, rdf:Seq以及rdf:Alt,其中rdf:Bag是无序集合,rdf:Seq表示有序集合,rdf:Alt表示集合中任选其一。rdf:Bag以及rdf:Seq集合中的元素需要使用rdf:_n作为标签,而rdf:Alt中需要使用rdf:li标签。
此外,在属性中使用rdf:parseType="Collection"同样可以表示集合,此时集合中的元素仍然使用rdf:Description标签。
<uni:lecturer rdf:ID =" uni:name Grigoris Antoniou uni:title Professor">
<uni:coursesTaught>
<rdf:Bag>
<rdf:_1 rdf:resource ="#CIT111">
<rdf:_2 rdf:resource ="#CIT222">
</rdf:Bag>
</uni:coursesTaught>
<rdf:Description rdf:about ="CIT3333#">
<uni:isTaughtBy rdf:parseType ="Collection">
<rdf:Description rdf:about ="#9111">
<rdf:Description rdf:about ="#9222">
</uni:isTaughtBy>
</rdf:Description>
</uni:lecturer>
如果我们想要在之后继续使用一个Statement中的内容,我们可以使用rdf:Statement标签来替换rdf:Description标签。rdf:Statement中需要包含三个element,分别是rdf:subject, rdf:predicate以及rdf:object。三个标签分别对应一个句子的主语、谓语以及宾语。即resource、attribute、value。
<?xml version="1.0">
<rdf:RDF xmlns:rdf ="http://www.w3.org/1999/02/22 rdf syntax ns#"
xmlns:dc="http://www.purl.org/dc/elements/"
xmlns:uni ="http://www.mydomain.org/unins/">
<rdf:Statement rdf:ID ="statement1">
<rdf:subject rdf:resource ="#CIT000"/>
<rdf:predicate rdf:resource =" www.mydomain.org/unins#name"/>
<rdf:object >Grigoris<rdf:object/>
</rdf:Statement>
</rdf:RDF >