xml - 内部带有前缀命名空间的非限定 XML 元素
问题描述
我有以下 XML:
<ns1:verifySignedDocumentResponse xmlns:ns1="http://signing.ws.comarch.gov">
<verifySignedDocumentReturn xmlns:ns2="http://exception.ws.comarch.gov">Some string content...</verifySignedDocumentReturn>
</ns1:verifySignedDocumentResponse>
如果verifySignedDocumentReturn
我想知道,定义前缀 ( xmlns:ns2=...
) 是否正确,但不使用此前缀限定 ( ns2:verifySignedDocumentReturn
) 适当的元素?
w3schools.com给出了示例,其中显示:
- 如果元素是前缀,则必须定义前缀的命名空间。
- 如果使用默认命名空间,则不应为元素添加前缀。
但在我的示例中,没有默认命名空间。所以,我希望verifySignedDocumentReturn
以ns2
.
我从实际服务中获得了这个 XML 片段,所以我想知道:它是否正确有效?还是只是服务创造者的粗心大意?我问,因为我是 XML/XSD 的新手。
我尝试使用不同的在线生成器从这个 XML 生成 XSD,但生成的模式看起来并不合理。
变体 1(根本不考虑ns2
命名空间):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://signing.ws.comarch.gov"
xmlns:ns1="http://signing.ws.comarch.gov">
<xs:element name="verifySignedDocumentResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="verifySignedDocumentReturn" form="unqualified"
type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
变体 2:
架构0.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:ns1="http://signing.ws.comarch.gov"
xmlns:ns2="http://exception.ws.comarch.gov"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://signing.ws.comarch.gov"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="schema1.xsd" />
<xs:element name="verifySignedDocumentResponse">
<xs:complexType>
<xs:sequence>
<xs:element ref="verifySignedDocumentReturn" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
架构1.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="verifySignedDocumentReturn" type="xs:string" />
</xs:schema>
解决方案
首先要注意的是,xmlns:ns2="http://exception.ws.comarch.gov"
在您的 XML 文档中的声明什么也不做。它只是定义了一个别名 ns2,它从未使用过。
两个生成的模式看起来都不错。不过,关于它们的一些说明。
尽管第一个模式完全适合单个 XSD,但通常在模式elementFormDefault
中设置为qualified
并且未更改。在这个模式中,内部元素form
被设置unqualified
为。我不是 100% 确定,但我认为使用此模式的验证 XML 解析器将把verifySignedDocumentReturn
它视为在命名空间“ http://signing.ws.comarch.gov ”中。我认为form
在 XSD 文档中间更改是要求不兼容问题。
第二组模式看起来不错。
推荐阅读
- python - 如何在 python 中为 TCP Timestamp 选项生成 TSval?
- c++ - 我可以将集合插入到地图中,并将集合作为 C++ 中的值吗?
- ios - 具有模糊背景的模态导航控制器,在推送动画期间无缝?
- jenkins - 如何在不使用 buildWithParameters 的情况下调用 Jenkins 作业时在 curl 中传递参数
- eclipse - 你能控制内容辅助窗口在 Eclipse 中保持打开的时间吗
- java - 无法在未调用的线程上敬酒,RxJava2
- php - 模拟 Symfony Ldap::create 进行单元测试
- reactjs - Typescript React:提供多余属性时,道具的联合类型不显示错误
- java - 切换按钮以启动服务
- css - CSS 变形词/文本