2017-03-09 2 views
2

XSD 1.1の日付のペアを比較するためのアサーションをいくつか書きましたが、どちらも機能しません。XSD 1.1日付を比較するためのアサート

例:

INPUT

<Records content-date="2006-05-04T18:13:51.0Z"> 

<Record issuance-date="2006-05-04T18:13:51.0Z" 
    last-update-date="2006-05-04T18:13:51.0Z" 
    last-renewal-date="2006-05-04T18:13:51.0Z" > 
</Record> 

<Record issuance-date="2006-05-04T18:13:51.0Z" 
    last-update-date="2006-05-04T18:13:51.0Z" last-renewal-date="2006-05-04T18:13:51.0Z"> 
    <Event event-date="2006-05-04T18:13:51.0Z" event-type="INITIAL_REGISTRATION"> 
    </Event> 
    </Record> 
</Records> 

XSD 1.1がアサート:

<xs:assert id="plausibility-issuance-date-plausibility" 
     test="@issuance-date &lt; ./@content-date"/> 

<xs:assert id="plausibility-file-and-record-timezones" 
     test="timezone-from-dateTime(Record/@issuance-date) = timezone-from-dateTime([email protected])"/> 

は、日時およびタイムゾーンの表現にまで読んだ私は少しです圧倒される。

誰も私に教えてくださいすることができ:エラー(私はそれが私が比較しようとしているものを明確に願っています)です

  • を?
  • このような種類の簡単な例があります。

答えて

1

あなたのxs:それはcontent-dateissuance-dateこととをassummingされているため、その正しくないXPATHを主張し、同じ要素の属性ですが、そうではありません。

あなたは "親 content-dateより issuance-date以上で無 録音がある" と言うことは、このサンプル XPATHでアサートを使用することができます

empty(Record[@issuance-date ge ../@content-date]) 

例XSD:

<xs:element name="Records"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Record" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:attribute name="issuance-date" type="xs:dateTime"/> 
        <xs:attribute name="last-update-date" type="xs:dateTime"/> 
        <xs:attribute name="last-renewal-date" type="xs:dateTime"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     <xs:attribute name="content-date" type="xs:dateTime"/> 
     <xs:assert id="plausibility-issuance-date-plausibility" test="empty(Record[@issuance-date ge ../@content-date])"/> 
    </xs:complexType> 
</xs:element> 
+0

回答を選択する前にこれを確認しますが、タイムゾーンの比較はどうですか?どのようなアイデアがここに間違っている? – Michael

+1

タイムゾーンの比較テストでも同様の問題があるようですので、解決策は似ているはずです。私は '空であると思っています。(date time-from-dateTime(@ issuance-date)!= timezone-from-dateTime(../@ content-date))')は動作するはずですが、今はテストできません – sergioFC