私は、他の要素の値に依存するXMLの1つの要素に対して、必須のオプションとオプションのバリデーションを適用しようとしています。xsd:assertを使用した非兄弟要素値に基づくオプション/必須要素。
以下XSDです:
以下<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="root" type="root"></xs:element>
<xs:complexType name="root">
<xs:sequence>
<xs:element name="P1Message"
type="p1Message">
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="p1Message">
<xs:sequence>
<xs:element name="Hdr" type="hdr"></xs:element>
<xs:element name="Inf" type="inf"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="hdr">
<xs:sequence>
<xs:element name="I1Agt" type="i1Agt"></xs:element>
<xs:element name="SequenceNum" type="xs:string"></xs:element>
<xs:element name="SessionNum" type="xs:string"></xs:element>
<xs:element name="MsgTyp" type="xs:string"></xs:element>
<xs:element name="IntComment" type="xs:string"></xs:element>
</xs:sequence>
<xs:assert test="LclInstrm or not(MsgTyp = '103')"/>
</xs:complexType>
<xs:complexType name="i1Agt">
<xs:sequence>
<xs:element name="FinInstnId" type="finInstnId"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="finInstnId">
<xs:sequence>
<xs:element name="B1" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="inf">
<xs:sequence>
<xs:element name="PmtTpInf" type="pmtTpInf"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="pmtTpInf">
<xs:sequence>
<xs:element name="LclInstrm" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
<xs:element name="Svc" type="svc"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="svc">
<xs:sequence>
<xs:element name="Cd" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
はXMLです:
<?xml version="1.0" encoding="utf-8"?>
<root>
<P1Message>
<Hdr>
<I1Agt>
<FinInstnId>
<B1>str1234</B1>
</FinInstnId>
</I1Agt>
<SequenceNum>str1234</SequenceNum>
<SessionNum>str1234</SessionNum>
<MsgTyp>123</MsgTyp>
<IntComment>str1234</IntComment>
</Hdr>
<Inf>
<PmtTpInf>
<LclInstrm>str1234</LclInstrm>
<Svc>
<Cd>str1234</Cd>
</Svc>
</PmtTpInf>
</Inf>
</P1Message>
</root>
私が検証しようとしていたとき、私はMsgTyp
の値が103
ときLclInstrm
要素は必須にしたいですJavaでXSDを使用したXMLの上私は以下のエラーを受け取りました:
message.xml is not valid because cvc-assertion.3.13.4.1: Assertion evaluation ('LclInstrm or not(MsgTyp = '103')') for element `Hdr` with type `hdr` did not succeed.
誰でも私と同じようにお手伝いできますか?
詳細が必要な場合はお知らせください。
あなたの素早い返信のためにkjhughesに感謝します。私のアサーション条件を動作させるには、 "
これは以下の条件で動作します: "MsgTyp"の値が** '103' **および** 'LclInstrm' **以外の場合。しかし、** "MsgTyp" **が** '103' ** ** 'LclInstrm' **が存在する場合、XMLの検証中に上記のエラーが発生します。 –
私はここでのコメント(そしてこのコメントは短い間に)で廃止された議論を削除します。コメントを削除することもできます。 – kjhughes