一个用OWL-S组装Web服务的例子

OWL-S可以用来描述Web服务,这个帖子将介绍一个非常简单的例子,也许对理解Web服务的组装有些作用。这个服务是对已有Web服务进行组装和执行,所以你并不需要发布自己的Web服务。你需要安装ProtegeOWL-S Editor插件,我用的版本前者是3.1 beta build 191,后者是build 15,它们在一起运行得还不错。

所用的Web服务在http://www.bs-byg.dk/hashclass.wsdl,它包含两个方法:HashString和CheckHash,前者用指定编码方式(MD5、SHA1等等)对指定字符串编码,后者根据指定编码方式检查一个字符串(HashString)是否是另一个字符串(OriginString)的编码结果。我们将把这两个方法组装成一个服务,对输入的编码方式和待编码字符串先进行编码,然后检查编码的结果是否正确,如果正确返回true,否则返回false。下面是组装步骤,完整的工程在这里下载

1、确认你的OWL-S Editor已经安装到Protege里,启动Protege,新建一个owl文件类型的工程,在菜单project->config里勾选上owls选项,按确定后Protege的主界面会多出一个OWL-S Editor页。

2、转到OWL-S Editor页,按左上角的WSDL按钮,在弹出的对话框里输入Web服务的地址http://www.bs-byg.dk/hashclass.wsdl,然后按回车,过一会儿在对话框里会显示出这个Web服务的信息,左边是Operations列表。

file
图1 用来导入WSDL的对话框

3、因为每次只能import一个Operation,所以先选择HashString,然后按右下方的Import按钮,这时系统会提示要把生成的owls文件(扩展名为.owl)保存在一个位置,你可以选择任何位置。

4、使用同样的方法把CheckHash方法也导入进来,这样我们就有了两个可用于组装的Web服务了。如果你愿意的话,可以单独执行看看,方法是选择一个Service,然后按绿色的执行按钮。

file
图2 导入的两个服务

5、现在开始组装它们。为此我们新建一个Service实例(按Create Service按钮)、一个Profile实例、一个CompositeProcess实例和一个WSDLGrounding实例,分别命名为myservice、myprofile、myprocess和mygrounding好了。

6、接下来把它们连接起来,首先选中myservice,把它的describedBy属性置为myprocess,presents属性置为myprofile,supports属性置为mygrounding。

7、现在对myprocess进行编辑,OWL-S Editor提供了一个可视化的编辑界面(Visual Editor),利用它可以很方便的定义CompositeProcess的各个步骤。选中myprocess,右边切换到Visual Editor,这里有一些粉红色的按钮用来定制流程。我们首先创建一个Sequence(表示按顺序执行),然后选中这个Sequence,创建两个Perform和一个Produce,每个Perform代表调用一个Web服务,而Produce的作用是在最后得到返回值。这时右边的图形应该像下面这样,因为我们尚未对Perform和Produce进行定制。

file
图3 包含三个有用节点的process图

8、在图形的Perform/Produce节点上点一下就可以修改它的属性,先来修改第一个。点一下第一个矩形节点(第一个Perform),在对话框里把process属性设置为wi1:HashStringProcess(注意:如果导入WSDL时改变了前缀,这里就不是wi1),为了方便阅读,把Name属性改为hashPerform。类似的,第二个矩形节点的process属性应该是wi2:CheckHashProcess,Name则改为checkPerform;对于唯一的Produce节点,改名为produce。现在右边的图如下所示。

file
图4 改名后的process图

9、现在从Visual Editor切换到Properties页,在这里为myprocess定义输入和输出参数。它的输入应该是wi1:HashType和wi1:Str,而输出应该是wi2:CheckHashResult,也就是说,对于我们组装出来的Web服务来说,输入是编码类型和待编码字符串,而输出是验证结果。

10、上面我们定义了myprocess拥有的参数,现在就要用到它们了。切换回Visual Editor,在树型列表里选则第一个Perform(hashPerform),把右边切换到Properties页,现在ToParameter属性里还是空白,我们要把myprocess的输入映射到这个Perform,所以按添加按钮把两个输入参数(wi1:HashType和wi1:  Str)加到ToParameter里。选中它们中的一个,可以看到右边有BindingType选项,缺省为valueSource这一项,就用它即可,在下面的FromPerform下拉框里只有一个选项TheParentPerform,选中它。在最下面的FromParameter里选择和你选择的ToParameter项一样的那个选项(wi1:HashType->wi1:HashType,wi1:Str->wi1:Str)。

file
图5 通过参数传递产生“数据流”

11、对于checkPerform,它有三个输入参数,我们希望HashType和hashPerform具有同样的值,所以它的设置和上一步里对HashType的设置一样;OriginalString的设置和上一步的Str一样;HashString属性是上一步得到的结果,所以FromPerform属性应该是hashPerform,FromParameter属性则是wi1:HashStringResult。

12、对produce的设置很简单,在ToParameter属性里加入我们要的结果wi2:CheckHashResult,FromPerform选checkPerform,FromParameter选wi2:CheckHashResult。现在,myprocess对应的process图如下所示。

file
图6 可以从图中看到服务的结构

13、对myprocess的设置到此就结束了,最困难的部分完成了,剩下的工作都很简单和显而易见。选中mygrounding,在它的hasAtomicProcessGrounding属性里加上wi1:HashStringAtomicProcessGrounding和wi2:CheckHashAtomicProcessGrounding。

14、现在myservice已经可以执行了(myprofile里还可以增加一些信息用来描述这个服务)。现在选中myservice,按下执行按钮,在弹出的对话框里HashType框填MD5,Str框填test(任意字符串都可以),然后按Execute按钮就会看到结果,当然,这个服务不论你输入什么字符串都会得到true值,原因不用我说了吧。

file
图7 执行组装后的服务

搬家前链接:https://www.cnblogs.com/bjzhanghao/archive/2005/06/12/173302.html

[翻译]什么是OWL本体

译注:本文是对文档A Practical Guide To Building OWL Ontologies Using The Protege-OWL Plugin and CO-ODE Tools Edition 1.0第三章的翻译,并省略了其中的图片。Protégé是一个斯坦福大学开发的本体编辑器,为开放源码软件,具有优秀的设计和众多的插件,是目前使用最广泛的本体编辑器之一。

什么是OWL本体

  我们使用本体(Ontology)来获取某一领域的知识,本体描述该领域的概念,以及这些概念之间的关系。目前有很多种不同的本体语言,它们各有千秋,而W3C(World Wide Web Consortium)目前的最新标准是OWL。和Protégé一样,OWL让描述各种概念成为可能,与此同时,它还提供了其他很多功能。它具有更丰富的操作符——例如与、或和非;它立足于一个不同的逻辑模型(logical model),该模型能够更好的定义概念,可以用从简单概念构造出复杂的概念,不仅如此,该模型还允许你使用推理机(reasoner)来检查本体中的陈述(statement)和定义(definition)是否一致,或者判断出哪个概念更适合于哪个概念,从而帮你维护一个正确的本体等等,当允许一个类(Class)拥有多个父类的时候,这一点至关重要。

一、三类OWL

  可以把OWL分为三个子语言:OWL-Lite、OWL-DL和OWL-Full,主要的分类依据就是它们的表达能力。其中,OWL-Lite是表达能力最弱的子语言,OWL-Full具有最强的表达能力,而OWL-DL的表达能力则在它们之间。我们可以认为OWL-DL是OWL-Lite的扩展,而OWL-Full是OWL-DL的扩展。

1.1 OWL-Lite

  从语法上来说,OWL-Lite是三个之中最简单的一个,当你的本体中类的层次结构很简单,并且只有简单的约束(constraint)时适合使用它来描述本体。例如,在需要把一个已存在的辞典(thesauri)移植到另一个差不多简单的概念层次时,OWL-Lite可以做得又快又好。

1.2 OWL-DL

  和OWL-Lite相比,OWL-DL的表达能力要丰富许多,它的基础是描述逻辑(Description Logics,即DL的由来)。描述逻辑是一阶逻辑(First Order Logic)的一个可判定的变种(译注:不一定准确,原文decidable fragment),因此可以用来进行自动推理,计算机从而可以知道本体中的分类层次,以及本体中的各种概念是否一致。

1.3 OWL-Full

  OWL-Full是OWL的三种子语言中表达能力最强的一个,适合在那些需要非常强的表达能力,而不用太关心可判定性(decidability)或是计算完全性的场合下使用。不过也正是由于表达能力太强这个原因,用OWL-Full表示的本体是不能进行自动推理的。

二、该使用哪一种子语言

  首先,要想确切的知道这三种子语言之间的区别,请参考OWL Web本体语言概要。尽管有很多因素需要考虑以决定该使用它们中的哪一个,但这里是一些最简单常用的原则。

  • 对于OWL-Lite和OWL-DL,考虑OWL-Lite提供的那些简单构造子(construct)是否足以描述你的本体,若是使用OWL-Lite,否则使用OWL-DL。
  • 对于OWL-DL和OWL-Full,考虑在你的应用中,是自动推理比较重要还是高表达能力(例如是否需要元类来建模)更重要,如果是前者,请使用OWL-DL,否则该使用OWL-Full。

  Protégé的OWL插件在编辑OWL-Lite和OWL-DL的本体时不做区分,但可以在选项里选择以OWL-DL或是OWL-Full方式编辑本体。

三、OWL本体的组成

  OWL本体的组成与Protégé提供的本体相似,基本上,只是在对组成部分的称呼有一些分别。例如OWL有个体(Individual)、属性(Property)和类(Class),而Protégé则分别称它们为实例(Instance)、槽(Slot)和类(Class)。

3.1 个体(Individual)

  个体代表(领域中)我们实际感兴趣的那些对象,Protégé和OWL有一个重要的区别就是OWL不使用唯一命名假设(Unique Name Assumption,UNA),也就是说,两个不同的名称可以对应到同一个个体。例如“伊丽莎白女王”、“女王”和“伊丽莎白?温莎”可能都对应同一个人。在OWL里,你必须明确的表达个体之间是否为相同的,否则它们可能相同也可能不相同。

  注:个体(Individual)有时也被称作实例(Instance),个体相当于类的实例。

3.2 属性(Property)

  属性是个体之间的二元关系,也就是说,属性把两个个体连接在一起。例如,属性hasSibling可能会把Matthew和Gemma这两个个体连接起来,而属性hasChild会把Peter和Matthew这两个个体连接起来;属性可以有反向属性(Inverse),例如hasOwner的反向属性是isOwnedBy;属性也可以被限制为只能拥有一个值,即所谓的函数属性(functional);属性还可以是具有传递性(transitive)或是对称的(symmetric)。

  注:这里所说的属性即Protégé中槽(Slot)的概念,在描述逻辑中它们就是角色(Role),在UML等面向对象方法中它们就是关系(Relation),而在GRAIL等形式化表达中将它们称作特性(Attribute)。

3.3 类(Class)

  OWL中的类代表一些个体的集合,OWL使用形式化(数学的)的方法精确描述出该类中成员必须具有的条件,例如,领域中全部猫的个体都属于Cat类。类可以通过继承关系组成层次结构,子类是父类中的特殊情况,例如考虑Animal和Cat这两个类,Cat可以是Animal的一个子类(即Animal是Cat的父类),这就表示了:所有的猫都是动物,所有Cat类的成员都是Animal类的成员,如果你是猫那么你也是动物,Cat类被Animal类所包含,等等。OWL-DL的一个重要特征就是父类和子类之间的(包含)关系可以被推理机自动计算出来。

  注:概念(Concept)这个词有时被用来代替类,实际上,类是概念的一个具体表现。

搬家前链接:https://www.cnblogs.com/bjzhanghao/archive/2004/12/17/78368.html