2016-07-20 19 views
3

In Bezug zurück. verstehe ich es richtig?einer Sequenztyp einer SOAP-Antwort

können Sie bitte, dass in meiner Probe Seife Antwort bestätigen

  1. S: Umschlag ist der Wurzelknoten und der Dokumentknoten
  2. S: Umschlag ist auch das Wurzelelement und das Dokumentelement
  3. wird document-node() der Rückgabetyp dieser Soap-Antwort sein, die ich in meiner XQuery Funktion declare s verwenden sollte ignature für die Seifenanforderung, die diese Seifenreaktion gibt?
  4. oder sollte es etwas anderes wie Knoten() * oder das Element() * oder Element() *

Dank vieler
apaw

ich diese Seife Antwort habe sein:

<?xml version="1.0" encoding="UTF-8"?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
    <S:Body> 
    <ns2:searchResponse xmlns:ns2="ws.s.b.d.com"> 
     <return> 
     ... snipped ... 
     <businessName>GREEN NATURE WATER REFILLING STATION</businessName> 
     <province>PROVINCE AA</province> 
     <referenceNumber>12345678</referenceNumber> 
     ... snipped ... 
     <status>Registered</status> 
     </return> 
     ... snipped a lot of <return> ... </return> ... 
     <return> 
     ... snipped ... 
     <businessName>129 GREEN AVENUE STORE</businessName> 
     <province>PROVINCE BB</province> 
     <referenceNumber>12345670</referenceNumber> 
     ... snipped ... 
     <status>Registered</status> 
     </return> 
    </ns2:searchResponse> 
    </S:Body> 
</S:Envelope> 

Antwort

1

Dies ist eine sehr gute Frage und ist oft eine Quelle der Verwirrung.

Im XDM (XQuery/XPath Data Model), ein Dokumentenknoten ist nicht dasselbe wie ein Element Knoten:

  • Ein Dokumentenknoten kapselt ein gesamtes XML-Dokument und ist in der Syntax nicht sichtbar.

  • Ein Elementknoten ist in der Syntax in spitzen Klammern eingeschlossen. S: Envelope ist somit ein Elementknoten.

Wenn das Dokument mit analysiert wird, sagen wir, die doc() Funktion oder Parse-XML(), was zurückgegeben wird, ist ein Dokumentenknoten (Typ Dokument-node()) und das Element S: Umschlag (Typ Element() oder Element (S: Envelope)) wird ein Kind dieses Dokuments Knoten. Ich denke, es wäre ratsam, diese Konvention auch für benutzerdefinierte Funktionen einzuhalten.

(Anmerkung: andere Funktionen, die Ihnen einen Baum ohne den Top-Level-Dokumentknoten geben können, in welchem ​​Fall der Baum ein Fragment eher als ein Dokument bezeichnet wird.)

Viele verschiedenen Benennungen existieren einen Elementknoten für die Qualifizierung Das ist ein Kind eines Dokumentknotens.In der XML infoset, S: Envelop würde ein Dokumentelement aufgerufen werden, weil es die oberste Ebene Element Informationselement direkt unter dem Dokument Informationselement ist. Aber die Wurzel selbst ist das Dokument, nicht das Dokumentelement.

In Bezug auf die Aussage, dass ein Wurzelknoten ein Dokumentknoten und ein Stammelement das Dokumentelement ist, erfordert dies Vorsicht. Wenn der Baum ein Fragment ist, ist der Stammknoten kein Dokumentknoten (siehe this part der XDM-Spezifikation), sondern ein Elementknoten. Wurzelelement ist keine offizielle Terminologie in beiden Datenmodellen.

Kurz gesagt, um die Aufzählungspunkte zu adressieren:

  1. S: Envelope ist der Wurzelknoten und die Dokumentenknoten: NO und NO wenn der Baum ein Dokument (zum Beispiel ist, erhalten mit doc()), ja und nein, wenn der Baum ein Fragment ist.
  2. S: Umschlag ist auch das Wurzelelement UND das Dokumentelement: nein und ja, wenn der Baum ein Dokument ist, ja und nein, wenn es ein Fragment ist.
  3. wird document-node() der Rückgabetyp dieser Soap-Antwort sein, die ich in meiner XQuery deklarieren sollte Funktionssignatur für die Soap-Anfrage geben diese Soap-Antwort: Es hängt davon ab, S: Envelope selbst oder ein Dokumentknoten, der es umschließt.