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)
  • יצירת תיעוד למסמכי XML (כגון 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)

קישורים חיצוניים[עריכת קוד מקור | עריכה]

Crystal Clear app ktalkd.png ערך זה הוא קצרמר בנושא מחשבים. אתם מוזמנים לתרום לוויקיפדיה ולהרחיב אותו.