XSD Facets

Eine Beschränkung (restriction) wird verwendet, um für XML-Elemente oder Attribute akzeptable Werte zu definieren. Eine Beschränkung für XML-Elemente wird als Facet bezeichnet.

Beschränkung der Werte

Das folgende Beispiel definiert ein Element mit dem Namen "age", das eine Beschränkung aufweist. Der Wert von "age" darf nicht unter 0 oder über 120 liegen:

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Beschränkung einer Gruppe von Werten

Um den Inhalt eines XML-Elements auf eine Gruppe akzeptabler Werte zu begrenzen, müssen wir Enumeration-Beschränkungen (Enumeration-Beschränkungen) verwenden.

Der folgende Beispiel definiert ein Element mit einer spezifischen Bezeichnung "car". Akzeptierte Werte sind nur: Audi, Golf, BMW:

<xs:element name="car">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Der obige Beispiel kann auch so geschrieben werden:

<xs:element name="car"> type="carType"/>
<xs:simpleType name="carType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>

Anmerkung:In diesem Fall kann der Typ "carType" von anderen Elementen verwendet werden, da er nicht Teil des Elements "car" ist.

Beschränkung einer Reihe von Werten

Um den Inhalt eines XML-Elements auf eine Reihe von verwendbaren Ziffern oder Buchstaben zu begrenzen, müssen wir Musterbeschränkungen (Musterbeschränkungen) verwenden.

Der folgende Beispiel definiert ein Element mit einer spezifischen Bezeichnung "letter". Akzeptierte Werte sind nur einer der Kleinbuchstaben a - z:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Der nächste Beispiel definiert ein Element mit einer spezifischen Bezeichnung "initials". Akzeptierte Werte sind drei Großbuchstaben A - Z:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Z][A-Z][A-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Der nächste Beispiel definiert ebenfalls ein Element mit einer spezifischen Bezeichnung "initials". Akzeptierte Werte sind drei Groß- oder Kleinbuchstaben a - z:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Der nächste Beispiel definiert ein Element mit einer spezifischen Bezeichnung "choice". Akzeptierte Werte sind eines der Buchstaben x, y oder z:

<xs:element name="choice">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[xyz]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Der nächste Beispiel definiert ein Element mit einer spezifischen Bezeichnung "prodid". Akzeptierte Werte sind eine Sequenz von fünf arabischen Ziffern, wobei jede Ziffer im Bereich 0-9 liegt:

<xs:element name="prodid">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Andere Beschränkungen für eine Reihe von Werten

Ein weiteres Beispiel definiert ein Element mit dem beschränkten Namen "letter". Akzeptierte Werte sind Null oder mehrere Buchstaben aus a - z:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z])*"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ein weiteres Beispiel definiert ein Element mit dem beschränkten Namen "letter". Akzeptierte Werte sind Paare oder mehrere Paare von Buchstaben, die aus einem kleinen Buchstaben gefolgt von einem großen Buchstaben bestehen. Zum Beispiel wird "sToP" durch dieses Muster validiert, aber "Stop", "STOP" oder "stop" können nicht validiert werden:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z][A-Z])+"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ein weiteres Beispiel definiert ein Element mit dem beschränkten Namen "gender". Akzeptierte Werte sind "male" oder "female":

<xs:element name="gender">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="male|female"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ein weiteres Beispiel definiert ein Element mit dem beschränkten Namen "password". Akzeptierte Werte sind Zeilen mit 8 Zeichen, die aus großen oder kleinen Buchstaben a - z oder Ziffern 0 - 9 bestehen:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9]{8}"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Beschränkung von Leerzeichen

Um die Verarbeitung von Leerzeichen (Leerzeichenzeichen) zu bestimmen, müssen wir die whiteSpace-Beschränkung verwenden.

Ein weiteres Beispiel definiert ein Element mit dem beschränkten Namen "address". Diese whiteSpace-Beschränkung ist auf "preserve" gesetzt, was bedeutet, dass der XML-Verarbeiter keine Leerzeichen entfernen wird:

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="preserve"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Dieser Beispiel definiert auch ein Element mit dem beschränkten Namen "address". Diese whiteSpace-Beschränkung ist auf "replace" gesetzt, was bedeutet, dass der XML-Verarbeiter alle Leerzeichen (Zeilenumbruch, Return, Leerzeichen und Tabulator) entfernen wird:

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="replace"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

这个例子也定义了带有一个限定的名为 "address" 的元素。这个 whiteSpace 限定被设置为 "collapse",这意味着 XML 处理器将移除所有空白字符(换行、回车、空格以及制表符会被替换为空格,开头和结尾的空格会被移除,而多个连续的空格会被缩减为一个单一的空格):

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

对长度的限定

如需限制元素中值的长度,我们需要使用 length、maxLength 以及 minLength 限定。

本例定义了带有一个限定且名为 "password" 的元素。其值必须精确到 8 个字符:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

这个例子也定义了带有一个限定的名为 "password" 的元素。其值最小为 5 个字符,最大为 8 个字符:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

数据类型的限定

限定 描述
enumeration 定义可接受值的一个列表
fractionDigits 定义所允许的最大的小数位数。必须大于等于0。
length 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
maxExclusive 定义数值的上限。所允许的值必须小于此值。
maxInclusive 定义数值的上限。所允许的值必须小于或等于此值。
maxLength 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
minExclusive 定义数值的下限。所允许的值必需大于此值。
minInclusive Define the lower limit of the number. The allowed values must be greater than or equal to this value.
minLength Define the minimum number of allowed characters or list items. It must be greater than or equal to 0.
pattern Define the precise sequence of acceptable characters.
totalDigits Define the precise number of decimal places allowed for Arabic numerals. It must be greater than 0.
whiteSpace Define the handling of whitespace characters (newlines, carriage returns, spaces, and tabs).