返回soap响应的序列类型

时间:2016-07-20 00:39:24

标签: xml soap xquery

参考

  

Difference between / and /root-node

我理解根节点与文档节点相同,并且根元素与文档元素相同。我理解正确吗?

你可以在我的样品肥皂回复中确认吗

  1. S:Envelope 是根节点和文档节点
  2. S:Envelope 也是根元素和文档元素
  3. document-node()作为此soap响应的返回序列类型,我应该在我的 XQuery 声明函数签名中为soap请求提供此soap响应?
  4. 或者应该是 node()*,item()*或element()*
  5. 非常感谢 apaw

    我有这个肥皂回应:

    <?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 个答案:

答案 0 :(得分:1)

这是一个非常好的问题,往往是一个混乱的来源。

XDM (XQuery/XPath Data Model)中,文档节点与元素节点不同:

  • 文档节点封装整个XML文档,在语法中不可见。

  • 元素节点在语法中可见,由尖括号括起。 S:因此,信封是一个元素节点。

如果使用 doc()函数或 parse-xml()解析文档,则返回的是文档节点(类型 document-node())和元素 S:Envelope (类型元素()元素(S:Envelope) )将是此文档节点的子节点。我认为坚持用户定义函数的约定是明智的。

(注意:其他函数可能会为您提供没有顶级文档节点的树,在这种情况下,树称为片段而不是文档。)

存在许多不同的措辞,用于限定作为文档节点的子节点的元素节点。在XML infoset中, S:Envelop 将被称为文档元素,因为它是文档信息项下的顶级元素信息项。但根本身就是文档,而不是文档元素。

关于根节点是文档节点而文档元素的根元素的声明,这需要谨慎。如果树是片段,则根节点将不是文档节点(请参阅XDM规范的this part),而是元素节点。 根元素不是任何数据模型中的官方术语。

总之,要解决要点:

  1. S:Envelope是根节点和文档节点:no和no,如果树是文档(例如,使用 doc()获得),是和否如果树是片段
  2. S:Envelope也是根元素和文档元素:no和yes如果树是文档,是和否如果它是片段。
  3. 将document-node()作为这个soap响应的返回序列类型,我应该在我的xquery声明函数签名中使用soap请求给出这个soap响应:它取决于此函数返回的是 S:信封本身,或包装它的文档节点。