حدود XSD / Facets

قيود (restriction) تستخدم لتعريف القيم المقبولة للعناصر أو الخاصيات في 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.

مثال أدنى يحدد عنصرًا محددًا بـ "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 سيزيل جميع الأحرفitespace (سيتم استبدال الأحرف البيضاء مثل النسخة والعودة والتسوية والسحابة بفضاءات، وسسيتم إزالة الفواصل البيضاء عند البداية والنهاية، وسيتم تقليص الفواصل البيضاء المتتالية إلى فاصلة واحدة فقط):

<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 تحديد الحد الأدنى للرقم. يجب أن تكون القيم المسموح بها أكبر أو تساوي هذا القيمة.
minLength تحديد عدد الحروف أو العناصر المسموح بها كحد أدنى. يجب أن يكون أكبر أو يساوي 0.
pattern تحديد سلسلة الحروف المقبولة بدقة. يجب أن تكون صحيحة.
totalDigits تحديد عدد الأرقام العربية المسموح به بدقة. يجب أن يكون أكبر من 0.
whiteSpace تحديد كيفية معالجة مسافات البيضاء (التنقلات، النقاطع، المسافات والتبويبات).