2017-03-09 2 views
2

Ich schrieb eine Reihe von Behauptungen, um Datenpaare in XSD 1.1 zu vergleichen, aber keiner von ihnen funktioniert.XSD 1.1 bestätigen, um Daten zu vergleichen

Beispiele:

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 behauptet:

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

und

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

auf Datums- und Uhrzeit und Zeitzone Darstellungen nachlesen Nachdem bin ich ein wenig überwältigt.

Kann jemand bitte sagen Sie mir:

  • wo sind die Fehler (ich hoffe, es ist klar, was ich versuche, zu vergleichen)?
  • Gibt es eine Reihe von einfachen Beispielen dieser Art, die es einfacher machen zu folgen?

Antwort

1

Ihre xs: behauptenXPATH seine nicht korrekt, weil es assumming dass issuance-date und content-date Attribute des gleichen Elements sind, aber sie sind es nicht.

Sie eine Assertion mit dieser Probe XPATH zu sagen, dass "es gibt keine Rekord mit issuance-date größer oder gleich als der Mutter content-date" verwenden können:

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

Beispiel 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

Danke, ich werde dies bestätigen, bevor ich Ihre Antwort auswähle - aber wie sieht es mit den Zeitzonenvergleichen aus? Irgendeine Idee, was hier falsch ist? – Michael

+1

Etwas Ähnliches scheint mit dem Zeitzonenvergleichstest falsch zu sein, daher sollte die Lösung ähnlich sein. Ich denke, dass 'leer (Record [timezone-from-dateTime (@ issuation-date)! = Timezone-from-dateTime (../@ content-date)]) sollte funktionieren, aber ich kann es jetzt nicht testen – sergioFC

Verwandte Themen