I am new to XSD 1.1 xs:assert
and am getting an error when I try validate the XML with the XSD:
Assertion evaluation (
MsgId eq 'ABC'
) for elementGrpHdr
on schema typeGroupHeader32
did not succeed.
Sorry did not put the complete XSD, just a part of it:
<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>
Is this a correct place to put xs:assert
condition to check the value of element MsgID
equal to ABC ?
I am using oXygen XML software for validations.
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>ABC</MsgId>
<CreDtTm>2009-02-17T12:49:35</CreDtTm>
<NbOfTxs>1</NbOfTxs>
</GrpHdr>
</CstmrCdtTrfInitn>
You have a couple of namespace issues:
MsgId
in no namespace, despite it being in the target namespace.Here's a complete, working example of your XML and an XSD that validates it successfully using the (repaired) sample assertion:
<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>
<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>