XML标记名称空间继承

时间:2014-03-17 13:01:37

标签: python xml soap wsdl suds

我远不是SOAP / XML专家,甚至不是一个。但是,我有一些常识。我正在整合SOAP服务,wsdl位于此处:https://www1.uc.se/UCSoapWeb/services/ucOrders2?wsdl

我在Python中使用jurko suds fork完成所有操作。创建呼叫时,它们会失败。这个标签是有问题的标签。 Suds产生了这个:

<ns1:template id="KH9"/>

但为了让它工作,我不得不使用一个MessagePlugin插件,我编写了自己来编组XML,然后再发送到端点。这就是它所要求的:

<ns1:template ns1:id="KH9"/>

首先,我不应该相信肥皂水吗?我做...第二。为什么我需要在ns:template标签中为属性定义名称空间,而不是从标记名称空间继承的名称空间?

这个答案支持我,但不包括我正在查看的属性示例:https://stackoverflow.com/a/2193381/788022

我错了吗?泡沫不对吗?或者我正在整合的SOAP服务是错误的?或者我们都错了? :)

2 个答案:

答案 0 :(得分:1)

您所做的修复是必需且正确的。这是因为attributeFormDefault声明:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     ... 
     attributeFormDefault="qualified"* 
     ...
>

此声明的作用是架构定义的所有本地属性都属于架构的目标名称空间,并且必须具有名称空间前缀。 attributeFormDefault的默认值为unqualified,这意味着本地属性声明不属于任何名称空间。

未加前缀的属性始终属于空名称空间,即它们没有名称空间。您可以阅读所有血腥细节here

也许有些人怀疑&#34; suds&#34;是合适的(我对它一无所知,顺便说一下。)

答案 1 :(得分:0)

根据http://www.w3.org/TR/1999/REC-xml-names-19990114/#Philosophy来判断你确实应该使用

<ns1:template ns1:id="KH9"/>

as id =“...”不会继承任何命名空间。

不幸的是,这似乎是jurko-suds的问题/误用。