【问题标题】:Does the recieving end of an XML with an external namespace fetch the namespace? [duplicate]具有外部命名空间的 XML 的接收端是否获取命名空间? [复制]
【发布时间】:2023-03-06 09:45:01
【问题描述】:

就像标题说的那样,我想知道例如我是否向端点发送一些 XML 命名空间为:“http://www.external.com/customNS”,接收端会获取该命名空间吗?从逻辑上讲,我认为答案是肯定的(除非有阻止从外部来源获取的规则),但我需要验证这一点。

问题 2:如果第一个问题的答案是肯定的,我问的原因是我在工作中有一个处理 Onvif 的任务,它使用 XML 向 IP 摄像机发送命令,并且当 onvif XML 命名空间服务器失败(12 月 28 日),一些请求开始失败,但我需要确保这是原因而不是错误请求,所以你认为相机实际上已经预加载了命名空间,并且绝对没有外部获取,或者做他们至少在第一次收到具有特定命名空间的请求时才获取它们?我尝试创建一个服务器,并将其作为命名空间发送到相机,但我没有收到任何请求,但这可能只是意味着相机拒绝了非 onvif 的服务器的请求。

我发送到相机的请求示例(没有页眉和页脚):

<GetServiceCapabilities xmlns="http://www.onvif.org/ver20/ptz/wsdl" />

【问题讨论】:

    标签: xml xml-namespaces ip-camera onvif


    【解决方案1】:

    接收端会获取该命名空间吗?

    没有。

    命名空间是字符串。他们的人生目标就是在文档中独树一帜,仅此而已。

    可以将 URL 用作命名空间,然后设置一个在该 URL 上提供更多信息的 Web 服务器,这是一个好处。对此没有要求,对于此类 URL 中必须包含哪种数据没有技术定义,并且 XML 解析器不需要它来完成其工作。

    可能还有其他东西(XML 模式、外部 DTD,可能是 XLink/XInclude)可以在解析或处理文档期间触发请求,但命名空间 URI 绝对不会。

    【讨论】:

    • 所以,所有的命名空间都需要事先在服务器上定义好,而在我上面给出的例子中,我们只是将url映射到命名空间?
    • @ThabetSabha ...嗯?您从我的回答中的哪个句子中得出语句“所有名称空间都需要事先在服务器上定义”?我的回答字面意思正好相反。
    • 首先,感谢您抽出宝贵时间来回答这个问题,我想我可能误解了一些东西,假设我正在使用命名空间发送我的请求:“onvif.org/ver20/ptz/wsdl”,服务器需要要知道如何处理对这个特定命名空间的请求,阅读你的答案我的印象是,这样做的方式是服务器应该事先知道如何处理每个命名空间,因此在这种特殊情况下,客户端和服务器需要达成一致之前的命名空间。
    • 附言。我在最初的问题中认为,在阅读您的答案之前,接收端将获取 wsdl 文件
    • @ThabetSabha 我相信你在这里搞混了。为什么服务器会将命名空间映射到处理函数?命名空间的用处从能够区分&lt;thing xmns="foo"&gt;&lt;thing xmns="bar"&gt; 开始和结束。字符串"foo""bar" 是不同的,因此它们不是同一种&lt;thing&gt;。而已。没有进一步的魔法。没有查找,没有解析,没有处理,什么都没有。 "foo" 是否真的类似于 URL 根本不相关。
    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多