2016-07-20 116 views
3

的序列類型。在參照返回皁響應

Difference between/and /root-node

我正在理解是根節點是相同的文檔節點和根元素是相同的文檔元素。我的理解是否正確?

可以請你確認,在我的樣本SOAP響應

  1. S:信封是根節點和文檔節點
  2. S:信封也是根元素和文檔元素
  3. document-node()是此soap響應的返回序列類型,我應該在我的XQuery中使用聲明函數s忽略肥皂請求給這個肥皂響應?
  4. 或者它應該是別的東西像節點()*,或項目()*或元素()*

非常感謝
apaw

我有這個SOAP響應:

<?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> 

回答

1

這是一個很好的問題,通常是一個混淆的來源。

XDM (XQuery/XPath Data Model),一個文檔節點是不一樣的東西作爲一個元素節點:

  • 文檔節點內封裝了整個XML文檔,並且不處於語法可見。

  • 元素節點在包圍尖括號的語法中可見。 S:Envelope因此是一個元素節點。

如果文檔進行解析,也就是說,(DOC)功能,或解析的XML(),則返回的是一個文檔節點(類型文檔節點())和元素S:Envelope(類型元素()元素(S:Envelope))將是此文檔節點的子節點。我認爲最好還是堅持這個慣例來定義用戶定義的函數。

(注:其他功能可以給你沒有頂級文檔節點的樹,在這種情況下,樹被稱爲片段,而不是一個文件。)用來鑑定一個元素節點存在

許多不同的措辭這是文檔節點的子節點。在XML infoset,S:信封將被稱爲文檔元素,因爲它是文檔信息項下的頂層元素信息項。但是根本身就是文檔,而不是文檔元素。

關於根節點是文檔節點和根元素文檔元素的聲明,這需要謹慎。如果樹是碎片,根節點將不是文檔節點(請參閱XDM規範的this part),而是元素節點。 根元素不是任何一種數據模型中的官方術語。

總之,爲了解決要點:

  1. S:Envelope是根節點,文檔節點:無和無如果樹是一個文件(例如,()與DOC獲得 ),是和否,如果樹是一個片段。
  2. S:信封也是根元素和文檔元素:不,如果樹是文檔,則爲yes;如果是片段,則爲yes和no。
  3. document-node()是這個SOAP響應的返回序列類型,我應該在我的xquery聲明函數簽名中爲soap請求使用這個soap響應:這取決於這個函數返回的是S:Envelope本身或包裝它的文檔節點。