Typ niestandardowy XSD z atrybutem i ograniczeniem

Opracowuję dokument XSD do sprawdzania poprawności plików importu XML. Prawie wszystkie elementy pliku importu „can” mają atrybut ID (UPDATE). Atrybut UPDATE musi być ograniczony do 4 możliwych wartości, więc mam ten typ predefiniowany do użycia dla ograniczenia atrybutu ...

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

Oprócz ograniczeń atrybutów, wartość każdego elementu jest ograniczona przez różne wstępnie ustawione typy niestandardowe. Przykład:

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

Aby połączyć te dwa elementy, wiem, że mogę to zrobić w linii dla każdego elementu w następujący sposób:

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

Problem polega na tym, że w pliku importu znajduje się ponad 1000 elementów, z których każdy ma różne ograniczenia długości / regEx / precyzji (w przybliżeniu 20 typów niestandardowych), a także potencjał dla atrybutu UPDATE. Bez atrybutu UPDATE mogłem wykonać każdy element w jego własnej linii, używając niestandardowych typów, znacznie zmniejszając część „zawartości” XSD. Ale z tego, co przeczytałem, wydaje się, że aby dostosować się do niestandardowych typów ORAZ potencjału wspomnianego atrybutu, zmuszony jestem użyć rozszerzonej próbki (ostatni przykład) zamiast móc zachować pojedynczą linię dla każdego takiego elementu . Czy nie ma sposobu, aby to jeszcze bardziej zminimalizować, tworząc niestandardowy typ łączący te dwa elementy?

questionAnswers(1)

yourAnswerToTheQuestion