محدودیت‌های XSD / ویژگی‌ها

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

محدود کردن مقادیر

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

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

محدودیت نوع داده

محدودیت توضیح
شمارش تعریف لیستی از مقادیر قابل قبول
عدد دسیمال تعریف بیشترین تعداد دسیمال مجاز. باید بزرگتر یا برابر با 0 باشد.
طول تعریف تعداد دقیق مجاز برای کاراکترها یا موارد لیستی. باید بزرگتر یا برابر با 0 باشد.
محدوده بالاتر از تعریف حد بالا برای عددی. مقادیر مجاز باید کمتر از این مقدار باشند.
محدوده بالاترین تعریف حداکثر مقدار عددی. مقادیر مجاز باید کوچکتر یا برابر با این مقدار باشند.
maxLength تعریف حداکثر تعداد کاراکترها یا موارد مجاز. باید بزرگتر یا برابر با 0 باشد.
minExclusive تعریف حداقل مقدار عددی. مقادیر مجاز باید بزرگتر از این مقدار باشند.
minInclusive تعریف حداقل مقدار عددی. مقادیر مجاز باید بزرگتر یا برابر با این مقدار باشند.
minLength تعریف حداقل تعداد کاراکترها یا موارد مجاز. باید بزرگتر یا برابر با 0 باشد.
pattern تعریف توالی دقیق کاراکترهای مجاز.
totalDigits تعریف دقت ارقام عربی مجاز. باید بزرگتر از 0 باشد.
whiteSpace تعریف روش پردازش کاراکترهای خالی (پرش‌های خط، بازگشت به خط، فضاهای خالی و تاب‌ها).