Как настроить схему для приема XML-документа с пространствами имен без префиксов - PullRequest
0 голосов
/ 05 ноября 2018

Я получаю документ, имеющий следующую структуру:

<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 указанное выше пространство имен, но при проверке экземпляра этого документа по схеме я получаю сообщение «Validate instance failed».

Можно ли настроить мою схему для разрешения документов такого типа? Я не уверен, почему это не удается, так как я использую то же пространство имен.

Код схемы:

<?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 голосов
/ 07 ноября 2018

Я сгенерировал схему из вашего примера 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>
...