In addition, the enumeration markup allows binding of annotations to each item, whereas the pattern can only take a single annotation for the entire pattern.
In general, I would prefer the enumeration here because it is more granular.
This is from schema I maintain as part of the DITA for Publishers project:
<xs:simpleType>
<xs:restriction
base="xs:NMTOKEN">
<xs:enumeration
value="map">
<xs:annotation>
<xs:documentation>
<xhtml:div xmlns="http://www.w3.org/1999/xhtml">
<p>The paragraph maps to a map but not a map title.</p>
</xhtml:div>
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration
value="mapTitle">
<xs:annotation>
<xs:documentation>
<xhtml:div xmlns="http://www.w3.org/1999/xhtml">
<p>The paragraph maps to the title of a map. Map titles are optional.</p>
</xhtml:div>
</xs:documentation>
</xs:annotation>
</xs:enumeration>
… many more values …
</xs:restriction>
</xs:simpleType>
Cheers,
Eliot
From: "Costello, Roger L." <costello@mitre.org>
Date: Wednesday, November 8, 2017 at 12:18 PM
To: "xml-dev@lists.xml.org" <xml-dev@lists.xml.org>
Subject: [xml-dev] Enumerating a set of values using the pattern facet versus the enumeration facet ... which is better?
Hi Folks,
Below are two XML Schema element declarations. Both enumerate a set of values for the <type> element. The first uses the pattern facet to enumerate the set of values. The second uses the enumeration facet. Is there a reason to prefer one over the other? Or, are they identical for all practical purposes? /Roger
<xs:element name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="contact|acquaintance|friend|met|co\-worker|colleague|co\-resident|neighbor|child|parent|sibling|spouse|kin|muse|crush|date|sweetheart|me|agent|emergency" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="contact" />
<xs:enumeration value="acquaintance" />
<xs:enumeration value="friend" />
<xs:enumeration value="met" />
<xs:enumeration value="co-worker" />
<xs:enumeration value="colleague" />
<xs:enumeration value="co-resident" />
<xs:enumeration value="neighbor" />
<xs:enumeration value="child" />
<xs:enumeration value="parent" />
<xs:enumeration value="sibling" />
<xs:enumeration value="spouse" />
<xs:enumeration value="kin" />
<xs:enumeration value="muse" />
<xs:enumeration value="crush" />
<xs:enumeration value="date" />
<xs:enumeration value="sweetheart" />
<xs:enumeration value="me" />
<xs:enumeration value="agent" />
<xs:enumeration value="emergency" />
</xs:restriction>
</xs:simpleType>
</xs:element>