2017-01-11 5 views
2

私は現在、対応するXMLファイルに対して検証などを制御するXSDファイルを持っています。私は、XLSTではなくアサートコマンドを使用して制御したいと思います。この])のとABCの同じ数があることを確認することができ:カントリータグABCへ:AccountNumberをタグ、一方が他方XSD 1.1要素を数えて比較するためのアサート

<abc:Account> 
     <abc:Individual> 
     <abc:Country>Germany</abc:Country> 
     <abc:Country>Australia</abc:Country> 
     <abs:AccountNumber issuedBy="DE">123456</abs:AccountNumber> 
     <abs:AccountNumber issuedBy="AU">654321</abs:AccountNumber> 
     </abc:Individual> 
    </abc:Account> 

に対応する必要がありますよう誰かがアサートコマンドで私を助けることができるしてくださいIこの妥当性検査を行うことができますか?

私は、これはXSD 1.1を使用してなんとかです推測...無駄に以下の

<xsd:assert test="if (count (abc:Account/abc:Individual/abc:Country) eq (count (abc:Account/abc:Individual/AccountNumber))) then true() else false() "/> 

またはこの....

<xsd:assert test="count (abc:Account/abc:Individual/abc:Country) eq count (abc:Account/abc:Individual/AccountNumber)"/> 

を試してみましたか?

任意のヘルプは大歓迎されます....おかげ

答えて

1

私が思うに、それはabc:Individual要素の型定義でアサートを持つことが最も理にかなって、それからアサートは単純です:

count(abc:Country) eq count(abc:AccountNumber) 

完全なスキーマはそうです。わかりやすくするために、をabc名前空間に保存しましたが、それ以外の場合は簡単に参照に置き換えることができます。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:abc="http://www.example.com/abc" 
    targetNamespace="http://www.example.com/abc" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
    vc:minVersion="1.1"> 
    <xs:element name="Account"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="abc:Individual" maxOccurs="unbounded" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Individual"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="abc:Country" maxOccurs="unbounded" /> 
       <xs:element ref="abc:AccountNumber" maxOccurs="unbounded" /> 
      </xs:sequence> 
      <xs:assert test="count(abc:Country) eq count(abc:AccountNumber)"/> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="Country" type="xs:string"/> 
    <xs:element name="AccountNumber"> 
     <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:string"> 
        <xs:attribute name="issuedBy" type="xs:string"/> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

別にabcからabsを変えるから、元の文書は、スキーマ、すなわち:

<?xml version="1.0" encoding="UTF-8"?> 
<abc:Account 
    xmlns:abc="http://www.example.com/abc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.example.com/abc test.xsd"> 
    <abc:Individual> 
     <abc:Country>Germany</abc:Country> 
     <abc:Country>Australia</abc:Country> 
     <abc:AccountNumber issuedBy="DE">123456</abc:AccountNumber> 
     <abc:AccountNumber issuedBy="AU">654321</abc:AccountNumber> 
    </abc:Individual> 
</abc:Account> 
+0

GhislainのFournyは今までどうもありがとうございましに対して首尾よく検証します!迅速かつ簡潔な応答は、私が欲しかったのと同じように働いた!ありがとうございました!!! :) –

関連する問題