תגי ה-XML אינם מוגדרים מראש. עליך להגדיר בעצמך את התגים שתשתמש בהם.
ההבדל העיקרי בין XML לבין HTML
XML לא בא כדי להחליף את ה-HTML.
XML ו-HTML פותחו למטרות שונות אחד מהשני:
XML פותח כדי להגדיר מידע, ולהתמקד על מה זה מידע.
HTML פותח כדי להציג מידע, ולהתמקד על איך שהמידע נראה.
HTML בא בשביל להציג מידע, XML בא בשביל להגדיר מידע.
XML הוא דינמי
התגים שעוזרים לך לעצב את מסמך ה-HTML שלך, ואת המבנה שלו, הם מוגדרים.
מי שכותב מסמכי HTML יכול להשתמש רק בתגים שהוגדרו מראש בסטנדרטים של שפת ה-HTML.
XML מאפשר למתכנת להשתמש בתגים משלו ובמבנה מסמך משלו.
XML הוא תוסף ל-HTML
חשוב להבין ש-XML לא בא כדי להחליף את ה-HTML. כבר היום כמות גדולה
של אתרים ברשת האינטרנט משתמשים ב-XML כדי להגדיר ולעצב את המידע,
ובעוד HTML משומש כדי לסדר ולהציג את המידע.
XML בעתיד באינטרנט
התחלתי להתעניין ב-XML לפני חצי שנה, ומאז כל פרוייקט שאני כותב, משתמש
ב-XML כדי לעצב ולהעביר את המידע ממקום למקום.
זה ממש מדהים איך שהטכנולוגייה הזאת עלתה וצברה תנופה ענקית בשנה
האחרונה, וכל-כך הרבה מפתחי רשת כבר אימצו אותה ומשתמשים בה.
אני מאמין ש-XML יהיה חלק חשוב ועיקרי בעתיד האינטרנט,
ממש כמו שה-HTML היה הבסיס לרשת האינטרנט.
כיצד XML יכול להיות שימושי?
XML יכול להחזיק מידע מופרד מה-HTML שלך.
XML יכול לשמש אותך כדי להחזיק מידע בתוך ה-HTML שלך.
XML יכול לשמש כפורמט להעברת מידע.
XML יכול לשמש ככלי לאחסנת מידע בקבצים או מערכי נתונים.
XML יכול להחזיק מידע מופרד מה-HTML שלך
דפי HTML נועדו כדי להציג מידע. כיום בתוך מסמכי HTML המידע נמצא בפנים.
כל חישובי המשתנים, בניית המערכים, הוצאה ממסדי נתונים, וכו נמצא בתוך ה-HTML שלך.
עם XML מידע זה יכול לשבת בקובץ XML נפרד, או בתוך אובייקט XML.
כתוצאה מכך הינך יכול להתרכז ב-HTML ככלי העיצוב וההצגה של המידע,
ולהיות בטוח ששינויים בלוגיה וההתעסקות עם המידע לא יפריעו ולא יכריחו
אותך לטפל ו/או לשנות את קוד ה-HTML שלך.
XML יכול לשמש אותך כדי להחזיק מידע בתוך ה-HTML שלך
מידע XML יכול להתקיים בתוך מסמכי HTML בצורת "Data Islands" (איי-מידע, נשמע מעפן בעברית).
אתה עדיין יכול להתרכז ב-HTML להצגת המידע.
XML יכול לשמש כפורמט להעברת מידע
כיום בעולם האמיתי, מחשבים ומסדי נתונים מחזיקים הרבה מידע בצורות שונות.
הסבל הגדול שעובר על מפתחי אינטרנט הוא העברת המידע בין מערכות שונות.
הפיכת המידע ל-XML יוצרת סטנדרט אחד שמאפשר לכולם לקרוא את המידע לא משנה מה.
כיום כבר יש פיתוחים חדשים כגון SOAP, XMLHTTP, Web Services שמאפשרים
להעביר מידע ברשת בין אתר לאתר או בין דף לדף בפורמט XML.
XMLHTTP למשל מאפשר הפעלה של קובץ ASP מצד הקליינט תוך כדי העברת
נתונים מהדף הקורא אל הדף שנקרא בפורמט XML.
SOAP ו-Web Services הם כלים חדשים ומרתקים שמאפשרים בנייה של "תחנות מידע"
שמוסרים ומחלקים מידע לכל דף שמבקש.
לדוגמא Web Service ששולח עץ מידע בפורמט XML של תחזית מזג האוויר אל האתר
שלך, או תוצאות משחקי הליגה האחרונות.
עם נחשוב קצת יותר בקטן, Web Service יכול לשמש כתחנה שמעבירה כותרות חדשות
מהאתר שלך לאתרים אחרים שרוצים לעדכן גולשים אצלם.
XML יכול לשמש ככלי לאחסנת מידע
XML יכול לאחסן מידע בקבצים וגם מסדי נתונים. אפליקציות יכולות להיכתב כדי
לאחסן ולשלוף מידע, ואפליקציות כלליות כדי להציג את המידע.
ב-SQL Server 2000 ניתן במקום לשלוף Record-sets מתוך הטבלאות,
לשלוף גם מידע בצורת XML, וגם פנימה.
XML Syntax
דוגמא של מסמך XML:
<%
OpenTextFile
Response.Write ShowAsCode(GetFile("xml/cd_catalog.xml"))
CloseTextFile
%>
ToveJaniReminder
Dont forget me this weekend!
ניתוח המסמך:
השורה הראשונה במסמך היא הגדרת ה-XML. היא תמיד צריכה להיות בראש המסמך.
זוהי הגדרת גירסת ה-XML. בדוגמא זאת, הינו מאשר את סטנדרט ה-1.0 של XML:
<%=ShowAsCode("")%>
השורה הבאה הינה האלמנט הראשון בדף, ה-Root Element:
<%=ShowAsCode("")%>
השורות הבאות מגדירות 4 אלמנטים בנים (Child Elements) של אלמנט השורש (Root Element): ToveJaniReminder
Dont forget me this weekend!
השורה האחרונה מגדירה את סוף אלמנט השורש:
<%=ShowAsCode("")%> כל האלמנטים ב-XML חייבים להיסגר עם תג סוגר
ב-HTML חלק מהאלמנטים לא חייבים להיסגר בתג סוגר. הקוד הבא חוקי ב-HTML:
<%=ShowAsCode("
This is a paragraph" & vbCrlf & "
This is another paragraph")%>
ב-XML כל האלמנטים חייבים להיסגר עם תג סוגר:
<%=ShowAsCode("
This is a paragraph
" & vbCrlf & "
This is another paragraph
")%>
XML מחזיק בתוכו מידע, ומידע הוא רגיש. XML לא תקני, פשוט לא יעביר מידע הלאה,
אפילו עם שכחת ליסגור תג אחד.
תגים ב-XML הם Case Sensetive (רגישים לאותיות קטנות וגדולות)
תגים ב-XML רגישים לאותיות קטנות וגדולות. התג שונה מהתג
ועל כן פתיחה וסגירה של תגים חייבת להיות באותה צורה:
<%=ShowAsCode(" אלמנט לא תיקני!!!" & vbCrlf & "אלמנט תיקני")%> כל תגי ה-XML חייבים להיות מקוננים בצורה סדירה
ב-HTML כמה תגים יכולים להיות מקוננים בצורה לא סדירה עם אחרים, לדוגמא:
<%=ShowAsCode("This text is bold and italic")%>
ב-XML כל התגים חייבים להיות מקוננים בצורה מסודרת עם האחרים בצורה הזאת:
<%=ShowAsCode("This text is bold and italic")%> כל מסמך XML חייב תג שורש
כל מסמכי XML חייבים להכיל תג אחד שמגדיר את השורש, או באנגלית בשם שתשתמשו הרבה: Root Element.
פתיחת תג השורש קובע את התחלת המסמך (השורש), והסגירה שלו סוגרת את המסמך.
במסמך XML יכול להיות רק תג שורש אחד, וכל התגים האחרים חייבים להיות מקוננים בתוכו.
כל אלמנט יכול להכיל סאב-אלמנטים (Child Elements). סאב-אלמנטים חייבים להיות מקוננים
בסדר בתוך אבי-האלמנטים (Parent Element). Attributes חייבים להיות בתוך גרשיים !
אלמנטים ב-XML יכולים להכיל Attributes ממש כמו ב-HTML, אבל לא כמו ב-HTML,
Attributes ב-XML חייבים חייבים להיות בתוך גרשיים, אחרת כל פיספוס קטן יכול להפיל את ה-XML.
למד את שני מסמכי ה-XML שלמטה, הראשון לא תיקני, והשני תיקני: ToveJaniReminder
Dont forget me this weekend!
ToveJaniReminder
Dont forget me this weekend!
XML Attributes
Attributes ב-XML בדרך-כלל נועדים כדי להגדיר אלמנטים, או כדי להביא מידע נוסף על אלמנטים.
למשל ב-HTML שורה זו: מכילה Attribute בשם SRC שמכיל מידע
לאלמנט בשם IMG.
Attributes תמיד נמצאים בתוך התג של הלאמנט, הנה כמה דוגמאות:
בדרך-כלל, או נפוץ יותר, להשתמש ב-Attributes כערכים להגדיר מידע שלא חלק מתכולת המידע
במסמך XML. במילים אחרות, בדרך-כלל מידע בתוך Attributes יותר חשוב לפארסר ה-XML (XML Parser)
מאשר לגולש. בכל-אופן, בדוגמא מעל ה-id של אלמנט ה-person הוא משתנה counter שלא חשוב
לגולש, אבל חשוב לאפליקציה שרוצה לפרמט או להציג את אלמנט ה-person.
Elements vs. Attributes
הציצו בדוגמאות ה-XML האלו:
<-- :כדי להגדיר מין Attributeשימוש ב- -->
AnnaSmith
<-- :כדי להגדיר מין Elementשימוש ב- -->
femaleAnnaSmith
בדוגמא הראשונה המין הוא Attribute, ובדוגמא האחרונה המין הוא Element.
שני הדוגמאות מעניקות לקורא את אותו מידע.
אין חוקים קבועים באשר למתי להשתמש ב-Attributes כדי להגדיר מידע, ומתי להשתמש ב-Elements.
בניסיון שלי למדתי להשתמש כמה שיותר באלמנטים, ובמידע פנימי להצגת האלמנטים כגון id,
סוג הערך או גודל הערך - אני יוצר Attributes לאלמנטים.
הנה עוד דוגמא, שמדגימה איך אלמנטים יכולים לשמש במקום Attributes.
שלושת דוגמאות ה-XML מכילות את אותו מידע.
Attribute של תאריך מודגם בראשון, אלמנט של תאריך בשני, ואלמנט מובנה באלמנטים בשלישי. ToveJaniReminder
Dont forget me this weekend!
12/11/99ToveJaniReminder
Dont forget me this weekend!
121199ToveJaniReminder
Dont forget me this weekend!
האם להימנע מ-Attributes ?
למה לך להימנע מ-Attributes ? הנה כמה בעיות עם שימוש ב-Attributes :
Attributes לא יכולים להכיל ערכים מרובים (אלמנטים כן).
Attributes לא יכולים להיות מובנים.
Attributes לא יכולים להגדיר מבנה (כמו ש-Child elements יכולים).
אם תתחיל להישתמש ב-Attributes כדי להכיל מידע נרחב, אתה יכול לגמור עם
עם מסמכים שגם קשה לתפעל אותם, וגם לשנות אותם.
מה שאני מנסה להגיד זה שאתה צריך להשתמש באלמנטים להגדרת מידע.
השתמש ב-Attributes רק בשביל להגדיר מידע שאינו שייך לקורא/לגולש.
בבקשה אל תיגמור בצורה כזו:
זה לא ממש נראה כמו XML, הבנת?
וולידציה של XML
מסמכי XML "Well Formed"
מסמך XML שהוא "Well Formed" הוא מסמך שתואם את חוקי ה-Syntax של XML שהגדרנו למעלה.
"Well Formed" הוא ביטוי שמשתמשים בו הרבה בעולם ה-XML, והוא חשוב מאוד.
המסמך הבא הוא "Well Formed" XML: ToveJaniReminder
Dont forget me this weekend!
הגדרת מסמך ה-XML למעלה, רק תג שורש אחד (Root Element), כל הסאב-אלמנטים (Child Elements)
נמצאים בתוך השורש, לכל תג/אלמנט יש סוגר, וכולם מקוננים בצורה נכונה.
DTD & Schemas
למסמכי XML אפשר להצמיד Schema ו/או DTD, שמאפשרים לעשות וולדיציה אישית על הרכב ה-XML.
עם תרצו, אוכל להרחיב על הנושא בעתיד.
XML בדפדפנים
XML ב-Netscape Navigator 6
נטסקייפ הבטיחו תמיכה מלאה ב-XML בדפדפן החדש שלהם.
האמת היא שלא בדקתי את הנושא לעומק, מפאת שנאתי הגדולה לדפדפן
המקולל הזה. שלא תבינו אותי לא נכון, אני לא אוהב את הדיקטטור הגדול בשם Microsoft,
אבל שחברה כמו Netscape משאירה בשוק את Netscape 4 שנתיים שלמות
ומורידה את רמת התיכנות באינטרנט לקרשים, איך אפשר לא לשנוא אותם?
XML ב-Internet Explorer 5
לאינטרנט אקספלורר יש תמיכה מלאה בסטרנדרטים גם ל-XML 1.0 וגם לXML Document Object Model (DOM).
הסטרנדרטים האלו נקבעים ע"י ה(World Wide Web Consortium (W3C
תעשו לעצמכם טובה אישית ותורידו את האינטרנט אקספלורר 5.5 הנפלא של מיקרוסופט:
אינטרנט אקספלורר (גירסה 5.0) תומכת ב:
הצגת מסמכי XML
תמיכה מלאה בסטנדרטים ה-W3C DTD
XML מובנה בתוך HTML כ-Data Islands
הזנת מידע XML לתוך אלמנטים של HTML
פירמוט XML עם XSL
פירמוט XML עם CSS
תמיכה ב-"Behaviors" של CSS
גישה ל-XML DOM
הצגת XML עם Internet Explorer 5.0
אתה יכול להשתמש באינטרנט אקספלורר כדי להציג לך את מסמכי ה-XML שלך, בדיוק כמו שאתה
רואה כל מסמך HTML. יש כמה דרכים לפתוח מסמך XML. אתה יכול ללחוץ עליו מלינק,
להזין את הכתובת שלו ב-address bar, לחיצה כפולה עליו מספרייה, וכו.
עם תפתח קובץ XML עם אינטרנט אקספלורר, הוא יציג לך את ה-Root Element, וה-Child Elements פתוחים.
סימן של "פלוס" (+) ו"מינוס" (-) יופיעו משמאל לאלמנטים שמכילים עוד אלמנטים, ולחיצה עליהם
תפתח או תיסגור את ה"עץ" שלהם.
עם תלחצו על הקובץ שלפניכם: note.xml, אינטרנט אקספלורר יפתח אותו בצורה זאת.
צפייה של XML לא תיקני
עם תפתח קובץ XML לא תיקני (לא "Well Formed"), אינטרנט אקספלורר יציג לך שגיאה בקובץ.
עם תלחצו על הקובץ שלפניכם: note_error.xml, הדפדפן יציג שגיאה.
דוגמאות XML
כדי לאפשר לכם הרגשה יותר טובה באשר למה זה XML, אספתי כמה דוגמאות בשבילכם:
אוקיי! הבנתי מה זה XML, אבל מה לעזאזל אני עושה איתה ???
XML זוהי השפה הכי פשטנית ללמידה, עם מעט כללים. XML רק אוגר ומעצב לך את המידע,
את השלב הבא, שהוא פירמוט והצגת המידע, יהיה עלייך להשתמש באחד מהשיטות שנוצרו למטרה זו.
פירטתי את שני השיטות העיקריות שאני משתמש בהם.
XSL
זאת השיטה שאני משתמש בה להצגת XML לרוב. זה נראה גם ש-XSL, שכבר נהפך ל-XSLT,
תופס תאוצה בקרב מפתחי האינטרנט. בהצצה ראשונה, XSLT נראה כמו HTML, אבל מקרוב
אפשר לראות ש-XSLT בנוי מ-HTML, ומאלמנטים מיוחדים לשליפה והתעסקות עם המידע מה-XML.
איך זה פועל?
אפשר לדמיין את קובץ ה-XML (או האובייקט) וקובץ ה-XSLT כשני גלגלי שיניים.
פעולת החיבור ביניהם נקראת "Transformation", וזה בעצם חיבור ו"הפעלת" ה-XSLT על
המידע ב-XML. כששני "גלגלי שיניים" אלו מתחברים, הם פולטים החוצה HTML שנוצר
מהפעלה של ה-XSLT על המידע.
צפו למאמר נרחב על XSLT בקרוב.
XML DOM ב-JavaScript או ב-VBScript
כדי ליצור הצגה של נתונים מתוך XML בצורה דינמית גם בצד הסרבר וגם בצד הקליינט
ניתן ורצוי להשתמש באובייקט ה-XML DOM המשוכלל שמאפשר ניווט ושליטה מלאה
בעץ המידע ה-XML.
אובייקט ה-XML DOM הוא בעצם אובייקט שמכיל את עץ האלמנטים של ה-XML,
הזנת ה-XML לתוך האובייקט יכולה לקרות מload- פשוט של קובץ XML,
או מהזנת string XML בעזרת loadXML, או בנייה דינמית של אלמנטים לתוכו.
צפו למאמר נרחב על XML DOM בקרוב.
סיכום
רגע. בואו שנייה נחשוב. כל אפליקציה קטנה שאנחנו כותבים לאתר שלנו מתחילה משליפת נתונים
ממקום כלשהו, וזה תמיד באותו אופן. אחרי זה, ממשיכים לעיצוב ופירמוט הנתונים בצורה מסורבלת
וצפופה סמוך ל-HTML בדף, ולרוב בסוף האפליקציה נראית בפנים כמו איזה סלט ירקות בצבעים שונים.
בנייה של אתר טוב עם שורשים חזקים צריכה להיות מחושבת ומאורגנת.
שליפה והתעסקות עם נתוני database צריכה להיות השיכבה הכי נמוכה והיא צריכה להיכתב
בצורה כזאת שאחרי שכתבת את המנגנון לא תצטרך יותר להתעסק עם שאילתות וקריאות לdatabase.
השיכבה השנייה היא האפליקציות הקטנות שמרכיבות ביחד את האפליקציה הכוללת.
הם משתמשות בשיכבת הdatabase שכתבת כדי לישלוף מידע ממסד הנתונים ולהעביר אותו
ל"עץ" נתונים בצורת XML ולהתכונן להעביר אותו לשיכבה הבאה - שהוא הצגת המידע לקורא.
השיכבה האחרונה יכולה להיות בכמה שיטות כמו שנאמר למעלה, אבל שהגעת לשלב הזה
אתה יודע בדיוק איך המידע יגיע עלייך! כל מה שאתה צריך לעשות זה לעצב את המידע בצורה
שאתה רוצה אל הקורא.
כך אנו מפרידים בצורה בלתי ייאמנת את השיכבות השונות שאתר גדול ברשת בנוי עליו,
וניהולו נהפך לעבודה מסודרת ומיקצועית עם שיכבות ניפרדות והרגשה טובה בראש ובמחשב :)
אשמח לקבל תגובות, הערות ובקשות לאי-מייל שלי, cyx_@hotmail.com
ותעברו לחשיבה XMLית אנשים !
התגובות שלכם
01.12/10/2005 ערןכל הכבוד, מאמר לעניין
02.19/10/2005 עוזתודה רבה, מאמר מעולה!
03.20/10/2005רפי ב.XML אפשר ליכתוב עם ה-Notepad הפשוט של Windows.
דוגמא שימושית: אם למשל תרצה ליצור קונפיגורציה לאתר שלך, ליצור מעין אוסף של מידע שאתה צריך בהרבה מקומות, כמו שם של החברה, כתובת, אימיליים, כיווני-צבע שלא יכולים להיכנס ל-CSS, אפשר ליצור קובץ XML שיכיל בתוכו את הערכים הדרושים.
04.08/09/2005 אדםמאמר לעניין, כתוב יפה ונוח לקריאה מסביר כמו שצריך. אחלה!
05.12/09/2005עמי כאשר אני רוצה לכתוב XML איפה אני רושם אותו ?? על מה ?? תוכנה כלשהי ??