xsd:assert не работает: оценка утверждения не удалась

Я новичок в XSD 1.1 xs:assert и получаю сообщение об ошибке при попытке проверить XML с помощью XSD:

Оценка утверждения (MsgId eq 'ABC') для элемента GrpHdr в схеме типа GroupHeader32 не удалась.

XSD

Извините, не выложил полный XSD, только его часть:

<xs:schema attributeFormDefault="unqualified" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"
    xmlns:xerces="http://xerces.apache.org">    <xs:element name="Document" type="Document"/>

    <xs:complexType name="Document">
        <xs:sequence>
            <xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="CustomerCreditTransferInitiationV03">
        <xs:sequence>
            <xs:element name="GrpHdr" type="GroupHeader32"/>
            <xs:element maxOccurs="unbounded" minOccurs="1" name="PmtInf" type="PaymentInstructionInformation3"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="GroupHeader32">       
        <xs:sequence>
            <xs:element name="MsgId" type="Max35Text"/>
            <xs:element name="CreDtTm" type="ISODateTime"/>
            <xs:element maxOccurs="2" minOccurs="0" name="Authstn" type="Authorisation1Choice"/>
            <xs:element name="NbOfTxs" type="Max15NumericText"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CtrlSum" type="DecimalNumber"/>
            <xs:element name="InitgPty" type="PartyIdentification32"/>
            <xs:element maxOccurs="1" minOccurs="0" name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification4"/>
        </xs:sequence>
        <xs:assert test="MsgId eq 'ABC'"/> 
    </xs:complexType>
</xs:schema>

Это правильное место, чтобы поставить условие xs:assert, чтобы проверить значение элемента MsgID равным ABC?

Я использую программное обеспечение oXygen XML для проверки.

Пример XML

 <CstmrCdtTrfInitn>
     <GrpHdr>
         <MsgId>ABC</MsgId>
         <CreDtTm>2009-02-17T12:49:35</CreDtTm>
         <NbOfTxs>1</NbOfTxs>
     </GrpHdr>
 </CstmrCdtTrfInitn>

person ravi    schedule 24.09.2020    source источник


Ответы (1)


У вас есть пара проблем с пространством имен:

  1. Ваш XML не находится в целевом пространстве имен вашего XSD.
  2. Ваш тест утверждений не ссылается на MsgId ни в одном пространстве имен, несмотря на то, что он находится в целевом пространстве имен.

Вот полный рабочий пример вашего XML и XSD, который успешно проверяет его с помощью (исправленного) образца утверждения:

XML

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>ABC</MsgId>
      <CreDtTm>2009-02-17T12:49:35</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
    </GrpHdr>
  </CstmrCdtTrfInitn>
</Document>

XSD

<xs:schema  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
  xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
  xmlns:pa="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"
  attributeFormDefault="unqualified"
  elementFormDefault="qualified"
  xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
  vc:minVersion="1.1">
  
  <xs:element name="Document" type="Document"/>
 
  <xs:complexType name="Document">
    <xs:sequence>
      <xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="CustomerCreditTransferInitiationV03">
    <xs:sequence>
      <xs:element name="GrpHdr" type="GroupHeader32"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="GroupHeader32">       
    <xs:sequence>
      <xs:element name="MsgId" type="xs:string"/>
      <xs:element name="CreDtTm" type="xs:string"/>
      <xs:element maxOccurs="2" minOccurs="0" name="Authstn" type="xs:string"/>
      <xs:element name="NbOfTxs" type="xs:string"/>
    </xs:sequence>
    <xs:assert test="pa:MsgId eq 'ABC'"/> 
  </xs:complexType>
</xs:schema>
person kjhughes    schedule 25.09.2020