2016-05-07 43 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屬性值支持通配符內容的各種解釋