Download presentation
Presentation is loading. Please wait.
1
1 236363 מערכות מסדי נתונים 7. מבוא למסמכי XML ו-DTD שקפים:אלדר פישר
2
2 ספרות נוספת Elliotte Rusty Harold and W. Scott Means, XML in a Nutshell, O’Reilly. Neil Bradley, The XML Companion, Addison-Wesley. מאמר סקירה מעניין עם זוויות תיאורטיות: Nils Klarlund, Thomas Schwentick and Dan Suciu, XML: Model, Schemes, Types, Logics and Queries.
3
3 קיצור תולדות ה-XML הסטנדרטים הקשורים ב-XML הם תולדה של סטנדרט ה-SGML (Standard Generalized Markup Language), אשר פיתוחו החל בשנות ה-70 ושהפך לסטנדרט ב-1986. ה-SGML נועד במקור כשפה להגדרת וסימון מבנים של מסמכים טקסטואלים, והוא אכן זכה להצלחה בתחומים מסוימים הדורשים ניהול מסמכים טכניים גדולים במיוחד. עם זאת, מעט מאוד תוכנות ישמו את הסטנדרט המלא. ה-SGML הוא במובן מסוים "כללי מדי", דבר הגורם לריבוי של מקרי-קצה שעל התוכנה לדאוג לטפל בהם אחד לאחד.
4
4 תולדות ה -XML המשך ההצלחה הגדולה של SGML בעולם הרחב היא בשימוש בסכימה ("ישום") של SGML לתיאור עיצוב עמודי מידע על הרשת (web), סכימה הידועה בשם HTML Hyper Text Markup Language. עם זאת, ראוי לציין שסכימה זו אינה משתמשת בחוזק התיאורי המלא של SGML. החל מ-1996 החלה ב-W3C העבודה על גרסא "מופחתת" של SGML, שנקראה XML eXtensible Markup Language, מתוך מטרה לאפשר נגישות רבה יותר לחוזקים העיקריים של שפת ה-SGML בעולם החדש של הרשת. ה-XML זכה להצלחה מיידית, כאיזון טוב בין כלליות ופשטות. כיום סטנדרט ה-XML והשפות הקשורות אליו כוללים גם פיתוחים בכיוונים שלא היו קיימים ב-SGML המקורי, שהתאפשרו מנגישותו.
5
5 מה החשיבות ב-XML בראשית הדרך XML נחשב לתחביר לאחסון מידע, File format. עד מהירה התברר שסטנדרט זה שימושי ביותר גם להעברת נתונים בין תוכנות שונות אשר לא תוכננו מראש לעבוד בתיאום, כתחביר להעברת מידע, Data exchange format. כיום מסמכי XML אינם בהכרח מאוחסנים כקבצים, אלא לעיתים מהווים רמה אחת של אבסטרקציה מעל האחסון עצמו. כמובן שלא התחביר לבדו חשוב, אלא (בעיקר) מה הוא מייצג ואלו פעולות ניתן לבצע במידע המיוצג. כשם שפותחו שפות ואלגוריתמים לטיפול במידע המיוצג ע"י רלציות, כך מפותחים כיום שפות ואלגוריתמים לטיפול במידע המיוצג ע"י המבנה דמוי העץ הסדור המתבטא ב-XML.
6
6 מידע מובנה ומידע מובנה למחצה המידע המאוחסן במסדי נתונים רלציונים הוא מובנה (structured): –כל אובייקט שייך לאחד ממספר סופי וקבוע מראש של טיפוסים. –טיפוס האובייקט קובע במדויק את מספר "תתי-האובייקט" שבו ואת סוגיהם (במינוח הרלציוני הדבר מתבטא בפירוט התכונות של טיפוס האובייקט). בעולם האמיתי קיימים מקרים שבהם מודל זה אינו גמיש מספיק. למשל: –מפרטים טכניים של מכונות. לא לכל מכונה יהיה אותו מספר חלקים מכל סוג, לחלק מהחלקים יהיו הוראות התקנה מיוחדות ולחלק לא, וכו'... –מסמכי תיעוד (כגון ספרי הדרכה). לא לכל פרק יהיה אותו מספר של תתי-פרקים ולא בכל תת-פרק יהיה אותו מספר של תרשימים (אם בכלל).
7
7 מידע מובנה למחצה ו-XML תחביר ה-XML הוא גישה לאחסון מידע שנאמר עליה שהיא מובנית למחצה (semi-structured) ומתארת עצמה (self-describing). מובנית למחצה: ניתן לתת ייצוג טבעי ב-XML למידע שייצוגו במסד נתונים מובנה לא יהיה טבעי. הייצוג ישקף את האילוצים הקיימים על מבנה המידע, מבלי "לאלץ" אותו לסכימה מובנית לחלוטין. מתארת עצמה: מסמך XML טיפוסי ישקף לא רק את המידע המאוחסן, אלא גם את הסכימה שלפיה המידע אוחסן.
8
8 XML כמתאר טקסט מסומן ניתן להסתכל על קובץ XML כקובץ טקסט עם תיוגים על קטעים ממנו: זוהי נקודת המבט השלטת ביישומים כגון עיצוב מסמך לפרסום (באתר רשת או באופן אחר), וכן בחלק גדול מהספרות העכשווית בתחום. Gone with the wind 1939 The age-less classic Do not miss ! Gone with the wind 1939 The age-less classic Do not miss ! title year review emphasis movie
9
9 אפשר גם לחשוב על מסמך XML כעל ייצוג ליניארי של עץ מידע: נקודת מבט זו מתאימה במיוחד ליישומים הקשורים במאגרי מידע ממוחשבים, ולכן נתמקד בעיקר בה במהלך הקורס. XML כמייצג עץ (מתויג, סדור, עם ערכים) Gone with the wind 1939 The age-less classic Do not miss ! movie titleyearreview #pcdataemph #pcdata “Gone with the wind” “1939” “The age-less classic” “Do not miss !”
10
10 עצים סדורים ומתויגים באופן פורמאלי, מסמך XML יתאר את המבנה הקומבינטורי בעל הרכיבים הבאים: –קבוצת צמתים (nodes) N וקבוצת קשתות E, אשר ביחד מהווים עץ מכוון (בעל שורש). –סדר טוב ">" על הצמתים, המתאר סדר הגעה אפשרי בביצוע אלגוריתם DFS מהשורש, ובפרט שומר על כיווני העץ אם צומת y הוא בן של x אז x<y. בייצוג גרפי של העץ ניתן לייצג סדר זה ע"י כך שנכתוב צמתים אחים לפי סדרם, משמאל לימין. –פונקצית תיוג (tagging/labeling) חלקית מקבוצת הצמתים N אל "אלפבית" סופי כל שהוא (למשל קבוצת כל התגים החוקיים במסמך HTML). –פונקצית ערך חלקית מקבוצת הצמתים N אל "אלפבית" אין- סופי. במסמך XML ערכים אלו יהיו מחרוזות וקטעי טקסט.
11
11 תחביר בסיסי של מסמך XML צומת "רגיל" בעץ בעל התווית "tag" יצוין במסמך ע"י זוג התגים …. תוכן כל תת-העץ מתחת לצומת המדובר ייוצג במסמך בין זוג התגים הנ"ל. דוגמא: 14 May 1948 עבור צמתי טקסט (#PCDATA) פשוט כותבים את ערכם במסמך. שימו לב שבעיבוד המסמך מתעלמים מהתצורה המדויקת של רווחים, מעברי שורה, ודומיהם (white spaces). לייצוג צומת בעל תווית אולם ללא בנים ניתן להשתמש בסימון המקוצר. דוגמא:.
12
12 תחביר בסיסי המשך הצמד “ … ” משחק תפקיד דומה לצמד "פתח סוגריים (מסוג tag)... סגור סוגריים (תואמים)". על מנת שהמסמך אכן ישקף מבנה של עץ, יש להקפיד על הכללים הבאים: –כל התגים מתחלקים לזוגות תואמים, עם “ ” לפני “ ” (למעט אלו בסימון המקוצר “ ”, השקול לסימון “ ”). –עבור כל זוג תגים בחלוקה הנ"ל, לא קיים ביניהם תג אשר בן הזוג שלו אינו ביניהם. דוגמא: הצירוף הבא אינו חוקי: Some Text רק צירופים כגון אלו חוקיים: Some Text Some Text
13
13 מעץ גרפי למסמך XML “Merilyn Monroe” actor namebirthday #pcdata “1.6.1926” “Merilyn Monroe” namebirthday #pcdata “1.6.1926” “Merilyn Monroe” #pcdata “1.6.1926” Merilyn Monroe 1.6.1926
14
14 תכונות עבור צמתים בעלי תוויות ניתן להצהיר על תכונות עם ערכים. אלו בד"כ ישמשו לכתיבת מידע נוסף על סוג הצומת. דוגמאות: Gone with the wind בספרות יש מספר גישות להתייחסות לתכונות. אנו נתייחס להן כאל צמתים בנים של הצומת שעבורו הן מוכרזות. בדוגמא הראשונה למעלה נייצג את העץ באופן הבא: @language title #pcdata “en”“Gone with the wind”
15
15 עצי XML התאמות נוספות תמונה מדויקת פורמלית של מסמכי XML כעץ תינתן באופן הבא: –השורש של העץ יהיה צומת מיוחד המייצג את המסמך כולו. בהרבה מקרים יהיה לצומת השורש בן יחידי (למשל, קבצי XHTML, SVG,... ) שיקרא צומת המסמך, אולם יש מקרים שבהם לצומת זה יהיו מספר בנים (למשל, קובץ יומן – log). –שאר הצמתים יחולקו לצמתי אלמנטים (המתאימים לתגים במסמך), צמתי תכונות (המתאימים לתכונות של תגים) וצמתי טקסט. צמתי תכונות וטקסט תמיד יהיו עלים שהם בנים של צמתי אלמנטים. –הסדר תמיד ימקם את צמתי התכונות לפני כל האחים שלהם, ולא יהיה מוגדר כלל בתוך קבוצות של צמתי תכונות אחים (כך שהמדובר למעשה בסדר חלקי). –תוויות יהיו לצמתי האלמנטים וצמתי התכונות. ערכים יהיו לצמתי התכונות וצמתי הטקסט.
16
16 מה יש עוד במסמך XML השורה הראשונה של קובץ XML תכיל הצהרה על סוג המסמך ועל הקידוד של האותיות (ASCII, Unicode, …): (למעשה אין צורך להכריז על UTF-8 כי זוהי ברירת המחדל). במהלך הקובץ יתכנו הערות. אלו יהיו מוקפות בסימון “ ” ויהיו מיועדות בעיקר לעיניים אנושיות למרות שנהוג לכלול אותם בתיאור העץ (כצמתים מסוג "הערה"), המקובל הוא שאין להערות השפעה על הגדרת המשמעות של תוכן מסמך. קובץ המציית לתחביר ה-XML יקרא בנוי היטב – well formed. בקובץ XML יהיו בדרך כלל גם הצהרות על מבנהו. מייד נלמד על כמה מהן הקשורות להגדרת המבנה ע"י DTD.
17
17 יישומי XML ללא הגבלות נוספות על תחביר ה-XML, אין דרך להבטיח שהמסמך אכן יתאים לסוג המידע שאותו היישום הספציפי אמור לאחסן או לקרוא. על מנת להגדיר את ישום ה-XML, קבוצת המסמכים ה"תקינים", אנו נשתמש בשפה מתאימה. השפה הנפוצה ביותר לשם כך, וזו שנלמד בקורס, נקראת DTD Document Type Description. מסמכים המצייתים ל-DTD המתאר את היישום המתאים יקראו תקינים valid. מכיוון שה-DTD (ושפות סכימה אחרות) מגדיר למעשה את "שפת כל המסמכים התקינים", שפת ה-DTD נקראת לעיתים גם "מטה-שפה". שימו לב ששפות הסכימה מגבילות בעיקר את סוגי הצמתים ותוויות הצמתים. DTD אינה מגבילה בד"כ את ערכי הצמתים, פרט לכמה מקרים יוצאים מהכלל.
18
18 XML ו-DTD שפת הגדרת הסכימות, DTD, היא למעשה חלק בלתי נפרד מסטנדרט ה-XML. מסמך XML יכול להכיל בתחילתו הכרזת מבנה ב-DTD. בד"כ הכרזה זו תכיל הפניה לקובץ DTD חיצוני, אולם ניתן גם למקם את כל הכרזת המבנה במסמך ה-XML עצמו. קובץ ה-DTD הוא לא מסמך XML בעצמו, אלא סדרה של הכרזות (כל אחת מהצורה “ ” ).
19
19 מה מוגדר ב-DTD החלק הארי של ה-DTD יגדיר אלו בנים (לפי סוג ותווית) יכולים להיות לכל צומת. book @languagechapter titleparagraph #PCDATA DTD
20
20 הכרזת המבנה ההכרזה על מבנה המסמך היא מהצורה כאשר "doc" הוא התווית של צומת המסמך. בד"כ לאחר הכרזה זו שאר הקובץ יהיה מסמך תקין ע"פ תוכן ה-DOCTYPE, המוקף בצמד … יחיד (ז"א שלצומת השורש יהיה בן יחיד שהוא צומת אלמנט עם תווית doc). עבור הכרזת DTD פנימית למסמך ה-XML, כל הכרזות המבנה יכונסו בסוגריים מרובעים:
21
21 דוגמא למסמך עם DTD פנימי <!DOCTYPE hello [ ] > Hello Word!
22
22 הכרזות מבנה עם קובץ חיצוני על מנת להכריז על קובץ DTD חיצוני (לפי URL) משתמשים במילה SYSTEM. דוגמא: ניתן גם לשלב DTD חיצוני עם התאמות ותוספות פנימיות לקובץ: על מנת להכריז גם על זיהוי ציבורי (Public ID) אשר יזהה את היישום ללא תלות במיקום הספציפי של הקובץ, משתמשים במילה PUBLIC:
23
23 ביטויים רגולרים בדומה לשפות אחרות (כגון Perl, bash), בכמה שפות הקשורות ב-XML, כולל DTD, נעשה שימוש בביטויים המבטאים שפות רגולריות. שימוש בביטויים אלו מוסיף חוזק לשפה ה"מארחת" במקומות בהם אנו נדרשים לתאר סדרה קבילה של עצמים, במחיר לא יקר במיוחד ברמת כתיבתו של Parser עבור אותה שפה. ב-DTD ה"אלפבית" שלנו הוא קבוצת התוויות החוקיות לפי אותו DTD, ולא תווים בודדים.
24
24 ביטויים רגולרים תחביר הביטויים האטומיים הם אלו המורכבים מ"אות" בודדת. במקרה שלנו המדובר הוא בתגים אשר מורשים להופיע במסמך XML המציית לאותו DTD (למשל title, section,…). עבור צומת טקסט נשתמש במילה השמורה “#PCDATA” (תחת מגבלות אשר יתוארו בהמשך). הפעולות הבסיסיות: בהינתן שני ביטויים רגולרים φ 1, φ 2, ניתן להרכיב אותם באופנים הבאים: שרשור: φ 1,φ 2 מציין את השפה המורכבת מכל שרשור אפשרי של סדרה תקנית לפי φ 1 וסדרה תקנית לפי φ 2 (בסדר זה). איחוד: φ 1 | φ 2 מציין את השפה המורכבת מאיחוד שתי השפות המתאימות. סגור Kleene: הביטוי φ 1 ∗ מציין את השפה המורכבת משרשור של מספר כל שהוא של סדרות הנמצאות בשפה של φ 1. גם הסדרה הריקה תימצא ב - φ 1 ∗, כשרשור של אפס סדרות מהשפה של φ 1.
25
25 ביטויים רגולרים פעולות מרוכבות התחביר של DTD מגדיר בנוסף את הפעולות הבאות: הביטוי φ+ מתאר את כל השרשורים האפשריים של סדרת תגים אחת או יותר מתוך φ. שקול לביטוי φ,(φ ∗ ). הביטוי φ? מתאר את השפה המורכבת מהסדרות התקינות לפי φ בתוספת הסדרה הריקה. מכיוון שאין ב-DTD קבוע המתאר את הסדרה הריקה המשמש בביטויים רגולרים (אלא רק מילה שמורה עבור המקרה שבו אנו מוכנים לקבל אך ורק את הסדרה הריקה), אנו חייבים במקרים מסוימים להשתמש בביטוי זה.
26
26 הכרזה בסיסית על טיפוס צומת נעשית באופן הבא: כאשר:“tag” הוא התווית של הצומת, “children …” הוא ביטוי רגולרי המתאר אלו בנים יכולים להיות לצומת עם תווית זו, ובאיזה סדר. עם הגדרת הבנים האפשריים, הכרזה זו גם מגדירה את “tag” כתווית חוקית עבור האלמנטים של המסמך. הכרזה זו אינה מספקת מידע על תכונות, אלא רק על בנים שהם צמתי אלמנט וצמתי טקסט. התכונות יוגדרו בהכרזה נפרדת.
27
27 דוגמאות מגדירה צמתי “person” עם הדרישה שיהיה להם בן אחד “name” שלאחריו אפס או יותר בנים “address”. מגדירה צמתי “name” כצמתים אשר יכולים להכיל רק טקסט (בין סימני ה- … ). צמד ההכרזות: יגדיר אלמנט “paragraph” המכיל טקסט עם "הדגשות" (מקטעים המוקפים ב- … ).
28
28 מגבלות בשימוש ב-#PCDATA לא ניתן לשלב הכרזות על צמתי טקסט באפן חופשי בביטויים הרגולרים עבור הבנים של צומת נתון, אלא ניתן להשתמש רק באחת משתי התצורות הבאות: הכרזה על צומת שיכול להכיל אך ורק טקסט: נעשית על פי הדוגמה הבאה: הכרזה על צומת המכיל טקסט ובנים אחרים: ניתן להכריז על סוגי הבנים הנוספים, אך לא על סדרם ומספרם, ע"פ הדוגמא הבאה:
29
29 אפשרויות הכרזה נוספות לצמתים מכריז על צומת אלמנט “tag” אשר לא יכולים להיות לו בנים כלל. מכריז שלצומת “tag” יכולים להיות בנים מסוג טקסט ומסוג אלמנט עם כל תווית חוקית עבור המסמך, ובכל סדר שהוא. בהכרזה זו לרב לא נעשה שימוש כי כל הרעיון בכתיבת DTD הוא לציין מגבלות על מבנה העץ.
30
30 הכרזה על תכונות הכרזה על אפשרות לקיום תכונות עבור צומת אלמנט עם תווית “tag” נעשית באופן הבא: כאשר: att i שם התכונה ה-i (יש לזכור עם זאת שלסדר הכרזת התכונות כאן אין השפעה על סדר הופעתן במסמך ה-XML עצמו) type i סוג המידע בתכונה. בדרך כלל זה יהיה CDATA, הווה אומר שהערך יכול להיות מחרוזת כל שהיא. def i ערך ברירת-מחדל עבור התכונה במידה וזו אינה מופיעה במסמך. <!ATTLIST tag att 1 type 1 def 1 att 2 type 2 def 2 … >
31
31 תכונות המשך ערך ברירת המחדל יכול להיות כל ערך חוקי עבור התכונה. דוגמא: בנוסף, אפשר במקום ערך ספציפי להשתמש באחת מהמילים השמורות הבאות: #REQUIRED מתאר מצב שבו חובה על כל צומת אלמנט במסמך שעבורו הוגדרה התכונה לקבל ערך מפורש עבורה. #IMPLIED מתאר מצב שבו התכונה אינה חייבת להופיע כצומת בן של צומת האלמנט המתאים. באחריות התוכנה לטפל גם במקרה שבו תכונה זו אינה מופיעה.
32
32 תכונות דוגמא ההכרזות: <!ATTLIST image source CDATA #REQUIRED height CDATA #IMPLIED width CDATA #IMPLIED > מגדירות אלמנט “image” כאלמנט ללא בנים פרט לתכונות. התכונות הן “source” אשר חייבת להופיע (ולהכיל למשל את שם קובץ התמונה), ו-“height”,”width” אשר אינן חייבות להופיע (ואם הן אינן מופיעות, אז על התוכנה להסתדר בלעדיהן, למשל ע"י הסקת מימדי התמונה מתוכן הקובץ שלה). שימו לב ששתי התכונות האחרונות הוגדרו כמחרוזות. אין אפשרות ב-XML להגדיר תכונות מספריות.
33
33 זיהויים והפניות ב-XML כפי שניתן לראות אף ממסד הנתונים הפשוט ביותר, מבנה של עץ סדור לא תמיד יספיק לקבלת תמונה מלאה של המידע המאוחסן. שפת ה-DTD מאפשרת לנו להגדיר תכונות היכולות לשמש כזיהויים של צמתים במסמך, ותכונות אחרות המשמשות כמצביעים לזיהויים אלה. התכונות הנ"ל מוגדרות כתכונות מסוג ID (עבור זיהויים) ותכונות מסוג IDREF או IDREFS (עבור מצביעים).
34
34 הכרזת תכונת זיהוי ID נעשית על פי הדוגמא הבאה: כל התכונות מסוג ID במסמך חייבות להיות שונות זו מזו (ללא קשר לתוויות הצמתים שהתכונות משויכות אליהן). ערך תכונה מסוג ID הוא מחרוזת אלפא-נומרית אשר מתחילה באות (כך שבעצם אין אפשרות בדוגמא להכניס רק את מספר הזהות של אדם, אלא יש להקדים לו אות). אין אפשרות לתת ערכי ברירת מחדל לתכונת ID פרט ל-#REQUIRED או #IMPLIED.
35
35 הכרזת תכונת הפניה תכונה מסוג IDREF היא תכונה שערכה חייב להיות זהה לערך של אחת מהתכונות מסוג ID המופיעות במסמך. ניתן גם להגדיר "רשימת שכנויות" בעלת מספר לא קבוע של מצביעים, באמצעות IDREFS. תכונה מסוג IDREFS היא תכונה שערכה הוא ערך אחד או יותר מאלו המופיעים במסמך בתכונות מסוג ID, מופרדים ברווחים. גם לתכונות מסוגים אלו לא יתכנו ברירות מחדל פרט ל-#REQUIRED ו-#IMPLIED.
36
36 <!ATTLIST person idnum ID #REQUIRED gender (male | female) #REQUIRED father IDREF #IMPLIED mother IDREF #IMPLIED children IDREFS #IMPLIED > דוגמא למקטע DTD עם מזהים מקטע זה מגדיר צמתי “person” עם הפניות עבור אב, אם, וילדים. שימו לב להגדרת סוג התכונה “gender”. מדוע לא דרשנו “#REQUIRED” עבור התכונות “mother”, “father” ? אלו אילוצים הכרחיים עבור עץ גנאולוגי אין יכולת לאכוף באמצעות ההכרזות כאן ?
37
37 החוזק התיאורי של DTD לא כל הגבלה על מבנה העץ של המסמך ניתנת לתיאור ע"י שפת DTD. לדוגמא, לא ניתן לתאר את ההגבלה הבאה: "במהלך המסמך כולו יש בדיוק צומת אחד עם התווית mainpoint". לחלק מהשפות האחרות לתיאור יישומי XML יש כושר תיאורי חזק יותר. הכושר התיאורי החזק ביותר הרצוי הוא זה של שפות העץ הרגולריות (לא נלמד בקורס זה את הגדרתן המדויקת). למרבית שפות הסכימה של XML, כגון DTD ו-XML-Schema (החזקה ממנה), יש חוזק תיאורי חלש יותר משפות העץ הרגולריות.
38
38 הערה אחרונה במהלך הרצאה זו לא למדנו את סטנדרט ה-XML (כולל שפת ה- DTD) בשלמותו, אלא רק מבוא. הנכם מוזמנים לקרוא עוד על סטנדרט ה-XML בספרות, וכן על הסטנדרטים הנלווים. בקורס אנו נתמקד עתה באחד מתוכם, שפת החיפוש XPath, וההכללה שלה XQuery.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.