2016-05-07 40 views
1

什么是这个请求/响应结构的概念和技术的缺点:XML一个字符串元素VS独立元件内部

A)

<xs:element name="OrderRequest"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="OrderID" type="xs:integer"/> 
       <xs:element name="OrderType" type="xs:integer"/> 
       <xsd:element name='OrderAttributes' type='xsd:string'/> 
      </xs:sequence> 
     </xs:complexType> 
</xs:element> 

其中OrderAttributes元素将包含在下面的XML字符串结构:

<OrderName> xy </OrderName> 
<OrderDate> xy </OrderDate> 
<OrderDetails> xy </OrderDetails> 
....lots of other attributes 

与此请求/响应结构相比较

B)

<xs:element name="OrderRequest"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="OrderID" type="xs:integer"/> 
       <xs:element name="OrderType" type="xs:integer"/> 
       <xsd:element name="OrderAttributes"> 
        <xs:complexType> 
        <xs:sequence> 
         <xs:element name="OrderName" type="xs:string"/> 
         <xs:element name="OrderDate" type="xs:date"/> 
         <xs:element name="OrderDetails" type="xs:string"/> 
         ....lots of other attributes 
        </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
</xs:element> 

我需要设计订单处理Web服务接口,而我想上面提到的两个备选方案。

版本A,是更通用的,所以接口不需要改变,当OrderAttributes结构以任何方式改变。

但是模式验证是不可能的。

我的问题是,什么是其他缺点相比,版本B.我是分析师,而不是程序员,所以我不能说,如果在解析请求一定的影响,产生从合同等代码...

回答

0

首先请注意,您一般使用这个词的属性指一个属性可以是混乱的XML,其中属性是指从元素自成一家具体构造:

<element attribute="attribute value"> 
    <childElement>child element value</childElement> 
</element> 

然后,在进行设计时,您可能会考虑将哪些属性表示为XML属性,以及您希望将哪些属性表示为XML元素。请参阅XML attribute vs XML element以获取帮助。

关于你一个 VS 提出的设计,注意一个根本是不可行的 - 你不能宣称有xs:string内容如你所示的元素中有转义标记。此外,A然后将需要进一步解析OrderAttributes内容,而B将利用XML解析器来处理OrderAttributes内容。 (而且,像你说的,不会要么利用XSD验证。)

为将来的扩展,可以考虑,而不是使用xs:any,它通过的strict, lax, or skipprocessContents属性值支持通配符内容的各种解释