CAM 整理 XML结构化最新利器

日期: 2008-01-06 作者:Daniel Rubio 来源:TechTarget中国 英文

CAM(Content Assembly Mechanism),OASIS所提出整理XML结构化的技术……   Web服务的面包和黄油主要是由为了实现协作性需求的应用间的交换式的XML结构所组成。在这些交换繁盛之前,大多数XML数据必须忍受一系列的步骤,包括确认和转换,大多数的这类问题可用像Schemas, DTD’s, Xpath及 XSL等常用的XML方法解决。接着我们还将探究另一种技术,该技术是OASIS开发的,其能很好地与上述程序的大多数所互补,它的名字:CAM (Content Assembly Mechanism) 。   CAM的主要目标是……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

CAM(Content Assembly Mechanism),OASIS所提出整理XML结构化的技术……

  Web服务的面包和黄油主要是由为了实现协作性需求的应用间的交换式的XML结构所组成。在这些交换繁盛之前,大多数XML数据必须忍受一系列的步骤,包括确认和转换,大多数的这类问题可用像Schemas, DTD's, Xpath及 XSL等常用的XML方法解决。接着我们还将探究另一种技术,该技术是OASIS开发的,其能很好地与上述程序的大多数所互补,它的名字:CAM (Content Assembly Mechanism) 。

  CAM的主要目标是通过特定的模块的应用来定义,组织及验证XML内容,其允许将语境业务规则应用于任何XML结构。在我们深入挖掘那些实际上组成语境业务规则的内容及它们有用的原因之前,你必须认识到的关于CAM的第一件事就是它与许多其他的你也许已经非常熟悉的验证和转换技术一样根源于同样的原则,如运用与Schemas 相似的Xpath和结构。所以在这个层面上,CAM是一个一种易于消化接受的方法,其不要求启动一个新的学习曲线。

  所以对于XML来说什么是语境业务规则?这是可以应用于新的的XML数据之前用于一个实际的Web服务或应用的精心设计的逻辑。这些业务规则能依次用于执行一个特定的XML结构(确认)或转换XML片段以适用于事先所决定的形式。接着就可以说,让我们进一步观察那些业务规则吧,包括他们的语法,他们是如何在一个CAM模块中声明的及一个实际的XML机构是如何运用CAM的。列表1.1展示了一个使用了CAM的XML文档。

  列表1.1 运用CAM模块的XML结构

<?xml version='1.0'?>
<as:CAM CAMlevel="1" version="1.0"
   >http://www.oasis-open.org/committees/cam" >
<as:Header>
 <as:Description>
     Sample CAM template for Purchase Order
 </as:Description>
 <as:Owner>CAM Example</as:Owner>
 <as:Version>0.1</as:Version>
 <as:DateTime>2007-03-06T09:48:00</as:DateTime>
  <as:Parameters>
    <as:Parameter name="QuickBooks"
        values="'true'|'false'"
        default="false" use="local"/>
  </as:Parameters>
</as:Header>
<as:AssemblyStructure>
<as:Structure ID="W3C-PO" taxonomy="XML" reference="">
<PurchaseOrder orderDate="%1999-05-20%">
  <shipTo type="%US%">
   <name>%Alice Smith%</name>
   <street>%123 Maple Street%</street>
   <city>%Mill Valley%</city>
   <state>%CA%</state>
   <zip>%90952%</zip>
  </shipTo>
  <shipDate>%1999-05-25%</shipDate>
  <comment>%
      Get these use express shipping
  %</comment>
  <Items>
    <Item pno="%333-333%">
     <productName>%
        Lawnmower, model BUZZ-1
     %</productName>
     <quantity>%1%</quantity>
     <price>%148.95%</price>
     <comment>%
          Please confirm this is
          the electric model
     %</comment>
    </Item>
  </Items>
</PurchaseOrder>
</as:Structure>
</as:AssemblyStructure>
</as:CAM>


  上个XML结构在文档的一开始就引入了CAM命名空间,并将其应用为:限定词围绕其进行了各种声明。除了运用这个特殊的命名空间外,其他唯一值得一提的就是在特定的XML标记内符号%被用于划定字符数据的界限,所有这些都被CAM用于识别内容数据发生的地方。现在让我们看看列表1.2,其说明了一部分CAM模块用于执行在前述文档中的特定规则。

  列表1.2 部分CAM模块

  <as:BusinessUseContext>
 <as:Rules>
   <as:default>
    <as:context>
     <as:constraint action="makeRepeatable(//Items/Item)"/>
     <as:constraint action="makeOptional(//Item/comment)"/>
     <as:constraint action="setLength(//shipTo/state,2)"/>
     <as:constraint action="setDateMask(//PurchaseOrder/shipDate,YYYY-MM-DD)"/>
     <as:constraint action="makeOptional(//PurchaseOrder/comment)"/>
     <as:constraint action="restrictValues(//shipTo/@type,'US'| 'CA'| 'MX', 'US')"/>
     <as:constraint action="setDateMask(//PurchaseOrder/@orderDate,YYYY-MM-DD)"/>
     <as:constraint action="setNumberMask(//Item/@pno,###-###)"/>
     <as:constraint action="setNumberMask(//Item/quantity,###)"/>
     <as:constraint action="setNumberMask(//Item/price,####.##)"/>
     <as:constraint condition="//Item/@pno = 123-678" action="restrictValues(//shipTo/state,'WA')">
      <as:annotation> <as:documentation type="documentation">
       Can only ship item 123-678 to Washington State </as:documentation> </as:annotation>
     </as:constraint>
     <as:constraint condition="$QuickBooks = true" action="excludeElement(//Item/comment)" />
    </as:context>
   </as:default>
  </as:Rules>
 </as:BusinessUseContext>


  对于这些CAM规则需要认识的第一件事就是这里的语法是基于Xpath——比如说//Item/@pno,其是Xpath行话中用来说明项目标记的pno属性的。更重要的是,尽管如此,那些CAM规则所要达到的事情。这里有一个XML文档的使用样式的引言——比如说makeRepeatable, makeOptional及restrictValues——为更好的阐释验证和修饰XML数据的条件。针对这种情况,我们发现一个规则,其阐述了//Item/@pno标记值是否与123-678相符。它也验证标记//shipTo/state是否与WA等价,而且我们还发现了另一个规则,其阐述了在XML文档中的$QuickBooks变量是否为真,CAM应该禁止XML标记//Item/comment。

  为了将以前的CAM模块和XML文档应用于实际,你将需要安装一个CAM引擎,其是为了保持验证和转换过程粘着性的软件基础设施。加之,为了减少创造CAM模块的负担,一个XML编辑者在CAM项目的开发生命周期中也是有所帮助的。幸运的是,CAM已经设法成长为一个围绕那些区域和使Java CAM Engine and CAM editor能被免费下载两个方面的很强大的开放源社群。

  现在,与探究上述两个CAM片段的配置和使用细节相反——这之中的大多数已在文档中有所说明——让我们提出一个与CAM效用相关的更高层次的问题:软件的另一模块的实际引入——阅读CAM引擎——对于SOA项目的已经在增加的复杂性是以个方便的或是实际的方法?正如它所展现的,对于那些服务来说,已经持续地改变XML验证和转换需求,CAM提供了一个新的观察角度,而且能减少复杂性。

  与XML的经典验证和转换技术相关的问题是在一种或是另一种形式下,它们将严重依赖底层编程环境,为了应用一个XSL样式表或是简化运用应用逻辑在XML Schemas所支持的式样之外以执行验证逻辑开始具体编程说明的另一种形式。在这些情况下,XML验证或是转换需求的持续变化会很快变为一个负担,因为固有的紧耦合,而不管你是运用像CAM这样一个更加松散耦合的机构的方法来达到——后者是一个高度觊觎的SOA特点。

  虽然CAM引入了一个额外的层次以使XML结构的验证和转换成为可能,将这样一个间接的层次结合进你的Web服务项目将会使那些要求对精细的XML内容规则给予支持的SOA项目提高一个出色的解决方案。加之,CAM是在OASIS的指导下进行开发的,OASIS开发了大量的其他Web服务标准,而且你能确信CAM将会在你的或是围绕你的Web服务项目继续开展下去。

相关推荐