Définir un élément XSD qui peut être un dateTime ou vide avec un attribut

Ma question est presque exactement la même que cette une, mais pour un xs:dateTime type plutôt que d'un élément défini par l'utilisateur.

Un élément dans mon XML (dont je ne fais pas) peut ressembler à:

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

-ou-

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

En d'autres termes, à l'intérieur de l'élément parent, le "début" et "fin" champs peuvent contenir soit une valeur xs:dateTime, ou sera vide mais qui ont une "référence" de l'attribut (que ce soit dans le domaine de l'un ou de l'autre parent, ils ne sont pas nécessairement à la fois une référence ou une dateTime). J'ai essayé toutes sortes de façons de représenter dans un XSD, mais n'ont pas trouvé une solution. Le plus proche que je suis venu est " (extrait d'un beaucoup plus grand 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>

qui ne valider le, mais n'empêche pas le nœud de contenu a une valeur xs:dateTime. Si je change l'extension du type de base à un xs:dateTime au lieu de xs:string comme dans le commentaire sur la ligne, les éléments vides ne plus valider parce que le type dateTime n'est pas autorisé à être vide.

Comment ai-je pu la structure XSD pour valider ces champs xs:dateTime au lieu de xs:string?

OriginalL'auteur Sean Purcell | 2013-09-13