Definieren Sie ein XSD-Element, bei dem es sich um ein dateTime- oder ein leeres Element mit einem Attribut handeln kann

Meine Frage ist fast genauso wiedieses, aber für einen xs: dateTime-Typ anstelle eines benutzerdefinierten Elements.

Ein Element in meinem XML-Code (das ich nicht erstelle) kann folgendermaßen aussehen:

<parent>
    ...
    <start>2012-01-01T00:00:00.000</start>
    <end>2013-01-01T00:00:00.000</end>
    ...
</parent>

-oder-

<parent>
    ...
    <start reference="a string" />
    <end reference="a string" />
    ...
</parent>

Mit anderen Worten, innerhalb des übergeordneten Elements können die Felder "start" und "end" entweder einen xs: dateTime-Wert enthalten oder leer sein, verfügen jedoch über ein "reference" -Attribut (eines der beiden Felder kann sich innerhalb des übergeordneten Elements befinden) , sie müssen nicht beide eine Referenz oder beide ein Datum (Uhrzeit) sein. Ich habe alle möglichen Möglichkeiten ausprobiert, um dies in einer XSD darzustellen, aber keine Lösung gefunden. Am nächsten bin ich gekommen (Auszug aus einer viel größeren XSD):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="DateOrRef">
    <xs:simpleContent>
<!--      <xs:extension base="xs:dateTime"> This does not validate-->
      <xs:extension base="xs:string">
        <xs:attribute type="xs:string" name="reference" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="parent">
    <xs:sequence>
        <xs:element minOccurs="0" name="start" type="DateOrRef" />
        <xs:element minOccurs="0" name="end" type="DateOrRef" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Dies überprüft den Inhalt des Knotens, schränkt ihn jedoch nicht auf einen xs: dateTime-Wert ein. Wenn ich den Erweiterungsbasistyp wie in der auskommentierten Zeile in xs: dateTime anstelle von xs: string ändere, werden die leeren Elemente nicht mehr überprüft, da der Typ dateTime nicht leer sein darf.

Wie könnte ich das XSD strukturieren, um diese Felder als xs: dateTime anstelle von xs: string zu validieren?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage