如何配置架构以接受带有无前缀名称空间的xml文档

时间:2018-11-05 14:16:40

标签: xml validation schema biztalk

我收到的文件具有以下结构:

<Postnumre xmlns="http://Customer.Vejregister.Schemas.Vejregister_PostNr_XML.PostNr_XML">
    <Postnr xmlns="http://Customer.Vejregister.Schemas.Vejregister_PostNr_XML.PostNr_XML">
        <Sekvensnummer>sekvensnummer</Sekvensnummer>
        <Tidspunkt>tidspunkt</Tidspunkt>
        <Operation>operation</Operation>
        <PostNr>nr</PostNr>
        <PostnrNavn>navn</PostnrNavn>
        <Stormodtager>stormodtager</Stormodtager>
    </Postnr>
    <Postnr xmlns="http://Customer.Vejregister.Schemas.Vejregister_PostNr_XML.PostNr_XML">
        <Sekvensnummer>1</Sekvensnummer>
        <Tidspunkt>2014-08-20T11:17:50.644Z</Tidspunkt>
        <Operation>insert</Operation>
        <PostNr>0800</PostNr>
        <PostnrNavn>Høje Taastrup</PostnrNavn>
        <Stormodtager>1</Stormodtager>
    </Postnr>
</Postnumre>

如您所见,它在根节点和所有不带前缀的子节点上具有相同的名称空间。

在我的架构上,我已经将targetNamespace设置为上述名称空间,但是当根据架构验证此文档的实例时,我收到一条“验证实例失败”消息。

是否可以配置我的模式以允许此类文档?我不确定为什么会失败,因为我使用的是相同的名称空间。

架构代码:

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Customer.Vejregister.Schemas.Vejregister_PostNr_XML.PostNr_XML" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Customer.Vejregister.Schemas.Vejregister_PostNr_XML.PostNr_XML" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Postnumre">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="Postnr">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Sekvensnummer" type="xs:string" />
              <xs:element name="Tidspunkt" type="xs:string" />
              <xs:element name="Operation" type="xs:string" />
              <xs:element name="PostNr" type="xs:string" />
              <xs:element name="PostnrNavn" type="xs:string" />
              <xs:element name="Stormodtager" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:0)

我从您的示例XML中生成了一个模式,并生成了以下模式。

主要区别在于它添加了elementFormDefault="qualified",您可以通过单击顶部的<Schema>并将Element FormDefault设置为Qualified来设置。

<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://Customer.Vejregister.Schemas.Vejregister_PostNr_XML.PostNr_XML" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Postnumre">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Postnr">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Sekvensnummer" type="xs:string" />
              <xs:element name="Tidspunkt" type="xs:string" />
              <xs:element name="Operation" type="xs:string" />
              <xs:element name="PostNr" type="xs:string" />
              <xs:element name="PostnrNavn" type="xs:string" />
              <xs:element name="Stormodtager" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>