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.
שימושים [עריכה]
- מנגוני יצרת קוד (code generation)
- מנגנוני יצרת תיעוד (תחליפים למערכות כגון doxygen , javadoc , perldoc).
- מנגנון טיפוסי הנתונים של WSDL המייבא XSD באמצעות טכנולוגיית ה XML namespace (אנ')
דוגמה [עריכה]
להלן דוגמה לסכמת 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) של טיפוסי נתונים.
sequence [עריכה]
אלמנט המאפשר יצרת מופעים נוספים של תת-אלמנטים בסדרת מופעים כאשר יש לפחות מופע אחד יכול להיות מוכל ב group, choice, sequence, complexType, או בהורשת טיפוסי נתונים.
תג squence מאפשר יצירת מערכי פתרון לרשימות מקושרות על ידי יצרת שימוש בתגיות:
- maxOccurs= מספר שלם חיובי או unbounded (כמות הופעות לפי מספר שלם או כל מספר)
- minOccurs=מספר שלם חיובי
מערך סטטי (גודל ידוע בזמן יצירת ה XML) ייצוג על ידי הגדרת macOccurs למספר שלם חיובי.
הרשימה תיוצג על ידי שימוש בהגדרה: unbound עבור כמות מרבית של הופעות.
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]
ערכים מובנים ברמת הסכמה [עריכה]
- string
- boolean
- decimal
- float
- double
- duration
- dateTime
- time
- date
- gYearMonth
- gYear
- gMonthDay
- gDay
- gMonth
- hexBinary
- base64Binary
- anyURI
- QName
- NOTATION
- enum
יצרת טיפוסים חדשים [עריכה]
ניתן ליצור טיפוס חדש כאשר הוא יהווה שם חדש לדוגמה :
<simpleType name="nice_atricale"> <restriction base="xsd:string"> </restriction> </simpleType>
מתבצעת פה הורשה מהטיפוס מחרוזות ויצרת טיפוס נתונים חדש.
complexType [עריכה]
complexType הוא טיפוס של נתוני XML. הנתונים יכולים להכיל:
- אוסף של simpleTypes
- תת-אלמנטים (nodes)
- מצביעים
סוגי complexType [עריכה]
- ריקים (ללא תוכן וגם ללא attributes)
- המכילים רק אלמנטים אחרים בתוכם (צורת עץ).
- מכיל רק טקסט
- המכילים טקסט ואלמנטים אחרים.
דוגמה [עריכה]
<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"/>
מניעת הורשה [עריכה]
על מנת למנוע הורשה ניתן האפשרות להשתמש ב:
- מניעת הורשה "final="restriction
- מניעת שימוש ב subsumption הוספת "block="#all
- קבלת טיפוס שאוסר שימוש באלמנטים abstract="true" (מקבילה ל abstract class ב java)
קישורים חיצוניים [עריכה]
- ספציפיקציה של XSD באתר W3C: מבוא בסיסי, מבנים, סוגי נתונים, and שונות
- W3C XML Schema Patterns for Databinding: קבוצת עבודה
- מדריך XML Schema באתר W3Schools
- Liquid XML Studio - עורך גרפי של XSD