Benutzerdefinierter XSD-Typ mit Attribut und Einschränkung

Ich entwickle ein XSD-Dokument, um XML-Importdateien zu validieren. Fast alle Elemente der Importdatei können ein ID-Attribut (UPDATE) haben. Das UPDATE-Attribut muss auf 4 mögliche Werte begrenzt sein, damit ich diesen voreingestellten Typ für die Attributeinschränkung verwenden kann ...

<xs:simpleType name="MyUpDir">
  <xs:restriction base="xs:string">
    <xs:enumeration value="OVERWRITE"/>
    <xs:enumeration value="ADDONLY" />
    <xs:enumeration value="NOERASE" />
    <xs:enumeration value="IGNORE" />
  </xs:restriction>
</xs:simpleType>

Zusätzlich zu den Attributeinschränkungen wird der Wert jedes Elements durch eine Reihe vordefinierter benutzerdefinierter Typen begrenzt. Beispiel:

<xs:simpleType name="MyChar50">
  <xs:restriction base="xs:string">
    <xs:maxLength value="50" />
  </xs:restriction>
</xs:simpleType>

Um beides zu kombinieren, weiß ich, dass ich es für jedes Element wie folgt inline machen kann:

<xs:element name="FullName">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="MyChar50">
        <xs:attribute name="UPDATE" type="MyUpDir" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

Das Problem besteht darin, dass die Importdatei mehr als 1000 Elemente enthält, die jeweils unterschiedliche Längen- / RegEx- / Genauigkeitsbeschränkungen aufweisen (ungefähr 20 benutzerdefinierte Typen) und das Potenzial für das UPDATE-Attribut aufweisen. Ohne das UPDATE-Attribut könnte ich jedes Element in einer eigenen Zeile ausführen, indem ich die benutzerdefinierten Typen verwende, wodurch der "Content" -Anteil der XSD erheblich reduziert wird. Aber nach dem, was ich gelesen habe, scheint es, dass ich gezwungen bin, das erweiterte Beispiel (letztes Beispiel) zu verwenden, um den benutzerdefinierten Typen UND dem Potenzial für das erwähnte Attribut Rechnung zu tragen, anstatt für jedes dieser Elemente eine einzelne Zeile zu behalten . Gibt es keine Möglichkeit, dies weiter zu minimieren, indem Sie einen benutzerdefinierten Typ erstellen, der beide kombiniert?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage