XSD

XSD (נקרא גם XML Schema Definition, מאנגלית: "הגדרת סכמה של XML") הוא תקן המשמש להגדרת סכמה (מבנה) של מסמכים הכתובים בשפת XML.‏ XSD הוא תקן של ארגון W3C שפותח במקור על ידי חברת מיקרוסופט. בעזרת XSD ניתן להגדיר באופן בלתי תלוי בפלטפורמה ובמימוש מבנה לייצוג מידע ב-XML ולבדוק את תקינותו (התאמתו לתקן) של XML נתון כתלות באילוצי יישום (Application Domain Constraints).
ב-XSD קיימים שני סוגי יסודות עיקריים, יסוד אטומי (Simple Element) ויסוד מורכב (Complex Element). יסוד אטומי מורכב אך ורק מאוסף של תכונות (attributes), בעוד שיסוד מורכב יכול להיות רצף של אובייקטים שונים.

תלות באילוצי יישום

XSD מאפשר לבדוק שהתגיות (או תוכנם) הם מטיפוס מסוים או בעל מגבלות מסוימות על הערכים אותם ניתן יהיה לקבל.
XSD מוסיף מנגנוני Typing ו-Facets אשר לא נתמכים בפורמט DTD.

דוגמה

להלן דוגמה לסכמת XSD בסיסית להגדרה של מדינה.
<xs:schema
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="country" type="Country"/>
 <xs:complexType name="Country">
 <xs:sequence>
 <xs:element name="name" type="xs:string"/>
 <xs:element name="population" type="xs:decimal"/>
 </xs:sequence>
 </xs:complexType></xs:schema>
דוגמה לקובץ XML שמוגדר על פי הסכמה מובאת להלן: (כשההנחה היא ששם הקובץ של סכמת ה-XSD הוא "country.xsd")‏.
<country
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="country.xsd">
 <name>France</name>
 <population>60,144,000</population></country>

מערכת טיפוסים

בניגוד ל DTD הגדרת הסכמה XSD מאפשר יצרת טיפוסי נתונים, כאשר קיימים טיפוסים פרימיטיביים (simpleType) קיימת אפשרות ליצירת רשימה של טיפוסים או איחוד (union) של טיפוסי נתונים.

xsd:anyType

טיפוס xsd:anyType מהווה בסיס לכל הטיפוסים המוגדרים בסכמה.
במערכות שמאפשרות שימוש ב xsd:anyType הטיפוס ממופה לטיפוס בסיס בשפות המאפשרות זאת (Object ב Java) ולטיפוס הפשוט ביותר שניתן לשימוש (void * עבור C ו C++).

simpleType

simpleType תיאור מבנה נתונים בXML המתאר טיפוסים מוגדרים מראש או טיפוסים שהוגדרו על ידי משתמש.
simpleType לא יכול להכיל attribure ולא יכול להכיל תת-אלמנטים.
ניתן להגדיר טיפוסים נוספים.
מוגדר תחת תקן w3C [XML-SCHEMA http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#rf-defn]

יצרת טיפוסים חדשים

ניתן ליצור טיפוס חדש כאשר הוא יהווה שם חדש לדוגמה :
<simpleType name="nice_atricale">
 <restriction base="xsd:string">
 </restriction>
 </simpleType>
מתבצעת פה הורשה מהטיפוס מחרוזות ויצרת טיפוס נתונים חדש.

דוגמה

<complexType name="wikipedia">
 <sequence>
 <element name="authers" type="xs:integer" minOccurs="0"/>
 <element name="readers" type="xs:integer" minOccurs="0"/>
 <element name="languages" minOccurs="0" maxOccurs="1/>
 </sequence>
 </complexType>

הורשת טיפוסי נתונים

ב XML הורשה מתבצעת באמצעות restriction או extension

restriction

בדוגמה זו מקטינים את כמות המופעים של אלמנט languages
<complexType name="restricted_wikipedia">
 <complexContent>
 <restriction base="n:wikipedia">
 <sequence>
 ...
 <element name="languages" maxOccurs="3"/>
 </sequence>
 </restriction>
 </complexContent></complexType>
יש למלא את כל האלמנטים שהיו בטיפוס אותו יורשים

שימוש ב restriction

restriction מגדיר את טיפוס האב עליו מפעילים הורשה.
הגבלה מאפשרת יצירת חוקים עבור מרחב הערכים אותם תגית מסוימת יכולה לקבל על ידי שימוש בfacets :
whiteSpace,enumeration ,pattern, fractionDigits,maxExclusive,maxInclusive,length,minExclusive,minInclusive,maxLength ,minLength ,totalDigits

facets / data parameters

מגדיר את מרחב הערכים שיכולים להתקבל עבור אלמנט מסוים השוני בין facet ל restriction הוא ש restriction משמש בהקשר של הצבעה על טיפוס האב ממנו יורשים, ו facet מגדיר את מרחב הערכים שיכול להתקבל.
ראו לדוגמה את facets עבור simpleType.

דוגמה

הגדרת הטיפוס xsd:base64binary למידע שקודד באמצעות אלגוריתם Base64:
<xsd:simpleType name="base64Binary" id="base64Binary">
 <xsd:restriction base="xsd:anySimpleType">
 <xsd:whiteSpace value="collapse" fixed="true"/>
 </xsd:restriction></xsd:simpleType>
ה-facets המותרים הם עבור טיפוס זה (פה מופיע רק whiteSpace):
length, minLength, maxLength, pattern, enumeration, whiteSpace

extension

הוספת אלמנטים לטיפוס האב (דומה להורשה שקיימת בתכנות מונחה עצמים).
<complexType name="ext_wikipedia">
 <complexContent>
 <extension base="n:wikipedia">
 <sequence>
 <element name="languages" minOccurs="3" maxOccurs="4"/>
 </sequence>
 </extension>
 </complexContent></complexType>

Subsumption (פולימורפיזם) )

ניתן לקבל רב צורתיות ב XML על ידי שימוש בטיפוס אותו אנו יורשים בהגדרה אנו מייצרים אלמנט שיכול להיות מטיפוס ext_wikipedia או מטיפוס wikipedia
<element name="my_home_wiki" type="ext_wikipedia"/>