محدودیت ها (XSD Restrictions)
در XSD، «محدودیت (Restriction)» یا «قید (Facet)» یعنی قانونِ مقدار. با این قانون، مقدارِ عنصر یا ویژگی کنترل می شود. مثل برگه نمره که حداقل صفر و حداکثر بیست دارد. اینجا هم همین ایده است. تمرکز ما «محدودیت های XSD» است.
قید روی مقدار عددی
می خواهیم سن بین 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>
قید مجموعه مقادیر مجاز
با «enumeration» فقط چند مقدار مشخص را می پذیریم. مثل منوی سه گزینه ای.
<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>
قید الگو (pattern) برای رشته ها
با «pattern» می گوییم رشته باید شکل خاصی داشته باشد. مثل الگوی نام کاربری.
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<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>
<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>
<xs:element name="choice">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[xyz]" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<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>
الگوهای بیشتر و تکرار
می توانیم صفر یا چندبار تکرار داشته باشیم. یا الگوی جفت ها.
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<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)
می گوییم فاصله ها چگونه مدیریت شوند: حفظ، جایگزینی، یا فشرده سازی.
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse" />
</xs:restriction>
</xs:simpleType>
</xs:element>
قید طول رشته
با length، minLength، maxLength اندازه مجاز را تعیین کن.
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<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>
نکات و ادامه مسیر
- برای تعریف عنصر ساده، به عناصر (XSD Elements) مراجعه کن.
- برای ویژگی ها و حالت required، صفحه ویژگی ها (XSD Attributes) را ببین.
- برای ریشه طرح واره و فضاهای نام، برچسب <schema> (XSD <schema>) مناسب است.
جمع بندی سریع
- enumeration یعنی لیستِ مجازها.
- pattern یعنی الگوی اجباری متن.
- min/maxInclusive مرز بسته تعیین می کند.
- whiteSpace نحوه مدیریت فاصله هاست.
- length ها اندازه رشته را محدود می کنند.