-- 作者:csdncannon
-- 发布时间:4/26/2006 12:58:00 PM
-- 自己写了一点WSDL-S的笔记,欢迎大家能够指正、讨论
全文下载:
 为方面大家浏览,以下粘贴出部分正文。 WSDL-S笔记 花两天时间初步看了下WSDL-S,以及IBM发布的一套工具。总体感觉他们对 WSDL的的兼容做得很好,比较照顾工业界的感受。但是对于WSDL的语义扩展很 有限,不过个人感觉效果还是非常好的,还是很让人眼前一亮的。 遗憾也是有的:目前还没有看到他们的WSDL-S的正式的规范,只有一个 叫”Technical Note”的东东,在University of Georgia(http://lsdis.cs. uga.edu/projects/meteor-s/wsdl-s/)和IBM alphaworks(http://www. alpha works.ibm.com/ tech/wssem)上只找到一些samples,对于PE中的expression 属性是如何表达的、具体的匹配算法、Mediations如何生成、推理的具体过程、 如何进行服务组装来得到新的匹配结果等等问题,都没有回答,估计他们也是在 探索中的。 WSDL-S的总体思想 1. 构建在目前的Web服务标准之上: Web服务随着SOA的发展,它的相关标准在工业界也已经被普遍采用,因此 WSDL-S采取了对WSDL向上兼容的方式,使得工业界更容易接纳它。 2. 可以采用不同的语义表达语言来对Web服务进行语义标注: 语义表达语言可以是OWL、WSMO甚至UML。这使得语义标注机制和具体的语 义表达语言分离开来,用户有更多的选择。 3. 支持对Web服务的XML SCHEMA的数据类型进行语义标注: 先来回顾下WSDL2.0,规范中有如下一些XML element:interface、 operation、message、binding、service和endpoint。其中interface、 operation、message是用来定义服务接口的,而binding、service、endpoint 是用来定义具体服务实现的。WSDL-S采取了在前三者中插入一些扩展的XML element和attribute来达到语义标注的效果,而被标注对象都是XML SCHEMA 中的一些构件。 4. 在Web服务的XML SCHEMA类型和本体(或UML)之间提供丰富的映射机制。比 如某服务的输入和该领域本体的某概念对应,则这种映射关系既可以通过 URI来直接映射到本体中的概念,也可以通过RDF、OWL、XSLT、XQuery等语 言的snippet来表达(后一种方式在IBM发布的例子中并没有看到对应的用 法)。 WSDL-S的IOPE 1. Input && Output 在Operation的Input和Output所用到的types的定义中,对xs:element和xs:complexType加入了wssem:modelReference和wssem:schemaMapping这两个属性,这两个属性都是optional的。其中xs= http://www.w3.org/2001/XMLSchema , wssem= http://www.ibm.com/xmlns/WebServices/WSSemantics . 在xs:element加入wssem:modelReference示例如下: <types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace=" http://www.ourdemos.com/purchaseorder/wsdl/PurchaseOrder/" xmlns="http://www.ourdemos.com/purchaseorder/wsdl/PurchaseOrder/"> <!—Semantic annotations for these complex types are given in their respective type definitions> <xs:complexType name="processPurchaseOrderRequest"> <xs:all> <xs:element name="billingInfo" type="xs:POBilling"/> <xs:element name="orderItem" type="xs:POItem"/> </xs:all> </xs:complexType> <!—Semantic annotation is added directly to this leaf element /> <xs:element name= "processPurchaseOrderResponse" type="xs:string wssem:modelReference="POOntology#OrderConfirmation"/> </xs:schema> </types> 此处的wssem:modelReference这个Attribute表明了processPurchaseOrderResponse这个xs:element级别的类型映射到POOntology这个本体中的OrderConfirmation这个概念。同样也可以在xs:complexType中加入wssem:modelReference这个属性,只不过对于类型标注的层次更高一些。此处注意,如果某xs:element有两次语义标注,高层次的complexType处标注的语义会覆盖低层次的element处标注的语义。 在xs:complexType加入wssem:modelReference示例如下: <?xml version="1.0" encoding="UTF-8"?> <schema attributeFormDefault="qualified" elementFormDefault="unqualified" targetNamespace="http://www.ourdemos.com/purchaseorder/" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd1=http://www.ourdemos.com/purchaseorder/ xmlns:wssem="http://www.ibm.com/xmlns/WebServices/WSSemantics" xmlns:POOntology="http://www.ibm.com/ontologies/PurchaseOrder.owl"> <include schemaLocation="POAddress.xsd"/> <include schemaLocation="Account.xsd"/> <complexType name="POBilling" wssem:modelReference=”POOntology#Billing”> <all> <element name="shipToAddress" type="xsd1:POAddress" /> <element name="billToAddress" type="xsd1:POAddress" /> <element name="accountID" type="xsd1:string />" </all> </complexType> </schema> 关于wssem:schemaMapping属性的讨论只在Technical Note的附录中谈到了,我没有具体看过,但是IBM发布的Samples中没有这方面的例子。欢迎大家补充! 在加入wssem:schemaMapping属性的示例: <?xml version="1.0" encoding="UTF-8"?> <schema attributeFormDefault="qualified" elementFormDefault="unqualified" targetNamespace="http://www.ourdemos.com/purchaseorder/" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd1=”http://www.ourdemos.com/purchaseorder/” xmlns:wssem="http://www.ibm.com/xmlns/WebServices/WSSemantics" xmlns:POOntology="http://www.ibm.com/ontologies/PurchaseOrder.owl"> <import location="WSSemantics.xsd" namespace=" http://www.ibm.com/xmlns/WebServices/WSSemantics/"/> <complexType name="POAddress" wssem:schemaMapping=”http://www.ibm.com/schemaMapping/POAddress.xsl”> <all> <element name="recipientInstName" type="string" /> <element name="streetAddr1" type="string" /> <element name="streetAdd2" type="string" /> <element name="city" type="string" /> <element name="state" type="string" /> <element name="zipCode" type="string" /> <element name="country" type="string" /> </all> </complexType> </schema> http://www.ibm.com/schemaMapping/POAddress.xsl: <?xml version='1.0' ?> <xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <xsl:template match="/"> <Address rdf:ID="Address1"> <has_Receiver rdf:datatype="xs:string"> <xsl:value-of select="POAddress/recepientInstName"/> <has_StreetAddress rdf:datatype="xs:string"> <xsl:value-of select="concat(POAddress/streetAddr1,POAddress/streetAddr2)"/> </has_StreetAddress > <has_City rdf:datatype="xs:string"> <xsl:value-of select="POAddress/city"/> </has_City> <has_State rdf:datatype="xs:string"> <xsl:value-of select="POAddress/state"/> </has_State> <has_ZipCode rdf:datatype="xs:string"> <xsl:value-of select="POAddress/zipCode"/> </has_ZipCode> <has_Country rdf:datatype="xs:string"> <xsl:value-of select="POAddress/country"/> </has_Country> </Address> </xsl:template> </xsl:transform> 2. Preconditions && Effect 这两种形式的语义是通过在interface的定义中加入两个element:wssem:precondition和wssem:effect来引入的。 <interface name="PurchaseOrder"> <operation name="processPurchaseOrder” pattern=wsdl:in-out> <input messageLabel = ”processPurchaseOrderRequest" element="tns:processPurchaseOrderRequest"/> <output messageLabel ="processPurchaseOrderResponse" element="processPurchaseOrderResponse"/> <!—Precondition and effect are added as extensible elements on an operation> <wssem:precondition name="ExistingAcctPrecond” wssem:modelReference="POOntology#AccountExists"> <wssem:effect name="ItemReservedEffect" wssem:modelReference="POOntology#ItemReserved"/> </operation> </interface> wssem:effect和wssem:precondition的expression属性是通过用AND,OR,XOR等来组合一些Statement来得到的。 wssem:precondition的schema的定义: <xsd:element name=precondition> <xsd:complexType> <xsd:complexContent <xsd:restriction base="xsd:anyType"> <xsd:attribute name=”name” type=”xsd:string” /> <xsd:attribute name="modelReference" type="xsd:anyURI" /> <xsd:attribute name="expression" type="xsd:string" /> </xsd:restriction> </xsd:complexContent> </xsd:complexType> </xsd:element> wssem:effect 的schema的定义: <xsd:element name=”effect”> <xsd:complexType> <xsd:complexContent <xsd:restriction base="xsd:anyType"> <xsd:attribute name=”name” type=”xsd:string” /> <xsd:attribute name="modelReference" type="xsd:anyURI" /> <xsd:attribute name="expression" type="xsd:string" /> </xsd:restriction> </xsd:complexContent> </xsd:complexType> </xsd:element> Semantic Tools for Web Services from IBM && University of Georgia: 一些Flash: http://www.alphaworks.ibm.com/demo/flash/wssem 提供的一些功能: 1. 一个图形化的WSDL编辑器 2. 在WSDL编辑器的基础上进行语义标注 3. 一个本体导入工具,并显示本体中的分类 4. 两种匹配方式: 单个服务匹配: 与wsdl目录下的每个服务单独进行匹配,匹配结果为单 个服务 服务匹配的结果 观察两个服务之间的映射关系: 组合服务匹配:匹配结果可以是wsdl目录下服务的组合,组合的方式用 BPEL来描述,同时提供一个BPEL的编辑器(这个我的wtp里没出来,log里看出来是某个库没装,也没去弄它了) 服务匹配结果: 我的BPEL的编辑器打不开,只能直接看它的代码了,不过还算容易懂的: <?xml version="1.0" encoding="ASCII"?> <process:process xmlns:process="http://schemas.xmlsoap.org/ws/2003/03/business-process/" name="SomeName"><process:partnerLinks/><process:partners/><process:variables/><process:sequence name="SomeSequence"><process:invoke name="invoke-{http://uima.semantica.ibm.com.wsdl/digitalsigningservice/}digitalsigningservice/digitalsigningservice_OBJECT" operation="{http://uima.semantica.ibm.com.wsdl/digitalsigningservice/}digitalsigningservice/digitalsigningservice"/><process:invoke name="invoke-{http://uima.semantica.ibm.com.wsdl/encryptionservice/}encryptionservice/encryptionservice_OBJECT" operation="{http://uima.semantica.ibm.com.wsdl/encryptionservice/}encryptionservice/encryptionservice"/><process:invoke name="invoke-{http://uima.semantica.ibm.com.wsdl/purchaseorderservice/}purchaseorderservice/purchaseorderservice_OBJECT" operation="{http://uima.semantica.ibm.com.wsdl/purchaseorderservice/}purchaseorderservice/purchaseorderservice"/></process:sequence></process:process> 被匹配的服务和匹配出来的组合服务的流程: [此贴子已经被admin于2007-5-21 23:18:52编辑过]
|