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?