内部带有前缀名称空间的不合格XML元素

时间:2019-04-09 17:33:58

标签: xml xsd xsd-validation

我有以下XML:

verifySignedDocumentReturn

xmlns:ns2=...的情况下,我想知道定义前缀(ns2:verifySignedDocumentReturn是否正确,但不是限定(verifySignedDocumentReturn)是否合适这个前缀的元素?

w3schools.com gives examples,其中显示:

  1. 如果元素带有前缀,则必须定义前缀的名称空间。
  2. 如果使用默认名称空间,则元素不应添加前缀。

但是在我的示例中,没有默认名称空间。因此,我希望ns2的前缀为ns2

我从真实服务中获得了这个XML代码段,所以我想知道:它是否正确和有效?还是仅仅是服务创建者的粗心大意?我问,因为我是XML / XSD的新手。

我尝试使用不同的在线生成器从XML生成XSD,但没有生成的架构看起来合理。

变体1(完全不考虑<?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> 命名空间):

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

变种2:

schema0.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>

schema1.xsd:

{{1}}

1 个答案:

答案 0 :(得分:1)

要注意的第一件事是XML文档中的xmlns:ns2="http://exception.ws.comarch.gov"声明什么也不做。它只是定义了一个别名ns2,从未使用过。

两个生成的模式都看起来不错。关于它们的一些注意事项。

尽管第一个架构完全适合单个XSD,但通常elementFormDefault设置为qualified且在架构内未更改。在此架构中,内部元素的form设置为unqualified。我不确定100%,但是我认为使用此模式的验证XML解析器会将verifySignedDocumentReturn视为在名称空间“ http://signing.ws.comarch.gov”中。我认为在XSD文档中间更改form会引起不兼容问题。

第二组模式看起来不错。