2016-05-07 22 views
1

Was die konzeptionelle und technische Nachteile dieser Anforderung/Antwort-Struktur sind:XML innerhalb eines String-Element vs unabhängigen Elementen

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> 

wo OrderAttributes Elementfolge in der folgenden XML enthalten Struktur:

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

Vergleich zu dieser Anfrage/Antwortstruktur

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> 

Ich brauche Webservice-Schnittstelle für Aufträge Verarbeitung zu entwerfen, und ich über die beiden Alternativen denke oben erwähnt.

Version A, ist generischer, so dass Schnittstelle nicht geändert werden muss, wenn OrderAttributes Struktur ändert sich in irgendeiner Weise.

Schema-Validierung ist jedoch nicht möglich.

Und meine Frage ist, was sind andere Nachteile im Vergleich zu Version B. Ich bin Analytiker, nicht Programmierer, so kann ich nicht sagen, ob es einen gewissen Einfluss auf Parsing-Anforderungen ist, Code von Vertrag zu erzeugen etc ...

Antwort

0

Zunächst ist zu beachten, dass Ihre allgemeine Verwendung des Wortes Attribut auf eine Eigenschaft verweisen kann in XML verwirrend sein, wo Attribut auf ein spezifisches Konstrukt verweist, abgesehen von Elemente steht:

Dann können Sie beim Entwurf berücksichtigen, welche Eigenschaften Sie als XML-Attribut darstellen möchten und welche Sie als XML-Elemente darstellen möchten. Siehe XML attribute vs XML element für Hilfe bei der Entscheidung.

In Bezug auf Ihre A vs B vorgeschlagenen Designs, beachten Sie, dass A einfach nicht machbar ist - Sie unescaped Markup innerhalb eines Elements nicht deklariert haben xs:string Inhalt haben, wie Sie gezeigt haben. Darüber hinaus würde A dann eine weitere Analyse des Inhalts von OrderAttributes erfordern, während B den XML-Parser nutzen würde, um OrderAttributes Inhalte zu verarbeiten. (Und, wie Sie gesagt haben, B würde auch nicht XSD Validierung nutzen.)

Für zukünftige Erweiterung, sollten Sie stattdessen die Verwendung von xs:any, die verschiedene Interpretationen von Wildcard-Inhalte über seine processContents Attributwerte von strict, lax, or skip unterstützt.