XSD:我们可以将元素startTag设置为具有值或值吗?

时间:2017-08-14 09:54:32

标签: xml xsd schema

我正在尝试创建xsd以将SWIFT MT940消息转换为xml。

这是我的XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
    xmlns:tns="urn:com.google/swift/mt940"
    xmlns:ts="http://schemas.google.com/2003/02/TextSchema"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="urn:com.google/swift/mt940"
    elementFormDefault="qualified"
    ts:eofStrip="&amp;#10;"
    ts:numberFormat="#,###.#"
    ts:rootElement="tns:File">
    <xsd:element name="File">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="TransactionReference" type="xsd:string" ts:startTag=":20:" ts:endTag="\n"/>
                <xsd:element name="RelatedReference" type="xsd:string" minOccurs="0" maxOccurs="0" ts:startTag=":21:" ts:endTag="\n"/>
                <xsd:element name="AccountIdentification" type="xsd:string" ts:startTag=":25:" ts:endTag="\n"/>
                <xsd:element name="StatementSequence" ts:startTag=":28C:" ts:endTag="\n">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="StatementNumber" ts:format="\d*" type="xsd:integer"/>
                            <xsd:element name="SequenceNumber" type="xsd:integer" minOccurs="0" ts:startTag="/"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="OpeningBalance" ts:startTag=":60F:" ts:endTag="\n">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element ref="tns:CreditDebit"/>
                            <xsd:element name="Date" type="xsd:date" ts:fixedLength="6" ts:dateFormat="yymmdd"/>
                            <xsd:element name="Currency" type="xsd:string" ts:fixedLength="3"/>
                            <xsd:element name="Balance" type="xsd:decimal" ts:decimalSeparator="," ts:numberFormat="#"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="StatementLine" ts:startTag=":61:" ts:endTag="\n">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Date" type="xsd:date" ts:dateFormat="yymmdd" ts:fixedLength="6"/>
                            <xsd:element name="EntryDate" minOccurs="0" ts:format="\d{4}">
                                <xsd:complexType>
                                    <xsd:sequence>
                                        <xsd:element name="Month" type="xsd:integer" ts:fixedLength="2"/>
                                        <xsd:element name="Day" type="xsd:integer" ts:fixedLength="2"/>
                                    </xsd:sequence>
                                </xsd:complexType>
                            </xsd:element>
                            <xsd:element ref="tns:CreditDebit"/>
                            <xsd:element name="FundsCode" type="xsd:string" minOccurs="0" ts:format="[^\d]"/>
                            <xsd:element name="Amount" type="xsd:decimal" ts:numberFormat="#" ts:decimalSeparator="," ts:format="[\d,]*"/>
                            <xsd:element name="TransactionType" type="xsd:string" ts:fixedLength="4"/>
                            <xsd:element name="CustomerReference" type="xsd:string" ts:format="[^/]*"/>
                            <xsd:element name="BankReference" type="xsd:string" minOccurs="0" ts:startTag="//"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
                <xsd:element name="SupplementaryDetails" type="xsd:string" minOccurs="0" ts:format="[^:].*" ts:endTag="\n"/>
                <xsd:element name="Information" ts:startTag=":86:" type="xsd:string" ts:endTag="\n"/>
                <xsd:element name="ClosingBalance" ts:startTag=":62F:" ts:endTag="\n" type="tns:BalanceType"/>
                <xsd:element name="ClosingAvailableBalance" ts:startTag=":64:" ts:endTag="\n" type="tns:BalanceType"/>
                <xsd:element name="Unparsed" type="xsd:string"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="CreditDebit" ts:fixedLength="1">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="C"/>
                <xsd:enumeration value="D"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>


    <xsd:complexType name="BalanceType">
        <xsd:sequence>
            <xsd:element ref="tns:CreditDebit" />
            <xsd:element name="StatementDate" type="xsd:date" ts:dateFormat="yymmdd" ts:fixedLength="6" />
            <xsd:element name="Currency" type="xsd:string" ts:fixedLength="3" />
            <xsd:element name="Amount" type="xsd:decimal" ts:numberFormat="#" ts:decimalSeparator="," />
        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>

Schema目前有元素“OpeningBalance”接受值,起始位置为:60F:并且“ClosingBalance”接受起始值为62F:的值。

但是MT940消息也可能有“OpeningBalance”开头:60M:和“ClosingBalance”以:62M:开头。就像下面的示例输入消息一样。

输入消息:

:20:0006/00000000008
:25:000005XXXXX
:28C:00003/00001
:60F:C000506USD13874902,28
:61:0000000007D10001,03NTRF3600009 //三百万零四百零九分之七十万零七
DUM Dt Dummy Ltd
:86:023?00TRANSFER?0005030750002?32DUM Dt Dummy Ltd
:62F:C100507USD21655902,09
:20:7906/00008000009
:25:000805XXXXX
:28C:00073/00002
:60M:C100007USD21416405,09
:61:1005070507C204000,NTRF8007900003 // 700100/007900003
TES.ID 8007915903.182 SARO 07.05
:86:042?00GIRO?3100000000000?32TES.ID 8007000003.182 SARO?33 07.05
:62M:C100007USD21000405,09
:64:C100507USD21655902,09

我想知道如何提及“OpeningBalance”接受以下开头的:60F:或:60M:并且类似地“ClosingBalance”具有:62F:或:62M:在相同的xsd中。

Deutschebank MT940格式规范:https://deutschebank.nl/nl/docs/MT94042_EN.pdf

0 个答案:

没有答案