将检索到的信息解释含义和提取有用的信息,要求内容是可以被机器所理解的。一种方法就是用一种新的方法描述信息,也就是语义网。
知识管理:根据含义用概念空间组织知识; 跨文档的问答功能;规定信息的权限。
电子商务:提取价格和补充信息; 企业间信息交换。xml必须要求双方对使用的词汇表达成了共识。
个人代理: 机械公敌中的个人代理真的能实现了。
源数据:类似于xml
本体:某个概念相关的内容,多在一个domain中,由多个term(domain中的类)。 包括 term, property,值约束, 不相交描述,对象间逻辑关系的规定
OWL是对RDF进一步扩展, 通过namespace引入的rdfs,我觉得应该是 RDF Schema的定义
逻辑:需要被机器处理,则需要用网络语言表示逻辑知识和逻辑证明,使用工具是OWL 或者DAML+OIL
代理:自主和自动运作的软件。接收用户需求,在网上找到相关信息,和其他代理交流,根据用户需求和偏好做出选择,将答案交给用户,主要作用是收集信息,提供备选方案。用到的技术:使用元数据收集信息; 使用本体解释信息,和其他代理交流;用逻辑处理推导结论
和人工智能的对比:人工智能是建立类人的智能,而语义网只是协作人类处理网上事物,要求比人工智能低
相互关系:XML——》RDF——》OWL——》逻辑——》证明——》信任
html不包含结构信息,即文档成分及其相互关系的信息,XML使用标签定义成分,使用嵌套定义相互关系
xml 还可定义约束,如年必须大于0
要想在万维网上交流,大家必须说同样的话,所以各种标准组织基于xml为各个领域定义了各种专用的xml词汇,rdf就是其中一种。
描述xml结构有DTD和xml Schema 两种方式
定于 element及关系;property(名称,类型和值);支持递归定义,正在慢慢淡出;
好处:
基于xml 自身语法
提供了schma重用和简化的可能:扩展已有模式建立新模式
提供一套数据类型集
组成:
元素类型 <element name="" /> 定义 type, name ,minOccurs, maxOccurs
属性类型 <attribute name="" /> 定义 type use
数据类型 数字 字符串 日期和时间 用户自定义数据类型(继承和组合已有类型)
数据类型的限制: use type对包含的属性做限制
使用xslt 完成 xml文件转换为html 或者另一种格式的xml
xml 没有提供表示数据语义的手段
rdf 是一个三元组的statement, rdfs定义了rdf用到的词汇,什么属性作用于什么对象,属性取什么值,描述对象间的关系。
rdf是领域独立的,可以在其基础上为特定领域定义内容,如ndl
resource: 就是对象,使用uri进行标示
property 是特殊的资源,表达resource间关系
statement: 三元组组成
可以通过uri指代陈述,建立多个陈述间的关系
数据类型: 如果要确定 “27”是字符串还是文本,需要指定其数据类型,允许外部定义的任意数据类型模式,但用的最多的是 xml schema中定义的。
1. 对机器友好,对人不友好
2. 属性可以是resource。增加了复杂性
3. 不支持多个谓词,只能通过递归进行模拟
rdf:about 指定主语
rdf: datatype 可以指定数据类型
rdf:resource 对已定义对象的引用
rdf:id 类似于rdf:about ,需要加 #
rdf: type 用于引入某种结构
几种变形: 1. element中无属性,只有text,可以作为父节点的属性; 2. rdf:type定义的resource,可以使用 type定义的名称替换rdf:description
<rdf:Description rdf:about="http://geni-orca.renci.org/owl/095ccaa6-1bf7-41d9-9b3f-c15578d3bf6c#TermDuration">
<time:days rdf:datatype="http://www.w3.org/2001/XMLSchema#decimal">1</time:days>
<rdf:type rdf:resource="http://www.w3.org/2006/time#DurationDescription"/>
</rdf:Description>
其中object 可以是一个 resource 。也可以是常量
<foaf:Person rdf:ID="#Ryan" />
<rdf:Description rdf:about="#Ryan" >
<rdf:type rdf:resource="http://xmlns.com/foaf/0/1/Person ">
</rdf:Description>
是等价的,有一个资源名称是 本地url#Ryan, 类型是 foaf:Person
rdf:bag: 集合内元素无序且不唯一
rdf: Seq : 元素有序且不唯一
rdf:Alt : 多选一
rdf: _n (rdf:li): 代表元素
collection : 表示只含有特定成员的 groups,使用 rdf:List (代表集合) rdf:first (第一个) rdf:rest 和 rdf:nil (集合结尾); 使用rdf:parseType="collection" 来定义。
类和实例: 使用rdf:type class 规定instance和class 的关系
类层次结构和继承: rdfs:subClassOf
属性层次结构: 属性是全局定义的,不是在类中封装,也可定义属性的层次关系 , 使用 rdfs:subPropertyOf 和Property
rdfs 是一个RDF文档,并且基于XML的RDF语法
rdfs:Resource: 定义资源
rdfs:Class: 定义类, 代表某一类型的资源
rdfs:Literal : 定义文字类
rdfs:Property
rdfs:Statement
rdf:type : 将资源和所属的类联系起来,将该资源申明为所属类的一个实例
rdfs:subClassOf: 把类和父类想连接,一个类可以是多个类的子类
<owl:Class rdf:ID="WineGrape">
<rdfs:subClassOf rdf:resource="&food;Grape" />rdfs:subPropertyOf: 把属性和它的父属性相连接
rdfs:domain : 规定subject 所属的类
rdfs: range: 规定三元组中 object 所属的类
<rdf:Property rdf:ID="电话号码" >
<rdfs:domain rdf:Resource="#教师" />
<rdfs:range rdf:Resource="$rdf:Lieral " />
</rdf:Property>
rdfs:ConstraintResource: 所有约束的类
rdfs:ConstraintProperty : 所有定义约束的属性
rdf:subject rdf:predicate rdf:object
rdf:Bag rdf:Seq rdf:Alt rdf:Container(所有容器的父类)
rdfs:seeAlso: 把资源和解释它的另一个资源联系起来
rdfs:isDefinedBy: 把资源和定义的位置联系起来
rdfs:comment
rdfs:label : 定义一个用户友好的名字,作为图形化节点的名称, <rdfs:label>内容</rdfs:label>
rdf和rdfs的 xml文件,略
主要是数学推理,作为机器进行推理的基础
三元组和其上定义的规则,用于推理,比3.7中数学推理更加简单
基本查询
class 检索所有类
property 检索所有属性
具体的类,如 course 检索该类的所有实例, ^course 检索不包括继承类的实例
select from where 查询
select X,Y from {X} phone {Y} 检索属性是phone的所有 subject和object、
select X, Y from lecture{X} . phone{Y } 获取lecture的所有实例,作为 phone的subject,两次搜索通过.链接
模式查询
检索 实例及所属类或属性,通过 @ 和 $得到所属的property 和 class
使用SPARQL查询
endpoint:是接收和处理SPARQL查询的服务
在rdf基础上,对建模原语功能增强,owl目标是成为语义网的公认标准本体语言
属性的局部辖域: rdfs:range是针对property的所有 subject,不能针对特定的subject进一步细化,如牛吃植物,其他动物吃肉
类不相交性: 如男和女不想交
类的布尔组合: 定义类的 并 交 补,产生新的类
基数约束: 属性取值不同时的约束,如 我有一个父亲,我有好几个兄弟
属性的特殊性质: 属性的传递性、唯一性和逆属性等
full语法完全兼容rdf;表达能力过于强大,以至于是不可判定的
dl 保证高效率的推理,缺点是不与RDF完全兼容
lite: 对dl进一步限制,优点是对人容易掌握,开发工具容易实现; 缺点是表达能力有限
owl:Class 定义类,其中包括
owl:disjointWith 规定与某个resource不想交
owl:equivalentClass 表示类等价
预定义的两个类: owl:Thing(最一般的类)和 owl:Nothing (空类)
类和个体:
定义类:
<owl:Class rdf:about="&topology;NetworkDomain"/>
<owl:Class rdf:ID="Region"/>
引用类:
<rdf:about="#Region" 来扩展对一个资源的定义
rdf:resource="#Region" 如作为 object
定义实例:
<owl:NamedIndividual rdf:about="&vmsite;Domain">
<rdf:type rdf:resource="&topology;NetworkDomain"/>
</owl:NamedIndividual>
<rdf:description rdf:ID="123 ">
<rdf:type rdf:resource="&topology;NetworkDomain"/>
</rdf:description>
<topology:NetworkDomain rdf:ID="#123" />
<Region rdf:ID="CentralCoastRegion" />
--------------------------------------------------
<owl:Thing rdf:ID="CentralCoastRegion" />
<owl:Thing rdf:about="#CentralCoastRegion">
<rdf:type rdf:resource="#Region"/>
</owl:Thing>
对象属性:将两个对象相互关联 owl:ObjectProperty
数据类型属性:对象和数据类型值相互关联 owl:DataProperty
数据类型属性的值域范围是RDF文字(RDFS:Literal——常量值构成的类)或者是XML Schema数据类型中定义的那些简单类型(simple types)。
OWL使用XML Schema内嵌数据类型中的大部分。下列数据类型是推荐在OWL中使用的:
xsd:string xsd:normalizedString xsd:boolean
xsd:decimal xsd:float xsd:double
xsd:integer xsd:nonNegativeInteger xsd:positiveInteger
xsd:nonPositiveInteger xsd:negativeInteger xsd:int
xsd:short xsd:byte xsd:unsignedLong
xsd:unsignedInt xsd:unsignedShort xsd:unsignedByte
xsd:hexBinary xsd:base64Binary xsd:dateTime
xsd:time xsd:date xsd:gYearMonth
xsd:gYear xsd:gMonthDay xsd:gDay
xsd:gMonth xsd:anyURI xsd:token
xsd:language xsd:NMTOKEN xsd:Name
xsd:NCName xsd:long
逆属性: owl:inverseOf
等价属性: owl:equivalentProperty
实例:
根据 propery,object(subject)约定剩下的 subject(object),使用 owl:Restriction和rdfs:subClassOf 对已有类进行约束,生成匿名类
使用 owl:allValueFrom hasValue someValueFrom 定义属性的取值范围;使用 minCardinality 和maxCardinality cardinality 定义基数约束
传递性: owl:TransitiveProperty
对称性: owl:SymmetricProperty
函数性: owl:FunctionalProperty 不同的subject的属性只能取不同的object
逆函数性: owl:InverseFunctinalProperty 特定object的属性只能取不同的object
并: owl:UnionOf 交: owl:intersectionOf 不相交 owl:disjointWith
owl:oneOf
使用 owl:differentFrom 和 owl:distinctMembers 陈述个体不相等
见owl参考文档
可用的工具
1. rdf 的验证和解析工具
rdf有多重表现方式,如 xml triplet graph ,三种表现方式中,graph应该是最直观,xml是最要命的,不过咱们系统中得到的文件大部分是xml格式的,可以使用 rdf在线验证器 将其转换为 graph 和triplet 格式
网址是: http://www.w3.org/RDF/Validator/
将rdf 文件内容粘贴到 textarea中, 选择解析的格式,通常选 【triples and graph】 ,点击parse rdf 按钮,完成解析如下
2. SQARQL 验证
另一个我们可能会用到的是 SQARQL (rdf环境中的sql语言),最好是能有一个工具,可以对 特定的rdf 文件执行 SQARQL查询,这种工具可以有,非常幸运的是我已经把他找到了
jena fuseki-server 就是传说中的这类工具,还有其他的如openlink rdf exploer等,不过我觉得这个最好用
1) 下载并部署
想了解的可以参考网站 http://jena.apache.org/documentation/serving_data/index.html
2) 上传rdf文件
建议先在 第一步中验证 rdf文件没有问题,再执行此处步骤
选择 controll panel ,进入页面 ,点击【select】,进入页面,滚动条到页面下部
上传文件,提示如下: Triples = 66 类似代表成功。
3) 执行 SPARQL 查询
回退到首页
在 textarea 中输入 SPARQL 语句
output中选择格式,我选择了text ,因为JSON需要下载
点击 【Get Results】获取查询结果,如下图
常用的属性定义有:
objectProperty 定义 resource之间关系
datatypeProperty 定义 resource和literal 之间的关系
rdfs:domain 和rdfs:range 定义subject 和object
rdfs:subPropertyOf 定义属性间关系,查询管用
rdfs:label 定义简单的文本标签
属性实例、如何在rdf中表示,jena如何实现
省份:
特征: datatypeProperty; 值为两个大写字母; subject约定为站点
rdf中属性定义:
<owl:Class rdf:about="#orcaNode"/>
<owl:DatatypeProperty rdf:about="#province" >
<rdfs:domain rdf:resource="#orcaNode" />
</owl:DatatypeProperty>
rdf中属性赋值:
<cstnet:orcaNode rdf:ID="site1">
<cstnet:province>BJ</cstnet:province>
</cstnet:orcaNode>
jena中:
状态:
枚举值 对应设计文档中的红绿灯