محدودیت‌ها/Facets در XSD

محدودیت (restriction) برای تعریف مقادیر قابل قبول برای یک عنصر XML یا ویژگی استفاده می‌شود. محدودیت برای یک عنصر XML به عنوان ویژگی شناخته می‌شود.

محدودیت مقادیر

مثال زیر یک عنصر محدود شده به نام "age" را تعریف می‌کند. مقدار age نمی‌تواند کمتر از 0 یا بیشتر از 120 باشد:

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

محدودیت یک مجموعه از مقادیر

برای محدود کردن محتوای یک عنصر XML به یک مجموعه از مقادیر قابل قبول، باید از محدودیت‌های عددی (enumeration constraint) استفاده کنیم.

مثال زیر یک عنصر با نام مشخص شده "car" با محدودیت دارد. مقادیر قابل قبول فقط: 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>

مثال بالا می‌تواند به صورت زیر نیز نوشته شود:

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

نکته:در این حالت، نوع "carType" می‌تواند توسط دیگر عناصر استفاده شود، زیرا بخشی از عنصر "car" نیست.

محدودیت یک مجموعه از مقادیر

برای محدود کردن محتوای یک عنصر XML به یک مجموعه از اعداد یا حروف قابل استفاده، باید از محدودیت‌های الگویی (pattern constraint) استفاده کنیم.

مثال زیر تعریف یک عنصر با نام مشخص شده "letter" با محدودیت دارد. مقادیر قابل قبول فقط یکی از حروف کوچک از a تا z است:

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

مثال بعدی تعریف یک عنصر با نام مشخص شده "initials" با محدودیت دارد. مقادیر قابل قبول سه حرف بزرگ از 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>

مثال بعدی نیز یک عنصر با نام مشخص شده "initials" با محدودیت دارد. مقادیر قابل قبول سه حرف بزرگ یا کوچک از 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>

مثال بعدی تعریف یک عنصر با نام مشخص شده "choice" با محدودیت دارد. مقادیر قابل قبول یکی از حروف x، y یا z است:

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

مثال بعدی تعریف یک عنصر با نام مشخص شده "prodid" با محدودیت دارد. مقادیر قابل قبول یک توالی از پنج عدد عربی هستند و هر عدد در محدوده 0-9 قرار دارد:

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

محدودیت‌های دیگر برای مجموعه‌ای از مقادیر

در این مثال، یک عنصر با نام محدودی به نام "letter" تعریف شده است. مقادیر قابل قبول صفر یا چند حرف از الفبا a-z هستند:

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

در این مثال، یک عنصر با نام محدودی به نام "letter" تعریف شده است. مقادیر قابل قبول یک جفت یا چند جفت حرف هستند که هر جفت شامل یک حرف کوچک و یک حرف بزرگ است. به عنوان مثال، "sToP" از این الگو عبور می‌کند، اما "Stop"، "STOP" یا "stop" نمی‌توانند از این الگو عبور کنند:

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

در این مثال، یک عنصر با نام محدودی به نام "gender" تعریف شده است. مقادیر قابل قبول male یا female هستند:

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

در این مثال، یک عنصر با نام محدودی به نام "password" تعریف شده است. مقادیر قابل قبول یک رشته از 8 کاراکتر است که باید از حروف بزرگ یا کوچک الفبا (a-z) یا اعداد 0-9 تشکیل شده باشد:

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

محدودیت کاراکترهای خالی

برای تعیین روش پردازش کاراکترهای خالی (whitespace characters)، باید از محدودیت whiteSpace استفاده کرد.

در این مثال، یک عنصر با نام محدودی به نام "address" تعریف شده است. محدودیت whiteSpace به "preserve" تنظیم شده است، که به این معناست که پردازنده XML هیچ کاراکتر خالی‌ای را حذف نمی‌کند:

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

این مثال نیز یک عنصر با نام محدودی به نام "address" را تعریف می‌کند. محدودیت whiteSpace به "replace" تنظیم شده است، که به این معناست که پردازنده XML تمام کاراکترهای خالی (پرش‌های خط، خط‌های بازگشت، فضاهای خالی و Tab):

<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 تمام کاراکترهای خالی (شامل خطوط جدید، بازگشت به خط، فاصله و Tab) را حذف می‌کند (کاراکترهای خالی در ابتدا و انتهای خط جایگزین می‌شوند و فاصله‌های متوالی به یک فاصله تبدیل می‌شوند):

<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 تعریف حداکثر numerical. مقادیر مجاز باید کوچکتر از این مقدار باشند.
maxInclusive تعریف حداکثر数值. مقادیر مجاز باید کوچکتر یا برابر با این مقدار باشند.
maxLength تعریف حداکثر تعداد کاراکترهای مجاز یا موارد لیستی. باید بزرگتر یا برابر با 0 باشد.
minExclusive تعریف حداقل数值. مقادیر مجاز باید بزرگتر از این مقدار باشند.
minInclusive تعریف حداقل مقدار عددی. مقدار مجاز باید بزرگتر یا برابر با این مقدار باشد.
minLength تعریف حداقل تعداد کاراکترهای مجاز یا موارد لیست. باید بزرگتر یا برابر با 0 باشد.
pattern تعریف توالی دقیق کاراکترهای مجاز.
totalDigits تعریف دقت عدد صحیح مجاز. باید بزرگتر از 0 باشد.
whiteSpace تعریف روش‌های پردازش کاراکترهای خالی (پرش، بازگشت خط، فاصله و تاب‌تست)