- שנה: 2000
- מחבר: Jesse Liberty ,Mike Kraley שלומי חבה
- מו"ל: הוד-עמי
- פורמט: ספר
- נמסר ע"י: הוצאת הוד-עמי
- תגיות: תכנות אתרים
OCR (הסבר)
ישן מקצעי: 07 1! 16550 %
שי עד[ 0|6זא 66א!א ור
=מסופעסש ]וה א?
!א
למפתחי אתרים באינטרנט
קרא בעיון
את הוראות ההתקנה של התקליטור
בנספח ה' ובקובץ 06 שבתקליטור
עורך ראשי: זהר עמיהוד
ייעוץ מקצועי: שי עדן
כתיבת פרק 11 והנספחים אי, בי ו-גי: שי עדן
תרגוס: שלומי חבה
עריכה ועיצוב: רמה שנקלר
עיצוב עטיפה: שרון רז
שמות מסחריים
שמות המוצריס והשירותיס המוזכריס בספר הינס שמות מסחרייס רשומיס של החברות שלהס. הוצאת
הוד-עמי והוצאת 005 עשו כמיטב יכולתן למסור מידע אודות השמות המסחריים המוזכריס בספר זה
ולצייו את שמות החברות, המוצריס והשירותים. שמות מסחריים רשומיס (5א178067081 6015%0760ז)
המוזכריס בספר צוינו בהתאמה.
הודעה
ספר זה מיועד לתת מידע אודות מוצרים שונים. נעשו מאמצים רביס לגרוס לכך שהספר יהיה שלם
ואמין ככל שניתן, אך אין משתמעת מכך כל אחריות שהיא.
המידע ניתן ''כמות שהוא'' ("8! פגּ"). הוצאת הוד-עמי והוצאת 005 אינן אחראיות כלפי יחיד או ארגון
עבור כל אובדן או נזק אשר ייגרס, אם ייגרם, מהמידע שבספר זה, או מהתקליטור שמצורף לו.
לשם שטף הקריאה כתוב ספר זה בלשון זכר בלבד. ספר זה מיועד לגברים
ונשים כאחד ואין בכוונתנו להפלות או לפגוע בציבור המשתמשים/ות.
ב טלפון: 09-9564716
ב פקס: 09-9571582
ב דואר אלקטרוני: |60.1.וחו00-3ח62ס!)חו
כ אתר באינטרנט: |ו.60.והחבּ-סח.ששצש
וא
למפתחי אתרים באינטרנט
ץז ו] 36550
ץס!ובּו4 6אוא
ייעוץ מקצועי: שי עדן
זסז 60ח6ו65ס
2
| =
וו
זא פשוססחו\
8 פוססחו\
ה%6+ו563 והחסו) %5ח6והט6סכ ט6צצ .וואא
ץז שאו סחה עסו | 26556 8
תווחה .2 :סוס
,"06'5 60/ ]]א" 60 חס , הסט 60 6הַבטחַחב! הפוח 6+ הס הסו5|3ח3זט 260וזסחסטו
0 6 לתחץ600 ,0006 עס ססחפוופטוק
ץס זס הזזסז שח הו 60הה5ח8 זט זס 000660זקסז 06 שה אססס פוחץ 01 +זהּק סא .60ש6567ז סחטהז ווא
הסוהוזס?חו עחה ץכ זס פַחו 660 ,6הוץקס06+סחכ 8 הו טוח ,|63ח8ח66ר זס 6והס6!6607 ,5ה68וח ץחה
ז6ח5ו|סטק 6 ההסזז הסו55וח סכ +טסת+וש , רח6ל5/5 |8צ6016 5507806
.0 ווח-300 ץם הססתפו!סטק הסחו60 6חַבטפחה! אוסזססרן
0 6 %ח8וזץְק60
)06(
כל הזכויות שמורות
הוצאת הוד-עמי
לספרי מחשבים בע''ימ
ת.ד. 6108 הרצליה 46160
טלפון: 09-9564716 פקס: 09-9571582
|ו.60.ווח00-3 06+חו
אין להעתיק או לשדר בכל אמצעי שהוא ספר זה או קטעים ממנו בשוס צורה ובשום אמצעי
אלקטרוני או מכני, לרבות צילום והקלטה, אמצעי אחסון והפצת מידע, ללא אישור בכתב
מאת ההוצאה, אלא לשם ציטוט קטעים קצרים בציון שם המקור.
הודפס בישראל 2000
0 65זחטום ||
.! זוזה-ססוז
8ץו|62 ,6108 .0.8.ק
0 ,15
מסת'יב 965-361-265-4 158%
תוכן עניינים מקוצר
הקדמה ו
פרק 1: מן ההתחלה עם !אא ו
פרק 2: מעבר מ-|ואד ל- |וא דא 0
פרק 3: סזפ, מתן חוקיות למסמך ב
פרק 4: שינוי עם 51א 0
פרק 5: ביצוע שינויים ב-!ספ 0
פרק 6: אחסון, הבאה לתצוגה, והצגת הסיפורים ו
פרק 7: יצירת רכיבים על ידי שימוש ב- וזא ו-51א עם ווזדחס ..185
פרק 8: בניית היישום והרחבתו ה
פרק 9: שימוש בתוכנת העזר ז6קו6] .51א
ליצירה ותחזוקה של מסמכי 51א 2
פרק 10: סקירת טכנולוגיות וטכניקות 2
פרק 11: 566088 2
נספח א': מדריך מהיר ל- א 0
נספח ב': אתרים ברשת העוסקים בנושאי וא ה
נספח ג': טבלאות נתונים 0
נספח ד': משאבים 0
נספח ה': התקליטור המצורף ו
אינדקס ב
(האינדקס בכיוון לועז'י)
הדרכה וטיפים לבניית אתר באינטרנט ו
תוכן העניינים
5
תוכן עניינים
מוסכמות הנמצאות בשימוש בספר זה 7
התקליטור המצורף 7
כמה מילים על שי עדן 0
פרק 1: מן ההתחלה עם וא 8
ייעוד מחדש של מסמכים 0
הדפסה לעומת עבודה מקוונת 0
ייעוד מחדש - בצורה חכמה 0
דוגמאות מהעולס האמיתי 0
כיצד ספר זה נוצר 0
וא בהֶקָשָר 0
)וזא מפשטת את ]50 7
מהי |5א! - 0
ניתוח ועיצוב של הפרויקט שלנו 7
ח66 דסו|סו8 - דרישות הפרויקט מ
ניתוח אירועיס 7
מראה (ח0ס280ו|ה508ו/) ה
מסע של צעד-אחר-צעד ל
מה לא אציג בפרויקט 0
הצעדיס הבאיס 0
6 ]אא למפתחי אתרים באינטרנט
2 -
פרק 2: מעבר מ- |ואד ל- |ואדחא 0
הסבה ל- ודו אי 0פאבגופואלט ויבא רוא ל :20400
מ-6זס\ ל- |ואדו ו
אד בנוי היטב .1
תיקון מסמך !ד 0
מסמכים ו-015ס 8
5 כנגד 5זסספ 8 0 0 בש 05 0 :שב פוס 0 ב שג ג שם שיבכ :+40
המרת שזס/צ ל- |ואדחא ב
בתוך ]1ד0א02זס/ 1
התכונה 65זטםו0ה 5
רקורסיה 0
כתיבת תגית הסגירה 0
מעבר דרך הקוד - |
בחינת הקלט 8-2
בחינת התוצאות 0
תן לאצבעות ללכת .||
הצעדיס הבאיס 0
פרק 3: סזס, מתן חוקיות למסמך ב
מ- !ודא ל- אא .- || |
הפיכת המבנה למפורש אולוורושואדיצרואיווואל ורייפ ואור .70
הבטחת חוקיותס של מסמכי !]א 1
עדכון ה-סדס 1
מנתח תחביר מוודא חוקיות 0
מטרות המעבר 0
האילוציס שברצוננו לאכוף ס וו אריצרוצוווביויריואויליוו. ).בל
הסרת ]₪411 שאיננו צריכים ל
סימון שורות קוד ל
ריווחים וטאבים 1
סימון 51060815 והערות 7
הפרדת קטעיס וגיו רואיווווווווצוווורייצוווצו.גאוארוואווויוו..-ג.. 82
מעבר על ה- |ואז3 הנותר ל
יצירת ה-סדס לה
יישויות פרמטריסם 0
מה ה-סדס אומר לנו ל
הצעדיס הבאיס לילו גרווסואיילוואובוציאבי וולוו 0 91
תוכן העניינים | 7
פרק 4: שינוי עם .|5א
קלטיס ופלטיס :1-0 94
קריאה לשיטות (005ח16%!) ל
טעינת ה-51א 1
1 בפירוט ל
6 12
תבניות (6000!8065+ ו-5חִזסְאהּק) ופילטריס 10250
התאמת תבניות (3%65|וחד) 5 ל םב 5/5 55 10
מציאת תגיות לא ידועות ...106.4
בניית ה-אספ 1
ניתוח תחבירי של ה- |5א ל 2.0.41 108
תגיות שניתן להתעלס מהן 1
טיפול בתגית <ק> 1
צירוף שורות הקוד וההערות .110.10
תוויס מיוחדיס 1
ניקוי סימוני פסקאות מקוננות 11
תסריט 51א ה
הרצת !דחא ל- |אא 1
הצעדיס הבאיס ...117
פרק 5: ביצוע שינויים ב-ספ ו
בחינת קוב הבינייס 1
בחינת קוב הבינייס בפירוט 1
יצירת קטעים (5ח56600) 1
ההגדרה של קטע 1
המעבר מ- | דא ל- !אא - חלק זז ל 17
הגישה מונחית העצמיס 12
המסמך וה-וספ 1
איסוף קטעים: אסטרטגיה 1
איסוף קטעים: יישוס 12
יצירת ה-10 של הקטע ו וויואלווציוצשונוגיוג-וולייג.וווייצוויג-י-.... 132
יצירת הוראות עיבוד 1
יצירת ההיררכיה 1
יצירת הרכיב ברמה העליונה. - ל
איתור רכיביס 1
אחים ודודיס 7 .ל
בלוקי קוד 1
הכנסת הרכיב החדש 1
שורות הערה 1
הצעדיס הבאיס 1
8
]אא למפתחי אתרים באינטרנט
פרק 6: אחסון, הבאה לתצוגה, והצגת הסיפורים
מציאת סיפוריס מבפניס החוצה 1
התחלה עם סיפורים ברמה- 1
יישוס 153
שמירת הסיפוריס למסד הנתוניס 2
הכנסת הסיפור 1
מעקב אחר ה-6ו 1
יצירת מסד הנתוניס 1
מה הושג 1
הצגת הסיפור. 1
המרה ל- ודו 1
אחזור סיפור ממסד הנתוניס 1
יצירת מופע של מסמך זסס הקלט שב- |וא 1
שימוש ב-51א להצגת ודו 168
גיליון הסגנונות מ- ]וא ל- ודו 1
יישוס טרנספורמציית ה-51א ל
מתחיליס 1
הכותרת העליונה ב- |ואדח 1
טיפול בקטעיס .175.4
הבאת הקוד לתצוגה 1
טיפול בהערות 1
קוד 6חווחו 6 ב ב וט 0 5 ב 17.7
אד בקלות ...179
רווחיס וטאביס 1
רווחיס 1
טאביס לי ...181.1
תוויס מיוחדיס 1
טיפול בהנחיות ייצור |
סיכוס המסמך 1
הצעדיס הבאיס 1
פרק 7: יצירת רכיבים על ידי שימוש ב- |ואא ו-51א עם דהפ ..185
אסטרטגיה
יבירת ההיררכיה מחדש 0
.דסח
הפיכת ה- !]יא לטבלת תוכן הענייניס
בניית ה-06ד ב- ודו
ו 0/7
אוסח5 ץזס5%
תוכן העניינים
9
יבירת ה- ]1 מ- וויא על ידי שימוש ב-51א 7
יצירת רכיבי התדפיס 0
לעצם העניין 0
מ- וא ל- וא בש לסו
מ- וא ל- ודו ב
הצעדיס הבאיס 1
פרק 8: בניית היישום והרחבתו 0
היישוס 0
רישוס סיפוריס - 0
דפדפניס מיושניס והעתקת קוד 1
בחינת היישוס בפירוט 0
ץנ 0
יישוס 51א עבור דפדפניס מיושניס ו
יישוס 60068|06%5 1
יבירת 60068|06%5 ב- ואד ו
יצירת ה- |ואדח על ידי טרנספורמציית 51א ו
מזל טוב, היישוס גמור! 1
הצעדיס הבאיס ה
פרק 9 שימוש בתוכנת העזר ז6ק|6] .51
ליצירה ותחזוקה של מסמכי 51א - ו
עזרה ביצירת .51א קפ שב שוב שש בוטש בש טיש שמ עשפו
יישוס ז6!06 .51א 5 5 8 50 5 5 שש
מה מבצעת ()₪617650 2
כיצד ח₪61765 עובדת .1
איסוף הפרמטריס 0
הצגת ]יא הקלט וגיליון ה-51א 4
ביצוע הטרנספורמציה ב
הצגת התוצאות 0
הצגת וויא עס אדו שש
רכיבי עלים 55 05/58 0 שש 05ב עפ 5 ל שמ 55 9/8 55/6555 בש ב
רכיביס עס צאצאיס 0
התאמה להוראות עיבוד 7
התאמה לרכיבים אחריס ה
התאמה לתכונות 7
ראש גיליון הסגנונות ל
בחינת התוצאות 0
עריכה ושמירה של שינוייס ה[
הצעדיס הבאיס -[/ 0
0 אא למפתחי אתרים באינטרנט
27.
פרק 10: סקירת טכנולוגיות וטכניקות 8
מבט לאחור על מה שעשינו .27
מעבר מ- !ודו ל- ןוא דחא 2
מעבר מ- |ו דא ל- !אא :27410.2
שימוש ב- !אא ו- 51א להצגת הסיפוריס 2
1 בצד הלקוח .27/0
וזה עוד לא הכל! 2
פיתוח המפרט 2
התאמה למפרט .27704.0
מאפייניס בצד הלקוח 7
סדס 277
68 |]א ב 0 8 ב ד ופ שש כב ב ב ו 2
יכולות אחרות של שרתי 501 2
אינטגרציה של אא עס מוצריס אחריס .278.4
1 00ג 2
קדדו |ואא ל 2
הצעדיס הבאיס 2
פרק 11: 500608 2
מהי 5606708 |א ז 0 וב מ 0 ובוכי מ ב מ סוב מל שש לס מ ב 2
שפת הגדרות נוספת! בשביל מה זה טוב! הרי יש לנו כבר סדס 279
איך כותבים 088ח6ח56 !א 0
קישור ]אא 560608 למסמך וויא 201
רכיבי 5606088 |זא 2
יצירת רכיבים בעזרת 6כץ 07ח6חח6|ם 2
הגדרת רכיבים בניס בעזרת 6|60060% 2852
יצירת קבוצות רכיביס בעזרת קטסזוף 2
יצירת תכונות על ידי 6קץדסטסוזזה. 80
שיוך תכונות לרכיביס בעזרת סזטפוזה 7
קביעת סוג מידע בעזרת 08)8%/06 7
רכיב התיאור חסוטקו0656 ל 2
בדיקת חוקיות מסמך !אא מול ]אא 5606088 2
הפיכת מסמך כ דכ ל-08ח6ח56 !א 2
המרת מסמך סדכ ל- ]וא 56608 בדרך הקשה 2
המרת מסמך סדפ ל- א 08ח5606 בעזרת תוכנית מתרגמת 1
מכאן לאן? 2011
תוכן העניינים | 11
נספח א': מדריך מהיר ל- ]א 0
החלקיס המרכיביס את !אא ...202
מתרגם (6פזבּק) |ז]א 20
טרנספורמציית .51 2
]וא בנוי היטב (1א ססחחזס= |ו/ו) 2
כתיבת !וא 07
הוספת הערות 0
הוספת סעיפי 4דמס6 0
סדס ו-ואא חוקי 0
בניית סדס 0
הוספת רכיביס להגדרת המסמך 307
הגדרת תוכן הרכיב - 1
שימוש באופרטוריס 0
אופרטורים לייצוג תוכן של רכיביס 0
הגדרת תוכן מידע 3
הגדרת תכונות (100065ז₪) לרכיבי המסמך 2
סוג המידע של תכונה 1
סוגיס קבועיס 260וח0%6ך ...210
סוגיס מוגדריס 8560ז6והטח= 1
הצהרת ערך ברירת המחדל של תכונה 1
הצהרה על יישויות 65שטח= ל
שימוש ביישויות 150 2
שימוש בגיליונות סגנון 0 1
שימוש ב-655 1
שימוש ב-51א 1
כתיבת .51א ו ל יוגש ואוולוו..-.. 215
הסבר 0
התגית 3%6|קוח5|:%6א 0
התגית זס-5]:/8!6א 0
שימוש בתגית ח686-זס):|5א להכלת תבנית על מספר רכיביס 1
שימוש בתגית 65ז8|סוח6:-ץ|סק8:|פא 2
סינון רכיבים על ידי שימוש בסוגרייס מרובעיס 0
מיון רכיבים בעזרת שפ-07061 2
בדיקת תנאיס בעזרת התגית ]1ו:|5א 7
יבירת טבלת ]דחא מנתוני מסמך !אא 2
סקריפטים של ואספ ושוא 3204
הגדרת מסמכים בעזרת 88ח6ח56 |ו]א 2
]וזא בצד הלקוח לעומת ]אא בצד השרת 7
סוף תקציר הוא רק התחלה 2
2 וא למפתחי אתרים באינטרנט
נספח ב': אתרים ברשת העוסקים בנושאי וזא 2
אתריס רשמייס 2
6 ל 30
ו 2
אספו 2
אתרי עוגרה ...2201
זסמס|סעסכ ס6/ 6 מ 0 ד בש ל 05
וחסס. ]א םב ב בב מ ב ב ל 5ב 20
0 230
ץסאחסוח ס6/ 00 שש בש ב שיש ל 50 0 שמ מב סי אס ג ו 0
וט 6% יאג 4-... 230
206 ז6קס|6/6כ |סס6 66[סזק 0 0
607666 00/ 1
א ש6וע₪6 סס/ 2
0 וא פזס.אזו 7
נספח ג': טבלאות נתונים ו
חוקיס עבור ]אא בנוי היטב (11א ססחחחסת |ו6/) 3
סדפ - פ5הסטוחו6כ 6קץד ההכ 0 0 5 2
פקודות סדס +
אופרטורים לייצוג תוכן של רכיביס 1
סוגיס קבועיס 260וח6אסד עבור תכונות - ו
גליון סגנון 51א 6
תגיות 5חסטהוחזס+חהזד 51א 2
568 !]א 050%ז6וו 2
רכיבי 8וח6ח56 |ו]א 0 ל 2
סוגי ערכים של 088ח6ח56 |אא מ 0 שיפ לפ 2
סוגי ערכים ייפרימיטיביים" 2
5 150 / ישויות 150 2
נספח ד': משאבים 8
6 |08ו/ ב 2 2
5 - 0
ב 2
ססג .30.44
5 !ככ 56וזכןוסלחם , +60 ,60 ,פדוו 0 0
ד חה 6%ע60ה 2 ביב סוב או שיבכב ששב מב בי טוב מ 5 ב 8 בוטב שוג בש 5 ל 2
16 56 ה ה4ו5ס 60/ 2
]אא 2
תוכן העניינים
13
נספח ה': התקליטור המצורף 0
7 זז .501 050ז6וו! 0
דרישות המערכת -/ יר
להתקנת השרת 0
לתחנת עבודה 1
סה - התקנה 0
קוד המקור בתקליטור המצורף 0
העתקת קבצי קוד המקור לדיסק הקשיתח 2
קטלוג !אדו 0
הפעלת הקטלוג - 0
אינדקס ||[ ו
(האינדקס בכיוון לועז'י)
הדרכה וטיפים לבניית אתר באינטרנט
4 אא למפתחי אתרים באינטרנט
הקדמה
בפרק זה:
* הנוטאוים שספר וה עוסס בהם, ומה עליר לדעתי
* למי מיועצד הספרו
% מוסכמות הנמצאוי בשימוש בספר גה
ספר זה ללימוד השפה !א - 00806ח18 קט876 6006551016 - נוקט בגישה שאינה
רגילה. במקוס ללמד את פרטי השפה, הוא מתמקד בבעיה מהעולס האמיתי שברצוננו
לפתור.
כנהוג בתכנון פרויקט מחשוב, אנו מתחילים בניתוח ועיצוב הפרויקט, ואחר כך מנחים
אותך בתהליך העיצוב של התוכנית. תוך כדי יישום הפרויקט עצמו, נלמד אותך
מיומנויות תכנות וכתיבת |1זא. תחילה עליך להגדיר מה ברצונך להשיג, ואז תלמד את
המיומנויות הנדרשות כדי להשיג את מבוקשך.
לנוחיותך, תמצא בנספת א' יימדריך מהיר ל-]1איי. תוכל להתחיל בחלק זה, או לחזור
אליו בהמשך כדי ייליישר קויי בנושא.
כפי שהבחנת ודאי, !אא היא 'ישפהיי, ולכן נתייחס אליה בהמשך הספר בגוף נקבה.
בנוסף, לתת רכיבים המשויכים לרכיבי ייהורים'י, נקרא ייבנים".
הנושאים בהם עוסק ספר זה ומה עליך לדעת
ספר זה ילמד אותך להשתמש ב- ]יא וב- 51א כדי לנתח, לטפל, לאחסן ולהציג מסמכיס
ברשת האינטרנט. במהלך הלימוד נשתמש בכליסם ושפות שונות: 5(, 28516 |1508/,
567 /, זט/567 501, |ואדרזס, 655, זמְוס5הּה2, ססה, א6ע60ה ואחרים, לפי העניין.
עס ואת, עיקר עיסוקנו יהיו הכלים 1אא ו-51א. אס אינך בקיא בטכנולוגיות האחרות
שהוזכרו - אל תיבהל! הדרישות הבסיסיות תוסברנה במהלך הלימוד.
הקדמה | 15
אס מעולס לא הודמן לך לתכנת ב-ק45 או להשתמש ב- 8856 |1508/ או ב-18/85610%,
או אס אינך יודע מהו ססה, תוכל ללמוד תחילה את הנושאיס מהספריס הבאיס
בהוצאת הוד-עמל:
4 1 ד למפתחי אתריס באינטרנט
3% למפתחי אתרים באינטרנט
6 83516 !הו סדנת לימוד
6 83516 |הטפו ערכת כלים
3 45 למפתחי אתריס באינטרנט
3 5 ובניית אתריס ב-צ06ז0:6ח1 |בהּטפוצ סדנת לימוד
84 / 2000 60655 המדריך השלס
בסיסי נתוניס טבלאיים ושפת .501
אס ברצונך לעקוב אחר הדוגמאות ולנסות את הקוד, עליך לדעת תחילה את הדבריס הבאים :
כיצד להתקין ולנהל 115 (ז567/8 הסזהוחזס)ח1 6%חז66ח1), או ]56/6 60/ |החספזסק
כיצד ליצור ספריה וירטואלית בשרת האינטרנט (ז6/ז56 ססו) שלך
כיצד ליצור ולקרוא דפי 450
כיצד ליצור ולהריץ פרויקט ב- 8856 |08פו
כיצד להתקין, לנהל וליצור מסד נתוניס וטבלאות בשרת !50 גירסה 7
(7 567/67 .501).
אס הינך בעל ידע מתאים, אתה מוכן להמשיך.
אס הנושאים הנלווים אינס מוכריס לך במידה מספקת אך ברצונך להמשיך, תמצא
שהקוד כולו מוסבר, אך ייתכן שתודקק לעזרה כדי להריץ את הקוד במחשב שלך.
עובדות מפתח אודות וא
כשתסיים את הלימוד בספר וה, תדע:
16
מהי השפה וויא
למה משמשת וא
כל מה שדרוש לדעת על |006 091666 +ח6וחטססס (מודל האובייקטיס של המסמך)
מהו וזא הבנוי היטב (60חזס= !60/61
מהו !אא חוקי וכיצד ליצור פדס
כיצד גיליונות סגנון (666ח5 5%/!6) של 51א מאפשריס לשלוט במסמכי וא
כיצד |וא מתקשרת עם אדו
כיצד ]אא מתקשרת עם מסדי נתוניס
)א למפתחי אתרים באינטרנט
בספר וה תמצא הסבר לכל אחד מרעיונות המפתח הללו, ככל שתתקדס בלימוד.
בתחילה, נערוך היכרות קצרה עם !ויא, נלמד מהי השפה, לשם מה נוצרה ומה הס
השימושיס האפשריים בה. אחר כך נציג מספר דוגמאות כיצד !יא יכולה לשמש
לפתרון בעיות תכנות מן העולס האמיתי, ואז נתאר בעיה אחת כזו ובחלקו העיקרי של
הספר נפתור בעיה זו בשלביס.
בדרך ליישוס הפרויקט, נבחן בפירוט את ה-ז0כ (|006 001666 +%חסחחט6סכ) של |ואא,
ונבחן את השווה והשונה בינו לבין ואספ של ואזה. כמו כן, תראה כיצד לשלב מסמכי
]אא עס אספ וגס עס גיליונות הסגנון של ]5א, וכיצד להשיג זאת על ידי שימוש
ב-856710%/' וב-ז28/856710. תוכל לראות כיצד מסמכי !אא מתקשרים עם ואד בתוך
יישוס אינטרנט, וכיצד מאחסניס ושולפיס נתוניסם משרת 501.
למי מיועד הספר?
ספר זה מיועד לך, אם אתה מעורב באופן כלשהו בפיתוח אתרים לרשת האינטרנט.
אא תשנה לגמרי את האופן בו אתה מפתח לאינטרנט, מאחסן מסמכים, או מטפל
בצורה כלשהי בתכנים של מסמכים כאלה. הספר מיועד לבעלי רקע בנושאים שמנינו
קודס. הוא אינו מיועד לחסרי רקע, או בעלי רקע חלקי ב- |ואד₪ ובניית אתרים.
מוסכמות הנמצאות בשימוש בספר זה
ספר זה מכיל מספר מוסכמות ואלמנטים שמטרתסם לסייע לך במציאת מידע במהירות.
כאן תוכל למצוא מידע נוסף מעבר למה שמוצג בסעיף או הרחבה של מה
ל שנלמד בסעיף.
(
סיור
קצר
כאן תמצא סטייה קלה מהנושא המדובר בסעיף.
לאחר התדפיס יופיע ניתוח והסבר שלו.
הקדמה | 17
התקליטור המצורף
בתקליטור המצורף תמצא את הדבריס הבאיס:
+ 056 חס %וחחג] עְה120-0 6זב50//3 הסושהּ!הּעם 7.0 זסעז56 .5001 ספסזסוו
> קוד מקור - קבצי קוד מקור של כל הדוגמאות שבספר.
> קטלוג 1ד1] של הוצאת הוד-עמי.
למידע נוסף קרא את נספח ה' ואת קובץ 086 שבתקליטוו
כמה מילים על שי עדן
בספר וה שי כתב את פרק 11 ואת הנספחים אי, בי, ו-ג'.
שי עדן הינו מרצה בכיר במכללת מחשבים גדולה, במסלולים המוביליס: תכנות
יישומיס לאינטרנט, ז60-913500//, 61ח60-6510/, 666 ו60-ם וביניהס |אא.
במסגרת עבודתו הוא פיתח חומרי לימוד בנושאיס אלה. בנוסף הוא בונה אתריס
עסקייס מזה מספר שנים.
שי השתתף בכתיבת ועריכת הספר ''4 135₪= למפתתי אתרים באינטרנט'י שראה אור
בהוצאת הוד-עמי.
לשאלות מקצועיות על הספר תוכלו לפנות לדואר אלקטרוני:
53.6 [|
8 א למפתחי אתרים באינטרנט
פרק 1
מן ההתחלה עם !א
בפרק וזה:
ייעוד מחדש של מסמכי
מהי צפת' \% ומה חציבוגנה עבוריו
ניתוח ועיצוב של פרויססי
מסע של צעד-אחר-צעד
*
*
%* \א בהְֶסְטר
.
*
*
הצעדים הבאזים
למען האמת, 1אא אינה הרבה יותר מאשר מִפָּרֶט (ח506616300).
מפרט (ח50661806800) הוא פרוטוקול מוסכס לאופןו יצירת מסמכים מסוגיס מסוימים.
המפרט עשוי לפתות מחבריס של מדריכיס לשימוש ב- |ואא לצלול הישר לתוך המבנה,
ולהתמקד במודל האובייקטים ובתחביר ההתקשרות עס מסמכי אא. הדבר מאוד
דומה ללמידת הטיה של פעליס בצרפתית, לפני שיש לך איזו שהיא סיבה בכלל לרצות
לדבר בשפה זו!
שפות מוכוונות אובייקטים (80008065] 060ח00[60-06) הן המעטפת של המושג מודל
האובייקטים ((006] 6[פ0). מודל האובייקטיס מתאר אובייקטיס בשפה וכיצד הס
מתייחסים ומגיביס זה לזה. במודל אובייקטיס, מתואריס האובייקטיס הקיימיס בשפה,
אופו ההיררכיה בינס לבין אובייקטים אחרים, תכונותיהס של האובייקטים ושיטותיהם.
ואסם - מודל האובייקטים של המסמך 006 665[פ0 %הסותטססכ) מתאר את
האובייקטים במסמך, וכיצד הס מתקשרים זה לזה. אחד המודלים הידועים ברשת
האינטרנט הוא מודל האובייקטיס של מסמכי |אזהּ, נעשה בו שימוש רחב בכתיבת
]וא דכ ו-28/85600. בנוסף למודל האובייקטיס של ו|ואדה, קייס גם מודל אובייקטיס
ל- |אא. ההבדל ביניהם הוא בכך שזה האחרון נקבע על ידי הכותב, ואינו מכיל
אובייקטיס קבועיס ומוכניס מראש. במהלך הלימוד בספר נלמד בהרחבה את מודל
האובייקטיס של מסמכי |אא.
פרק 1: מן ההתחלה עם |אא | 19
במקוס להטיח בפניך כמות נרחבת של מידע מעורפל וללא הקשר משמעותי, הבה
נתחיל בתיאור בעיה עסקית מהעולס האמיתי, ואז נראה כיצד אא מציעה פתרון
לבעיה זו.
בהמשך, ניישם את הפתרון וניעזר ביכולותיה של וזא להקל על משימתנו.
ייעוד מחדש של מסמכים
בכל רחבי העולס מנסיס עסקיס רבים לפתור את אותה הבעיה: ייעוד מחדש של
מסמכיס (ַחו05כזטק-₪6 זהסותטססכ). כיצד לוקתחיס מסמכים שכבר נמצאים בידינו
והופכיס אותסם זמינים כדפי ט6/ באינטרנט היוס, ובמדיוס השימושי מחר?
ייעוד מחדש של מסמכים (פַחופ5סקזוטק-6 +הסוחט6ספ) מתייחס ליכולת ליצור
מסמכים ומידע אחר, אשר זמינים במיגווןו פורמטים (865חזס=) על מיגוון מדיות.
לדוגמה, נדמה עצמנו לחברת אופנה. יש לנו קטלוג מוצלת של דגמי העונה שלנו השמור
בקובץ סזסש, הכולל תמונות בהן השקענו כסף רב ותכנים מוצלחים לטעמנו. אנחנו
מעונייניס להציג את קטלוג המוצרים שלנו על רשת האינטרנט, באתר החברה, עס
אופציות נוספות של חיפוש, אפשרויות לקנייה דרך האתר ועוד. לשם כך, יש ליצור
מסמך !אד מתאים. בנוסף, את אותו קטלוג מוצריס המוצג ברשת האינטרנט ומספק
את צרכינו מאוד, אנו רוציס לפרסם על גבי תקליטור באופן שונה ויוואלית, אבל דומה
בתוכנו. לאחר מכן, נרצה ליצור מקטלוג זה, קטלוג מודפס בצבע, פוסטרים, חוברות,
לוח שנה וכו'. כל מדיה כזו נדרשת לכתיבה ועיצוב בשפה שונה. כל מסמך כזה מעוצב
בשיטה שונה, אבל התוכן והה. השינוייס העיקריים הס אופן השימוש במידע ועיצובו.
המטרה היא לאפשר למסמך להיראות יפה והולס לכל מדיום, ולעצב ולייעד אותו לכל
קהל יעד.
הבה נבחן את הפתרונות עבור ייעוד מחדש של מסמך 6זסש עבור רשת האינטרנט:
הדרך הקשה לייעוד מחדש של החומר לרשת האינטרנט היא להקליד מחדש כל מסמך,
ועל ידי כך להעתיק אותו מהצורה בה הוא מופיע כיוס למבנה של מסמך וואד. אכן,
זהו הפתרון הישיר ביותר אך הוא יקר, צורך זמן ומועד לשגיאות.
חלופה אחרת, היא להשתמש ביכולותיו של מעבד התמלילים כדי לשמור את המסמך
בתצורת 1א31. פתרון זה מציב בעיות משלו: באמצעות 6זס/ לא ניתן ליצור דפי
אינטרנט בעיצוב מעניין ומושך, ולכן דרושה עבודה רבה נוספת לעיצוב מחדש
ולתיקוניס.
ובאותה רמת חשיבות, לא בנייה מחדש ולא שמירה בתצורת 11 פותריס באמת את
הבעיה: בפעס הבאה שנרצה להשתמש במסמך בדרך אחרת, כמו למשל להציגו במחשב
כף יד (1ק), להדפיס או לשלוח בדואר אלקטרוני, נתמודד שוב עס אותה הבעיה.
אפילו אס ברצוננו לשנות רק את מראה המסמך, נאלצ להתמודד עס עבודת עריכה
רבה.
0 יא למפתחי אתרים באינטרנט
הדפסה לעומת עבודה מקוונת
מעבר לשיקול המעשי של אחזקת מיגוון תצוגות של אותו מסמך, אחזקת מסמכי
אינטרנט בקבצי מעבד תמלילים אינה הגיונית כלל. מעבדי תמלילים נועדו ליצירת
מסמכים מודפסים. הס מצטיינים בכלים להגדרת שוליים, כותרות עליונות ותחתיות,
ועימוד.
עולס האינטרנט הוא עולס חדש בו קיימת דרישה גבוהה לעיצוב מושך, ולשס כך אנו
נדרשים לכלים וטכניקות עיצוב חדשות, אשר מעבדי התמלילים לא יכולים לספק לנו
לעת עתה.
כאשר תמונות נעות הומצאו לראשונה, קבעו במאי הקולנוע הראשוניס את המצלמה
על חצובה, כיוונו אותה לעבר הבימה, והסריטו סרטים של מחזות. ה היה המדיוס
שהס הכירו, וכך הס יישמו את הטכנולוגיה החדשה ליצירת סרטים. די וו' גריפיתי
(0ש67/8 ./ .ם) היה הבמאי הראשון שהסיר את המצלמה מעל החצובה ויצר את מה
שאנו מגדיריס כיוס כסרטים מודרניים. הצגת דפים באינטרנט דורשת שנסיר את
המסמכים מעל החצובה ונשנה את דרך העבודה שלנו ואת אופן החשיבה שלנו להצגת
מידע.
בעיה אחת עס לחיצה על שמור כ- ואד (₪11 5 6ש58) בעורך הטקסט המועדף
עליך היא שאתה מקבל תצוגת אינטרנט של מסמך מודפס, אשר בדרך כלל הוא נראה
עלוב וללא חיוניות.
מעבר לכך, מסמכי אינטרנט כוללים אלמנטים אקטיביים כגון חיפר-קישורים,
לחצנים, רשימות גלילה, מסגרות, טפסים ועוד אלמנטים בלתי שמישים בדפוס.
מסמכי אינטרנט גם מעוצבים לצורך הצגה על המסך, דבר המחייב שימוש שונה למדי
בתכנון ובגופניס, מאשר דרוש במדיוס מודפס.
אפילו בתוך העולס של מסמכי אינטרנט, אנו עשוייס לרצות שמסמך נתון יוצג במספר
רב של דרכים, על פי קהל היעד ומדיוס התצוגה שלנו. לקוחות מסוימיס רוציס
בתקציריס ובנקודות השיא בלבד; אחריס ידרשו את כל הפרטים. חלק מן הגולשים
ירצו לגלוש בגירסה המעוצבת היטב של אתרך (בטכנולוגיות עיצוב מתקדמות כמו
ח85|=, 6ע8/ו066ח5 וכו'), ואלו המחפשים מידע ולא עיצוב, יבקרו בגירסה הפשוטה אך
המהירה יותר. חלק יצפו במסמך ברזולוציה גבוהה במסך גדול, ואחריס יעשו ואת
במסכים קטנים וברזולוציה נמוכה מאוד, דרך חלון קטן במכשיר כף היד שלהס או
בטלפון סלולרי, דרך אתר ק/ו. עלינו לארגן, להציג ולשלוט בתוכן המסמך באופן
שונה בכל אחד מהמקרים הללו.
ייעוד מחדש (פחופסכןזטק-₪6) - בצורה חכמה
עלינו למצוא פתרון טוב יותר מאשר יילזרוק'יי מסמכים מודפסיס אל הרשת. במקוס
זאת, עלינו לפרק את המסמך לרכיביו האטומייס ואז לערב, להתאים ולשלוט בפיסות
אלו, בהתאס למקוס היעד להצגתס.
פרק 1: מן ההתחלה עם |ואא | 21
כדי לעשות זאת, עלינו להסיר את התלות בין תצוגה לתוכן, ובין תוכן למבנה. בקצרה,
אנו וקוקים להתייחס ליחידות האטומיות של המסמך כרכיבים עצמאיים.
לבסוף, אך במידת חשיבות זהה, עלינו להיות מסוגליס לאחסן את המסמך בצורה
שתאפשר להרכיבו מחדש בדרכים שונות, ככל הנדרש. עלינו להפוך את פיסות
הרכיביס של המסמך לקבועות, והמשמעות: הן חייבות להימצא במסד נתוניס.
מהו הגודל המתאים ליחידות האטומיות שנאחסן במסד הנתונים! בוודאי שנוכל
לשמור כל תו נפרד, אך זה מגוחך ביחס לערך הנוכתי.
תוויס, מילים, משפטים ואפילו פסקאות הס חסרי ערך לכשעצמס. מאמרים - קבוצות
קטנות של פסקאות המעבירות מסר עקבי - הס כמעט בוודאות היחידה האטומית
הנכונה, למרות שהגודל המעשי של רכיב כזה יוחלט בהתייחס ליישוס המסוים. למשל,
במאמרי מערכת (הידועים בכינוי 60615 51ו6א), סיפור בודד יהיה היחידה האטומית,
אך אס אנו מפרסמיס ספר לאינטרנט, סביר שפרק, או אפילו תת פרק, עשוייםס להיות
היחידה האטומית.
דוגמאות מהעולם האמיתי
קיימות דוגמאות רבות לחברות המתעמתות עס בעיית הפריסה מחדש של המסמכים
הקיימיס שבידיהן. אחד מלקוחותינו ביקש לסייע לו לקחת את כל המידע ממאמרי
המערכת שלו ולהפוך כל מאמר לזמין ברשת. המטרה היתה להשתמש במאמר הזהה
הן באינטרנט והן בדפוס, ואו להיות מסוגליס לפרוס מחדש את המאמר במהירות לכל
מדיוס אחר, שעשוי להיות בו עניין. ידענו, למשל, שאותס מאמריס ישמשו שוב בדפוט
להפקת סקירות שנתיות.
הלקוח שלנו נזקק גם ליכולת לחפש מאמר מסוים בהסתמך על תאריך הפרסום,
המחבר או הכותרת, וגם לפי מילים בגוף הטקסט. כל אחד ממאמריו נכתב ב-סזס\,
וכל חלקיו של מאמר מערכת מסוים נמצאו בקוב יחיד.
משימתנו היתה לחלצ את המאמריס מהקוב, לשמור את נתוני העל (0808%8סו₪, כגון
תאריך הפרסוס, המתבר וכו), לאחסן את הכל במסד נתוניס, ואז להפיק כל מאמר
במבנה מתאיס על פי הדרישה.
ללקוח אחר שלנו היה מערך נרחב של מאמריס בנושא בריאות. לקוח זה מנהל אתר
אינטרנט אינטראקטיבי, והמאמריס הס מידע נלווה, המסופק על פי דרישה. הוא
נזקק לאפשרות לסנן ולאתר קטעיס במאמרים המתאימים, בהתבסס על ההקשר בו
התבקשו. יתרה מזאת, מכיון שמשתמשים שונים של המערכת יכולים לבחור בין
מיגווו רמות מנוי, עליו להציג רמות מידע משתנות על פי קריטריון של המשתמש
המסויסם. גס במקרה זה עלינו לפרק את המאמרים ליחידות אטומיות שניתן לערב,
להתאים ולהציג במיגוון תצורות.
2 וא למפתחי אתרים באינטרנט
כיצד ספר זה נוצר
הסתבר שהפתרון ללקוח הראשון שלנו היה דומה לפתרון שהצגנו ללקות השני.
למעשה, ככל שהתקדמנו, הפכנו משוכנעים שלפנינו תבנית עיצוב (ח867? תִףופסכ)
קלאסית המופיעה בספר בעל ההשפעה העתידית ")0 606015 :86705 ת8ו65כ
506 060ח6כ) 66[ 580|6גו6א'יי (בהוצאת פחטטקח 60 |8ח0סו655?סזק ץ65|6/-ח00150,
על ידי 8וחהח68 חסוזם, 1995), 0201633612 :150%.
כך הגענו להכרה ששני הפתרונות לשני הלקוחות השוניס לא היו רק דומים זה לזה,
אלא למעשה היו התבנית לפתרון של מאות, אס לא אלפי בעיות דומות, בהן נתקליס
מפתחי אתרים באינטרנט מדי יום. בשלב וה התחלטנו לכתוב את הספר הנוכתי,
שמטרתו ללמד !אא ו- 51א בהקשר של תבנית עיצוב זו.
תבנית העיצוב
תבניות עיצוב - פחזסא8ק 065080 - מוצגות בשמן, מתוארות ואז מודגמות. השס שניתן
לתבנית העיצוב שלנו יהיה חסח68, שכן האספקט המרכזי של תבנית זו הוא ליצור
הזסץ |הוסהסחהס.
וחזס+ |68והסח68 היא הצורה המוסכמת על כולס כייתקןיי, והיא מתארת את מבנה
הנתוניס באופן קנוני, מדורג, בדומה לאופן בו מתוארות תיקיות ותת תיקיות בסייר
של ייחלונות'י.
מטה-מידע (₪1608-0889) הוא מידע אודות אוסף הנתונים, כמו הכותרת, המחבר,
תאריך היצירה וכוי.
אנו וקוקיס ל-חזס) |68וחסח68: מבנה ושפה לאחסון המסמכים שלנו ולאחזקת התוכן
וגם מטח-מידע.
השפה |וואא טובה במיוחד לשימוש במקרה זה, מכיון שהיא מספקת רמזיס סמנטיים,
בצורת תגיות (פָ19), אודות משמעות המידע. למשל, על ידי אחסון רצף התוויס
<46000>/0!6 ₪065 6אהּטַחחזז8ם <6זז>, אנו יודעיס ששלוש מילים אלו משמשות
ככותרת המסמך.
נאחסן את פקודות ]יא שלנו במסד נתוניס 7 זפ/ז56 .501, מכיון ששרת 501 הוא הכלי
הטוב ביותר לאחסון ושליפה מהיריס של מסמכי אינטרנט, שנבנו מרשומות !1יא.
הדבר יאפשר לנו לחפש, לסנן ולנהל את מסמכי ]יא הללו, תוך שימוש בפקודות .501
המקובלות.
0 [ אם אינך מכיר 501 ב- 100% - אל תיבהל!
הערה,
3 פקודות .501 שדרושות ללימוד בספר זה תוסברנה במהלך הלימוד. פירוט
נרחב על פקודות 501 תוכל למצוא בספר "בסיסי נתונים טבלאיים ושפת
0" בהוצאת הוד-עמי.
פרק 1: מן ההתחלה עם !אא | 23
אס כך, הרי לפניך ה-ח8₪67ק |168ח0ח68: עליך להמיר את המסמכים ל- וואא, לערוך
אותס ליחידות מידע שניתן לאחסן במסד נתוניס של 501, ואז להפיק את יחידות
המידע האלו ממבנה !יא לתצורה הנדרשת, כמו למשל וואזדה, =סק, קהצ וכוי.
בספר וה תלמד כיצד לעשות ואת. כפי שניתן לראות, התבנית מתמקדת ב/- ווא, אחת
הטכנולוגיות החדשות ואולי אף בין החזקות ברשת האינטרנט.
מה זה ואא ומה חשיבותו עבורי?
חבר שלי, אשר מפתח יישומי אינטרנט מזה כמעט עשור, אמר לי לאחרונה ש-יי ]וא
תשנה את העולס הרבה יותר מאשר ווידח'י. וו הצהרה של ממש! אס היא אכן נכונה,
פירושה ש- וא עשויה להיות אחד הפיתוחיס הטכנולוגייס החשוביס ביותר מזה דור.
הרשת, ולצורך זה האינטרנט, היא פיתוח שהתרחש די לאחרונה. בתצוגת מחשביס
בינואר 1994 ראיתי לראשונה במבט חטוף את הרשת, בביתן המציג את הדפדפן החדש
6 בשש השנים שחלפו מאז, הרשת שינתה את פני העסקיס באמריקה. כיוס
קשה למצוא חברה ללא אתר ברשת, וכל השינוי האגה התאפשר על ידי ואדה בלבד.
מכאן שניתן לומר בפה מלא ש- |אז₪, פשוטו כמשמעו, שינתה את האופן שבו אנו
משתמשיס במחשביס.
כיצד וה אפשרי ש- ]אא תהיה עוד יותר חשובה? ]אא יכולה להרחיב את היכולות של
הרשת ממכשיר אינטראקטיבי למשלוח מידע - למדיום של חילוף מידע
(ההטו60] 06ה8ח06א₪ ה800וזס+ה1). משמעות השינוי היא שעסקים יוכלו לבצע יותר
ממשלוח נתוניס ומידע ברשת. הס יוכלו לנהל פעילות עסקית מסחרית בהיקף רב.
]וא בהֶקְשַר
במובן מסוים, הדבר הקשה ביותר ב-ואא הוא ההבנה מה היא השפה המיוחדת הזו,
ולמה היא משמשת. כדי להבין ואת, עלינו לדון בהיסטוריה של הדרך שבה נוצרה.
הכל מתחיל ב-]56% (80886ח18 קט6ז3 678|260ה06 0870ה500, שפת סימון
סטנדרטית מוכללת). התפקיד של ]501 היה לתאר בניית שפת סימון על ידי התחביר
וההגדרות של האלמנטיס והתכונות של השפה. 501 הינה מטה-שפה.
מטה- שפה (ססָ008ח8 |-1608) זו שפת על, המתארת שפות אחרות.
התפקיד של ]501 להגדיר את התחביר של שפת סימון (00806ח13 קטאזפּוז).
תחביר (אזחץ5) הוא אוסף התוויס, הפיסוק והסדר של המילים בשפה.
שפת סימון מגדירה כיצד להוסיף משמעות למידע, כאשר בדרך כלל הכוונה היא
למסמך. הייסימון", מתאר את סימונו של קטע טקסט ומתן אפיון לקטע. שים לב, נהוג
לבלבל בין המונח הלועזי קט-אז8, המתאר סימון של טקסט על ידי עט סימון
(מארקר) למונח פְ0אזפּז, המתאר סימון על ידי שפת סימון.
4 אא למפתחי אתרים באינטרנט
אחת השפות שמתוארות בדרך זו על ידי !50 היא השפה וואדח. למעשה, ]דח היא תת
שפה (66ח10500) של שפת 56%1. המשמעות ש-|₪ מוסיפה למסמך היא בעיקר מידע
אודות הצגה (חס80זח650זק) של הנתוניס שבו. למשל: <106/>/9] 16596<פ>. התגיות <>
ו-<פ/> מסמנות את הנתון 1156 6556ניי כטקסט אשר יוצג בדפדפן באופן מודגש (80!0).
ניתן ליצור מספר כלשהו של שפות עס ]56%1, למרות ש-|יז₪ היא שפת הסימון
מבוססת- !56 הפופולרית ביותר שנוצרה.
שיס לב ש-50%1 אינה מגדירה את המבנה של |וואז. משימה זו מושגת על ידי סדס
(חסטוחו6 6קץד זהסותטססכ, הגדרת טיפוס מסמך). הגדרת טיפוס מסמך ואד (כלומר,
סדס) מבוססת על תחביר המוכתב על ידי 50% והתוצאה - הגדרת מסמך ואדה תקף.
הגדרת טיפוס מסמך - פדס (חסטוחוו6כ 6קץד 6חסותטססס) היא התיאור של התחביר
החוקי של מסמך. סזסם מגדיר מהו התחביר המותר, אופן הכתיבה שלו, רמת
ההיררכיה שבין אלמנטיס במסמך, התכונות והערכים אשר יכוליס לקבל אלמנטיס
במסמך. חריגה מההגדרות של המסמך, כפי שהן נקבעות בתוך ה-פדפ, אינה חוקית,
מסמך הנכתב על פי ההגדרות של סדס נקרא ייתקףיי. סדס עבור ואד מגדיר את
התקפות של <זט>, <ק> ושאר התגיות המשמשות ב-|אז3; ]56% מספקת את
התחביר עבור השפה שהיא מגדירה.
בסופו של דבר, לא 56%1 ולא פדס מגדיריס את הסמנטיקה של ואזה. הסמנטיקה
היא המשמעות של כל תגית, כמו למשל העובדה, שמשמעות התגית <₪> היא הדגשה.
משיגיס זאת על ידי תוכנה מפרשת: במקרה זה, זהו הדפדפן.
סמנטיקה (065ח08ח56) היא המשמעות של מילים וביטויים בשפה.
הבה נעשה סדר:
+ | )56% הינה שפת על המגדירה את התחביר של וואדו.
> סדפ של וואזו, היא הגדרת השפה של |וואדח, אשר מגדירה ולמעשה גס קובעת
אס מסמך נתון הוא חוקי ותקף.
+ הדפדפן מפרש את המסמך ומציג אותו כפי שמורות לו התגיות.
]וזא מפשטת את .56%
אס כך, היכן משתלבת !אא בתמונה זו? !וא היא תת שפה של !56%. זהו למעשה
פישוט של 50%1 כדי לשרת מטרה כמו זו של ]56% אך היא עושה ואת ביתר קלות.
הרעיון הוא לשמר כמחצית תכונות ]506% שמשתמשים בהן רוב הזמן.
זו אינה אבחנה טריוויאלית. ]56% היתה כה קשה לשימוש, עד שכל מי שלא היה
מומחה לא יכול היה להשתמש בה ביעילות. עובדה זו מציבה סף כניסה גבוה מאוד:
כדי להשתמש ב-56%1 צריך להשקיע זמן רב (או כסף) בהשגת המומחיות הנדרשת.
התוצאה היתה שמעט אנשים השתמשו בשפה והיא הפכה לטכנולוגיה שולית.
הנה הסוד לגבי 1אא: היא אינה קשה.
פרק 1: מן ההתחלה עם אא | 25
אא היא כה ישירה, עד שלמעשה, על ידי קריאת ספר קצר אחד בנושא (ספר זה
לדוגמה.) רוב המפתחיס יכוליסם להשתמש בה באופן שוטף ומייד. עיקר עוצמתה של
אא טמון בפשטותה. מטה-שפה בעלת עוצמה יכולה לשנות את האופן שבו אנו מגיביס
עס נתוניס; !אא היא מטה-שפה (00806ח3|-16%8א) כזו.
!א מגדירה תחביר של שפות. כמו בעזרת 56%1, באפשרותך להגדיר !אדו על ידי
אא, וניתן גם להגדיר באמצעותה עוד מספר רב של שפות חדשות אחרות. הדבר
החשוב ביותר אודות !וא הוא שהיא נוצרה במיוחד כדי שניתן יהיה להרחיבה. שלא
כמו וואדה, !אא אינה מכילה אוסף קבוע של תגיות.
הדגש ב- |וא אינו על תצוגה. בצורה אופיינית, תגיות !אא אינן אומרות לך דבר אודות
אופן הצגת הנתוניס, אך הן אומרות הרבה על משמעותם. יכולת זו לספק תגיות בעלות
משמעות היא שנותנת ל- |!אא את עוצמתה, כפי שנראה בהמשך.
כיצד נראית |וא?
כשאתה רואה לראשונה מסמך |1יא, הוא נראה בדיוק כמו מסמך וואד₪, מלבד
העובדה שתבחין מייד, שמעולס לא ראית את התגיות המסוימות הללו קודם לכן.
הקוד הבא הוא ציטוט חלקי מתוך קובצ ]אא שנעסוק בו מאוחר יותר בספר זה:
<000%>
<"10000"=)) "6/6|="4| ח56600>
<10>/006 זסזקהח)<6!>
<"0="10001ן "6/6|="8! ח56000>
<006/> זט | הקוח ד 70ז083ח563 6ח% סחוסבזסעס |<6|ו">
שיס לב שבמקוס למצוא תגיות כמו <זס> ו- <טו0>, אתה רואה כאן תגיות מיוחדות
כמו <200%>, <ח56000> ו- <006>. ווהי המהות של |אא: תגיות סמנטיות בעלות
משמעות.
עובדה חשובה אחת אודות תגיות !אא היא, שהמחבר של מסמך !וא מורשה ליצור
תגיות בעלות משמעות בהקשר הפיתוח שלו עצמו. פירושו של דבר, שלתגיות והות
תהיינה משמעויות שונות במסמכים שונים. למשל, התגית <0%6> במסמך אחד ייתכן
שתתייחס לכותרת של הפרק, אך במסמך אחר היא עשויה להתייחס לתואר (גם 6
באנגלית) של אדם (כמו .זס, .זוי! וכו'), בהקשר אחר, היא יכולה להתייחס לתפקידו של
אדס מסוים, או לבעלות על בית או מכונית.
באופן דומה, תגית כמו <וססחוש> בהקשר מסויס, תתייחס לחלון של תוכנה,
ובהקשר אחר, במסמך המפרט חלקי בית, תתייחס לחלון בבית.
יוצר המסמך הוא מי שיוצר את התגיות, והוא שנותן להן שס ומשמעות, על פי צרכיו.
6 אא למפתחי אתרים באינטרנט
תכונות של תגיות !אא
ב- |ואא, תגיות יכולות להכיל גס תכונות (4)67100065) בעלות משמעות. כשס שהתגית
זטסחו של ווד יכולה להכיל את התכונות ח6=8600חחפּח ו-זוהפט6=5קשט, כאן תגית
כמו <0001> יכולה להכיל את התכונות "6100%="300 ו-"60ז]"=זסו0ס6.
הבה נתעלם בינתיים מן המשמעות של התגיות המסוימות הללו ונתמקד בעובדה שהן
מוגדרות כבעלות משמעות בהקשר של הפרויקט שלנו. כלומר, שפת הסימון הורחבה
וכוללת עתה תגיות בעלות משמעויות המותאמות לצרכינו!
כשס שלתגית חייבת להיות משמעות בהקשר שלה, כן גם לתכונות יש לספק משמעות
בהקשר. התכונות של סעיף (ח56000) בספר תהיינה כמובן שונות מהתכונות של אזור
(גם כן ח56000) בתכנון עירוני.
מהי %51א?
הבנו ששפת !אא הינה שפה לייצוג תוכני של מידע. אבל, ישנה חשיבות מרובה לאופן
עיצוב הנתוניס והצגתס בסופו של דבר למשתמש. לשם כך, יש להעביר את קוד ה- !]וא
דרך שפת עיצוב סגנונות, אשר תשלוט באופן הצגת הנתונים למשתמש.
אחת האפשרויות היא 655 (6605ח5 5/6 8חו085680) - שפת עיצוב גיליונות מדורגים,
המוכרת לרובנו מ- |ויזדהפ. 055 בעלת יכולות גבוהות לעיצוב ויזואלי של נתוניסם, אך
רמת השליטה בנתונים, לפני הצגתס נמוכה.
השפה ]5א (סְחָפּטַפַח3 | +56/!65066 510!6ח06א6) - שפת גיליונות עיצוב הניתניס להרחבה
- משמשת להמרה של מסמכי !אא ולשליטה בתצוגה שלהס. שפה זו חשובה מאוד
בעבודה עס ]!אא, ובשונה מ-655, היא מכילה תכונות מתקדמות, וחזקות במיוחד
לעיבוד נתוניס והצגתס.
כפי שנראה בספר זה, הדפדפן 5 זסזס|קא= 66חזסשח1 (5ם1) הינו היחיד התומך כיוס
ב- |!אא, ואפילו הוא, תומך רק במחצית מהיכולות של 51א<: בהמרות (טרנספורמציות).
למרבית המצל, אלו הן היכולות החשובות, והן מבטאות את ההבדל הניכר בין .51א
ו-055. המרות על ידי +5א מאפשרות לטפל במבנה ובתוכן של מסמך |א, ובספר וה
נעשה בכלי וה שימוש נרחב.
ניתוח ועיצוב של הפרויקט שלנו
לשם הלימוד, בחרנו פרויקט דמיוני, אשר העבודה עליו תלווה ביישוס שפת !אא ו-51א.
בפרויקט שלנו נתחיל, כמו בכל פרויקט, בניתוח הדרישות. אחר כך נעצב פתרון,
ולבסוף ניישס את הפתרון שבחרנו בו. מכיון שזו תוכנית הדגמה קטנה למדי, הניתוח
יהיה פשוט יותר מאשר בעולם האמיתי. אנו להוטים להתחיל בעיצוב וביישום, אך
הבה נוודא תחילה שאנו מביניסם לחלוטין את הבעיה שברצוננו לפתור.
פרק 1: מן ההתחלה עם |אא | 27
60 דסווטו8 - דרישות הפרויקט
בתסריט הדמיוני שלנו, החליט תאגיד 06 לספק את תוכן הספרים בצורה מקוונת,
וליצור אתר אינטרנט שבו יוכלו קוראים לשאול שאלות במיגוון נושאיס. התשובות
לשאלות הקוראים יכילו ציטוט, ואפילו קטעיס מתוך הספרים. כדי להשיג מטרה זו,
אנו זקוקיס לכלי המסוגל למצוא ולהציג במהירות, ולפי דרישה קטעי טקסט או קטעי
קוד מתוך ספר.
ניתוח אירועים
אין בכוונתנו ליצור ניתוח אירועיס (פ08!/51 056-6856) מלא ומפורט עבור פרויקט זה,
מכיון שאנו מתכווניס להשאיר את הדבריס מאוד פשוטיס (להסבר מלא אודות ניתוח
אירועים וניתוח ועיצוב מוכווני-עצמיס, ראה את רשימת הקריאה המוצעת בנספת ד'י).
כעת, נגדיר את השחקנים (5זס16) העיקרייס במערכת כיימחבריי והייסטודנטיס", או
הייקוראיסיי המקווניס.
בניתוח ועיצוב מוכווני-עצמיס, שחקן (4601) הוא כל אדם, או מערכת, המגיבים
ליישוס שאנו מעצביס.
האירועיס (68565 056) החשוביס הםס:
1. המחבר משתמש ב-ח66דסו|פו8 כדי למצוא הסבר הולס לשאלה שהופנתה אליו,
והוא יכול לגזור ולהדביק הסבר גה הישר לתוך הודעת דואר או דף אינטרנט.
2 המחבר משתמש ב-07600ו!815 כדי למצוא מובאה מן הספר בנושא מסוים,
שאותה יגזור וידביק לתוך הודעה אחרת.
3 המחבר משתמש ב-ה66 דסו!פו8 כדי לסקור, ואולי בסופו של דבר אף לערוך קטעיס
אחדיס הקשורים לאותו נושא.
4 הסטודנט משתמש ב-07600ו!810 באמצעות רשת האינטרנט, כדי למצוא הסבריס
אודות נושאיס מסוימיס המעניינים אותו.
ישנס אירועיס נוספיס אשר ניתן לחשוב עליהס; עס ואת, אלה יספקו לנו התחלה
טובה להבנת הדרישות מהמערכת שנציג בהמשך.
מראה (חסוַזהּ?ו150331/)
ח66 דסווטופ הוא כלי שיספק רשימה של כל הנושאיס בספר, בצורת רשימה או טבלה
הניתנת להרחבה. כל נושא יהיה פעיל - לחיצה על הנושא תציג את המאמר, או את
קטע הטקסט הרלוונטי. כמו כן, המשתמש יוכל לחפש מיליס בכותרת, או בכל מקוס
בטקסט.
חשוב לקבל מושג על המראה של יישום וּה. בכך ניתן לקבל תובנה רבת עוצמה על אופן
הפעולה של היישוס והשימוש בו.
8 א למפתחי אתרים באינטרנט
להלן תרשיס 1.1 הממחיש את חססדסווסו8 כפי שאני מדמיין אותו.
| 6 1005 פפוסוםם אש ₪ שם |
8 ₪ 8 ב | 6 ו
5 | 66 זחווק 3 עזסופו = 65)וזסה = 568100 פוחסו] | 36/658] | קסופ םס 6%
86 | | 1 *
חִחו5פ0 סז חס
+חפחזמס!פצפס הפזפוד הפוחד
זעב | 8510855 פחד
זפץ3 | הסוז%3ח858זס החד
הַחו583700
08% 5
63018 3
+ סחסס +0 +ססזק
זם 45 :עְהַס0ו80000+ הפוחעי
?7
4 ? 0|35585 80/% .5 50ב
המץזסזסזק
00308 08 ,%5ספ[סזום פפוחד
החוזוב או סא
ץוח 455 ? 1 זספ[סיוק
זטסח*ו/ +ספןסזס פחחד טחוטווום
צ9708+ח1 |בטפו/י
8 50 פ|מחזום 4
ד 5%גון 5 5 ,חפ פח+ חן
60 3 הַחוה
60 זטוסטה
זוא 8!|נוטסוח יפה חל הַחופנו
בב
-
| [ז%ח60 0+ 830% | 05 83700 | 8 830 | 06 || 105%
]הזוחו 1.008 ר-| ₪ 6 ₪
תרשים 1.1: 66 דסווסום
ח66 דסווטום הוא יישוס אינטרנט פשוט וברור למדי. בתחתית המסך מציביס פקדיס
המאפשריס למשתמש להציג את רשימת כל הנושאיס (כמוצג בתרשים 1.1), או
להציגס בטבלה הניתנת להרחבה (09ח6חס6 +0 8016 601!30510!6), כמוצג בתרשים 1.2.
|<]5] - | זסזס!קא = +6חז6)ח! !]ס5סזסוא - 800% 6חד |;
| ]| 1008 68)סצב] | אסע 20% 6 |
2 8 | 68 8 ₪ |. 8 ₪ 3
8 66 חוק ובו עז50] = 65וזס/ם = 568100 שוחסו] | 36/688] | קסופ בבס 6%
| | ₪06 ה 87 ] 80065 |
1 6387 +
2 0030187 +
3 0308 -
פטס +0 +ססוזם -
:עְחַ0|0ח80+ הסוחצ +
7 וזו 450
.פע 80 -
8ץזסזסזק 4 ? 0|35585
,80%5[סזם 88זחד +
סא ,03018 פחס
הַחווב או
5 ? 1 801[סזק +
ץוחס
החד החוט!וטם +
טסו +ספ[סוק
טח[ |בטפול
הב 450 8וקחום ₪ -
5 זו ,חפ פח+ ח[ +
₪ ו
| [סוה60 0ז 830% 05 583700 | וד 83700 מ | !| 1051
זוה הסס-1 וש | וס [6
תרשים 1.2: טבלת תוכן הניתנת להרחבה
פרק 1: מן ההתחלה עם !אא | 29
בנוסף לזאת, המשתמש יכול להקליד מילה או ביטוי לתוך שדה הטקסט ולחפש
בכותרות. הרחבה קלה של תוכנית זו, המושארת כתרגיל לקורא, היא לאפשר חיפוש
טקסט מלא, וכן גס סינון ומיון של התוכן.
אס המשתמש לותח על כותרת מאמר או הטקסט, הוא יוצג בחלק המסך הימני.
<>1]- 1 סחזס 0 0
> | 6 1006 פפהסום" אש ₪ שם |
| 3( כ( ₪ 8 | ₪ ₪8 9 | ₪(- | ₪ 9 ב
08| 68 זוז ו עז50ו = 0065ב 568100 חס | 3/680 | קסופ 0%
|* || 705 [- ₪ [6] 400 |
?135565 6/ יצס 4.517 :1601010108 ו[טצורתר 1 63087 +
2 7ז0030%8 +
3 ז8זמ3ת0 -
+מפסחסס +0 +ססזס -
:9+ הסוחעל +
7" וזו 450
.פע קה -
פמץזסזסזס 8 ? 0135585
,80%5[סזם 8פזחד
סא ,80זק3ח0 פחס
160010 8 1.866 +8גוזז 1 ,11162 פגוס ינכ 1126 בג 0180118866 66810 126 +ת6מפ1ק 50 קז 1 361026
?9 0/9 (413) 868 צסזרנס 3 6זינ1ס 25 ₪ בטפגו 601[סץסן 118 ]וגוט 10 ₪ נס [ הנפ :601910
8 1 18 111616 קוסב זד[076נ16181 81111 816 1/760)2188868 ,קד 10ס בנם0 16 צה[גוקסכן 6סת 1116 עב? זט 18 קב
]ופ 8 01 זפ 1 .618מצזה וק סז 08910 17191281 81 1386166 06 10 צה6מס3 116 ב 16 וגוסט3 מ116ור
6 ב זמ 18766 8זי'1 0+ 8 01 גט61 וספ 066 188 ופנק סעכ ++?) 8 זי ,גנט סז סופ
,6 00118 8 גו 10 ק בנגו 0019186160 6זיפם! 8[גוסזקו 1 11181 1302826 8 +ס זגוט ,881
81103 300110 620181 הטנס ט 06ב 610 0-ק 1 ,8016 ב 1מנ מ
6 1 01076 %, 1126 301 66 1תס 1116 עס 33. קבטפגו קיט -++2) מג 118 61ה16קו סט ןמוט 1
צסת6סגופ 131 3 ₪6 זג 7600215868 %בגבן1 1 11181 18 16 סעכ 1126 .68 030% 1116 צסץ (-2.71) 3 +10 1
7 0+ זיק 160010
החולוב אי
+ אוס[41 10 3681866 8 :הכמ מ 00[6018 01 861 8 18 87 :מו 1 61816 ד 6זוגוס ב שמ ?ד ספה ? 1 זסםוסזס
8 )2)01)1) 10-0268186 זי68811 628מצזנפעש סצכן ע ל
86 1116 גנט 011081108 '776 מומגת צסץ קם 16001 8% 080עט1/11 ? 3068 נסז36 פקעוס. ב 7 קת סד הַחוטווום >
בד 66חז .1171/11 בפגו (1ת016 116 מס 118 48161
8 760 0 ₪6 8גושג! 16 ? 6 בגוכבב,1 ג10נה1/1 6 דע6מקוד1 ? .זז דד
זטסזו/ זספ[םוק
0708זח1 [בטפול
ההָבּק 450 פ|מחום 8 -
5 זו ,חפ 8 חן +
וד זגו
[0ז%ח60 0+ 830% 05 00ב 8 ח830 ססך | || 105%
]הזוחו 1008 = 6 ₪
טסט צס 17301 88 סגוט 306גו ב3! קמגוס ספ 8 מו 16 פמנב זנק סעכ 916 ? ומס
בס 118 18161) 56761 126 בס 81108 310 מ 7/6 מנתתגת 0+ זדם 010 מב160 50 1/1020 7 02188868מ6/קר
.28810 [8גו719' קנצפגו (1מ116ט 116 ₪
תרשים 1.3: תצוגת מאמר
היישוס 66 דסוופו8 מסתמך במשתמע על כך שכל חלק של הספר (המוגדר כאן כמאמר,
6זזה), מאוחסן במאגר הנתוניס וזמין במבנה ]ואא. נחזור ליישוס 66 דסוופום לקראת
סוף הספר, לכשנשיג את המטלות הללו.
מסע של צעד-אחר-צעד
מטרתנו היא לעבור למצב בו כל חלקי הספר מאוחסנים בבסיס נתונים, כך שיהיו
זמיניס במבנה |אא. לשס כך, עלינו להמיר את קבצי ה-6זס), אל מבנה הנתונים.
הצעדיס הבאיס נדרשים כדי לעבור מקבצי סזס), שכל אחד מהס מכיל פרק, למבנה
הנתוניס הנדרש עבור ח66₪ דסווסוא :
1
2
20
שמור את מסמכי סזס/ הקיימים כ- |ואדה.
המר את קבצי ואד למבנה ואזח המעוצב היטב (ידוע גם כ- |[אדחא, או ואדה
מורחב). תוכל להשיג ואת על ידי פעולות על מודל אובייקט המסמך (ואספ) של
ד (|006 66%[ +ח6והו6סכ ווזדת).
)א למפתחי אתרים באינטרנט
3 המר את קובצ !אחא למבנה |א. עשה זאת בשני שלביס: תחילה, על ידי שימוש
בגיליוו עיצוב של !5 ואחר כך, על ידי הסבה ישירה של מודל האובייקטיס של
המסמך (ספ) של ואא.
4 פצל את הטקסט לנושאיס או סעיפים, ושמור אותם במסד נתוניסם של
]50
5 בנה את תצוגת טבלת תוכן הענייניס.
6. בנה את היישוס ח66דסווטום.
לאחר ביצוע הפעולות שפורטו לעיל, תוכל לשפצ את היישוס. בפרקיס האחרוניס נראה
יחידות תכנות נוספות, שתסייענה בהבנה ובהפעלת אא ו- 51א.
מה לא אציג בפרויקט
בפרויקט כזה, כמו במרבית יישומי האינטרנט, חלק ניכר מהמאמצ האמיתי מופנה
ליצירת תצוגה טובה. לא אעשה זאת כאן, מכיוןו שמטרתי ללמד את השימוש ב- ווא,
ואיני מתכוון להדגיש את נושאי התצוגה. על כן השארתי את היישוס הזה דל במכוון,
מבחינת התצוגה. הדגש בספר זה הוא על ]אא ועל 51א<; אין בכוונתי להסיח את
תשומת הלב על ידי טריקים בתכנות, שאינס רלוונטייס למטלה הנדונה.
ואפילו כדי לבנות את היישוס הדל הזה, עליי להשתמש בכלים רביםס של טכנולוגיות
התכנות ברשת, ובכללן אְַָ856ּ/18, 55ה, ססג ועוד. אסביר את הכליס המתותכמיס
האלה ככל שנתקדם. עס ואת, חשוב לזכור שהדגש יהיה על !אא ועל )5א, ולא על
הטכנולוגיות התומכות הקשורות.
[ מהם יתרונות השימוש ב- 57 לעומת 606!35565/?
הערה,
5 התשובה היא משולשת: ראשית, דפי 45 הם פשוטים למדי, ואין יתרון
לשימוש ב- 800!85565/ (המצטיינים ביישומים מורכבים יותר).
שנית, לעת עתה, ק5ג הוא סביבת תכנות שכיחה בהרבה, כך שיותר
קוראים בוודאי מכירים אותה.
שלישית, דפי 5 אינם מחייבים רכישת 8/, ואני רציתי להבטיח שתוכל
ליישם את כל הקוד בספר זה מבלי שתצטרך לרכוש סביבת פיתוח חדשה.
הצעדים הבאים
לאחר סקירת הפרויקט, הבה נתחיל בבחינת מסמכי סזסש המכיליס כמה פרקיס מן
הספר. מטרתנו להמיר אותס ל- וויא, מטרה שנשיג על ידי שמירת מסמכים אלה
כ-||אזה, המרתם לקבצי |אז₪ אשר תקפים ב-|%א. לבסוף, נמיר אותס
ל-10708% |168ח0ח68 שלנו ב- ןוא
פרק 1: מן ההתחלה עם ואא | 31
פרק 2
מעבר מ- וודוו ל- וואדווא
בפרק זה:
ניתוח
הסבה ל- )אד
הסבת 6זס\ ל- \אדווא
סטירת הסור
הצעדים הבאזים
בפרק 1 עסקנו בצעדיס הנדרשיס להמרת מסמכי 6זס/ ל- |ואא. מטרתנו להגיע למסמך
]אא המפורק לקטעים (ייסיפורים'י, מאמרים, או יחידות אטומיות) ומאוחסן במסד
נתוניס. הדבר יספק לנו ארכיטקטורה גמישה, שממנה נוכל לשחזר ולפרוס מחדש את
קטעי הטקסט לכל מבנה ומטרה שנתפוצ.
כדי להשיג זאת, עלינו לבצע סדרת המרות, או טרנספורמציות. הראשונה היא המרה
ממבנה 6זס) הבינארי המיוחד, למשהו שנוכל לעבוד אתו. עס זאת, בתהליך זה עלינו
לפרש גס את משמעות המסמך, כך שנוכל להמיר מהמבנה הפנימי הקייס למבנה וא
ללא אובדן של נתוני-העל (₪16780818) המצויים כרגע במסמך סזסו. כדי להבין סוגייה
זו, עיין בתדפיס 2.1 המציג קטע בו נשתמש בפרויקט וה:
תדפיס 2.1 מובאה מתוך מסמך פזסשצ מעוצב
5 ורוו
.60120805 10016-51260ח 01 6605 65007665 ההוחגוה 6 6הַבּחהרח |!ואו 6606 ץסוכוחם
סש א סווום | ה ,חחח 66 עס 5005060 8ַחוסס 15 665נסזס פחד
.0 6ש 85 65וח8ח 60 006 זס? 68|26ח06 השח סחה 5 שפח זוסת+
.05 605 180-600 0 6זנ6ה הוח 6 הו 6!קססכן 2,000 665ץסוכרח6 66
ץד . סוח2וכ) 5גוסרחב*- סע זור 0ב 006% 266 6 סזבּ 5ססטוססזכ [הקוסחוזס זוסחד
5 חור זור 30 006%ח00ם צוס 30 אהטססק 85% חו פחבוכ 8חהטס6ה)נוחהוח סעבה
6008 הו סוב
פרק 2: מעבר מ-|אזה ל-ואזהא | 33
הסוז281ו|00008ח0ס6
זז 2665 || 76% 0 +הסוח+הכ06 |סההספזסכ סל עוסווב ||ואו צ6606ץסוכוחם
+חסרהץסורח6 השס זו 600% סחה צוסושסז 0+ 665ץס|קרח6 טסווב |וואו סחה ,665ץסוכוחס
5
5% 156
6זסו 0[60זס 506 3 זס? 65 ה6וח6זווססז |63וכ/₪ 6 הסחע סרח 3 85עו סזוסחד
6 8% 60זוו5ח6 15 !וח .חבס סכ 30 65חו|וטה63 +0 5חזס+ חן 65560זקאס
6חסץחה 86 656 +סח 010 ,5אזה רה 066 506060 ה[הד06 ז6 וח506/ץ5 0ח50!0סז
605080 ססחו ז0ס186 00% ז6פגו 66 ץווה6וסץיד .זו 56גו סף +חהצו 6|טוסצצ זס סוטוסס
00 6 00% 85 00%סזכ 6+ זסאבּ
6 אוסה 01 ההז סח הס ססר 3 השוטצ 06015 515ץ!החבּ 60סח6ס-60[טס
זט 8 הסוחצ חו 5ץ8/ 5טסוזע 6+ ]0 +ח6 50000 |ההזס? 8 15 586-6856 ג .560 06 וו
!3060 60 %חפעו ||ואו 6 )חצ חב ,5506 606 השועש זסהזס6חו ||ואו
.0 06 !ואו הח57506 6 הסוחצו חו באו חס 01 +ה6ח55306 [הוחזס1 / - 6356 ₪56 -] 9
6 58| 08% - "6005" |הקוסחוזכן 6 חַחו0ה106 כ 5ופ/|החה 6356 ספ 6 הו0סט 6 4
6 656 ך .רה506/ץ5 006 01 15075 -
(05 660 חכ ה חס ח6) [6החה0פזסכן 650665 ההוחטת *
זו הו 006 אסא 6 0 חוסו/6) 5ז ההות 650665 ההוחט *
(65ו20!!6ן 560000 30 הר 063
(660705ז העטס וס הועשסוש6ז) 665ץסוקוחם *
(15וסכ6ז 066 זור 01 660705 66ץס|קרח6 6 סהושוסועסז) 5זסַהַבחב3 *
6ז'ס/ש רה506/ץ5 6 השועו 86%5זססח! סחצו וה5/5%6 5070876 זסוסס זס הספזסכ ב - וס -] 9
₪0 5 4
מובאה קצרה זו חושפת מספר עובדות מעניינות ורלוונטיות אודות ספר זה. החשובה
ביותר היא שמסמך 6זסש כבר מסומן (37660-00) בחלקו ומותאס להפקת דפוס.
כשכתבתי ספר וּה, סימנתי טקסט ככותרות חלקים, כותרות פרקים, רשימות
ממוספרות, הערות וכן הלאה. עשיתי ואת בשתי דרכים.
תחילה, השתמשתי בסימוניסם מפורשיס בטקסט. למשל, בטקסט המוצג לעיל, הסעיף
ייניתוחיי הוא כותרת מרמה 6. כותרת מרמה 4 היא מספר פרק, מרמה 8 היא כותרת
פרק, וכותרת מרמה 6 (או 1 0חו₪4680) מסמנת סעיף. כותרת מרמה כ היא 2 0חו680,
כלומר היא תת כותרת עבור כותרת מרמה 6. יש גס כותרות מרמות 5, = ו-6.
על ידי סימון ייניתוחיי ככותרת מרמה 6, ציינתי שזהו השס של סעיף מרכזי. על כן,
קווי הסגנון המנחיס מכתיביס שהכותרת תודפס בגופן בגודל 8 נקודות, מודגש, מסוג
8 6000 6068ע|46] באנגלית, או 20 (ש6זט6ה)|אוזה בעברית, וכן הלאה. סעיף המשנה
ייהרעיון" הוא ברמה , ויודפס בגופן 14 מודגש מסוג 8 0000 6/6068 באנגלית, או
גופן 16 (שש6ז760ז)|פוזה בעברית.
בנוסף לסימון הכותרות, יש להתאים את סגנון סזסש לכל אחת מהן. הסגנון הוא מתוך
קבוצה של סגנונות המסופקת על ידי ח8!!ווח186א, ומצויה בין תבניות מסמכי סזסצ שלי.
4 וא למפתחי אתרים באינטרנט
סגנונות אלה הס בעלי משמעות רק למחלקת ההפקה של חפו|וח136. מוציאים לאור
אחרים ישתמשו בתבניות סגנון אחרות, לפי רצונס.
במסמך באנגלית, כותרת מרמה 6 מצוינת על ידי הסימון (6) ומותאמת לסגנון סזס\ ₪46,
כמוצג בתרשים 2.1.
[<|5)- | 01050 - 2.006 זסופהת 5ס או 1
| קוסו | שוסטחוע 6ב 1005 6הזס= = זספתך אוסוע. פוב 6 |
ב - 0096 7|-- ₪275 ₪ ₪ םןו
ונ
.ץ[אס1טף שעפט 518 80 ₪0 60126 שע'פט ,סהם עטסץ 60 מס
065161 6תה 515ע[התת(0)
0 680606 18גוס 1 ,1076886%קתם פב בסט5 6ספ[סעק 66ע13 3 בסנח
בבפענבתת תס 6186 0% סתגוסתה %6ת1+108ת510 3 ספ6טם1
56 0ם₪08611) 4651 בםתה8 (55ת66ע 1ט6ע ₪6 שת 5582061 6תג)
6 שת61נ1עט) מ53610ת16(6ק10 התנתת61ק 6ע6+0ע (ת5010610
₪086 ( .
סש 3 פבשט 10766868קתם ₪286 18560ו60ק5 שצהםת 18ט 1 1992 מך
6 ץצ ;56עעו60 05 ,התסעשט מ266 6טבת 18טסש 1 .608[סעק עה6צ
|]פעהפסץ 66עג5 0ס סטס 268ק511 שטבב ה1טסט 16 ,6ת80 פעפש פט 106
50 עהפץ 8 םמבג5 1655 2806 שט 5286 משטסםת% שטבם סמש1ת 1 1995 צם
,קט 06ת6661ק5 15 18עס₪ 6ם₪ 608056ע ,515 1186 666[סעק 8 118טע
8 ע66תגט ם1 66אע8ת 526 116 66668 180 51668 ס6מע6סתד 88
.עהפץ
עססעבתם 6ת86851 811 שע'סט ,ע26556 4658126 שעב 50015 6םמך
5 ב651610ק00ס 526 6םת8 5ם1168810קקה3 65ח 118טק 60 שסם סטסכה
מט 2611696 1 ,צ7003 .שתנאמנעםב5 56605 6תַבע+ 6מתנס 76 .116206
-
5 6 1 8008 56 005 616886ע מ8ע1? 8 665 50 ע0ט868ת6 ספות
₪ מס במסתסת 38 82005 6ם6ק5 1'8 ,15ם6 60 70 .1655 פקהבע6ע .פתפתסת
צִ 8םת01סס פמפסתסת סשס מ6ג6 בת3 8651072 תס מסתסת עשבססתה ,=נבץ[בתב3
, + |5 ||
| בש ] הלס | > אקז] חן ₪1 18 ת] "49 >הן 18 1 5% 1 פחָק |
תרשים 2.1: דוגמה של כותרת מרמה 6.
כשאני כותב את החומר, אני גס מסמן קטעים מסוימים לטיפול מיוחד על ידי
העורכים. הסכמתי אתם על סימון מיוחד, בשס ''מונח טכני'י, המספק הגדרות של
מונחים טכניים. כשברצוני לציין יימונח טכנייי אני מקליד: ***מונח טכנל***
זוהי הנחיית הוצאה לאור עבור העורך, המציינת כי השורות שבין הכוכביות אמורות
להופיע לצד סימון ''מונח טכנייי. להלן דוגמה:
הנח*יה למו''ל (6ע660זום פַחוחפו|פטק) היא סימול המשמש לציון טיפול
מיוחד הנדרש ממחלקת ההפקה.
''מונח טכנייי מסומן גם באחד משני סגנונות מיוחדים: סק (660₪06זום פַחוחפוופטק) או
סא (ססא). אלה משמשיס לסרגלי צד (5ז0008ו5), כגון: הערה, 'ימונח טכנייי, ייכיצד
מבטאים זאתניי, ייטיפיי וכן הלאה.
דוגמה נוספת: כשיש לי רשימת תבליטים, מבקש המו'"ל שלי שאסמן כל נקודת תבליט
ב- [פ]. בעת העריכה סימול זה יוחלף בתבליט. אני גם משתמש בשני סגנונות. כל שורה
מסומנת עס הסגנון 81 (1150 801!6%60) מלבד השורה האחרונה, המסומנת עם א8. 8%
מציין שזהו התבליט האחרון, ולכן נדרש ריווח אופקי נוסף לאחר שורה זו.
פרק 2: מעבר מ-|אזה ל-ואזהא - 35
הסגנון 4 (זסושטה) משמש לתת הכותרת של המחבר או לציון הכרת תודה. הסגנון ד
משמש לטקסט הרגיל לאורך המסמך.
בהמשך, נעסוק במיוחד בקוד המקור, המסומן בשלושה סגנונות. שורה בודדת של קוד
מצוינת על ידי הסגנון 61. וקוד של מספר שורות מצוין על ידי הסגנון 62, כאשר
השורה האחרונה מסומנת על ידי סגנון א6. אלה יהפכו חשוביס במיוחד כאשר נהפוך
את המסמכים הללו למבנה ה- |ואא |608ח0ח68 שלנו.
חשוב לציין: כל הסגנונות והסימוליס המיוחדיס שהזכרנו עד כה (ויש רביס נוספים
שלא הזכרנו) הם ייחודייס להוצאת ח₪8!|וח86. הס אינם חלק מ-1אא, אלא ייחודיים
לתחום שבו אנו עוסקים.
אס כך, עולה השאלה, מדוע אנו טורחיס לכלול את רמת הפירוט הזו אודות תחוס
העיסוק (הוצאת ח8ו|וחח86ו), כשאנו עשוייס שלא להזדקק לה שוב לעולס!! התשובה
היא, שלמרות שפרטי גיליון הסגנונות הס ייחודייס ל-ח8|!וח186, הנוהל הכולל המקיף
לקיחת מסמך עס קבוצה של ציונים, סימולים, סגנונות ומטה-נתוניס והפיכתס ל- !]וא
- היא מטלה שכיחה למדי.
הסבה ל- וואדו
אס כך, אנו רואיס שישנס שני נושאים שלוביס. האחד הוא המרת מסמך ממבנה 6זס)
למבנה !1יזז, והשני הוא הבנת וקבלת מטה-נתוניס המצוייס כרגע בסימולי העריכה
של ח8!|והח186 (כמו ''5068% 066%'י, למשל) ובשימוש בסגנונות של 6זס/.
בסופו של דבר איננו וקוקיס לקבל את הסגנונות. לא מעניין אותנו ששורה מסוימת
סומנה בסגנון 4ח. עס זאת, כן איכפת לנו לקבל את המטה-נתונים הניתניס כרגע על
ידי אותו סגנון. כלומר, בעוד שלא איכפת לנו שזה היה סגנון 3ח, כן איכפת לנו שזו
היתה כותרת מרמה (. מה שאנו עושים למסמכי חפ₪ו!ווח186א, עשינו קודס, ונמשיך
לעשות, ללקוחות רביס נוספיס; רק הפרטיס משתנים.
מ-6זוס/צ ל- !ו דוו
מעבד התמלילים 6זס/ 670506 מאחסן את מסמכיו בתצורה בינארית מוצפנת
ייחודית. אני מניח שניתן לכתוב תוכנית מותאמת שתקרא את התצורה הבינארית
ישירות, אך זה עשוי להיות קשה ומסורבל. לחילופין, ניתן להשתמש באוטומציית
60% בכדי להתקשר עם מודל האובייקט סזסש ולשלוט במסמך דרך ממשק 6 0ס. זוהי
גס כן מטלה מורכבת וקשה. יתרה מזאת, שתי הטכניקות אינן נחוצות; ניתן לשמור
את המסמך במבנה ₪11 ואז לשלוט בו ביתר קלות.
בכדי לעשות ואת, פתת את 6זס/ והשתמש באפשרות שמירה כדף אינטרנט
(2806 60/ 45 586) מתוך התפריט קובצ (6!ו=), כמוצג בתרשיס 2.2.
6 וא למפתחי אתרים באינטרנט
[<51)- | ו - 1.000 זופת 05 או וה
| ₪ אוסטחו/ 6|פ18 5|ססך 6ב זט >זספתך אופוע מו 6
ו את
0+ וי
₪ 6 +5
ס%ף 8%080% 18גסח 1 , ל6א88עס1קתם פב
5 מס 6ם1 0%
56 8מם4611סת) ם88518 828 (55םס
8 4%מ1%1עחא) 58%102ם1806קח1
ששוסושיטזק סַחָבק מסעעל
...50 פְחָבק
אופוצסזם אחוזק 5
סטל 8 בח 1078888%קחתת 528% 85868 + -
8 קת ;פפעגמסש 0% , פמסעח מפסע
| פעהפ7ץ 51288 %0ף 015 110068 סטהם |* סז 5
6 זססקבת = 5=)/צ, . 015% 5לספןסזק:ם 1.
6 זססקבח= 5/. . . הטקשו \ 2.
0% 16 החסז] 00065 5השחחנסס עז]נם 3
6 100699 ע6!בז6 חחסז! 5פססו...\ 5
סף עהפץ 8 םהב(% 1855 188 שח 528%
,קט 507880128 15 18ע2סח 528 66858ע
8 ע6שפםמט ם1 82%88%א 8ב% 21% 65
עספעהתם 8ם89%%1 811 6ע'6ח ,ע בכ
5 6%1%102ק₪600 8םג% 828 5ם168%10
8" 811878ע 1 ,10087 .שמנאתנלםתס 5 5
6 מ1 8002 526 5גס 2818858 5%ע1+ 8 88% 50 עסטהפהםס סג
תס ב%תסת 8 820058 8ם8ק5 1'8 ,5ג1ם5 80 70 .1858 6קהגעפק .פבפתסת
א . 8מ1סש ג%1תסת סחף מ28ג% 8ם8 88518 תס בפתסת צפת%סת8 ,7515ץ81ם8
+ 6 68 1188 הבתטסם 1% ₪8%8 85%188%85 12658 . 8םת1נ5%פס בג%מסת 8 הםם
9 %מם , 8טע5 ססם 15 2162ח 5ם881ע עפםתפס 516 8ע0ס+פע 85ם8 סבג
+ 1'4 חסב 0% מסנפהתנאסנקקה 28887 828 בפגסע הססף 8 שע1ף 80 צפ6ג5
₪|₪| =| 4 ,
]| אמ ] חס הש א שאק 1 1 תן "עא]| 18 1 5% 1 פמק |
תרשים 2.2: שמירת המסמך כדף אינטרנט
אם אינך רואה את האפשרות "שמירה כדף אינטרנט" בתפריט "קובץ"
במעבד ה- סזסו שלך, וודא תחילה שהתקנת את 2000 שזסו (גרסאות
- מוקדמות יותר לא תפעלנה בגירסה זו), ואז נסה להרחיב את כל התפריט,
שכן אפשרות זו מוסתרת לעתים קרובות.
אם אין ברשותך את 2000 שזסש), השתמש במסמכים המומרים מראש עם
סיומת וחסהת. המצויים בדיסק, או הורד אותם מהאתר בכתובת:
ה550618%65.607/ץזספו 1. אוו/ץ.
הבה נעיף מבט בתוצאה על ידי בחירה ב-₪6 > אוסושסזק 6ְחָּק פ6/ (קובץ > תצוגה
מקדימה כדף אינטרנט), כמוצג בתרשים 2.3.
פרק 2: מעבר מ- ואדה ל-ואזהא - 37
הדוה 0 ו
ב[ 1006 פפסצםת אש 8 6
- ו
0%
בו וי )חווק ו עסו 9/0165 568100 6חסו] | 46/658] | קס)9 םס 2
| ו 0 [- הוח 7 זסוק3ה) 5 חכ /איטזס שיק וש :₪ ₪ 8
%ץ()
ן
ן
ן
8 .5ם8%10עסק2ס6 14818-512884ע 0% 6865 5פשעגוספטע מהתטת 6ג5 פפפתהת 111 8%הספקס1קמחס
ענפב5 ₪688 60 1% 118גע ₪8'11 826 ,8םתנעגס86+גום]( פחסה ע 266ספתסק5 8ַתנ6ע 15 %ש8[סצק
ו .0 78 85 185תהקתסס 05282 ע0ס+ 81281128ם88 מפג% 6םה 6805ב
:1281 .פססגטהסעק עפתמופתסס 6ת1182-8 0% פעמססה!מתפת 8ג% םת1 18קס6ק 2,000 107885קמה פחסת
88 1287 .01200 וסתה+-218סח ענשבגף התה 018885 פחסה 528 828 פפסגמהסעק 1הקנשמננצק
םג 8286 1085++ס מנהא ענפג5 6ם8 68סהמססת חש( 8ם8 אמטהסק 285% ם1 18255 שתנעגססה+ותהת
. 30%
ת4(0602660%₪081128%10)
, 91107808 02+ 2681158 811 אשהע+ 50 %ם820(8ק88 [פתתספנפם 6בג5 81108 111 688%פקס1קתחס
. פ6עסשפע >משויס1קתט תחס ענפגס 8815 68ם8 ח18טסע 50 פססקס1קתס 31109 111ח 8םה
)4(5₪6 5
הטנא פעפח פספ[סעק 50+59828 8 ע0ס+ %5ם6ת126ג26 1681קץ5 8ג5 תפגח פת%1 8 85ח סעפמך
48ם1ת29001 516 5185 בפעגמפתש 5215 902118 .שסמהתעסזנפק 8ם8 282111%185ק₪8 0% במעפס ם1
עס 60018 פתסטםתה 528% פעמופםתפ %סם 818 1% ,5אעהתבסתפקע 578611180 ב681עפש ספת מס6פקם
1מט מ818828%10ם00 סףם1 ע86%0+ %'ם810 עפפג שג% 7ץ16811קץ7 .15 שפג 60 %מפח ה[1גסח
.8002 528 ₪15 ₪85 פשמהסעק 526 81562
. מסנוססע 516 חסם 0% 84םת61ם5%8ע2ס4תגט בפגס2סת% 8 ג1%ח 5םת9481כ 88175156 %864מ6נעס-86%[מ0
עפפט 38 ג116ח ם1 8צ8ח פגסבעהט 8ב% 0% 5םשתס5555 [1המעס+ 8 15 156-6856 2 .ספא 6 111
2 . 1151קמסססה 50 פתהח ₪111 26 סהגח םה ,תפספץם 8ג5 בפ1ח 6%הע6>ם1 11גח
וטס עא | |[ | חספ[
תרשים 2.3: צפייה במסמך ה-ואז החדש.
- 12 זסופבת (ב) 3
------------ 60 68 56800]
"168++0: 1066++600:0-%+16-050ח- 8035ח56: ח"וט 4 ל ל
"₪01-0: 106++600:0-%+0-050 1 - 5006035: ח"וט ממופה | מפפפ ן
<*'8 4 [חח- ₪6 / ד/ף"וס. בש. ששש/ / : ק5+ זי ₪ בי
:בפץןהּםה (6)
<''1252- 100005ש=3"56%ח6 ; [ח%ה/%א56'"=%ה56ה60 6קעָז-%ה56ה60-ט1טף552-6ה ב6%ה>
8-ו 4ה11>
<'חח. 01 %2-01 8003 5%2 0 1165 ]000 / 5+ / 16615 ס-וש/ :9 / / / : 116+"=+6-וח
<+ח6 ה ט206. 6-וס=0%ה%6ח60 16ַחַָס-ו?=6הבּה 6%3ה>
<9% 0-6 %60%="'11160-05066ח60 -3606-ו8ה6=66חבּה 6%3ה>
<'9. 0-6 %6+11160-050"=%ה%6ה60 3%05ה171-ו6=0חבּה 6%3ה>
<'[חא. 110115%+/11865+ 32%00%201ת00:5%206/."=+6-ה 15%|-81=]118] אה11>
<12>/%1%16 666ק3ה0 (%1%16<)3>
<[הא><[9 ₪50 758 +1]--!>
<61865ו6 0 חפ ט06פ: 0>
<-וסח%שה: 0/>ש5-ו100.] 06556<ו0ת0:00%>
<3%6 001 1: 60%>/0. 06001081 <13+6קח6ז:0>
<01ח+00+35% ]: 0/>ש1.106-5 16556.<-0ח+35100 0:1>
<ה0:86015100<2>/0:8601510>
<0:10%311106<1>/0:10%311106>
<35%7010%80 |:%60<1999-87-12122:11:882>/0ה0:135%771>
<0-63660: 802>/0 :15: 0:063%60<1999-18-18115>
<35%53060 ]:0:|35%530860<1999-18-18115:15:882>/0>
<65שָ65<1>/0:73ש0:/73>
<65-ו0: 0/ >89 05<22-ו0/: 0>
?003-46%0775: 0/ >5<12596-ו6%6ב3"ו003: 0>
<שח03ק6.>/0:600ה1 ,8550013585 שָ005ם1 |<עֶהב3ק0:600>
<0:|17865/%>0:]1785<188>
<פחִקִבּיוְחָבּיובּ/: 0/ >5<25חקבּיוחָבּיו3ּ: ס>
<501+05038665-ו656ב3 "0031 : 0/ >3665<15468ק5ח+50/1"ו656ב3ּ"ו3ח6: ס>
<27284/0:0005108. 9<ה0:087510> |נס1עס-186%ן[ע0
<%165-%70000ה6הט0:206/> [.5₪ק 26 111
<1חא><[9 050 %6ף +1]--1><--[+01ה1]6><[הא/>|%8180ת1 11גזד
₪ < הט 00 :> 7 ןש
יס [קחו
[] 15 פשפ[סעם
1 86 68905ם
סוס סחסת
נק 1הקנשמוצק
1 8+ גומ הו
.01
ו687%ת4(00)
יס [ קוו
1 111 6תם
)8(056 5
8 ₪85 פעפמך
פמעפס ם1
> סו תפספקם
1 הזד 18גוסקד
נץ %28 8+082
תרשים 2.4: האפשרות ששו > 6סזטס5 נבחרה.
8 וא למפתחי אתרים באינטרנט
ניתן לראות בתרשים 2.3 את הקוב בדפדפן, ובעוד שחלק מהסגנון המפורט עשוי
להשתנות קלות, התוצאה נראית קרובה למדי למה שהיינו מצפים. השינויים
החשוביס שמתחת לפני השטח נחשפים כאשר נבחר באפשרות שו6ו/ > 06זט0ס5 (תצוגה
> מקור) כמוצג בתרשים 2.4.
מה כל וה! זה לא נראה כלל כמו מה שחיינו מצפים.
בגירסאות 6זס\ שקדמו ל- 2000 ניתן לשמור מסמך במבנה !ואז, אך היה זה תהליך
מאכזב למדי. חלק ניכר מן התצורה (למשל, טורים, האחת שורות תחיליות, מספור,
מיתאר וכן הלאה) אבד במעבר מקובצ ה שזס/ הבינארי לקובצ המתורגסם ל-וואד.
מפריעה באותה מידה היא העובדה ששמירה ל- !וא היתה מעבר חד-כיווני. לא היתה
כל דרך קלה לחזור ל-פזוסש; נתוני מבנה המסמך אבדו ללא כל אפשרות לשחזרס.
ב- 2000 01666 השתמשה מיקרוסופט ב- ]אא כחלופה לתצורה הבינארית הייחודית של
המסמכים. האפקט הראשון של המעבר ל-|יא הוא שמסמך האינטרנט המיוצר
ב-6זס/\ מכיל עתה את כל נתוני המבנה, ויש נאמנות למקור במידה גדולה הרבה יותר
בין מסמך )₪196 המתקבל לבין מסמך שזס\ המקורי. מכיון שנתוני המבנה
(מטה-נתוניס) נשמרים, ניתן עתה לבצע שינוייסם במסמך |ואזה, ולתזור ולשמור אותו
כמסמך 6זסו וכך לאחזר את המבנה הייחודי של סזסש.
עם זאת ראוי לציין, כי למרות שמיקרוסופט אמנם משתמשת ב-|א
לאחסון מסמכים, מבנה |אא המתקבל לאחר שמירת קובץ שזס\ אינו
מעוצב היטב, והמסמך מכיל חלקים רבים שאינם וואא כלל. המצב המושלם
יהיה ביום בו מסמכי 6זסו יישמרו כ- !אא מעוצב היטב, כך שנוכל בקלות
לשנות את ייעודם למדיות שונות, ללא כל צורך בתיכנות נוסף. גם היום
הזה אינו רחוק.
הערה |
בתרשיס 2.4 אנו יכוליס לראות אי של וואא (0ח15|8 |וא), המכיל את התכונות של
המסמך (למשל, היסטוריית שינויים, מספר תוויס וכן הלאה). נדלג על אי אא זה כעת
ונגלול לתחילת המסמך שלנו, כמוצג בתרשים 2.5.
אי !אא (0ח15!3 |1אא<) הוא קטע וויא המוכל בתוך מסמך |אזהּ. זו הרחבה של
מיקרוסופט ל-]|אדה, ההופך את העבודה עס !אא לקלה ופשוטה הרבה יותר.
כעת מצבנו טוב יותר. כאן אנו רואיס קבוצה מקובלת של משפטי |אזח. כל פיסקה
מסומנת עס תגית <ק>, ורובו משתמשות בתכונות המחלקה 655 כדי לשלוט בסגנון
מסוים.
פרק 2: מעבר מ-|אזה ל-ואזהא | 39
|< ]פן. | זסזס!קא = )6חזפזח! 50)1סזסוו₪ - 12 זסוקבת (ה) 3
|| 6 1006 פפאסופת אש 0 6 |
| || ₪( - 9-3 | 64 ₪ 6 | ₪009 527
|<]1ם] - | = 0%
<7ק/>515ש61355=00<)6(0081 ק>
)6( 1
+06 8865 65006065 הבּתטה 86 טְהבּהבּה 111ש 1006686%קה5<ז:-01355 ק>
8 . 5מס 1 8 - | 07% 1 קוו
ענשם5 % שח ,אַה1ט365ּ+טה3!!] 6ה6ה עֶם 50760הסק5 ה61ם 15 0[86%וק פהז .3%1085:סקהס6| %שפ[סעם
| 1 6885ם
5 600030185 86ת0% 08+ 7808731128 הפה5 שה3 6665ה "ו1פה: 88%ה %0 1% 1160טם
2נפמך .5 <> 80 ₪6]| נס שמסת
פצם . / ג
םג סעם שחס-140ה +0 6ְט65ב3+טהבּה 6ה% ה1 16קספק 2,888 100665קה6 61855787<8606 01])0ה]גומבות
ב
0% ש6א שחבּ אהטשסץ 535% ה1 %5ה13ק הַה1ט+36ּ+טהבּה סטבּה שַפחד 01200 606 (4)
ו1פח+ שחב3ּ
, סיס 1 קז <7/>.ה60%03 ה1 שזה 1065++0 הנבם|1079%קתם
1 6
4 [<ק/₪31123+100%+61355=1!0<)0(600560 ק>
6 ()
8% סם ַהפה6ו3ק₪9 [6ההספוסק 8ה% שס311 111ש 465 66ש10קה5<ז]-61355 ק>
ט 1 שעפתך
118 % שחה ש18ש6] %0 602100685 31100 111ש שהב3ּ ,100605קה6 "0+ 6+1%5ה6פ|6תש+ םב
62 18 השס 50610|ץ תסספעם
1 6 16גוסז
. עססף 526 פגוס ₪85 פסגססעק 618 ע8+68
%סגומסעק 528 חסם 0% 8ם01ם625%8התג בפגסנסגס 38 ג15ח 8ם681ע 82817515 %86ם16עס-86%ן00
עפפט 8 גשנגח ם1 פצהח פגמסנעהט 8ג% ₪0% %ם6ת5%8%89 [התעס] 8 15 158-6856 2 .ספא 08 111ח
1 . 1151קתסססה 50 פסתהח 9111 6ב סהגח התה ,תפספטם 6םג5 בפ1ח 6%סהעשפםת1 111
חס עו ₪ | חס ב
תרשים 2.5: גלילה מטה בקוד המקור.
סיור
קצר
אדח: התגית <ק> מציינת פסקה ב-%₪. נשתמש בתכונת המחלקה יחד עם 655
(506605 56/6 0חו685680) כדי לשלוט בעיצוב תוכן הפיסקה.
בהמשך לכך, שים לב שהשורה השנייה למעלה מראה: <ך"=0|855 קן>
אנו יכולים לראות שמחלקה זו הוגדרה כבר בקובץ. חפש את ההערה "דז." מראש הקובץ
(שים לב לנקודה [.]). הדבר יוביל לקוד הבא:
.א .וו .6
; 6:1וחהח - 50/16 - 450
; " ":%חזהק - 5/6 - ספוח
;חו00:0 - חוס'זהוח
;הסח - הוס'זהוח
8% :הסט - חוסזהוח
;חו6:0! - חופָזהוח
וח - 6חון
;חהחקזס-ששס0ואו: חסטהחוהק - ספוח
8% - ח0+
6 - ה - 2101 - ספוח
זסוסס:ץו החפ - +חסז
;"0 צוס 65 ד":ץ!והח8 - +הסז - 197685 - ספוח
;"0 עוס] 5סחוד":ץ!ורחפ - +חס - 01ופ - ספוח
0 | וא למפתחי אתרים באינטרנט
קוד זה הוא בתוך קטע גיליון עיצוב (לא מוצג). השורה הראשונה מציינת שכשנעשה
שימוש במחלקה במסגרת תגיות <ס>, <ו|> או <צו0>, היא תאופיין על ידי הסגנון הנלווה.
הסגנון המוגדר מתאים לסגנון 50 (07868 506סז6ו) הקרוי זק. והוא בעל המאפיינים
שהוצגו, ובכללם גובה שורה של 12.0 נקודות, משפחת גופנים של זפוזטס6 וכן הלאה.
הציון 6855 בתגית <ק> המוצגת בתרשים 2.5 מנחה את הדפדפן להחיל את הסגנון
המצוין על פיסקה זו. אנו נדבר יותר על סגנונות 655 ככל שנתקדם.
|וזדח בנוי היטב
התאחדות רשת האינטרנט העולמית 36/ (וחטוזזספחס6 60/ 6סוצ סוזסצ), הכריוה
רשמית על סדרת המלצות ל-1אז. המלצות אלו יוצרות תקן בינלאומי עבור ד
משופר, או בנוי היטב (11 0סוחזס=-!|6). אהו תקן גמיש למדי, כמו שגסם השפה
ואדה היא מאוד סלחנית. היא תוכננה לכתיבה ידנית (הנעשית לרוב ב-6086טסא!)
ולכן, למשל, תגיות 4191 רבות שנפתחות אינן מחייבות תגית סגירה. כתיבת תגית
<ק> ללא תגית סגירה <ק/> מתקבלת על ידי ₪31 כמעשה חוקי לגמרי. ואדה
סלחנית במקרים נוספיס רבים, למשל, אין חובה להציג ערכים של מאפייניס בתוך
גרשייס. הקוד הבא, מוכר על ידי הדפדפן: <%ח0וז=חפו!ה ₪1>.
]אא היא בדיוק ההיפך, שפה זו תוכננה להיות קשיחה מאוד. למה! כי באמצעות שפה
נוקשה, קל יותר ליצור כליס: ככלות הכל, יש צורך להתמודד עס פחות חריגות.
אחד הקשייס שיש לתלמידי )₪419 מתחילים, מתבטא בחוסר היכולת להגדיר במדויק
מה מותר ומה אסור ב- |אזה₪. המרצה טוען שתגית מסוימת חייבת להיסגר, ואילו
התלמיד מגלה שגס כשאותה תגית אינה סגורה הכל עובד.
הנה הסיבה לכך שאני אוהב ספרדית. ברגע שאתה לומד את כללי ההיגוי, אין כל
שאלה לגבי אופן ההיגוי לכל מילה בשפה (כמעט לכל מילה). כשאתה נתקל במילה
חדשה, למשל שסם עיר כמו ₪105 0ח06, אינך צריך לנחש. 0600 חייב להיות מבוטא
כ-ח060-0 (מתחרז עס ה608060-0) ו-₪105 כ-₪66-056 (מתחרצ עס הס-6ח, עס 5 שורקת
בסוף). שפה נוקשה הופכת את החייס לקלים. השווה זאת לצרפתית, למשל.
שפה גמישה כמו אנגלית עשויה לשגע אותך. חבר ישראלי שאל אותי פעם, יילמה
ל-01%ו0" יש 8 רכה ול-"שו פָו0" יש 8 קשה?יי כנראה שיש לכך תשובה טובה, אך לכל כלל
באנגלית, יש לפחות יוצא מן הכלל אחד.
נוקשותה של שפת !אא היא מעלתה. הרבה יותר קל לבנות כלי |אא מאשר כלי שואדה,
מכיון ש- |אא היא הרבה יותר צפויה. לרוע המזל, במקרה שלנו כאן, יש לנו בעיה,
מכיון ששמירת מסמך כדף אינטרנט מתוך שזסש יוצרת |ואדה תקני, והסבה שלו
ל- ]אא עלולה להיות מסובכת.
לכן, הדרך הטובה ביותר להתחיל היא להעביר את מסמך ו|אזה הסטנדרטי למסמך
]וא דחא - כלומר, למסמך ₪11 המותאס ל- וואא.
פרק 2: מעבר מ- ואדה ל-ואדהא - 41
|ואדחא הינה שפה מיוחדת, אשר באה ליצור את המעבר בין !ואד הסטנדרטי והסלחן
ל |אא. והו שילוב של וואדה ו- וואא. למעשה, כשתקרא קוד וואדחא תגלה שהוא דומה
מאוד לקוד |ואזח. ההבדל הוא שקוד זה עומד בדרישות החוקיות של |ואדח, ו- |אא גס
יחד.
לרוע המזל, ההמלצה ל-|אדחא התקני נמצאת עדיין בטיוטה, אך אין זה צריך לעצור
בעדנו. אנו יכוליס לשכתב את מסמך 41 על פי הכללים של וא הבנוי היטב. זה
עדיין יהיה 1א₪41 חוקי, אך נדרוש ממנו לעמוד בקוויס המנחיס הנוקשים יותר של
וא. זו התמצית של וואזא. כך נוכל להרגיש בטוחיס שהמוצר שנקבל יהיה עקבי עס
ההמלצה הסופית של 36צו ל- |ואדוא.
להלן נושאי מפתח בהפיכת מסמך |אד₪3 למסמך !אא הבנוי היטב:
> אסור שתגיות מקוננות יחפפו.
* שמות התגיות חייבים להיות תלויי רישיות (6ש5/0ח0856-50).
+ כל התגיות חייבות להיסגר.
<* | ערכי תכונות (665ט010ז4) חייביס להיות מסומניס בגרשיים.
> המסמך חייב להכיל רכיב אחד בדיוק, שיהווה את רכיב השורש של המסמך.
בנוסף, כלל שלוש קובע כי כל התגיות חייבות להיסגר על ידי תגית סוגרת. עס ואת,
ייתכנו מקריס בהס נרצה להשתמש בתגיות בודדות, אשר אינן מכילות טקסט פנימי.
ב- !ואד התגית <88> היא דוגמה לתגיות מסוג זה. תגיות אלו חייבות להיות מיוצגות
ב- !אא בנוי היטב על ידי לוכסן לפני שס התגית. לכן, התגית <88> ב אחא צריכה
להיראות כך: 8₪> (שיס לב לרווח לפני הלוכסן -והו מנהג מקובל, אך אינו חובה).
מסתבר שחוק מספר אחד (ייאסור שתגיות מקוננות יחפפויי) מיושס די טוב בהמרה
מ-6זס/ ל- |ואדו. כך גס עם יישמות תגיות תלויי רישיותיי. לרוע המזל, לא כל התגיות
נסגרות, ולא כל ערכי התכונות מופיעים בגרשיים - דבר הדורש תיקון ידני. .
תיקון מסמך 1 דה
יש מספר גישות שנוכל לבחור בהן לתיקון מסמך |אזח. נוכל, למשל, לתקן אותו
ידנית, אך קרוב לוודאי שפעולה כזו תעייף אותנו במהרה במסמכים גדולים.
חלופה אחרת היא להשתמש בביטויים מוסכמיסם ובתוכנית לניתוח תחבירי (זספזבּק)
לתיקון הדבריס, אך גס גה עשוי להסתכס בעבודה רבה. 1א31 אינה שפה מחמירה או
נוקשה (וגס אינה רגולרית), וכמו באנגלית יש בה חריגות רבות מן הכללים.
הציטוט הבא הוא מתקציר של דבריס שכתב לי חבר לגבי בעיה זו:
מה שאנו באמת זקוקים לו זה נַתֶּח תחבירי (זפפזגּק) של ואד היודע את החוקים הללו
והחריגות מהם, ואז נוכל להפיק מסמך הבנוי היטב. אנו יכולים לבנות נתח כזה, או
שנוכל לחפש ברחבי האינטרנט כדי לראות אם יש למישהו תוכנית כזו למכירה או
שימוש.
2 וא למפתחי אתרים באינטרנט
אך חכה רגע, יש לנו נתח תחבירי מעולה עבור ואד בדפדפן שלנו. |ואדהפוא הוא
ה-אספ של ואדו₪ז שניתן לנו על ידי מיקרוסופט. זהו רכיב המבצע את מירב הניתוח של
קובץ ואדו והסבתו לעץ ואספ, שבו אנו שולטים בקלות בכתיבת תסריטים (פַחטקו50)
בצד הלקוח.
על ידי התייחסות ל-|1ד57! ול-זסזסוקאם 66חזסשח1 ב-8/, אנו יכולים לכתוב בקלות רכיב
המבצע את מה שאנו רוצים, ומבטיח להתמודד עם כל קובץ ואזה ש-15 יכול לקרוא.
ומכיוון שאנו יוצרים את הפלט, גם נוכל להבטיח שיהיה בנוי היטב.
הנה כי כן, נוכל להשתמש בתוצר של הנתח התחבירי של ו|אז המובנה בתוך =1.
מכיון שמיקרוסופט מציעה את תבנית הניתוח הזו כאובייקט 6%ש860 עצמאי
(1וס. |ואדחפויז) יש לנו גישה מלאה ליכולותיו.
בהמשך הלימוד בפרק וה נלמד כיצד לעשות זאת. עס זאת, לפני שנתחיל, הרשו לי
לסקור משפט אחד מהמכתב של חברי שהצגתי לעיל:"ואדחפוא הוא ה-ואסס של ואזח
שניתן לנו על ידי מיקרוסופט. זהו רכיב המבצע את מירב הניתוח של קובץ :₪ והסבתו
לעץ ואסס, שבו קל לנו לשלוט על ידי כתיבת תסריטים (פַחטְקְח56) בצד הלקוח".
הבה נפשט משפט זה. 53191 הוא ה-11ם בו אנו משתמשים כדי לגשת ל-אספ של
ו דו5וז. אסס וה הוא המאפשר את וואדחת. ואדחוס היא, בתמצית, לא יותר מאשר
מניפולציה של ה-אספ של ואזה, בדרך כלל על ידי קוד תסריט. קוד התסריט נכתב
לרוב ב-28/8566, אך כמובן שאינו חייב להיות כזה: ה-אספם של ואדה אינו
תלוי-שפה.
כאשר אנו עובדים עס וואזוזת, אנו לוקתחיס את ה-אספ של יז כמובן מאליו: הוא
מייצג את מסמך ]יזח ואנו שולטיס בו ישירות בתסריט שלנו. מה שחברי מציע כאן,
הוא שנקרא את מסמך וז הנשמר מתוך חזס/ אל ה-וזספ של ויז המסופק על
ידי | דחפ!וי. כך תהיה לנו גישה לכל המרכיביס של המסמך דרך ה-ואסס.
כאן עוליס שני נושאיס אפשריים שעלולים לגרוס לנו בלבול: ההבדל בין המסמך
וה-אסע, וההבדל בין ה-אספ של ואדה ובין ה-אספ של ואא.
מסמכים ו-01%5
מודל האובייקטיס של המסמך של וואדה, ((ואספ ואדח) |06סוא 01606 %הסותטססס,
הוא מפרט (ח5066166800) לאופן בו מסמכי |אזח בנוייס. כאשר אנו יוצריס מופע של
ה-ואסת, בפועל אנו יוצריס מודל מופשט של מסמך ה-₪%1 במרתב הזיכרון של
המחשב.
עד לאחרונה, כל דפדפן היה חופשי ליצור מודל משלו של המסמך, ו-ז6זס|קא= 61חזסזח1
ו-16056806 יצרו מודליס שוניס. בימיס המוקדמים (לפני שנה או שנתייס), אף אחת
משתי החברות לא הפכה את המודל שלה לזמין למתכנתי האינטרנט העתידים לבוא,
כך שאה לא ממש היה חשוב כיצד המודל עבד; ככלות הכל, זה היה מידע חבוי ושמור
בוכויות יוצרים.
פרק 2: מעבר מ- ואדה ל-ואזהא = 43
במאמצ להפוך את מודל האובייקטיס של המסמך לסטנדרטי, קבוצת עבודה ב-36/
היתה אחראית ליצירת המלצות למודל מסמך !א המוסכם על כולס ברחבי העולסם.
המטרה היתה לגרוס לכל הדפדפניס לתמוך במודל זה, ולחשוף את האובייקטיס בתוך
המודל לשליטה מתוך התסריטים (5ז50710).
האובייקטים בתוך המודל הס האלמנטים הנשלטים ביישוס |אדחכ. למשל, אתה
עשוי לרצות לשלוט בסגנון או בתוכן של טקסט, לשנות כותרות, או לשנות פרטי
תצוגה אחרים. בנוסף, אתה עשוי לרצות לגשת לתוכן של שדות טקסט או
תיבות-רשימה (65א80 118%) בטופס. החלון, הטופס, שדות הטקסט והתמונות הס כולס
אובייקטיס בתוך מודל האובייקטים. כשאתה מתכנת סקריפט לשינוי תמונה במעבר
עכבר, אתה משנה את מאפיין המקור (586) של אובייקט התמונה המסוימת, עליה
מועבר העכבר.
5 כנגד 045
התחוס השני של בלבול אפשרי הוא בין מודל האובייקטיס של מסמך ה- ואדה ובין
מודל האובייקטים של מסמך ה- |אא. ]דחפו מספק גישה ל-ואספ של שואדה, ולכן
שליטה באובייקטי ה- וואד, אך אינו יודע דבר אודות 1אא. אנו נראה את ה-אספ של
]אא בפעולה בפרקיס מאוחרים יותר. לעת עתה, ה- אסס בו נשלוט יהיה ה-אספ של
ודו
המרת חזסצצ ל- וואדורוא
בכדי להשיג את מטלת ההמרה של מסמך |אדה זה, אשר נוצר על ידי 6זס/),
ל- !ודו א, אנו נבנה אובייקט 6/6%. ב-8. זה פשוט כמו יצירת פרויקט חדש 1ופ
ו
הרעיון הוא שה-11פ יכיל בתוכו ארבעה אובייקטים : | דא2חזסשש, 2 |ואדאסזסצ,
ההזסז5חהז ד 51 ו-65וזסשסטו!ק5. כרגע, היתידי שמעניין אותנו הוא 1 ד א62זסצ. כפי
שהשם מרמז, זהו האובייקט שימיר את קבצינו מ- |אדח של חזסע ל- וואדחא.
כל זה נשלט על ידי 0ק₪01.85ח60, כמוצג בתרשים 2.6.
4 וא למפתחי אתרים באינטרנט
[< |5]= זסזסוק א פתזסזה! ו]50סזס: - ופזוחסכ 3
.₪ 4 1006 65אסטם] אשע 06 6 |
3 ₪ 8 - | 6 9 2 -
₪ 2
יי ווק וו ע0פו] | 65)וסעב = ה56810 6חסר] | 36698 | קסו5 בס 6%
< 1065 / 6 [ד 01.390ווחס00 65| סס1// :קוו 65| 000095 |
0001 שהאאןפססןסוםם] 6007 02086
ד 00000 06₪6ש6שאאופססןסום] 600 הזכ
₪₪₪6] אפ
ר- ₪ :6מעפם ע6פגו כ
2 89907016: |
[מפחסן שמת 816 15886
| ו דא סז וז
ל סז וו דרו
| וטופ זו|פפ
| 6 אפ
| הסוזהסו|סס3 %ססם סז ג
₪
וס א | | 6חסם [6
תרשים 2.6: 600%01.850.
זהו קובץ ה-452 היחידי שאנו נשתמש בו במהלך הפרויקט כולו. מכיוון שברצוננו
להתמקד ב-ויא, קובצ 455 זה הוא באמת יצירה מהירה המשמשת לאיסוף המידע
שאנו צריכיס (ספריות, סיסמאות וכן הלאה) ושיגור אובייקטי ה-א6ע60 שלנו. אנו
נבחן את ה-ק45 ככל שנתקדם, אך אנו לא נתעכב עליו.
סיור
קצר
הבה נעיף מבט מהיר לראות מה נדרש כדי לשגר את ₪1%1₪א62זס/ו, הרכיב הראשון
שלנו, שתפקידו להמיר את ה- ]א המיוצר על ידי זסצ ל- |ואדוא.
אנו נבחן עתה כיצד דף ה-ק5 עובד וכיצד הוא מפעיל את )|01א62זס/, ואנו נשוב
לשארית קובצ ה-452 הזה ככל שנתקדם, כדי לראות כיצד הוא מתקשר עס שאר
הרכיבים ביישוס שלנו.
אינך וקוק לעקוב אחר משהו מכל וה כדי להמשיך בעבודתנו על |אא. אתה יכול פשוט
להשתמש בדף ה-457 שנמצא בתקליטור המצורף. כמובן, אתה עדיין צריך להתקין את
מסד הנתוניס שבתקליטור, ועליך להתאים חיבור א₪5 למסד נתונים זה, כמוסבר
בהמשך. תחילת 0!.850ח60 נראית בתדפיס 2.2.
פרק 2: מעבר מ-|אזו ל- ואזוא | 45
תדפיס 2.2 מובאה מתוך 608.80
%>
וקא הסטקס
0337 ,085636 ,03031 ,ו060סס ,55הקסכ ,056וסכ ,אפפ ,150 ,5 ,ההס6פס וס
6
שוח פחס! 8 66 3 5הסטה וסקס זגוס 01 6וחספ'
0 = טסו דז5010. 5/6
86 385 פהחהזהכן 6 50076 ,65560זכן 85/צ 5חסאטט סחהחחוחסס וטס 01 שחס זו"
הס "" <> ("0ח)" )065 זו
5600063| "00060"
"זוסההכ" |560600663
"אפפ" |56060063
"5 (כ" |56%600063
"55הקסכ" |56060008163
56%6000616/8| "28561 306"
זה 3 חו 6זוקאס'
(086 ,1 ,"ץעץץץ" 09080 = 65זוכאם. ("5 א" )60065 56 סז
0
6 סח וחסי) פוהההכ 06 סעס1ססז'
("זו00060")קח060 = זו60060
("זוסבז3ס"טסח61 = זוכ0800
("א5כ")טקח06 = 5%
("ז56 )פכ")טקחז6ס = ז50(ופס
("855קכ") 06000 = 855קכ
("08506186" )הזכ = 85613006
הסוח 00 03130856 3 60סח 5עְב/טוה 5%סרח|ה 6עצ'
("הסו66 0.00 )76860060 56/6 = הח0ס6טכ 56%
<> ז[כ0809 הב "" <> זו60060 חב "" <> ז050כ החבּ "" <> אפס זו
חסרץ "" <> 6וח03563 חב "" =-
5 ,08056 ,5 ה6ק0. ההס6פס
5 86 ]וברח 60 ז0[66כ) ההו506ץ5 6!ו= 3 50| סחב'
("ז0[60 1165/5060 סח 5 )70860060 ז/567 = 150 56%
(6ח285618 ,זו 08%3)תהקטווטם.50 = 082800
3605 6065060 6 הזזסדוסכן צוסח'
]אא למפתחי אתרים באינטרנט
-
כ
₪
נש ₪
שש +
כ כ ל
=
=
7 ₪2 7-2 7 7-4 ₪4 2 שא כ כ
ב ו
₪ טר ₪ שו
0
("0ח )0065 6856 56|605
"ןוא דחא סש סזס/" 6856
() | דרו2 זס/ ססוז/). 650056
" ]אא 0 | דחא" 6856
() 21 | דא 66 650056
"560165 516" 6856
()056065ו!כ5 6שוז/\. 56ח6500
"ד 18366" 6856
()06 1367 6סו/.56ח6500
"חססםסו|סק 800% 0ם 0" 6856
"הוסח.>ססט" 76011665. 650056
" |ו ד 35 ז8%0ח6 עוסח5" 6856
() | דר 5 6סוז ).650056
" |ן]א 85 680001 עשוסח5" 6856
() | ]500 6סוז/).56ח6500
60
6
(".0הו06660זק 61076 6105 60זוט6ז | חו || 6856!ק" )סו 650056
60
%<
< ||ואדר]>
<540>
<"603756%=150-8859-1 ;ההח/+60"=חח 60 "סכ ד-ז+הססחהס6"= /תנוסם-ק דד ג דם !>
<ם וד1ד/>|סחס6<= וד >
<סגשה/>
<ץ₪00>
<חוזס+)>
<%90|6>
זו6=60060וחהּח 526=40 6+טקח!ן> <0>> <0/>:ץ סל60זוס %0<0006> <>
<%6<"<>/?<>/8 זו60060= %>"=ס6ט|אע-
זו =6וחהח 5126=40 זטקחן> <60> <%0/> :016600 8+הכ <%0> <>
<1<>/[7)/><"<% זוכ2803= %>"=ס6ט|אצ-
)5 =6וחהח 10 =526 זטקחן> <> <5:>/60כ <%0> <>
<0<>/7/><"<% %25= %>"=ס6ט|אצ-
כ =6וחח 10 =5026 +טקחן> <1>> <00/ >:סוחהח זספט כ <%0> <>
-/8]06=">% =08)050 %6<"<>/?<>/0<
פרק 2: מעבר מ- ואדח ל- ואדחא
:21
:21
2121
1
21
:21
211
:21
תי
1
1
1
1
:לפ
1
:1
:1
:5
%7
1
2
1
+
1
1
1
1
+
:0
:1
2
1
1
:5
1
:1
1
1
01
11:
217
[8
5 = הח 10 =526 +טוכחן> <>> <60/> :0זס/ש55ה0 8 <0?> <>
<1<>/7)?/><"<% 0280855= %>"=8|]06/-
856086 = 6רח 526=20 )+טכחן> <%> <00/>:סרחפח 6| 2856 <%0> <>
<1<>/7?/><"<% 6ו88568= %>"=8|]06/-
<906+/>
<0וח6=6רחפח " | דרא סף סזס//"=6ט|פע זורחסט6=5כ/ט 6טסחו><ק>
<0וח6=6רחפח " |1]א סש ]יז דר]א"=6ט|פע זורסט6=5כ/ט 6טקחו><ק>
<0וח)=6וחהח "50065 >6!|ק6="5ט|פע זוהחסט6=5כעט 6טקחו><ק>
<0וח6=6חחפח ")כ ך 6אה6="]1ט|פע זוהחסט6=5כ/ט 6טקחו><ק>
<0רח)=6רחהח " |1]א 35 800 עשסה6="5טןפע זורתסט6=5כ/ט 6טמחו><ק>
<0רח6=6רחפח " | ד 35 סח עשסה6="5טןפע זורסט6=5כ/ס 6טקחו><ק>
<0רח)=6רחבח "הסוסהסו|כק 800% 0ף סכ)"=6ט|פט +ורתסט6=5כ/ס 6טקחו><ק>
<וחזס)/>
<ץצ800/>
< |וזדר]/>
%>
(6וחהח)זוקחה61 הסטסחט=
(6 ה ח)("5- א )665.00 = זטסחז60כ)
הסססחט= סחם
(6ח8ח)|560-00816/8 5
(6 ה )665% = (6חהח)("5 )65 65056.0
50 0חם
() וא דר2זס/ הסססחט=
ו דרא סט ₪6 החה. סזס/ 8 +הסעחסס'
6והסטס ,שוחו ,<2//ס וו
(" ו ד 02 זס/. ה 58 רתס )060 5/7686 = א0/2 56%
הסו5ח6א6 ווסח. 3 שטהח 0|טסח5 סזסצ סי ₪6 זטסחו שוח'
"ההחסח." 8 הז030378 = 6ווחחו
6 |וחסהא. 3 חו +טססטס 6 58/6 |['סצ'
"|והסחא." .8 ה08%378% = 6ווהסטס
6וסטס ,6!ות 1 דרןאס דסח 60 א2/ס
6ו טס 8 " 0ף " 6 שוחו ₪ " 60א6עחס6" = | דר א2סזסש
חסטס6חט= סח
]אא למפתחי אתרים באינטרנט
2
1
1
51:
7
7:
7
1
7
1:
12:
1
4:
51:
1
|:
1
7
1
14
לוו
11
11
11
11
:11
11
:+
1
1
+11
1341
11
11
+
:11
11
בשורה 0 של 0!.850ח60 אנו פותחיס תסריט צד-שרת עס הסימן %>, המורה לדפדפן
שמה שיבוא בהמשך הינו קוד 452 שירוץ על השרת (8/ז50).
בשורה 1, 6%ו|קְא= חסק0 מנחה את מתרגם ה-856106/ להתלונן אם נעשה שימוש
במשתניס שלא הוגדרו תחילה. אפשרות זו מצילה אותנו משגיאות מייגעות הנגרמות
משגיאות איות של שמות משתנים.
אנו מצהיריס מספר משתניס בשורה 2; אנו נשתמש בהם לאורך קוב ה-50.
בשורה 5 אנו מכווניס את משתנה זטספחוד ל- 50 דקות, שזהו זמן ארוך, אולי עד כדי
גיחוך, הארוך הרבה יותר מהפעולה הארוכה ביותר שנבצע. תוכל להוריד גמן וה ל- 10
או 15 דקות, כרצונך; העיקר שיהיה מספיק זמן כדי להבטיח שלא תחרוג מהזמן אלא
אס כן היישוס תקוע ללא תקווה.
מרבית שארית התסריט מוקדשת לניהול העוגיות (6006/65) שיאחסנו את משתנינו.
אנו צריכיס לשאול את המשתמש היכן מצויים מסמכי ה- וואדה, היכן מודולי הקוד
שלנו, וכיצד להתקשר עם מסד הנתונים. ברגע שנקבל ערכים אלו, נאחסן אותס בתוך
עוגיה במחשב הלקוח, כך שהמשתמש לא יצטרך להכניס אותן שוב.
אם אינך מכיר 600665 או ק5ג, אנא ראה את רשימת הקריאה בנספח ד'.
אתה יכול לדלג על כל ההסבר אם אתה רוצה, ולהמשיך ב- וויא, ולהתייחס
5 בינתיים לקובץ ה-?85 השולט כקסם - אם כי ידע בכתיבת 55 הינו חשוב
לעבודה, ומומלץ מאוד ללא שום קשר.
הערה |
שורות 8-17 עוסקות בהגדרת העוגיה, ושורות 19-25 עוסקות בהשגת הערכיס
מהעוגיה. ממשק המשתמש הממשי להשגת ערכיס אלו מהמשתמש מוראה בשורות 70
עד 94.
אם אינך מכיר ססג, אנא ראה את רשימת הקריאה בנספח ד'. אתה אמור
להיות מסוגל לעבור את ההסבר הזה ללא ידע רב ב-ססג, ושוב, אתה יכול
0 פשוט לדלג על חלק זה ולהשתמש בדף ה-455 שבתקליטור המצורף.
הערה |
בשורה 29 אנו יוצרים אובייקט חיבור 400 אשר יעניק לנו את יכולת ההתקשרות עס
מסד הנתוניס. בשורה 31 אנו מוודאיס שבידינו הערכיס הנדרשיס להתקשרות עס
מסד הנתונים, ואם כן, בשורה 33 אנו פותחיס את ההתקשרות, תוך שימוש ב-אפם,
שס המשתמש והסיסמה כפי שסופקו על ידי המשתמש.
| מהו א5ס?
הערה,
0% ישנן בשוק מספר מערכות בסיסי נתונים מסחריות. בין הידועות, ודאי
שמעת על: ז8ש7ז56 .501, 806ז0, 60655 ועוד. כל מערכת כזו מנהלת את
המידע באמצעות שפה בינארית ייחודית לה. כדי לגשת אל בסיס הנתונים,
על מנת לעדכנו, לשנותו, או לקרוא נתונים ממנו, יש לפנות אל בסיס
הנתונים בשפה המוכרת לו. שפת השאילתות המובנית 501, הינה השפה
הידועה ביותר, הפשוטה, והמקובלת בכתיבת שאילתות לבסיסי נתונים.
[
פרק 2: מעבר מ- ואד ל-ואדהא | 49
20
לכן, כדי לפנות לכל בסיס נתונים באמצעות התחביר המוכר של 501, יש
צורך במתרגם (הקרוי דרייבר) אשר יעשה את ההמרה בין פקודות ה-501
לשפה הבינארית הייחודית של אותו בסיס נתונים. ואכן, לשם כך הומצאה
חבילת דרייברים שכאלה, הקרויה 86ַסס0. זוהי חבילת דרייברים אשר
מכילה מספר מתרגמים לבסיסי נתונים שונים הקיימים בשוק. כדי לפנות
אל בסיס הנתונים דרך הדרייבר הזה, יש צורך ליצור חיבור אפ5ס, אשר
מורה לתוכנית הפונה (במקרה שלנו זו תוכנית ה-8/, במקרים אחרים זו
יכולה להיות תוכנית אחרת שנכתבה ב- ++6, או בתוך עמוד ק5ג.) לגשת
אל בסיס הנתונים דרך דרייבר נבחר, אשר ידע כיצד לתרגם את פקודות
ה-501 לפקודות המוכרות לבסיס הנתונים המבוקש.
אם כן, כדי להתקשר למסד הנתונים מ-8/, אתה חייב ליצור מקשר א5פ
שייקשר למסד הנתונים של ה-וואא. להלן הדרך לעשות זאת:
1. פתח את לוח הבקרה שלך ולחץ על "65סזט50 זכ 86סס". אם אתה
משתמש ב-2000 פווסחו!/\, תמצא סמל זה בתיקיה
5 86 50וחורח0, שבתפריט פוחפזטסזס.
2 בחר בלשונית "5% 56₪ץ5" ולחץ "06ג".
3 בחר ב-"ז6עז56 501" מתוך רשימת הכוננים ואז לחץ "חפוחו=".
4. בשדה "שחאא" הכנס שם - אני מציע "ו|אא". בשדה "65600000"
הכנס תיאור אם אתה רוצה (למשל, "גישה למסד הנתונים הניסויי של
ואא") ובשדה "56/87" בחר בשרת. אתה אמור לראות את השרת
שעליו אתה מריץ את ז56898 501 (או |₪3סו, אם אתה מריץ את 501
5 מהמחשב המקומי). אם לא, פנה למנהל המערכת שלך. לחץ
על "זאסא".
5.| לחץ על "...חסח6וחסחזט8 ז6/ז56 .501 וזוש" כשאתה משתמש בשם
המשתמש ובסיסמה שהוכנסה בחלון ה-65שזסקסזק של זסע567 501.
מחק את ז50800וחווח30 מהשדה "פַַחופַס!" והכנס את שם המשתמש
והסיסמה הנכונים (הרבה אנשים משתמשים ב-58 ובסיסמה ריקה).
לחץ "שאפא". ברגע זה, תחפש התוכנית אחר שרת ז56/6 501, על פי
הנתונים שהזנת, השם והסיסמה. במידה והכל עובר בשלום, תועבר
למסך הבא. במידה והניסיון נכשל, תתקבל הודעת התראה מתאימה
והיישום ייפסק.
6. לחץ על "28008856 00/80/5 06 ספַחהּה6" וגלול מטה לבחירת מסד
הנתונים 5=פ/א. לחץ על "זאסא".
7 קבל את כל ברירות המחדל בתיבת הדיאלוג "080 ₪6 2 670806
5 501 סל 66זטס5", ואז לחץ על "תפוחו".
8 לחץ על "66זטס5 0818 5%ד". אם המבחן לא הושלם בהצלחה, תזדקק
לסיוע ממנהל ה-זפצז56 501 שלך, מנהל המערכת, או אספסיסווז. בכל
אופן, מרבית הסיכויים שתקבל את ההודעה
]אא למפתחי אתרים באינטרנט
"ץ||500605510 600016000 5% ד".
איחוליי, כעת יש לך מערכת 5% הקרויה וואא. לחץ "אס". זה יחזיר אותך
לתיבת הדיאלוג "זס80ז50וחוח0/ 6סזוס5 0868 86סס", לחץ שוב "אס".
עס מסד הנתוניס וה-א05 במקום, פקודת הפתיחה בשורה 33 יוצרת את ההתקשרות.
בשורה 36 אנו פותחים קובץ אובייקט מערכת (08[66 5/5060 6ו₪) ומגדירים את
הנתיב שלו לתיקיית המידע ושס הבסיס המסופקים על ידי המשתמש. מדובר יותר
בהתקשרות לתיקיה שבה נעבוד.
זה מביא אותנו לשורה 42. כשאנו לוחצים על יי אדא ס% 6זס\יי, שזוהי מטלתנו
הראשונה, שורה 44 תפנה לפונקציה ()11אא02זס/ ותדפיס לדפדפן את התוצאות.
|סשח0ס6 מדלג מטה לשורה 104, במקוס בו 6211זס/ מיושס. אנו מגדיריס שלושה
משתניס מקומיים: אחד כדי להחזיק את אובייקט ה-א6%ע60 בו נשתמש, שני להחזקת
קובצץ הקלט (קובצ ה- ואזת שלנו), ושלישי להחוקת קוב הפלט (קובצ ה- ואדחא
שלנו).
אנו קובעים את ערך המשתנה א0/2 לאובייקט ה-466% בשורה 108, ויוצריס את
קבצי הפלט והקלט בהתבסס על נתיב המידע שהוקס קודם לכן.
לבסוף, בשורה 116, אנו קוראיס לשיטה ]1 דאס ז6/ח60 באובייקט ה-6%ע60 שלנו,
בהעבירנו את שמות קבצי הפלט והקלט. כשאנו מסיימים, מותזרת המחרוות
(לדוגמה) ''|וחזחא.01ְ8ח6 0+ השח.0801ה6 60וסעח0ס6'י המודפסת לדפדפן.
בקטע הבא אתאר את אובייקט ה-א6ע60, שקראנו לו הרגע, בפירוט.
בתוך וו דרו<2טוס/ש
כזכור, מטרתנו היא להפוך את ה- ואד ל- וואדתא (פואדתא הוא מסמך וא בנוי היטב
לכל דבר. הענייו הוא שהוא מכיל תגיות |אזה); כלומר, לוודא שתכונות מצויות
במרכאות כפולות, תגיות אינן מקוננות וכן הלאה. יכולנו לכתוב תסריט 06 ולמצוא
את כל השגיאות ולתקנן, אך זה יהיה מאמצ ארוך ומפרך. במקוס זאת, ננצל את
העובדה ש-155 יקרא בשמחה את ה- 11 הקייס ויספק לנו מודל אובייקטיס למסמך.
לאחר שה-אססכ נוצר בזיכרון, אנו יכוליס בקלות לסרוק את ה-אס, למצוא כל רכיב
ורכיב, ולפלוט אותו לקובצ שלנו בתחביר !אא מתאים.
כדי להתחיל, מ0!.35ח0ס6 קורא ל- |וא האס 60 (שורה 116 של תדפיס 2.2), תוך
העברת שס קוב הקלט (קוב> ה- !ואד שלנו שנוצר על ידי סזסש) ושס קוב הפלט
(קוב !ואד שהוא גס 1אא - בנוי היטב - או בקיצור !ואדא), כמוצג בתדפיס 2.3.
פרק 2: מעבר מ- ואדה ל-ואזהא | 51
תדפיס 2.3
]א ססהזס)-||6 ס3!5 15 [י ד 6 8% 50 6 !וא ד 8 5אה6עחס6'
;0/6 0% 300 60560 06 5%ח 5805 ; 0סססטף 06 %פטרח 5סט|הע ססטטחחת'
6 חו זא וח %805-
,סכ וד חב סל חו +ה6והט006 6 680 60 15 ה6הסזקקה סחדי
0+ 60וחזס)-|וסו חו א +טוכסטס חס סחה-
(8ַחו5 5 הבלסטוס |ב/ץ ,חו5 5 השסהקחו |בשץ8) וא דאס ההסשהס6 טטפ סווסגוק
8חו5 45 הזג %הסוהטססכ דר וי 157 5 006 ,סוסא לחז ₪5 6 הזוס
זסזס|קא 6 חח1 וס = 6 56%
5 367055 אזסצו +סח שפוח פורט'
הזהקחו 8 "//:816" = חט
00% ]דרו 6חש הססס'
זט 8108%6ח.16
08| 65ח5וח 16 6 |סחט אוהעצ'
שד |ק 60 םזג ץכ = 6.768050306ו וטחעש סס
0 5660
סססן
טס וספ דה 6 06%
16.00% = 006 56%
(/666558ח ]1 סחטהצוסטס) ₪16 +טכסטוס זטס חססס'
1 15 זטססטכ) זס= הזהק6טס חסקס
% 6 3 א| 6עו9ז6סז 606 הוססם סחבּ'
"" ,66| ה6רה006.006 +חהסוחסושטססטוס
61056 1
50 0ח=
כ
בשורה 3 קוב הקלט וקובצ הפלט מועבריס כפרמטריס. בשורה 4, משתנה מקומי, 6ו,
מוגדר כ-(1)ז6זס|קא6%5ח67זח1. בשורה 6, משתנה זה משויך לאובייקט זפזס|קא5ז6חזסזח1
חדש.
אובייקט זסזס|קא=60ח67זח1 זה מאפשר לנו לשלוט במופע של 15 דרך ממשק אוטומציית
ה-60%. בעוד שזה יהיה נושא מורכב מאוד ב- ++6, הרי שב-8/ זה יחיה כמעט ללא
מאמא. אתה פשוט יוצר מופע של אובייקט זסזס|סא=61חזסזח1 חדש, כמוצג בשורה 6,
2 ]אא למפתחי אתרים באינטרנט
וא קורא לתכונות ושיטות של האובייקט. לדוגמה, בשורה 20 אנו יכוליס לגשת ישירות
לתכונה +ח6וחט6סכ (מסמך). התכונה +חסותטססס מספקת לנו גישה ל-וזספ של וואדו.
בשורה 9 אנו יוצריס 081 לקובצ הקלט ובשורה 17 אנו קוראיס לשיטה 66זְ88ָואח על
אובייקט ה-זסזס|קאם 06%ז%6ח1, בהעבירנו את אותו ]ש.
זה גורס למסמך להיטען לתוך אותו אובייקט של 15 שיצרנו. ה-וזספ של אא חושף
את התכונה ח6ח/85. אס ערכו הוא 6טש אז המסמך ינותח תחבירית (60פזק) במטלה
(680זחד) משלו. ה שימושי במקרה של דפדפן שיכול להמשיך גס במשימות אחרות
במקביל, בעוד שהמסמך עובר תהליך של ניתוח. במקרה שלנו, אנו תמיד מציבים את
הערך 18!56, ובכך מאפשריס לפעולת הניתוח לחסוס את התוכנית עד שהניתות
מסתיים.
ה-אסספ של ואזח אינו מציע את התכונה הזו; הוא תמיד אסינכרוני. אנו יכוליס
לכפות על התוכנית לעצור עד שהמסמך נטען במלואו, בכל אופן, על ידי השהיה עד
ש-15 מסמן שה-680/51916ז שלו הוא =ד₪ |קוז0ס6 שד ד5צסמשה, כמוצג בשורות 15-17.
נחזור לשורה 20, אשר כפי שראינו מקבלת את ה-אסםש ואזה, ואנו משייכים אותו
ל-006, | שהגדרנו כיאות להיות מסוג %ח6וטשסכ וואדה. |וא דחפו (הטיפוס של
מיקרוסופט לאובייקטי ואס וואדו).
בשורה 23 אנו פותחים את קוב הפלט לפלט. זה יחויק את מסמך ה- |וואדחא החדש
שאנו ניצור. העבודה של שיטה זו היא, בכל אופן, בשורה 26, בה אנו קוראים
ל-+ח6וח6!ם+טקזטס, בהעבירנו את הרכיב המתקבל ממסמך ה- ואד שהשגנו בשורה 20,
כמוצג בתדפיס 2.4.
תדפיס 2.4
וס !]א 60וחזס)-||סע חן +הסרח6!ס הסטוף 6ח+ 01 %5ה6לחהס6 06 +טססטס'י
הסז0!ח6 6|'5 60 96זססז הסחחדי
(0חו5 45 %ה06חו ,20[60) 45 |6)+חהסרת6!=טטוכס וכ 5 ססהטוזק
5 ח 001600 8/5 ,בַחו5 5 5 ,0606ח1 5 1 ,₪ חחוס
ב רה
6 35 5סחחהח 50 || 5חזנס 6 1 דרופ 8% ס6סח - 0+ הסכסי
8חוח06הרח 6356 )ספה /וסצו סף סעבח %'חסם 6 50-
5הח %0 6356 זסעטס| 6א!! ץו|הסז 1 +טס'
(6החה 06ח.0356)61 | 8 ">" .8 +חססחו = 5
ספ 6 הטסו חב ,50806 ץכ פחהטוחוו6 ,5ססטסוחה 5066860 |ו3 סהססספ'
,5 חולחסס שבוח 6ט|ע ססטסו3 6 08% סססח' :10
5 6ופָחו5 הפוצו %056 60!866 50-
וה ה[ 3 ה86= וס :1
- 3071000065 20551016 ||3 065ט|6ח1 הסוסס6!|ס60 300 6ח' 2
6 300 6876 ץ|חס סו 50-
"506060" שזבּ ז8וז' 11
הסחד 3.5066160 זז 11
פרק 2: מעבר מ-|אזה ל-ואזהא | 53
"" 8 ("" ,"""" ,0069|06ה.30186608 .8 """=" ,8 6וחב 06ה.8 ₪ " "₪ 5 = 5
זז 0
6%
6וסחו זסח 5 6 זט ,6טטו3 הסור 60 הסה 15 50/!6 6רש'
606005 ססטוטו3 6חש חן-
,| 85 15ח+ 01 6856 606 06ח68 0+ 665!ו! כ 6 זהו) סזסח'
6 0? | 26ו|הוחזסח 6צש 50=-
5 51006 0ם 0005 6060060 6ְחַחַ8ח6 50וב'
8 """=50/6 " 8 5 = 5 חסחך "" <> 6% ₪1.50/!6.60551 ]1
"ו" ₪(" ,"""" ,אס [601306)1.6856)61.50/6.655 -
,6 0 סו 60 זפטון ח68 סע , הסזס!וחס סח 6עבח סע זו
6 6 ח3 35 ₪6 סהסהסוסחו-
החד 0 = ה0%ח0065.!6א0וח6. 61 +
"<] " 3 5 = 5
5 00%
ספ +א=
זז 0
0 5007 6ח% 6|056 156[ 6פושעוסרסס'
"<>" % 5 = 5
5 טס
הסזח!וח6 06 טזח+ 6ס8זסשו'
1 - ה0%ח0 065.|6ווח₪1.6 סד 0 = | וס
(6!.601!08 065)1 = ח 56%
6 א 38 זס +ה6רח6!6 חב 06 זסחסוס ||ו 6ססח 3 , וואדרז חזי
חסחד 1 = 6כץ 061סח.ח ]זז
6 - 666% חם'
" " .8 +ח6 סח ,ח +הסוח6וםסוססטס
6
5 |8ו5060 זס? זז 666% +טפ ,)טססטס 56[ ,6ססח )אסל'
6 0567/60 זוז 0+ 600065 5ה6עחסס ץסעסו6 6]כ שי
חו308 086% החסה + ו6/חסס %פורח 6 50-
(06/3]6סח. )6006 דסח 60 זטס
+ 0חם
6%
0 6056 8 הסוצ הפוח סחם'
"<" ,8 (סחחִ3ּ 61סח.0856)61 1 8 "/>" 8 +הססחו זטס
50 0חם :
14 ]אא למפתחי אתרים באינטרנט
2
השיטה (16%000) מתחילה בשורה 2. שיס לב שכשאנו קוראיס לשיטה זו אנו מעביריס
שני פרמטרים, כמוצג בשורה 26 בתדפיס 2.3. הפרמטר הראשון, |6, הוא רכיב; בפעס
הראשונה הוא התכונה 0%5!6060%ח6וחט006 של האובייקט %חסותט6סק ואדה | וא דוח פו.
הפרמטר השני הוא מחרוזת בה נשתמש להזצחת (ח%0ח06ח1) כל שורה בפלט.
בפעס הראשונה, |6 הוא האובייקט %ח%5!6006ח6וחגו406, שהוא הפניה לצומת השורש של
המסמך. זה בדיוק מה שאנו רוצים. אנו נתחיל בצומת השורש של מסמך הקלט, ואז
נסרוק את העצ, בתהליך רקורסיבי על כל רכיב כדי לחלץ את מה שאנו צריכים כדי
ליצור ואס |ואזחא, אותו נוכל אז לפלוט כקובצ ואדתא.
בשורה 7 אנו מתחיליס בעיבוד על ידי יצירת מחרוזת, אשר תצבור את מחרוזת הפלט.
אנו מוסיפים תגית פותחת (>) ואז אנו מוסיפיסם את שס הרכיב. אנו משיגיס את שס
הרכיב על פי ה-%94%806 של הרכיב 6, אותו אנו הופכיסם לאותיות קטנות
(0856 זס/צס ]).
כעת אנו צריכים לחזור באיטרציות על התכונות של הרכיב שלנו. אנו עושיס ואת עס
התבנית בשורה 11 :
5 חן 8 ה80ם זס- | :11
התכונה 65זטטוו2
התכונה 65זטפו4₪ מחזירה רק את מה שהיינו מצפיס: אוסף (ח60|!6600) של כל
התכונות של הרכיב. בכל אופן, אוסף התכונות יש לו למעשה כניסה לכל תכונה
אפשרית, כך שבשורה 14 אנו קוראיס לשיטה המסוימת של האוסף כדי לראות אם כל
תכונה נתונה היא אכן מסוימת עבור הרכיב הזה:
חס ך 3.5060160 1 = :14
אנו ממשיכים בשורה 15. ערכיהן של תכונות ב-1אז יכוליסם להיות תחת גרשייס או
שלא. בכל מקרה, מנתח התחביר (ז6פזבק) חכס מספיק כדי להשיג את התכונה עבורנו
ולהציג אותה כמחרוזת במודל האובייקטים. אנו לא יודעיס ולא איכפת לנו אס זה
במקור הופיע תחת גרשיים, כשאנו פולטיס את התכונה אנו פשוט כותבים את זה נכון
על ידי שימוש במרכאות כפולות ("").
הרווח הנקי הוא שאנו לא צריכיס לדאוג לייתיקוןי" המרכאות הכפולות במקור, אנו
פשוט נותניס למנתח התחביר להשיג את הערך ואז אנו פולטיס אותו החוצה בתצורה
הנכונה. לאורך הדרך, אנו נחליף כל מרכאות כפולות בערך עס מרכאות בודדות, ונקיף
את כל הערך במרכאות כפולות. כך שאס התחלנו עס
>] 0|855 = 100<
אנו נסייס עס
<"0!855=")00 ]>
פרק 2: מעבר מ- ואדה ל-ואזחא | 55
שורות 11-17 חוזרות באיטרציה על כל התכונות הקשורות עס הרכיב. למרבה העניין,
תכונות הסגנון אינו באוסף התכונות, ולכן חובה לטפל בהן בנפרד. בשורה 22 אנו
בודקיסם לראות אס יש לנו תכונת סגנון, ואס כן אנו מציגיס את הערך באותיות
קטנות, תוך תיקון המרכאות אס יש צורך.
בשורה 25 אנו בודקיס אם לרכיב גה אין תגים-בניס (בעצ ההיררכיה). אם אין, סיימנו,
ואנו יכוליס לפלוט את המחרוות. אנו רואיס ואת בשורה 26: אנו בודקיסם את
המאפיין ה0%ַח6! של האוסף 065סא₪וח6. אס הוא מחזיר 0, אזי האוסף ריק; אנו
סוגריס את התגית בשורה 26 עם לוכסן עוקב, ובכך הופכיס את התגית לריקה. (כפי
שהסברתי קודם לכן, תגיות ריקות יש לסמן עס בסופן) ואז אנו יכוליס להדפיס את
המחרוזת בשורה 27 ולצאת מהשיגרה.
היה ונתקלנו ברכיב בעל רכיבי בנים, אנו ממשיכים בשורה 31. שוב אנו סוגריסם את
התגית הפותחת (הפעס ללא לוכסן, מכיון שזו תגית מכולה ואנו עומדיס לתת לה
תוכן). אנו מציגיס את המחרוזת, אך הפעם אנו חייביס לעבור באיטרציה על כל הבניס
של הרכיב הנוכתי.
שורה 36 מכינה את האיטרציה עס לולאת זס", העוברת דרך כל בן (זכור, האוספיס
הס מבוססי-אפס, כך שאס האוסף מכיל חמישה רכיבים, הס ימוספרו מ- 0 עד 4):
1 - ה0%ח0065.|6א0ווח61.0 סד 0 = |זסז] :36
בשורה 37 המשתנה המקומי ח נקבע לבן הראשון, וככל שנתקדס באיטרציה, הוא
ייקבע לכל בן עוקב:
(1100 065)1ח6!.0 = ח 56% | :37
זכור ש-ח הוגדר להיות אובייקט בלבד; הוא יחזיק בכל סוג של רכיב שנקבל מאוסף הבנים.
למעשה, בשורה 40 אנו חייביס לבחון את הטיפוס בפועל של הצומת שאנו מקבלים.
הוא יהיה אחד משני טיפוסים אפשריים: רכיב או טקסט. אס ה-06ץ0081ח שלו הוא
1, והו רכיב. הבה נדלג על מקרה זה לרגע אחד, ונבחן את המקרה השני (טקסט),
הנראה החל משורה 44.
בשורה 46 אנו לוקחיס בחשבון את הצגת צומת הטקסט. קבלת הערך כטקסט קלה;
אנו משתמשיס במאפיין 068|06סח. הבעיה היא שהטקסט עשוי שלא להיות בדיוק מה
שרצינו. ישנן שתי בעיות קרובות זו לזו.
ראשית, ל-6זס/ יש תוויסם מיוחדיס, כמו ציטוטיס חכמים (0%65ט0 זהח5); אשר
חייביס להיות מומריס לתגיות משלהם. בנוסף לכך, כאשר אנו קוראיס את ה- וד
מן המסמך אל מודל האובייקטיס של המסמך, ה-ז6פזהק של 155 משנה בנוחיות את
הזהויות השקולות (טח6!אּטוטףם עשטחם) שלנו לטקסט (אלו הן השמות המקובליס
לתוויס מיוחדים, אשר פותחיס בתו הייאמפרסנדיי 8). למשל, אס ה-זספזאק ראה )816 ;
הוא מציג זאת כ- >, כמו כן, כאשר אנו רואיס 50פח8 ה-זספזפּם יציג ואת כתו של
רוותח. לרוע המזל, מכיווו שאנו כותביס ואת חורה כמסמך, אנו וקוקים להציג ואת
בחזרה לצורה המקובלת ב- |אז. עבודה גו מושגת על ידי השיטה 6808006 60/6111
כמוצג בתדפיס 2.5.
66 ]אא למפתחי אתרים באינטרנט
תדפיס 2.5
6 0 8 חס 5חהסחהוז510חהט /6605587ח 6 והחסוסק' :0
59 5 (0חו7ז5 5 %006)5א6 [זוסעחהס6 הסחס6חט- סספעוזק :1
6065 /ססחס זוסחץ הזו 6860015 |3ו5260 1 ד 306|ססז' :2
(00%06)5 | ד = 5
כ ו
3006 6 31001 פשסו!10 +החעצ 00 0+ זחבּ/ט סצצ'
5 385 656 זחה/ו ץ||68] 6 06חו5-
5 |8ו5066 חסוצ 5סססטף "+והות5" חזס/ ססבוקס ||'סעצ' 6
("""05ק ה רח6=""5ק/ס זהחה6>" ,(146)ח6 ,460|306)6 = 5 2
("""0ס0 דוה רח6=""5כ/ס זהה6>" ,(147)זה0 ,₪60106)5 = 5 :9
("""0ו(0ד1הרח6=""5כ/ס זהה6>" ,(148)זחה0 ,₪601806)5 = 5 9
6 0 365 זו חפו!ס טוק 5וחז 5+ סח5 |הסוחקה וסקס 6זבּ 56סרס' :111
("""866 50 6=""6כ/ זהת6>>" ,"[רח6]" ,467180665 = 5 121
("""85ח6=""6כ2/ זהחה6>" ,"[0]" ,367180665 = 5 11
("""ז6!|טס""=6כץ זהח6>*" ,"[פ!]" ,0!80665ק36 = 5 11
5 = 60006 [+ו6/חס6 11
חסס6חט ₪0 :17
בשורה 3 אנו קוראיס לשיטה סט0 ₪1 להמיר את כל תווי ה- |ואזח המומריס
בחזרה לסימוני ה-|אז₪ של היישויות השקולות. בשורות 7-9 אנו מטפליס בתווי
ציטוט מיוחדים, ובשורות 12-14 אנו מטפליס בתוויס מיוחדיס שבשימוש ב-ח8!|והח86!
9חוח8ווטטס (כמו קוויס מפרידיס ותבליטים).
רקורסיה
הבה נתייחס לשורה 42 של תדפיס 2.4. כאן אנו מתייחסיסם למקרה שבו הבן שאנו
בוחניס (זכור, אנו חילצנו אותו מאוסף הבניס של הרכיב הנוכחי) הוא למעשה בן
נוסף. מה אנו רוצים לעשות עס בן וה! למעשה, בדיוק את מה שעשינו עס הרכיב
הנוכתחי: ליצור מחרוזת עס התגית והתכונות, ואו למצוא את כל הבניס. ה בדיוק מה
שהשיטה הנוכתית טחסוחסושסטכזטס) מבצעת. צריך רק לקרוא לה, שוב, עס רכיב הבן:
" " 8 +ח06חו ,ח +הסוח6וסטכסזטס - :42
כפי שאתה עשוי לדעת, מדובר ברקורסיה: כאשר פונקציה 'קוראתיי לעצמה. למעשה,
הפונקציה אינה קוראת לעצמה. היא קוראת לעותק של עצמה, ושתי הפונקציות, בעוד
שהן נקראות באותו שס ומשיגות את אותה מטרה, עובדות על קבוצות שונות לחלוטין
של נתוניסם. השיטה 6חסוח6!םזטטוטס הראשונה עסוקה עס הרכיב הנוכחי, והשיטה
+חסוח6!םזוקזטס השנייה תעבוד על הבן. למעשה, הראשונה תחכה עד שהשנייה תסייס
לפני שתמשיך.
פרק 2: מעבר מ- ואדה ל-|ואזחא | 57
כתיבת תגית הסגירה
הבה נתחזור רגע אחורה לשורה 25. המקוס שבו בדקנו האס ישנס רכיבים בנים.
אם אין כל רכיביס בנים, אז מבחן וה מחזיר אמת (אורך אוסף הבנים הוא 0) ואנו
נכנסיס לקוד בשורה 26. התגית נסגרת עס התגית המיוחדת של סגירה-עצמית <].
לכן, אס הרכיב היה <זפ> ולא היו בניס, אז אנו נפלוט אותו (בשורה 26) כ-
זט>, שהוא התתביר הנכון עבור קבצי |אא. זכור, ב-א כל התגיות צריכות
להיסגר. אם, מצד שני, יש לנו בניס, ה נכשל ובשורה 32 התגית נסגרת עס תגית
סגירה רגילה.
מעבר דרך הקוד
כדי להפוך את כל זה למעט יותר מובן, אנו צריכיס לעבור יחד על הפרטים. הדרך
הטובה ביותר לעשות זאת היא באמצעות ה-ז0000906 (מנפה השגיאות).
אתה תמצא את מודול המחלקה 1 ד0א02זס/ על גבי התקליטור, או שתוכל להוריד
אותו מאתר האינטרנט 0 8550618005.600/שזספו!.צואואו. טען מודול מחלקה וה בתוך
הפרויקט 8060ז56חסז= (מצוי גס כן על גבי התקליטור). כדי לגרוס לזה לעבוד, תרצה
גס להעתיק את 0!.850חס6 לתיקיה בשרת ה-60\ שלך, ואז ליצור את התיקיה
הווירטואלית הנדרשת.
אם אינך בטוח לגבי אופן הכנת קובץ :45 על גבי שרת ה-65/ או כיצד
|
יי ליצור פרויקט חדש ב-8/, אנא פנה לנספח ד' לרשימת הקריאה המוצעת.
1-7
בחינת הקלט
כדי להבין על מה הקוד עובד, הבה נסתכל ב- 20 השורות הראשונות של קוד המקור
החזח.2קְאת6, כמוצג בתדפיס 2.6.
תדפיס 2.6
"0106:0160: ו ה1670500-60ר-560685: חזט"=5:0ח!רחא |חטר]>
"06:00 0: ו ה167050-60רח-85ת5606: חזט"= צו:פחווחא
<"40|השח-6/ ד/סזס. 3או. ואו /: כקח"=5חוחא
<680>
<"005-1252חו/ש=3756%ח6 ;|החח/+00" =ח 606 6כץ ך-זחס = עוו60-כח 668 >
<%ח6רחוססכ. 6 זס/= חס הס 0810זק =6וחבח 668 >
<"9 0זס) 11670508" = חח 60 618007ה6כ)=6חבח 668 >
<"9 0זס/ 670508ו1]"= חח 60 30 חוכ =6חבח 668וח>
<"|וחא.1!65/0161150. 2ק8ה6]="./0זח 5% |-6!ן= =|6ז >חו|>
<12>/006 זסזקהה >006<)3( :
ל מז תב ספ
=
)=(
88 ]אא למפתחי אתרים באינטרנט
<|וחא><[9 50 6סף זו]--!> :11
<65וז06 ?6 00כ: >0 :12
<זסו0ו:0/> 26 | 6556<זוסוטטה:0> | :13
<36|קוח6 ך:0/ >00%. |סס|פק6וה< !ו ד:0> | :14
<זסר350/0 0:1/> 00 | 26556< זסו0 850 0:1> | :15
<חסןפוש2>/0:36<חסופוש0:36> | :16
<6חו ד|068 ד:1>/0 <6וחו דך0:10%9> | :17
<000חו850 23:11:002>/0:1 1999-07-12 < 3500060 |:0> | :18
<0:0708060/ >11:16:002 1999-10-271 <0:0708000> | :19
חלק ניכר מזה נראה כמו קשקוש של 07666 0506י6ו1, אך אנו לא צריכיס להבין מה
זה עושה כדי לצפות בקוד במהלך פעולתו.
אני אשיס נקודת עצירה 0חו0ק 686ז8) על השורה הראשונה בעלת המשמעות
ב- | דאס זלו6שחס6, כמוצג בתרשים 2.7.
[<51) = [[עוח0 863₪] [86ם:)] 1 ד4211זס/] - [63%זפ] 83516 |הטפו/ ]]ס5סזסוא - הסובזס פחוסז] ,א
4 |₪פ)-. קוו ואוסטחושצ 888-105 5ססד הזבו עזפט חנו הטספ זהחזס ספסזם פע 38ם ₪6 4
₪ קש א וה,
0130 סוחס - וספןטזקן
=|
8צ.ה50186החסז]) 501816 הזז לע -ן
5-ו
855 0% [=]
5 5סוץ0ס5טו1ק5) 65וזסס5טווס5 (45.
2 זט דוסיי 45
אה זס) 2 ודו סאר שי
הזד 5) החזס ופחה זד ופי 4
₪ 0 | 8 ₪ ₪( |₪ ש|ם - 8
סגטסנ1קאם מסנסקס
|
1 611-2006 3150 15 ₪817 שבגם סהגס 50 2116 מחדת 5
משטס ססםת 3ת3 10363 ספגווע 303 ו סגמן שגו1פע
משםתס התה ,208 דא םתה סס מ1 ₪65 תס 680ע סם 18 משהסמעעב3 שמך'
5ג מסהקסמס 31עצ2 ,6םת1ע565 25 מסהקת1 1הע27)סהדהאס57עסטתס6 כגום 116מגוק
= [םגו , סמשטטוססכ ,דה ..זזד1153 25 שסה ,עשעס1קאפפפממפסם1 25 16 מבע
63 ששטמססי
1 65מס01א605ם-66ת1 שסא = 16 ₪0565]
3 פמפפסעסה אעסטח ססם צ8ת 15םס'
תבית :רכש ןסר
סמשווגוססה ₪878 6םס משקס'
1עגו ססְהּה1טהםמ.16
קַמנההס! 65ב13םת21 2116 שגםס 11סמגו סב1בּח'
605 5ד2דהצתגפת = 85806ע₪30ת.16 1נסמט סע
0 51650
קפס
סססרמס 208 מחדא שםס סשש'
סמשווסס0ה.16 = 400 ₪66
שת 15 6מ161עחתסטס) 2116 סגוקעפגוס מגוס משקס'
1 258 סגוקפגוס מסץ מסהקסגוס מ6ע0
₪ סססע 516 36 א₪81 סטנכפעגוטסת 66 מ1קסכ בּםמה'
]*
4
תרשים 2.7: זחוסק 686 ב- | דאס חס
אנו נתחיל על ידי יצירת מופע של אובייקט ה-זפזס|סא5ז6חזס%ח1, כפי שהוזכר קודס
לכן. אנו יכוליס לצבעוד מהר דרך קוד וה עד שניכנס לשיטה זחסחס6!םזטקפטס.
ב- 8856 |508ו/, 9 ייצור נקודת עצירה ו-8] יתקדם לתוך הקוד.
8+ 5 מדלג על קריאה לשיטה.
פרק 2: מעבר מ-|אזה ל-ואזהא - 59
עצירה לאחר שיוך ה-006%88₪6ח למחרוזת שלנו, 5 חושפת שהנחותינו היו נכונות,
כמוצג בתרשיס 2.8. החלון המיידי, הנראה בתחתית המסך, מציג את הערכיס
הנוכחיים של 5: |חזח>, והחלון 865ח886/), המוצג בחלק הימני העליון של המסך,
מראה את הערך של 6וח68ססח.61, " |וואדח".
עד כה קיימת עקביות עס התיאור הקודם, הבה נמשיך. מכיוון שמרבית התכונות לא
יסומנו, הדרך המהירה ביותר להגיע לשורה 11 של תדפיס 2.4 היא לשיס נקודת עצירה
עליה (9=). וכור לשיס נקודת עצירה לאחר לולאת ה-זס" גם כן, במקרה שתגית
ה- ₪1 הזו אינה מכילה תכונות. לך לנקודת העצירה הראשונה (5").
אנו מוצאיס עצמנו בשורה 22 של תדפיס 2.4, לאחר שדילגנו על כל התכונות הנראות
בתרשים 2.9.
[|פ]-=. [[עוחם 8686] (0066] וא ד62%11זס/] - [=ה6זפ] 8510 |הטפו/ 005071 - מסוהז פחוסו] א
| |8|=. ופטחו 5ח810-1 פוססד הזטבום זפ חנו הטספ והחזם= הסןסזם אפוע 4 ₪6 4
-ו| ₪ ₪ ?2 5 א ו , |> | ₪ ₪ > |₪ ש| ₪ - 5 - ₪ |
[ 0000000000 אפמשאוטס] [- (1 )|
=הסמסעקגו כב כשתהם ₪306 311 כממגוסשת 8571 סהגס מססם - ש63 מסשקס'
כ3נפ 087 ₪886 מסשחס1 5א11% צ6811ע 1 סגס'
( 06119106 . 61) 10886 6 ">" 6 5מ8652ם1 = ₪
871806 601ן00)> = 6תופו!6 טסה 8 66
ל ופ שן00)> = 06/9106 0ח.8 660
65
ב
8 "ד "]1 6חזפססת וס
8 "וחוון>" 5
הגוז 8ם3 ,6שבע5 עס 06מ8611₪1512 ,כססגוכבעספה3 52011160 311 במסקקה'
הקסע 50 ,פפססגוש מ1נהסתסש שב סגו1הט 6סגוכע1ת355 ₪26 סהםס שססם'
3שפומ1ע61.266 מ1 8 בשבע עסק
5שסו1עפסה3 531016סעק 311 4363ו61ם1 מ₪01160510 בסגומבתספה שתס'
"1+1=0ס6תם" =שמם סמגס'
מפמך ₪012160ע8.3 15
6גו006081 .8) 1808קפת 6 """=" 6 ממה הבהסת.3 6 " " 6 8 = 85
5 הבמס
סש
ש6המ1סמת1 ססם 158 16 סומ ,56גומ355:1 מסאאסס מעשבפססמה 18 16ע55 שםתס'
סוחס - 0וסוקן 5 ,611ח 83 13גס 0 ₪858 6גם 06ם628 סס 3בא11 20 שגם סבםגס שססםמ'
| ם=]| 1) 13806 עס
.5618060 רחסו" 561866 רחס לא בו
ו 3
5 0855 5% =]
5 5סוץ560טו1ק5) 56065טווס5 (45.
32 זט 42% זסאר 4/2.
ואט זט 2 ו ד סאר |
הזד 51) החזס"5חב ד 5 40
,
: 4
תרשים 2.8: בחינת המחרוזת
0 וא למפתחי אתרים באינטרנט
[< |5)=. [[עוח0 863₪] [066:)] !א ד4211זס/] - [א68זפ] 83510 [הטפוש !]ס5סזטוא - תסוהּזס פחוסו ] א
[= |8]=. מ] אוסטחו 5ת800-1 1005 הטמו ע וסט חנגם הטלפ פופה סנס סו 06 ₪6 ₪9
19 רו ₪ ₪ ?88 ה |- 09| ₪0 0|₪ ש|ם --5]
5 ₪ | ב (1 )|
|| | פשפש] | הספפס)|
8718066 20(601)> | 6חה)סהסה .3 66| |2. 1 01086
וי וי 0601)> | 006%/8]6ח 8 66 מגום המע
י " 11" 6חז68סת !6 66
8 "וחזזו]>" 665 6אע0ס+ ,217 611-2026 מת1 8מ61606 מסטנגש שגס 02 8פמשסתסש שגם6 סגועסגוס'
מ6מ62118 61'3 0סס 56מגו60: משמד'
(8ע1ע562 25 65מ8₪6םת1 ,007505 25 61)סמשמס21פטקסגו 0 עום ססהטבעק
05פךמס 28 ם ,001608 25 8 ,קמ1עס5 25 8 ,6065סם1 238 1 ,₪ מגת
בהסעסטטו כב כסמבם ₪38 311 ב5ממגוסשת 85871 סה8ג5 שססםת - 638 מסשקס'
כסנהת 5380 ₪886 משחס1 11% 268117 1 סגומ'
( 06113106 . 61) 10888 6 ">" 6 5מ06ם1 = ₪
סגו 7% ,055סגוכ1ע3552 526012160 311 הבמסעעב'
1 עבת שגו1הט 3552120056 6ג₪ 6236 שססםמ'
פספטמ1עססג.61 מ1 8 משבםע עסץ
|[ 5 0גו61מ1 מ₪01160810 שסגומבעסס3 שםס'
שמם סהמפי'
מסמך 8.52₪011160 +ך
ב ₪
.561800 חס 51866 חס לע =
כ
55 1-5
וס פ6וזסם5טו|ק5) 65וז560טווס5 (45.
ראזס תדהו טסוו ₪2
אס 27 ו ד סאר שי
ז51.77805%0) וחזס"5חב ד ופא 4/1.
5 מס
סא
שהגו1שמ1 ססם 13 16 סוס ,6סגו355210 מסשעאסס מפבנפססתה 13 55716 שבס'
= ,₪611 83 135ם6 +0 8 סם 11863 201 6םס סבג₪0 שססם'
₪ ₪
סגוןס סס 0663 ₪030 שהַבה3ג₪ 150ב'
ב כ ב 3 :תד "" <> 8א₪1.55916.03316 +: מו
3103%0ת1 ,2626 65306 שג ₪ם₪ סכטך מ8ש שח ,מ6מ₪2110 סם שטבםת שח 15'
]*
| י
תרשים 2.9: שורה 22 מוצגת
כפי שניתן לראות, דילגנו על התכונות, והמחרוזת שלנו 5 מכילה רק |השח>. אס נביט
חזרה בתדפיס 2.6, נוכל לראות שתגית ה- וויז3 נראית כך:
"0166:0106: 0 1670500-60רח-685ת56: חזט"=5:0ח|רחא |וחטו]> :0%
"167050-60:00066:0רח-566085: חוט"= עע:5ח!רחא :11
<"140!וחשה- 5/3 ך/סזס. 3או. שצאעש/ /: כקח"=5ח!וחא :2
ה-אס ואזח אינו מאהה אף אחת מתכונות אלו; והוא אינו צריך - אף אחת מהן
אינה |ואדה. לכן, ה-אספם ואד אינו מזהה אף תגית מסומנת, ואנו ממשיכיס לשורה
הבאה של הקוד: בחיפוש אחר סגנונות.
בהמשך הקוד, אנו מדלגיס על הצהרת ה- בשורה 22 של תדפיס 2.4
8 "" "=5/6 " 8 5 = 5 חסחך " " <> 6% [61.50/!6.055 + = :22
"ל" "א"י" """,0א6856)6|.50/6.065516 )606 -
מכיוון שאין לנו כלל תגיות סגנון ברכיב זה, ואנו מדלגיס על הצהרת ה-) בשורה 25
הסח ד 0 = ה0%ח65.!6ססזסווה61.6 1 :25
בגלל ש-0%0ח0065.|6א0וח61.6 אינו אפס, וגס לא נצפה שיהיה. זכור ש-|6 במקרה זה
הוא צומת השורש (311), 0065א0!וח6 הוא האוסף של הבניס של וואדחה, ו-חזפח6! הוא
המונה של הצמתים באוסף זה.
פרק 2: מעבר מ- ואדה ל-ואזהא = 61
אנו ממשיכיס עס שורות 36-42 של תדפיס 2.4.
1 - ה0%ח0 065.!6!וח₪1.6 סד 0 = | וס 1
(61.601!080065)1 = ח 56% :7
1
6 א 38 זס +ה6רח6!6 ח3 06 זסחסוס ||ו 6ססח 3 , וידר חזי 7
חסחד 1 = 6כץ061סח.ח זז 7
6 - 666 חב' :211
" " .8 +ח6סחו ,ח +הסוח6וםטוססטס :212
מסתבר ש-ח (הבן הראשון של < ]ואדה >) הוא רכיב, כך שנקרא ל-)חסוח6וםזטקסטס עס ח
(הבן שזה עתה קיבלנו) ועס מחרוזת ההזחה שלנו, אך עס הוספת זוג רווחיס למחרוזת
ההזחה.
אס תלחצ על 8" משורה 42, תחזור לכאורה להתחלה של ז%ח6חס!שזטקזטס. אבל לא
חזרת להתחלה, פשוט ירדת רמה ברקורסיה. כלומר, הפונקציה שבה עבדת הושהתה.
אס נחזור לאותה פונקציה מוקדמת |6 הוא < וואזח>. כאן, בכל אופן, ו8 לא יהיה
]ודת, הוא יהיה <880ח>, הבן הראשון של ואדת.
שוב, לא נמצאו תכונות או סגנונות, ושוב ישנס בניס. למעשה, הפעס ישנס שבעה בניסם.
שוב, אנו משייכים ל-ח את הבן הראשון, ושוב אנו יורדים רמה ברקורסיה לתוך
%חסוחסוםלטוכזטס. הפעס |6 הוא הבן הראשון של <680ח7> : <006>. רכיב זה, <006>,
חסר בניס, כך שאנו נכנסיס להצהרת ה-ו בשורה 25:
חס ך 0 = ה00%ח65.!6ססאטווחס.61 1 :25
"<] "א 5 = 5 :20
5 לס :27
20: 5% 50
+ 0חם :20
אנו סוגריס את התגית ויוצאיס מהשיגרה. לאן אנו יוצאיס! אנו "קופציס החוצה"
רמה אחת מעלה ברקורסיה לשיטה זחסוחסום6טקזטס, שקראה לנו: וו האחת שבה
<680ח> הוא |6. זה מחזיר אותנו לשורה 37, שורת האיטרציה על הבנים. אנו עברנו
באיטרציה על הבן הראשון של <680ח>, שהיה <6שט>. מכיוון של-<6ט> אין בנים,
אנו מוכניס להמשיך באיטרציה לבן השני של <680ח> : <8ז₪6>.
שים לב שאנו עדיין בבן הראשון של < |ואד3>, שהיה <680ח>, אך עברנו לבן השני של
<0680>, <608ח>. אס נחזור למסמך המקור, הנראה בתדפיס 2.6, אנו כרגע בשורה
5 0
<"00/5-1252ח1ץ/ש= 601566 ;|החסח /זא66"= הח ה 60 שק 7-ה = עוס6-קת מזסוח> :5
ה-0%6 קבע ש- <006> (שורה 10) היה הבן הראשון, ו- <68₪וח> (שורה 65 הוא הבן
השני. ראה ואת כאזהרה: הסדר אינו מובטח.
2 וא למפתחי אתרים באינטרנט
אנו ממשיכיס להתקדס בקוד, והפעס ה-זספזהק מוצא שסומנה תכונה, ומפסיק
בשורות 14-16 כדי לאסוף אותה:
חס ך 3.50601860 1 :14
"טט ₪(" ",36 .)6306 8 """=" 86 6חב 06ח.3 8 " " ₪ 5 = 5 :151
16: 0%
אנו רציס בלולאה דרך כל התכונות, ומעצביס אותן כהלכה כמודגס בחלון המיידי
בתחתית תרשים 2.10.
|< |5)|=. [[עוח0 863₪) [86ס:)] !א ד4211זס/א] - [68%זפ] 83516 [הט5ו/ ]]ס3סזסוא - ה6והזס פחוטז ] א
| |8|=. ופ וסטחו/\ 843-105 1005 חבזסהום עפ חנ טטסם הוחס" 6נ0ום אופוע 06 65 ₪2
-ו| ₪ ₪ ?2 5 ₪|ש ו , | = | ₪ ₪ ₪ |₪ ש| ₪ - 5 - |
|[ 7-7 אשחשסואואס] [2 0777777777 מפחשאשסו]
וי 871806/י 00(661)> = סחופו!סטסת 8 (שַמ1ע55 25 8מ06םת1 ,001608 25 61)סמפמם21סוקסגוס כגוט שסהטנבעק
וי 8718066 /י +0(60כ)> = 6%/8|06סח 8 םס 18 ם ,001600 15 8 ,6ם1עסט 28 5 ,מ606סם1 25 1 ,6 מבתע
ל "ה זם)]" 6חזפ)!סטסת וס
)00 18סז> " =השעסעקט 83 כסמהםת 636 311 כממגוסשת 85717 סהג6 שססם - 688 מסקס'
כשנפת ₪87 ₪886 משחס1 בא11% 683117ם 1 סגגומ'
( 05110106 . 51) 10886 6 ">" 6 סמ06ם1 = ₪
שגז) התה ,שסהע5 עכ 6ם361180151 ,5בסגומ1בעספה 5260112163 311 במסשעעבּ'
הקסע 50 ,5בססגוש מ1נהסתסש צ₪3 =גו1הל שסגומ1עס35 526 סהםס שססם'
3טטמנ1מססג.61 מ1 8 בסבע מסק
5סומ10ע355 5381016סע 311 363גו61םת1 מ₪01160510 6סגוע1ת355 שגס'
"12160ססעה" שעה סהגס'
מש 526012160.ה 1%
או[הע6סת.ה) 1806ק6קת 6 """=" 6 =מהאסנסת.ה3 6 " " 6 8 = 8
5 המע
סא
ש6הו[סת1 ססם 18 16 סגום ,6סגומ355:10 מסשאסש מעשבפסמה 18 55916 שםתס'
= ,₪611 85 0218 01 ₪886 6גס 66מ₪282 סם 5בא11 201 6ג₪ סהמס שססםמ'
גה 016ם51 סם 5שססגום 563063 שהםבב₪ 150ב'
מנבוון |
25
"6מע5-7ם56ת60"=טנגום-ק255 "5-1252ה0במ1ח=₪283:365 ;1ס/5א₪6"=סמ6סתסש ב₪55>
תרשים 2.10: לאחר קליטת התכונות
ל-<6%8וח> אין כלל בניס, כך שאנו ממשיכיס לבן הבא מבין שבעת הבניס של <680ח>,
שהוא גם כן תגית <0618>. למעשה, ישנן מספר תגיות <608וח> בהן נתַקל לפני שנגיע
לתגית <>חו|>, המייצגת את שורה 9 במסמך המקור שלנו:
<"]וחא.ל 1!65/0!6!5 0-5%200080007%6201//. "=)סת 56 ]- 6!ו== |סז אחו|> :9%
בשלב הבא אנו אוספים בן <5/6> של <680ח>, משורה 56 בקוד המקור, כמוצג
בתדפיס 2.7.
תדפיס 2.7 מובאה מתוך המקור
<506> :56
--!> :57
/* 5חסטוחו6כ +חס- */ :58
6 :59
;זסטס0:ץ!ורחפ-+הסי+ 5
פרק 2: מעבר מ- |אזה ל-ואזהא | 63
0000 0 56-1:0סחהק 11
;50-00 2
;הז ץ| 8 50-06-60 1
0:0 חזס)-%ח0?-50רח +
;60א1:ח00וכ-%+ח0ס)-150ח :1
7 0 0 0 500806:3-%חס)-50וח 1
/* פהסטוחסכ 5016 /* :67
|זס150]. צזס , |הרוסצזס !1.5 והוחזסס15ז.ק. :68
;"":לח76ה50-50/!6-0+ 7
;חו0:חוסזהוח :2
10% 000.: החסה סס-חוטזהוח :1
2.0% חוסח-6חון 2
; חפ חס- שוחו כ-50רח 1
ל בי 2
--ו10ט-50רח 51
ס00:ץ!ורחב-זהסז 1
;"0 וס 5סחוד":ץ|ורח8-00%-87685%)-50רח 27
;"0 צו6 5סחחוד": עץו1רח13-%חס)-ו10ט-50רח 1
מכיוון שכל הסגנונות הללו מצוייס בתוך הערת ||אדה, איננו אוספיס כל תכונה או
בניס עבור <5%/6> ובמהרה ממשיכיס בחזרה באיטרציה על ילדיו של <680ח>. בכל
אופן, זהו הבן האחרון של <680ח>, כך שהפונקציה הרצה באיטרציה על בניו של
<0680> מסתיימת.
לאחר שעברנו דרך כל בניו של <680ח0>, לולאת ה-זס] שרצה משורות 35-48 של תדפיס
4 מסתיימת, ואנו ממשיכים הלאה לשורה 51 :
"<" ,8 (סהחהּ)06סח.61) 0856] 8 "/>" 8 +הססחו זטס - :51
זה שולח לקובצ הפלט שלנו סדרה של רווחיס (מחרוזת ההזחה), כמו גס תגית סגירה,
בהתבסס על שם התגית.
לאחר שסגרנו את התגית, השיטה שלנו חוזרת. לאן! חזרה מעלה ברמה אחת
לפונקציה הרצה באיטרציה על שני בניו של < ואד3>. אנו, בקצרה, מוכנים עתה לבן
השני של < |אז> : <ץ00פ>, המצוי בשורה 1,538 של מסמך המקור שלנו:
<'חןפ.: |8זססחו-50/6='%80 05-ם=8חב3! ץ00פ> :1538
בחינת התוצאות
התגית <000> מייצגת את הטקסט שיוצג במסמך ואזה. התגית <680ח>, בוודאי
תוכור, הכילה מטה-מידע; בתגית ה-<ץ000> נעשית עיקר העבודה.
בתגית זו אנו רואיס לראשונה את השימוש בסגנונות. השינוי היחידי שנעשה לקוד
המקורי הוא שאנו כופיס על תכונת הסגנון להיות מוקפת במרכאות כפולות.
4 וא למפתחי אתרים באינטרנט
מהתגית <ץ200> אנו מקבליס את הבנים, ואנחנו מוצאיס תגית ו0>; מהתגית
<צו0>, הבניס מוביליס אותנו לתגית <כ>.
בומן בחינת התגית <ס>, לחץ על +61 כדי להעלות את חלון מחסנית הקריאה,
כמוצג בתרשיס 2.11.
|< |5]=. [[עוח0 868₪) [86ס:)] !א ד82]1זס/א] - [68%זם] 83516 |הטפו/ 1]ס3סזסוא - הסוהזס פחוטז ] א
||5)= 1 טח 5ת8001 005 החפוסו עפ חגנ טנטס בוחה וס אפ אש ₪6 ₪52
ה | ₪ ₪ ?2 ₪ 5 9 ₪ | ₪ ו , |= 5 | ₪8 ₪ ₪ |₪ ש|₪ - 5 - ₪ |
וי זי ןמ )> = 6חזפ4פ טסה 8
+ 6|מהוזה/י 0(601כ)> | 6ט|6%/8סח.8 66 סססת 526 30 א31ח סט1כפגוטססת 526 תנבקסכ בּתב'
0 'ק" 6חז49!סגסח. |סן | ו סמשונם 1 ₪ סגוע סגו
5 " 9
| 7 חססחט= 10016], סז 41 01086
הח16טטוססטכ, 27188 זט שי 0 5 סז מגום המע
| 86 ח6ח0!6פו וסטטוכ), 1 2%77 וט 30 זפ חס ז=|
לחשות6!=נוקסטכ), 11 27 זט /עע'. 306 56 חס =
עפסמסס םס סגועסגוס '
חשח105!6 וסטטוכ). 1 277 זט 80 זפ חס ז=| - ל 5 %
0% 6707 /וחס-). 07207166 ה6"860פחסזם] 5 סל =שעטסשע =
סגועסגו0 ₪1 שסהט1עק
45 בי הסובת
- ו סההשסיט | - 530 משקס'
3 08 ₪886 משחס1 בא11 63117ם 1 סגומ'
(9מ161טם - 61) 10350 5 ">" 5 סמסנמג = ₪05]
סגו התה ,66הע5 עע 6ם361180151 ,5בספגומ1תספה 526011168 311 במסשעעב'
ו ,
שסה1עסע 50 ,5בססגוש מ1נהסתסש צ₪3 שגו1הע שסגומ385521 026 סהםס שססםמ'
ב=]| 5 3טשטמב1מססג.61 מ1 8 בסבע מסק
פצ.ה50186רחסיז) ה86ורחטיז 4 ם 65סגומ1ע355 0531216סק 811 4365גו61מ1 מ₪01160810 סגומ1עספה3 שםגס'
ו 3 "12168ססע5" סעה סהתס'
5 01355 6% מסמתך 3.32₪011180 1%
55 ) ו 3 6ט[הע6סת.ה) 66בה[ק6ת 6 """=" ₪ אמהאסנסת.ה3 6 " " 6 8 = 5
סו 2 זסוי ₪52 + במ
סו 2 וסאי ₪5 =
)הזד 51) הזזס)פחה זד ופא |
שהגו1סתמ1 ססםת 18 16 סגום ,6סגומ1ע355 מסמשנסש עשמססמה 18 16צ56 שםמס'
5 ,611 833 60213 02 ₪856 6גס 66מ₪28 סס 3שא11 20 שגס סהגס שססם'
]*
בו
תרשים 2.11: מחסנית הקריאה (58666 ||68)
כאן אנו רואיס את הרקורסיה בפעולה. קריאת הפונקציה היא בסדר הפוך (הכי
מאוחרת תהיה הראשונה). לכן, !וא דהא דז/חס6 קראה ל-+חסוח6!םזטק6טס, שקראה
ל-%ח6ח6!ם%טסטוס, שקראה ל-)חסות6וםזטקסטס, שקראה בתורה ל-+חסחס!שזטקלטס.
אס נסתכל בחלון ח6ז8ּ), נוכל לראות שה-ַחחגּ66סח.!6 הוא כק. על ידי לחיצה על
קריאה אחת לפונקציה ברשימה, נוכל לראות שה-6חח0688סח.!6 של הקריאה הקודמת
לפונקציה הוא צוס, כמוצג בתרשים 2.12.
פרק 2: מעבר מ- ו|אזה ל-ואזהא = 65
|< |5|=. [[עוח0 868₪]) [066ם)] !א ד421זס/א] - [686זפ] 83516 [הט5ו/ 1]ס5סזסוא - תסזהזס פחוסו] א
| |₪)-. קוו ויוססחוע 5ח803-1 5!ססד חִהְּהַום עזפטסי | חנו הטספ = בחזם סנס פע ממ 6 ₪
₪ ₪ 58 ה |- | ה 0 |₪ שום --8|
5 מס
!ופי 0(601כ)> | 6ח00649ה. 8 66
ל 6 > = 806 /0% סה 8 66
3 "םק" 6ח6!8סה.1ס = 66
9 5 66
סם808 6םס ₪1086 ס5גמוך 186טמ6םסס'
"<" 8 5 = 5
5 סגוס
61136 שםם גועםס 10₪5886'
ב ןיכי וי סו כ ויוי יי
(1) 61.₪211080068 = ם 866
6 סמסאפשםס 8 עס 5מ610₪086 תה ₪06 ע6מ516 111ח בבסם 3 ,מחדא מד'
ממשו 15
4 3260181 מ0ס? 868מ21 אסשם6 ₪
4 מבש6בס 60 515163ם₪
( 6גו31
0צ.ח-3'ו56רחסיו]) ה366 56 רחס לא =
וו 3
5 61855 5%)- =
₪5 5!ץ560טו1ס5) 165ז560טווס5 /4.
2 זט 2 זסיי ₪0
זט 2 וידרו זסיוי 49
זס)פחה זד 51) הזזס]פחה זד ופא |
סא
אַ5ס ₪1086 3 מס1ח ג13ם11 בּתבּ'
"<" ₪ (ם![הסת.61) 120836 6 "/>" 6 סמשבם1 סגוס
מגו= המע
6 שבמ6501601ע בם6 01 ₪מ11 ב סגוקסגוס'
(קַמ1ע55 25 005)3 כגטם שסהטבעק
בו
תרשים 2.12: החלון חש8\ המראה את שם הקריאה לפונקציה
לחיצה על רמת רקורסיה אחת נוספת מעלה, תראה כי 6ו68ססח.!6 הוא עְ0ס8,
והרמה הבאה תראה ש-6ח068סח.!6 הוא ו|אזה, כפי שהיינו מצפים. כך שאנו
נמצאיס בבן של טום, שהוא בן של ץ800, שבתורו הוא בן של וואדח.
תן לאצבעות ללכת...
התוכנית ממשיכה באופן וה; לקיחת כל תגית וכל בניה, ברקורסיה לתוך עצמה עד
שכל העצ נסרק, נקרא ונוצר מחדש כמסמך הפלט שלנו.
איו כל פלט למשתמש לאורך הדרך (מושאר כתרגיל לקורא), כך שאתה חייב להתאזר
בסבלנות עד שהתוכנית מדווחת שהיא סיימה את ההמרה. זה יכול לקחת עד מספר
דקות, תלוי בגודל קוב הקלט.
כאשר התוכנית תסיים, אתה יכול לבחון את קוב ה- ואזחא המתקבל.
תדפיס 2.8 מדגיש את 12 השורות הראשונות.
6 וא למפתחי אתרים באינטרנט
תדפיס 2.8 קובץ ה-וואדא
<|והז[>
<680>
006>
"00\5-1252חו/ש=8796%ח6 ;|ההסח/+66"= +60 הס >
<] "06 1-%ח%6ח0"=שווס6-קחח =-
<] "0010זק"=6רחח "הסה ט6סכ. 0זס"= 60 6%8וח> 4
<] "ז68)0חה6=")6רחהח "9 סזס/ 6050ו]"= חח 60 הסרה > 5
<] "סח 0"= 6רחהח "9 סזס/ 6050%ו]"=%ח 60 668וח> 4
<] "50 |-6!ן="=!6ז "[רחא.65/016150!₪. 802ה0/."=+6זח אחון> :7
1
9
2 ל
50/6>
<₪0680/>
<"חן5. :|זססחו-50/!6="%50 "5)-ם"=8ח8! ץ00ם> :10
<"0|355="5660001 /|0> :111
<"0]855="1 ]> לו
המבנה של התגיות מיוצג גרפית על ידי הוחה. התגית הראשונה (השורש) היא <|חשח>,
התגיות <0680> ו-ץ900> מוזחות רמה אחת פנימה. תחת 00> מופיע <>
ותחת <שו0> ישנו <ס>, בדיוק כפי שראינו במעקב אחר הקוד.
שיס לב, שכעת כל התכונות מופיעות במרכאות כפולות, וכל התגיות מקוננות כהלכה.
אתה יכול לראות תגיות בודדות, הסוגרות את עצמן בשורות 2 ו- 8.
הצעדים הבאים
עד כה, שמרנו קוב סזסצ כקובצ ואזה. תוכנת סזס/ ייצאה את הקוב כ- ואד
שאינו בנוי היטב. כדי להפוך את הקובצ לקובצ |אדחא בנוי היטב היה עלינו להעבירו
דרך תוכנית אשר תמיר את הקוד לקוד וו דחא בנוי היטב. כלומר, תדאג לכך, שהקוד
עומד בדרישות הקשיחות של |ואא. את המעבר עשינו בעזרת תוכנית אשר יצרנו ב-8/,
אשר רצה על התגיות עצמן, ובעזרת ה-אספ של וואדה, יצרנו מחדש קובצ |ואדח אשר
עומד בדרישות של ]ואא. במיליס אחרות - יצרנו קובצ |ואדוא.
הצעד הבא יהיה להפוך את קובצ ה- ואדחא לקוב |ואא.
פרק 2: מעבר מ- ואדה ל-ואזהא - 67
פרק 3
פזפ, מתן חוקיות למסמך
בפרק זה:
מ- \א דהוא ל- \ול
הבח חוטיו
מסרוו1 המעבר
יצירת ה-סדס
הצעדים הבאזים
תוצאת העבודה של פרק 2 היא שעתה יש לנו מסמך וואזא. למעשה, יש לנו שלושה
קבצים. הקוב הראשון הוא קוב 6זס\ המקורי. השני, הוא קובצ |חשח שיצר סזסצ
כששמרנו את המסמך כדף אינטרנט. הקובצ השלישי הוא קוב ה- אדא שיצרנו בפרק
הקודס. כעת נותר לנו להפוך את תוכן קוב !ו דא לתצורת ה-5007886 |688חסח68 שלנו.
את המעבר נעשה לאורך הפרקיס הבאים עד פרק 5.
מ- !ודוא ל- !וא
ודאי שאלת כבר בסוף פרק קודם, מדוע עלינו להמיר את מסמך ה- |ואדחא ל- וואא,
הרי, כפי שהוסבר קודם, מסמך זה הוא גם ₪191 חוקי וגם וא חוקי. כלומר, הוא
עומד בשני המפרטים. ככוה, הוא כבר מסמך 1אא. למה, אס כן, עלינו להמיר אותו
ל- |א! למה לא לשמור אותו ולאחסן אותו כמו שהואז
כפי שהוא, המסמך מכיל בעיקרו תגיות תצוגה של |אז. זה מתאים למסמך וואזה, ואס
התכוונו להשתמש במסמך זה באינטרנט בלבד, היה בסדר גמור לאחסן אותו כפי שהוא.
אבל, מטרתנו היא להשיג גמישות גדולה בהרבה. ייתכן ונרצה לפרסס מסמך וה
בתצורות שונות, בפלטיס שוניס או במדיות אחרות. אחסון המסמך ב- וואז הופך את
המשימה לקשה יותר, אחסונו ב-|אא הופך אותה לקלה יותר. ייתכן ונרצה לבחור אלו
מו הקטעיס להציג וכיצד לעשות ואת, בהתבסס על מידע דינמי (כגון פרופיל המנוס.
פרק 3: סדס, מתן חוקיות למסמך | 69
שוב, ]אא יאפשר ואת בקלות. הדרישה לכך שנהיה מסוגליס לפרסס את המסמך לא
רק ברשת האינטרנט, אלא גס בהדפסה, דואר אלקטרוני, ובהתקנים אחריסם כגון
מנהלי מידע אישיים (א1ק, זְסְהַהַח3] הסטהתזס)ה1 |8חס5זסק, מחשבי כף-יד כגון
סו וח|הק, 6קז6א06ק או 8ו68551006) וכן הלאה, מהווה אתגר ל- |ואדח, אך קלה ביותר
עס יכולותיה של |1א. שכן, לאחר הפיכת המסמך למסמך |וואא, נחזיק בידינו תגיות
ייחודיות בעלות משמעות תכנית, אשר תכלנה את המידע הנדרש, ללא כל קשר לאופן
הצגתו. לאחר מכן, כשנרצה להציגו במדיות שונות, נוכל להעביר את מסמך ה-|א
דרך מפרשים (81565ק) מתאימים, אשר ייצרו את הפלטים על פי דרישותינו. לשס
הבהרה: הדפדפן - הוא ז09156 בפני עצמו. כאשר אנו מעביריס מסמכי וואדחא דרכו,
הוא מפענח את הקוד ומציג אותו למשתמש באופן ויזואלי. הוא משמש כמפענח
למטרות הצגת הנתונים ב-/ש/צ/ו.
מסמך ה- !אדא מכיל תגיות אשר מייצגות סגנונות הצגה ויזואלית. אנחנו מעונייניס
במסמך |1אא, המורכב מתגיות בעלות משמעות תכנית, לכן, עלינו לבטל את הסימון
הייחודי לתצוגה מהפרטיס הסמנטיים והמבנייס. אנו נשמור רק את התוכן ואת נתוני
העל המתארים את התוכן ואת מבנהו.
הפיכת המבנה למפורש
מניע אחד חשוב להפיכת מסמך |אדהא שלנו ל-וחזס? |88סהסה63 | הוא שמסמך
ה-|אדא< (כמו מסמכי 6זס/ ו- וואדת, שהס אבותיו הקודמיםס) אינו מספק מידע
מפורש טסו|קאם) אודות מבנה המסמך. כלומר, מסמך !אחא אינו מראה כותרות
ברמה-6 הסוגרות על כותרות ברמה-פ, הן פשוט ברצף, אחת אחרי השנייה. העובדה
שכותרות ברמה-פ מוכלות בכותרות ברמה-6 היא מרומזת (ו16מוח1) - וח מובן על ידי
העורך, אך וה לא מפורש במבנה המסמך. בכל אופן, מבנה מרומז וה הוא מהותי
למשמעות המסמך, ואנו רוצים להפוך אותו למפורש במסמך ה-ח חס |688חסח63 שלנו.
אנו כופיס מבנה ה על המסמך המודפס, על ידי עמידה במוסכמות של עריכת הדפוס.
העורך יודע, על פי הסכס הדדי, שקטעים מסומנים בכותרות ברמה-6, וקטעי משנה
בכותרות ברמה-ק. עם ידע זה, מסוגל העורך ליצור טבלה של תוכן הענייניס המשקפת
את המבנה הפנימי. היא אינה מפורשת ב- וואדחא, היא מרומזת; נבנית על ידי אדם
היודע את החוקים.
היינו רוציס לקדד חוקיס אלו במסמך ה- וויא שלנו, ולהפוך את המבנה למפורש. הדבר
יאפשר לנו להפוך את התהליכים לאוטומטיים, כשכרגע הם דורשיס התערבות
אנושית.
הבה נהיה ברורים: ה-חזס? |688ח0ח63 היא |688ח0ח68 רק לנו. מסמך ה- ואזחא הוא
כבר ]אא חוקי. אין שוס דבר קסוס או מיוחד ב-זס? |68הסח698 ; הצורה הזאת
ייחודית ליישוס זה בלבד. ליישומיס אחרים יהיו וחזסז |00688ח68 אחריס משלהסם.
10 ]אא למפתחי אתרים באינטרנט
אנו נלכוד את הדקדוק של ה-חזס? |683ח0ח68 שלנו בהגדרת טיפוס המסמך, פזס
(חסטוחו6כ 6קץד +הסוהט6סס).
דקדוק (זסוחזוח8ז6) - התחביר והמבנה של מסמך.
הגדרת טיפוס מסמך, חסשוהו/6ע 6קעץד +הסוחטסספ (פדפ) - מסמך המגדיר את
הדקדוק החוקי של מסמך |ויא.
על ידי בחינת והבנת ה-פזס הזה, אתה תראה שיצירת סדם משלך לתצורת |0068ח68
6 (אחסון) משלך היא מטלה קלה למדי.
הבטחת חוקיותם של מסמכי ווזא
יש מספר דרכיס בהן סדפ (חסטוחו61כ 6קץד %חסוחטססס) מגדיר את מבנה מסמך וא,
ולכן מגדיר גס את הדקדוק של ה-חזס) |688ח0ח68 שלנו. למשל, ה-סדס מגדיר את
שמות התגיות בהן נעשה שימוש במסמך. אם שם תגית אינו מופיע ב-סדפ, אז אסור לו
להופיע במסמך |ואא שלנו. אס תגית לא ידועה כזו אכן מופיעה, אז אנו אומריס
שמסמך ]אא ''אינו חוק*יי. כלומר, הוא הפר את האילוציס המוכתבים על ידי ה-סדס
שלו.
ייתכן שהתבלבלת בין שני המושגים ייחוקייי ו-יבנוי היטביי. ההבדל בין שניהס הוא
מהותי, וחשוב להבנה עוד בשלביס המוקדמיס של עבודתך:
מסמך !אא חוקי - הוא מסמך אשר עומד בדרישות והאילוציס המוכתביס על ידי
ה-סדס שלו. כמובן, שאס במסמך תגיות או ערכיס אשר אינס רשומיס ב-סדפ שלו,
מסמך זה אינו חוקי.
מסמך !וזא בנוי היטב (60חזס=-|6/) - מסמך וא בנוי היטב אס הוא עומד במפרט
1. בין דרישות אלו נמצא שאסור שתגיות מקוננות יחפפו, שמות תגיות חייביס
להיות תלויי רישיות, כל התגיות חייבות להיסגר, והתכונות חייבות להיות תחת
מרכאות. מסמך יכול להיות בנוי היטב אפילו אס אינו חוקי.
עדכון ה-פדס
ה-פדס מגדיר אילו תגיות יכולות להופיע במסמך ה-וואא. אם אנו רוציס להוסיף תגית
חדשה, אנו חייבים לעדכן את ה-סדס שלנו. וה יהפוך את התגית החדשה לחוקית,
והוספתה למסמך תשאיר אותו חוקי.
ה-פדס מגדיר גס את היחסיס המבנייס בין התגיות - כלומר, אילו תגיות מכילות
תגיות אחרות, וכן אלו תגיות הן הכרחיות או אופציונליות. ניתן אף להגדיר את הסדר
בו תגיות יופיעו. ה-פדס מתאר גס את התכונות ההכרחיות או האפשריות לכל רכיב.
שוב, אס אילוציס אלו מופריס, אז המסמך כבר לא יהיה חוקי (אפילו שהוא עשוי
להיות בנוי חיטב!)
פרק 3: סדס, מתן חוקיות למסמך 71
מסמך אינו דורש סדס מפורש, אך אס מסופק כזה, מנתח התחביר (ז6פז8ק) יהיה
מסוגל לדווח לא רק האם ה-וואא בנוי חיטב (כלומר, הוא עומד בסטנדרט 1אא), אלא
גם האס המסמך חוקי, כלומר, האס הוא עומד בדרישות של ה-סדס.
₪ ישנם מספר מנתחי תחביר (פזספזגּק) הזמינים באינטרנט ומ-36/. מנתח
| התחביר בו נשתמש בספר זה הוא |אאפוא. |אאפוא הוא מנתח תחביר ואא
ו של 06פסזסוו₪, והוא כלול כאובייקט 606% עם 155 בשם |ווס. |אאפוא. אם
תתקין את 155, תמצא את !אפ בתיקיה 506032ץ5דאחוש (במערכת
0 פשוס0חו/\).
מנתח תחביר המסוגל לוודא חוקיות של מסמך מול ה-סדפ שלו נקרא מנתח תחביר
מוודא חוקיות (ז56זהק הַח080ו!8/). מנתח תחביר המתעלם מה-פזפ נקרא מנתת
תחביר שאינו מוודא חוקיות (ז56ז3ק 0ח030וו8/-חסא). ]5 (ולכן גס 155) הוא מנתת
תחביר המוודא חוקיות.
מנתח תחביר מוודא חוקיות
מנתחי תחביר המוודאיס חוקיות מורכביס הרבה יותר מאשר אלה שאינס מוודאיס
חוקיות, אך הס מספקיסם כלים נוספים לשימוש בעת יצירת המסמכים. מנתח תחביר
המוודא חוקיות יעיר על שגיאה אס הוא נתקל בהפרה כלשהי במסמך אשר נוגדת את
האילוציס של ה-פדס.
%זוהי תכונה רצויה במנתח תתביר, מפני שהיא הופכת את מתן החוקיות, איתור
השגיאות ותיקון המסמך למהיריס וקלים יותר. והו אותו הטיעון לטובת השימוש
בשפות עס הגדרות קשיחות (פסחְאטִ8ַח8] 60סץד עְופַח500), כדוגמת ++6, או הפעלת
האפשרות זוסו|קאם חסטק0 ב-88516 |הטפו/, או שימוש ב-ש60לח1 |08ח₪61076 60זה|6סס
ב-501. המשותף לכל אלו הוא הגיוס של התוכנה לעזרת ההגנה על שלמות קוד
המקור; כל אלו עוזריס לך להימנע משגיאות עוד לפני שאתה שולח את המוצר ללקות
שלך.
| ראוי לציין שאפילו אם אינך מספק פזס מפורש, בהחלט יש בידך אחד
ל מרומז, המאוחסן אולי רק במוחך. ככלות הכל, אתה יודע באלו תגיות
2 תשתמש ומה משמעותן; פדפ פשוט כותב את החוקים האלו כך שהדפדפן
יוכל לתת משנה תוקף למסמך שלך על סמך האילוצים שלך. הדפדפן בודק
אותך, שלא טעית באילוצים שקבעת בעצמך.
סזפ יכול להיות בעל ערך גס כאשר יותר מאדס אחד (או קבוצה) עובדיס על סט של
מסמכים או כלים. ה-פזס אומר לכל קבוצה אלו תגיות הן חוקיות וכיצד הן צריכות
להיות מקוננות. אתה יכול לראות כיצד זה יהיה בעל ערך עליון לשמירת האחידות
בעבודת צוות. אס תגית חדשה תתווסף, הוא תושס תחילה ב-סדפ, כך שכולם ידעו את
התחביר שלה ואת משמעותה.
2 ]אא למפתחי אתרים באינטרנט
פזס יכול לשמש גסם ככלי עיצוב טוב. על ידי בניית ה-סדס לפני התחלת הקידוד, ניתן
לעצב את מבנה מסמך ה- |1א, במקוס לאפשר לו להתהוות בצורה אקראית עס התכנות.
רמת בניית ה-סדפ לפני כתיבת קוד כלשהו היא גם עניין של סגנון אישי וגם פונקציה
של גודל הפרויקט. בפרויקט גדול, בייחוד כזה המערב מפתחים רבים, ספדס מפורש
הוא בעל חשיבות עליונה.
כפי שהחדירו לנו בקורסי המבוא לתכנות: התכנון מראש הוא אחד השלביס החשובים
ביותר בתכנות אפליקציה.
על אותו משקל: בניית פדפס נכון ומפורט ככל שניתן, היא צעד חשוב בתכנון מראש של
אפליקציית |וא.
מטרות המעבר
ה-פדס מגדיר מסמך ה66 זסוופום חוקי. כדי ליצור סזס אנו חייביס לדעת אלו תגיות אנו
רוציס לאפשר ומה צריך להיות המבנה הכולל של המסמך. ה-סדפ מציין חוקיס אלו.
זוהי נקודה מרכזית. באופן דומה, זו תהיה שגיאה לחשוב שחוקת ארהייב יצרה את
החופש שלנו. ההיפך הוא הנכון - כותבי החוקה, ראו את מטרתם כחופש. על פי כך הס
כתבו את החוקה בהתאם למטרותיהם.
במקביל, עד שלא נדע אילו חוקיס ברצוננו לאכוף, יכולתנו לכתוב פדסם אינה מספקת.
ברגע שאנו יודעים מה אנו רוציס להשיג, הקושי היחידי בכתיבת סזס הוא רק
בהקפדה על תתחביר נכון.
האילוצים שברצוננו לאכוף
בבחינת מסמך ה- |אדא, אנו מוצאיס שהוא יותר מדי ממוקד בסוגיות של תצוגה
והצגה. אנו רוציס להבטיח ש-חזס? |68חסח68 שלנו היא מידע ומבנה ממוקדים. אנו
נבצע שישה סוגיס של שינויים כדי לעבור מ- | דחא ל- |ואא ה-חזסן [הו6הסח68 שלנו:
1 הסרת כל ה-|אז₪ שאיננו צריכים, כמו התגיות <68וח> ו-<5%/6>, או קוד
ואדה כזה שאינו מיושס, כמו התגית <|חשח>.
2 סימון כל שורות הקוד כך שנוכל לנהל אותן בנפרד.
3 אחסון רווחים וטאבים ביתר יעילות.
4 סימון כל ה-'מונח טכנייי, ייכיצד מבטאיס זאתנזיי, הערות וסרגלי צד (5ז510608)
אחריס כך שנוכל לנהל אותם בנפרד.
5 שבירת קטעים, ובניית ההיררכיה המקוננת, תוך זיהוי כל קטע באופן ייחודי.
6. מעבר על כל חלקי ה- |ואז4 בעלי המשמעות.
הבה נבחן מטרות אלו ביתר פירוט.
פרק 3: סדס, מתן חוקיות למסמך | 73
הסרת וד שאיננו צריכים
ישנן תגיות !אד רבות שפשוט איננו צריכיס במסמך ה-|אזא. הבה נסתכל ב- 29
השורות הראשונות של קוב> ה- |וודוא, בתדפיס 3.1.
תדפיס 3.1
<|וחזו[]>
<0680>
006>
"5-1252א 0חו/ש=8756%ח6 ;|החסח/+06"= +60 בס >
"6סץ1-%ח6להס"= ווס60-סה=-
<] "0010סזק"=6חח "להסוה סכ זס//"= חח 60 668 >
<] "ז67800ח6=")20רחהח "9 סזס/ 050%סו]"=ח 606 668וח>
"זססהחו0וזכ6="0רחח "9 סזס/ 6050ו]"= חח 60 ב%סרח>
<] "50 |-6!ן="=!6ז "[רחא.65/016115%!₪ 803ח0/."=+6זח >חון|>
50/6>
<680/>
<"חופ. :|הזסלחו-0ה"=50/!6 "05-ם"=פחה! צְ0ססם>
<"0!355="5660001 /|0>
<"/0|355="7 ]>
3
<ס/>
<"6855="8 ]>
00% )0 זססזוק(ם)
<ס/>
<"]-"=0|855 ק[>
!קרח |['6ו אוסח הסטסזחש פהואחורש הו זסה+ו עחהּ סף סע 061076 !ססר הפוסה
% ה !סח 66 הסח רח6!קרחו 06 8% אסס| 8 866 ס% 660ח 6 666 ץסוסוחם -
חואזסצו 68 ספ =-
<ס/>
<"]-"=0|855 ק[>
5 חוה רה זט סז +0 6 6חס זסטרטח ער ,0650 סחהב 5ו5ץ!החה חז סעסווסם 1 סווחע
<ס/>
<"]-"=6|855 ]>
<"|הוחזסח :00%ו6או-+ח0+-101פ-50רת"=50/!6 >
<"|הזסח :50/16-%ח0?-ו0ו50-0רח"=50/6 >
006 8005;5ו | סח חחואזסעט זו ק666 סרה , שְבאוה וז הואוסאו 6הוהז6 50 26%)
>
4 ]אא למפתחי אתרים באינטרנט
ל
:ו
אנו רואיס שישנן מספר תגיות שהן ייחודיות ל- |ואזח. למשל, אנו יכוליס להיפטר מן
התגית <68וח> בשורות 5,4,3 ו- 6 שכן הן חסרות משמעות במסמך ה- !אא שלנו, ואינן
מספקות מידע אודות תוכן המסמך.
כדי להיות ברור יותר: התגית <608וח> נדרשת במסמך |אז, אך אינה נדרשת במסמך
ה- !אא שלנו וכמובן שלא תופיע ב-פדס שלנו. לכן, חייביס להורידה. באופן דומה,
נזרוק את התגית <680ח>, שכן היא חסרת משמעות במסמך ה- ואא שלנו.
אם וכאשר נפרסס מסמך זה על גבי רשת האינטרנט, אנו ניצור מסמך ואד חדש,
ותגית <0680> חדשה. שוס נתון מתוך הנתוניס הנמצאים כרגע בתגיות <₪61%8> או
<680ח> של המסמך לא יידרש, כך שאין כל פסול בהחלטה שלא לאחסן אותן.
עוד בנושא זה, אנו נהפוך את התגיות <ק> לתגיות <שו0>. אני אציין את התגיות
האחרות שאנו לא צריכים ככל שנתקדם, אך הפילוסופיה היא להתמקד בתוכן
ובמבנה, ולהתעלס ממידע אודות מאפייני תצוגת ]זז ייחודייס.
סימון שורות קוד
השינוי השני שאנו רוציסם להשיג הוא ביצירת בלוקי קוד ובלוקיס של הערות. אס
תבחן את הגירסה המודפסת של ספר זה, כמוצג בתרשים 3.1, תראה שהעין האנושית
יוצרת באופן טבעי בלוקי קוד או בלוקי הערות בהתבסס על גופנים, הצללה, רוות
ומוסכמות הדפסה אחרות. כרגע אין שוס דבר מהותי במסמך ה-ואדחא שלנו כדי
ליצור את הבלוקיס האלו. ה- |אזחא פשוט מספק את הסגנונות והרמצים למוייל, אך
המבנה הוא לחלוטין מרומז. אנו נרצה להפוך אותו למפורש. כדי לעשות זאת, אנו
נצרף בלוקיס עוקביס של קוד בין תגיות בעלות משמעות דומה. נעשה את אותו הדבר
עס הערות, "מונח טכני", ושאר הבלוקיס המייצגיס הינתקות מהזרימה הנורמלית של
הספר.
אס נבחן את ה- |אדחא, נמצא שהקוד מסומן על ידי מוהה תדפיס, ושכל שורת קוד
נקבעת לסגנון 62, פרט לשורה האחרונה הנקבעת ל-א6. שורות בודדות של קוד
נקבעות לסגנון 61. ראה לדוגמה תדפיס 3.2.
תדפיס 3.2
5 ()60808 [60 הסטסתטת :1
0% פס סכ 5 5ז חחוסם 2
0 אסא = 8 56% 3
(";=ס/ק ;10=58 ,"פסטק=ח05" ,"5זסתפו|טטוק וחסיז * 56666")ח6ק5.0ז וו3 - :4
5 = 6008%8 ]0260 56% 5
חסטסחט= 0חם :6
פרק 3: סדס, מתן חוקיות למסמך | 75
כאשר סזס\ הופך זאת ל- |ואז, סימני סגנונות אלו נשמריס כמוצג בתדפיס 3.3
תדפיס 3.3
<₪6607050>/0 5 ()0ז603ח [260) הססס6חט= :6255=62<1 ק>
5 5ז החום<ח508/> | <"65? :חט50/6="50-508607 ח8ק5> :6|255=62<2 >
<ס/>₪660705%. 8סססא
6 = 5 56<ח508/> | <"65/ :חט50/6="50-508607 ח8ק6255=62<3:>5 >
<ק/>₪6607056%
[|68<ח508/> | <"65ץ :חט50-508007וח"=50/6 ח8ק0|855=62<4:>5 ק[>
> ;58000 וק = 8005 , ;580006 ז ח8ווס טכ הס * 80056166 )חק 5.0
<ס/>(;8.0(0; =כ/ק ;10=58)< חה508/>. <"פסץ :הטז06ה50-50וח"=50/6
<"65ץץ :ח0ז50-508606רח"=50/!6 ח8ק6855=62<5:>5 >
<כ/>5 = 60868 ]060 5080<56%/> =-
<ס/>חסו6חט=] ₪0 :6855=6%<6 >
6 ]אא למפתחי אתרים באינטרנט
210:
210:
21:
212:
210,
2-1:
21551
21%
21:
211:
21001:
2100
2100:
21
210:
תרשים
100 0
4 חַחוז15
+1101קאם ה0ס%1ק0
+ 000087986 ה%10ק0
7700688780 0011857878ק 800 8%8צ1חק
00ָה5%1 38 %8ה%8ה78000 ,הָה5%"1 25 6חהחָפד 81/ע₪)
(ה800108 458 805ז0ה98
96180% 0858 36
"0600011570876)|" 0856
0 26 5 הגס
8 אסא 88 [01200 תס
%8. [01200 = 78 +56
- = %60%8ה8000ך
=" 083058₪=1ם 75%=הדס1/ו ם |8הז>"
"<₪001%6=1ק | !05 6=1א401ק6 0511" 8
+ 8 +|0סע 8 %5ה%6ה18000 = %5ה%6ה8000ד
5.0 %סא 116ח
180000%67%5 = %870%5ה8000ד
+ 8 "<חז>" 8 (9)קת0 8
780000%60%8 = %870%5ה8000ך
= ("10 סטק")5ז 8 "<םז>" 8 (9)חה0 8 (9)חה0 8
+ 8 "<סד/>" 8
7800070%87%5 = 0%5ה%8ה8000ך
"<םז>" 8 (9)תה0 8 (9)חה0 8
+ 8 "<סך/>" 8 ("פחאה סטם")פת 8
780000%00%5 = 0%8ה%8ה8000ך
"<םן>" 8 (9)"ה0 8 (9)חת0 8
+|ססט 8 "<םדך/>" 8 ("ץ+1ס")פת 8
180000%87%6 = %6ה8+ה8000ך
= "<חך/>" 8 (9)קה0 8
+ 8 +|ח0סט 8
6 טס 6
חפ
% שושחם
"<8016+/>" 8 %60%8ה78000 = %5ה0000%6הד
סטפ 0חם
()3650000 808ה115כטק פט50 8+8צ1חק
6-ו + )). 1150678סטק
סטפ סחם
()5%80% 8001885)) 500 8+86צ1חק
טק = 11+80א6 96%
סטפ סחם
1 בלוקים של קוד והערות
פרק 3: סדפ, מתן חוקיות למסמך
₪34 ₪ ₪ 2 ₪
פי
1:
66
7
17
100 0)
![סוח8ס 1 חסם , טוסץ סו ושפח 8 פוחז ]| .0006 6וחז חו ם/ 60סחההטסב זס זום 8 סווטם 15 סופחד
6וטזטז הו 5ח0סו8זסא0 08510 [08פו/ 6חז חו ₪ / זוססה |ו0018 זס וום 8 סוט ססוטסזס |
חס ח03 0618115 6ח1;חַחוסם פז'סעש +החצו זס סוחס סח שוסווסז ,אוסח זס= .פזסוקהּחס
סז
8 ,086 118 ח1 .631160 15 106[ז6גח 10500 16 506 18 נהת1166א6צ1 סט ת6רר
6 86סטמ1 6אי 0תג ,41 116 תס 3226915 6066 1118 .40506 675ת15]סט
6 סל 816 1816כות6ז 16 שסנצאי 0 1/13 6118 15ה'7 .42 6בג[ מס 6200גת 61266 6טג/קר
ג[ 700055 [[63 מב עספשוסעע
זט 6 ל .6006 חזנא 1816כת6ז 16[ תו 4₪8ם 16 0ס 65006 6או 145 06085 מך
0 מ[ .ג 16[ 01 1306 1 המגסי50 ,111/11 116 10 1166060 15 5זמ0ס86:0ג' 1 ססם1
858 3 סנ 690[1 6מג ,116 ץכ 6בו] +ת6110 1116 0+ 5063100 18 806[ומ6ס צטס ,65עסאר
סז הג ג 16 680 0ס ק)ותנטיסקקס חג פט שחוטוק ,681160 15 שג 1 פפססס התטס1
180ק ס קב
00600 160070500 4 16ג]60 6 ,10 6ת1[ תכ) .16011 5016 ת1 שג 1 8פסססת 6תומזהאס 1608
6 סע 0060 ג102562011290 1116 נמסי) 00[66 685ת1פטכ 6ת 2 00206 שק ,11 6מ1] מס
6 35518 תג 160000 161280 62011 118 [[04 6 ,12 6תו] תכ) .86וסיזסאס פנוסוטסזכ 66 תו
.0 116 מס 0764606 שאו 8114016 15 16| 60 200020866 שמט]טפס1
.זוסז טס | 47 6ח+ הו 65חו! שפח סח הסוז8זה6 וח 076816 10 0006 ₪ / 606 40060 |
6 סז |08ו1ח00! 5! 6000!856// 6ח+ וחסז1 1ה66 | ד 6ח1 ז8ח+ זוסווקא6 866 וווא פוחד
.67/ חסזז 1ה86 |ו/ודרן
148005 0+ 85518 או 1191 14 6תו] מס 6זסצ7 .,111"/1 סנס קמ1ס5 50917 מס 6/ר
6 6 . "<00186=1. 0511 8040188=1 1 051 1>הםסה0ם 75%=הדפ1א ם 81 ד>" שתניס5 6
16 במ0ז) 1602106 88ת1י50 6ש ₪ב01500191זת1 ,סע 6ב עס ,1111 תג 300
6% 8 50% תג 0/6 ., 7/-1171 01 שתו50 שתס[ 6תס 18 18ת6זת6-0שג 1 ,006 6צ'סעו משו/ר
ואס 0 יס 1 17/60/06 6ב 6פט ג ,3.24 6ע110 גו נשס[5 35 ,17 6םו] תס ומוס
0 1 0 605 6
58 ,(₪1-62;)) א00ת1או 1601866תרח1 1116 שתותסכקס שכ 15ת66תסכ)קג'1" ת1 15 הו 566 032 טסץר
.3.5 6ע1ו10י1 ם1 תאיסם5
0 ₪00 סא נ[קטסעם: סנגט זאסם 16" .קסס1 2 מנט1אי 06₪060עכ 15 115 11181 ,תסטסשוסם ,ספסצד
-0 15 קסס] 116 שומ 06 127 .₪0 6 95 016ל 16[ קט ₪ת1161ט ,50165 138000215 6ב
סטג[ שש ,(1216) 16[ זס] 8₪ז שתופס!6 6ו[ 206 שא סוס ש) 116 [3ת₪ 16 )ור 6 תג 15060
22050 116ז 0ס )טכטס 101 ₪ת501 ,1111011 1606קנתסס 8 קגו ז[נטע
תרשים 3.1 בלוקים של קוד והערות (המשך)
הסגנונות שבשימוש על ידי 6זס\ נשמריס בקובצ ה-91א₪41 כתכונות של התגית <ס>,
למשל, <6|855=62 ק>. 61855 זהו כינוי 655 50660 50/6 8חו685680) לסגנון, המוגדר
בראש דף האינטרנט בתוך תחוס ההגדרות של סגנונות, על ידי התגית המכולה
<56>. שוב, אנו רואיסם כאן מידע על תצוגה במקוס על מבנה, למרות שהמבנה
מרומצ טוסו|קחח1).
68 ]אא למפתחי אתרים באינטרנט
המעבר מ- |ואז ל- ואדחא נתן בידינו מסמך ₪ תואס ואא, כפי שראינו בפרק 2.
מעבר זה לא פסל אף תגית, הוא רק הבטיח שכולן חוקיות עבור ואא, כלומר, שאינן
חופפות, ושנעשה שימוש במרכאות כראוי. הסגנונות שנלכדו ב- ₪1 שרדו במעבר
ל- | דחא כמוצג בתדפיס 3.4
תדפיס 3.4 וודווא
58 ()60808 [61 הסטסחטת :1 :1167
<ס/> :+11
19: >] 6|]355="62"<
1170: 1:
<"65ץץ :ח50/!6="150-50800670 ח8ק5> 11
11
<ח508/> 14
5 פז וחוכ :1174
<ס/> :15
16+ >] 6|]355="62"<
1177:
<"65ץ : חט150-508067ח"=50/!6 חהק5> +11
:19
<ח508/> +11
שא = 5 56% :1181
<ס/> :1
14+ >] 6|]355="62"<
1184: 1
<"65ץ : חט150-508061ח"=50/!6 ח8ק5> 151
+11
<ח508/> :171
,05800 = ה80000;05 ,58000%6ז6ח5ו!טטכ וחסז * 80006;56!66)ח6ק 5.0 וו63 :1188
<"65ץ : ח150-5080610ח"=50/!6 ח8ק5> +11
+11
<ח508/> 1
(006ו80;=כ//ק ;58=כז :1192
<ס/> +14
1 >] 6!855="62"<
1195: 1:
<"65ץ :חטז150-50806ח"=50/!6 חהק5> +11
:17
<ח508/> :+11
1199: 56 061] 60808 = 5
<ס/> :120
12 >] 6|]355="6%"<
חסטס6חט= 0חם :6 :1202
פרק 3: סזס, מתן חוקיות למסמך | 79
איננו רואים כל שינוי בתגיות <ק>; הן עדייו שומרות על הסגנונות, ועדיין אין כל
מידע מפורש אודות המבנה, הקושר יחד את הקוד כבלוק של קוד.
למעשה, אנו רוציסם לבצע כאן מספר מעבריס שוניס. ראשית, איננו רוציס לשמור את
קודי הסגנונות; במקוס זאת אנו רוציס לסמן כל שורה כשורת קוד.
שנית, לא מעניינת אותנו ההבחנה בין השורה האחרונה ובין כל שורת קוד אחרת;
ככלות הכל, איננו יודעים כיצד נרצה להציג קוד זה, והשורה האחרונה עשויה להיות
מוצגת אחרת מכל שורה אחרת.
שלישית, אנו רוציס לסמן את כל בלוק הקוד, ובכך להפוך את מבנה התדפיס לקשיח.
לכשנסיים, קטע זה ייראה כמו הקוד בתדפיס 3.5.
תדפיס 3.5
<6חו|0006> <0006> | :945
8 ()60800ה [260) הסטסחט- :1 :946
<6חו|6006/> :27
<6חו/0006> :2
949: 1:
"4"= ח6! חט067ה52> :0
1
5 פז וחוכ :952
<6חו|6006/> 1
<6חו/0006> :1
955: 1
"4"= ח6]! חט067ה52> :+
:1
א = 5 56% :958
<6חו|6006/> 7
<6חו|6006> :0
961: 11:
"4"= ח6! חט528067> :2
:1
,"05 = 050" ,"5 זסח5ו!ט טק וחסז] * 56!66%")ח5.06ז 63 :964
"1"= ח6! חט067ה52> 1
1
(";=ס/ק ;10=58 :967
<6חו|6006/> 1
<6חו|6006> :1
970: 1
"4"= ח6! חט528067> :2:1
2
973: 56% 060] 60808 = 5
0 וא למפתחי אתרים באינטרנט
<6חו|6006/> 211
<6חו/0006> :251
חסטסחט= 0חם :6 :976
<6חו|6006/> :1
1 >/6006<
2: >/6006<
כל תדפיס הקוד מוקף על ידי תגיות <6006>, וכל שורה מסומנת על ידי תגיות
<65ח|6006>.
ריווחים וטאבים
ללא ספק הבחנת שבתדפיס המקורי של הקוד, המוצג בתדפיס 3.2, שורות רבות
מוזחות. להלן שתי השורות הראשונות:
5 () ב608% 60 הסטסחט= :1
. פססכה 5 5ז חחוס :2
הזחה (ח0800ח106) מציבה אתגר בפני 6זסש כאשר הוא מתרגםס את המסמך ל-וואדו.
המוסכמה ב-1א₪31 היא לצמצם את כל הרווחיס לרווח בודד. 6זסו פותר סוגיה זו על
ידי יצירת <חף508> כמוצג במובאה וו מתוך תדפיס 3.3 :
<ח508/ > | <"65/ :חט50-508607וח"=50/6 ח8ק5> :0855=62<2 ק> :2156
6זסצ יוצר מרווח, עס התכונה 56, שערכה הוא 50וח (0066 67050ו) ו-:ח508660
5 כך ש-6זס) שס רווח בודד ואחריו סדרה של תווי רווח (;050ח8), ומסיים את
המרוות.
הצהרת המרווח שורדת את המעבר ל- | דוא. בעוד שגישה זו פועלת, 51 לא יציג ואת
כהלכה וזוהי תוספת שאינה נדרשת ב- |!אא. בסך הכל, ב- וויא אנו יכולים ליצור תגיות
משלנו, ולתת להן תכונות בעלות משמעות. אנו נקדד הוחה באופן כזה שתוכל לשרוד
מעבריס עתידיים אפשריים.
נתרגס מרווחיס אלו לתגית רווח משלנו, עס תכונה המפרטת כמה רווחים נלכדו:
<"4"=ח6]| חנ508667>
תגית זו תציין עבורנו רווח באורך 4 תוויס. וה נקי יותר ממרווח ה-ו|אז₪ של
%, ול- 51א לא תהיה כל בעיה עם זה, שכן הו אא סטנדרטי.
( כפי שצוין קודם, מכיוון שתגית זו היא תגית בודדת, במקום לכתוב:
הערה,
<חט508667/ > <"4"= ח6]! חט8067ק5>
אנו יכולים לדחוס את תגיות ההתחלה והסיום לתגית יחידה על ידי הכללת
הלוכסן העוקב:
"4"=ח6]! חט8067ק5>
פרק 3: סזס, מתן חוקיות למסמך | 81
סימון 06035ו5 והערות
פתרנו את הבעיה של צירוף הקוד למבנה בעל משמעות; אנו עומדיס בפני אותה בעיה
עס ייהערהיי, "מונח טכני", ייכיצד מבטאים זאתנ!יי ויתר ה-000815ו5.
- לשם פשטות נתייחס לכל ה-5ז0608ו5 האלו "הערה", למרות שאתה עשוי
הערה
ל לרצות כתרגיל להפריד אותן לתגיות משלהן.
הגישה שלנו לייהערהיי, יימונח טכנייי וכוי תהיה זהה לזו שנקטנו כלפי הקוד. איננו
צריכים לשמר את הסגנון, אבל אנו כן רוציס להפוך את המבנה, שהוא מרומז במסמך
ה-6זס/ וה- |ואדוא, למפורש במסמך ה- |אא שלנו.
[ הנה הצעדים ל-טססזפפח1 |8טפוש. כמוסבר בפרק הקודם, הפרטים המדויקים
הער עשויים להיראות אחרת על המחשב או הרשת שלך, או אם הינך משתמש
= בטכנולוגיות אינטרנט אחרות.
תדפיס 3.6 מראה כיצד תדפיס גה מופיע בקובצ ה- |ד3/<:
תדפיס 3.6
<"0ק"=0|855 ]> 1
***006)] חו60ש*** :192
<ס/> +14
<"0|855=")0 ]> 11
,68 פוסוע6זס 66 חו 60חוה!א6 25 .צסכוסח1 |הטפו/ זס) 56005 6 סזבּ סזפו. :195
,סח זס זססטקרחסס זטסץ חס 010760 6 עו 0668185 60866 6ר%=-
ץ000 60 חַחו 63 6%חססח1 %ה01676 פחופ סזהּ וסץ ) זס-
<ס/> 11
<"0ק"=0|855 ק> 11
***006 0חם*** :198
<ס/> :1
תדפיס 3.7 מראה כיצד זה ייראה בקובצ ה-!א הסופי:
תדפיס 3.7
<6חו|066סח> <066> :151
6 5סו/6זכן 66 חו 60חוב!קא6 45 .שסכסזח1 |08פו/ זסו 56005 6חז סזהּ סזסר | :156
,סח זס זסזטקוחס6 זטסץ חס %ה076ו0 06 עה 066815 60666 6ה%=-
!60 0חו|80ח6 +6הזססחו +ה6ז016 פהופטו סזהּ וסץ )₪ וס-
<6חו|%6סח/> :11
<0%סח/> 11
כל פיסקה בהערה מסומנת בתגית <6חוו6וסח>, וההערה כולה מוקפת על ידי תגיות <6סח>.
2 וא למפתחי אתרים באינטרנט
הפרדת קטעים
למסמך ה-6זס\, כפי שהוא מוגש על ידי המחבר, אין מבנה מתאר מפורש, למרות
שהוא מרומז. למשל, פרק 2 של ספר מחשב מסוים, עשוי להיות מוגש כמוצג בתדפיס
8 (גזרתי מספר שורות של טקסט כדי לקצר את התדפיס הזה):
תדפיס 3.8
2)
ופסכ סחה 515ץ!הח (ם)
חףו65 0ח3 515ץ|החה(6)
5 0)
068280 חס (0)
5 0(56)
5 הוהרחס0(0)
ח0ופ5סכ 0 ה6(0)
חק 660 60זסך 6סזח ד(0)
ו שו ל 0 0
בתוך המסמך הזה ישנו מבנה מרומז. על פי מוסכמה, העורך והמחבר מסכימיס
שכותרות ברמה-כ הס יימתחתיי ויימוכלות על ידייי כותרות ברמה-6. וה הופך למתאר
יותר מסורתי, כמוצג בתרשיס 3.2.
2 זְסְזְמְהַח?)
חו265 סחה 5ו5ץ|88ח
5 חח
ח0ו281ו|660108ח60
65 156
5 חהוהפוחסס
חו65כ סד חש
הסה ססו8ע6כ 60ז6וד 66זחד
תרשים 3.2 מתאר מסורתי
אנו רוציס שמסמך ה-1אא ישקף את מבנה ההכלה (חסוחו%8חס6). למעשה, בכל אופן,
אנו רואיס מבנה עמוק עוד יותר. הקינוו במתאר המסורתי משקף למעשה רעיון של
הכלה, כמוצג בתרשים 3.3.
פרק 3: סזס, מתן חוקיות למסמך | 83
6861 2
חסו95 סחה 8ופץוהח
5
00ו28ו|200000108)
חוהוחסם
5
החוכ סד חכ
60 וח
סו
תרשים 3.3 הכלה (חסוחחוגזחס6)
זה קרוב יותר לאופן בו אנו חושביס על המידע. !אא הוא די טוב בתפישת הרעיון הוה
של הכלה, למרות שהוא עושה את במה שנראה כעצ היררכי, כמוצג בתרשים 3.4.
2 ז%6ק8ח6
חו65 סחה פו5עוהח
ח0ו9כ סד חכ 5
חסו281ו|090%08ח0 6
8 חוהוחזסס
תרשים 3.4 הכלה המוצגת כהיררכיה
58 8
חר קסו8ש6 80ז8וד 86זחד
ישנו מיפוי איוומורפי בין הענניס בתרשיס 3.3 והעצ בתרשיס 3.4.
איזומורפי (6והקזסוח150) - אחד לאחד. פירושו של יחס איזומורפי הוא שלכל
אובייקט במקוס אחד, ישנו בדיוק אותו אובייקט תואס באחר.
]אא מאפשרת לנו ליצור את ההיררכיה בתרשיס 3.4 על ידי הגדרה מפורשת של
רכיביס חדשיס כבניס של רכיבים קיימיס אחרים. לכן, אנו יכולים ליצור את רכיב
הדרגה 6, ואז את רכיב הדרגה פ, ולהגדיר בפירוש את רכיב הדרגה כ להיות רכיב בן
של רכיב הדרגה 6. למעשה, אנו יכוליס לשלוט בסדר הבניס ולהפוך אותו למפורש, כך
שרכיבים ברמה- יהיו ביחסי אחיס מסודרים מפורשים אחד עס השני. ה יהפוך
לחשוב מאוד כאשר ניצור את טבלת תוכן הענייניס הניתנת להרחבה שלנו.
4 וא למפתחי אתרים באינטרנט
מעבר על ה- וואדו] הנותר
בסוף התהליך, לאחר שננקה את קובצ ה-ו|אדחא מכל הנייל, תיוותר לנו המטלה
האחרונה - העברת כל תגיות ה- ו|אזח בעלות המשמעות והטקסט שנותרו לקובצ
ה- וויא הסופי. אנו צריכיס להיות מפורשיס אודות אלו תגיות יש להעביר, שכן אנו
רוציס להבחין בין תגיות שאנו מזהיס ומתכווניס להעביר למסמך הסופי מצד אחד,
ובין תגיות שפשוט החמצנו או שאיננו מזהיס מצד שני. אנו חייבים ללכוד את התגיות
האחרונות שלא נצפו או אוהו, כך שנוכל להרחיב את ה-פדס שלנו ולכלול אותס.
יצירת ה-ספזם
עתה, כשאנו יודעיס מה אנו מנסיס להשיג, אנו יכוליס לראות את הדרך להגיע לשס :
.1
.2
יצירת םדם המכיל את האילוציס במסמכי ה- |אא שלנו.
הפיכת מסמך ה- ]| זא למסמך וא חוקי.
בהמשך פרק זה נטפל ביצירת ובחינת ה-סדפ. ובפרק הבא אנו נראה כיצד לשנות את
מסמך ה- וואדחא על ידי 51א.
תדפיס 3.9 מראה את ה-סדפ במלואו. הבה נבחן אותו שורה אחרי שורה.
תדפיס 3.9
<-- 65ח6וט006 5=כ/א זסז סדס --!>
--!>
הסוח ,6% 00 |החזסה 0665 08% "סזסהוח" 8 15 פוחד
חה 35 ו 0606 6 .סאר 5 חב !|506וח הובח60 ארח
5 ץחה וחסז ₪ 67076066 %0 660ח סע 06680056 עססחס
0 06 כ דכ 5וח 8% 30065 פוחחד .דכ 6 הו
ץ|החזס)אס
<--
<"זהח6 | הט 50360 | 0 | קפ | טפ | ט | | פ | בדהס6קא" אס % צדנדא=!>
<-- 56000705 6זסוח וס 6חס ]0 קט 806 6זבּ 800%5 .%הסוחסו6 +ססז סד --!>
<(+ח56600) אססט דאשואם |ם!>
.06 3 וצו חו060 סחה 5ססטטו3 0 30 |6ש6| 6/הח 5660005 --!>
<-- 56071005 06 הו%8ח60 שוח 5660005
<(*(6006 | סח | ו | חס5660) ,006) חס5660 דאשוים |ם!>
חסו566 157 ודד !>
50ז וס ב דה 6 |פעס!
<5010=0 2 ה דהס6 8
<-- ק טהר חַחוו/50 הוהזחסס עה הסוחצו ,אל %פון 6זה 65וך --|>
פרק 3: סד, מתן חוקיות למסמך
שר כ
שש =
= :0-ב לי יפ
= + + + 7-2 7-2 7-2 7% 2
כ ₪ שמת ו 0
00
ת-
66
<*(;%0660) ₪06 דאםואם ום!>
--!|>
5 ה ה חה60 000 חופו וס סזהּ 6חסוחסו6 צוס
ה6וחצא ,306 6855 8 5חו3ח60 ח86= .5חקבּזחהוהק סל
שפח 6ו/50 בזס/ |החופחזס 06 01 ץקס6 8 15
--<
<*(0א%6) שו דאש=וים |ם!>
צוס ד15 ודד !>
<150 ו ג 60 6355
--!|>
+ 005ו60]!660 טס 6זה 6%5סו 6006 סחה פטס
6 55 660 8 85 ה86ם .אל ץוחו זס-הסח
הזזה /6חו! ה686 זס? +ה6רח6!6 חב 0ח6006(8 ,סזסח)
(6חו/6006 ,6חווס)סח) 6%סום 606 חו ס6הוהזחסס
--<
<(+6חו|סזסח) סססח דא=1אם 1ם!>
<(+6חו|6006) 6006 דא=ום 1ם!>
<*(;%000) סחו|סססח דאש1אם 1ם!>
<*(;%0000) 6חו|6006 דאשוים [ם!>
<-- 6097800015 |506018 זס! 15 מז זהח6 סד --!>
<ץךקןאם זבה6 דאש=וים |ם!>
זהח6 ד15 ודד !>
<501₪50 3 ה זהכ6 סקס
<-- 508066 חש השועו 068 60 %5ח6רח6!6 החפוס |8ו5060 --!>
<ץךקום טפ% דאשוום |ם!>
<ץךקן= 50866 דא=ום |ם!>
חהט 506 ד15 ודד !>
<50ח01 3 ג דה60 חס!
,61665 סחוהזוס+ 6חווחו --!>
<-- 805 | ד זבו|ורח? 6רל וחס 067/60
<*(;0א )%00 דאםואם |ם!>
<*(0א%6%) 1 דאםואם |ם!>
<*(;0א%606) ו דאשוום |ם!>
<*(;א%006) 5 דאםואם |₪!>
<*(;%006%0) 5 דא=1ום [ם!>
]אא למפתחי אתרים באינטרנט
:22
:21
:22
251
:20
:27
201
20
7
:21
1
1
:41
:51
1
1
1
7
:210
2111
:212
:21
:12
1
21
:21
211
:21
תי
1
1
1
1
:לפ
1
:1
1
:5
7
1
השורות הראשונות הן הערות, ואתה תראה שה-דם משתמש בתחביר ה- וואדה הרגיל
של הערות :
<-- הערות כאן --!>.
כל הצהרה ב-שדפ מתחילה ב- !> ואחריו מלת מפתח אחת או יותר. ב-פדפ שלנו אנו
משתמשיס בהגדרות דאש = ₪ או שדוח דדה. ב- דאשואם = נשתמש כדי להצהיר על
כל הרכיבים ב-סדס , וב-5ד18חדדה נשתמש כדי להצהיר על התכונות של טיפוס רכיב
שנגדיר.
כדי להתחיל הבה נדלג מטה לשורה 12. נחזור לשורה 9 בעוד רגע.
שורה 12 מצהירה על 000% כעל רכיב. והו, למעשה, רכיב השורש ל-חזס? |0068ח68
שלנו. מסמכי !אא הס תמיד היררכיים. כל רכיב חייב להיות מוכל בתוך ההצהרה של
הרכיב ההורה שלו, ואסור שתגיות רכיביס תחפופנה. הרכיב העליון ביותר - במקרה
שלנו <00%ס>, משמש כשורש למסמך כולו. אס נחזור לתרשימנו הקודם, בתרשים 3.3,
הענן החיצוני ביותר הוא <00%פ>, כמוצג בתרשים 3.5.
חקו65 חה 5ו5ץו8ח
הח
חואוחזסם
5
חוכ סד חכ
060 68זחך
ו
תרשים 3.5 הענן החיצוני ביותר השתנה
במסמך ה- |וא שמשתמש ב-פדפ הזה, אנו נצפה למצוא הוראת פקצז06 שתתייחס
ל-סדם הזה וכן תציין את רכיב השורש: 00%פ. שורה 12 ממשיכה ומגדירה את התוכן של
רכיב <900%>. הוא יהיה מורכב מרכיב 560000 אחד או יותר - כל ספר מורכב מפרק
אחד או יותר. סימן הפלוס מציין 1 או יותר. לכן, אנו יודעיס שכדי שמסמך ח660 דסווסופ
יהיה חוקי הוא חייב להיות מורכב מרכיב 000% המכיל לפחות רכיב ח56600 אחד.
רכיב ח56600 עצמו מוגדר בשורה 16.
<(*(6006 | 66סח | עו | ח56600) ,006) ח56600 דאשוזם |ם!> | :16
פרק 3: סזס, מתן חוקיות למסמך | 87
שוב אנו רואיס הצהרת דאם₪5 (רכיב), הפעס ל-560000. כל ח56000, לפי שורה זו
ב-סדפ שלנו, יורכב מכותרת ומאפס או יותר רכיביס מטיפוס ח0סו5660 או צוס או סזסח
או 6006. הכוכבית (*) מציינת אפס או יותר. הקוויס האנכיים בין ח56600, שו, 6וסח
ו-6006 מראיס על היחס זס.
הפסיק בהצהרת הקטע מציין סדר. הרכיבים המופרדים בפסיקים חייבים
להופיע על פי סדר הופעתם בהגדרה. לכן, הכותרת חייבת להופיע קודם,
0 ואחריה אפס או יותר רכיבים מן הטיפוס המצוין.
הערה |
מכיון שאין חשיבות (+ או *) עבור 6ט, ה-סדס מסמן 1 בדיוק. שים לב שסימן
השאלהח (1) יכול גס כן להיות בשימוש בתחביר זה, כדי לסמן 0 או 1.
לכן, לכל רכיב ח0ו5660 (פרק/קטע) תהיה תמיד כותרת אחת, ויכולים להיות לו אפס או
יותר רכיביסם מבין הארבעה שהוזכרו לעיל. שיס לב גם כן לכך שאחד מארבעה רכיביס
אלה הוא מסוג 566000 גם כן, כך שאנו יודעים שרכיבי ח56600 יכולים להכיל רכיבי
566000 אחרים. (פרק בספר יכול להכיל תת-פרקיס או קטעיסם אחריסם).
שורה 17 מתחילה את רשימת התכונות לרכיב ה-ח0סו5660. התכונה הראשונה היא |6שסו,
והיא מטיפוס 8זב60. 4זב60 מייצג טקסט שאינו ניתן לניתוח תחבירי (סַחופזבּק) :
כלומר, מסמך ה- |ואא יקבל כל מחרוזת טקסט ולא יתייחס אל הטקסט כקוד וויא. זה
מאפשר לשיס תוויס שאחרת היו נחשבים אסורים, כמו > או <, המשמשים לייצוג
תגיות. לבסוף, התכונה |6%6! מסומנת כ-₪5001₪50+, המציין שכל 566000 חייב את
התכונה |6/6! כדי להיות חוקי.
50 0+ הוא מגביל תכונה (100/86 ס6סטפוזשה). מגבילי תכונה אחריס הס
סש |קא1+ ו-כ5א4-1. הראשון, 50 |קא41, מצייו שהתכונה היא לא הכרחית ושלא
מסופק לה ערך ברירת מחדל. השני, 850א1=א, מציין כי רק ערך מסויס יורשה לשימוש
בתכונה זו.
התכונה השנייה, 6ו, היא גס כן מטיפוס 4ַז602 וגם היא תכונה נדרשת (60ז6001).
יישויות פרמטרים (60%1₪65 וסְזסוהבּוְבּק)
בשורה 22 אנו מצהיריס על אלמנט הכותרת (06ו1). מסתבר שרכיב הכותרת מכיל אפס
או יותר מטיפוסי הרכיבים הבאים: 5 או ו או ט או 505 או קֶט5 או 90ז או חטז508606 או
זח6. הוא יכול גס להכיל תווי טקסט, אשר יכוליס להיות מנותחיס תחבירית. טקסט
זה מסומן ב-00414קא, המציין כ 60879600 560זק - טקסט אשר נדרש לניתות
תחבירי. ההצהרה ל-₪066 צריכה להיות :
<*("ז8ח6 | הט 50 | 90 | 5 | טשפ | ט | ו | פ | הדהס6קא) 6סט דאשוים |ם!>
8 א למפתחי אתרים באינטרנט
זה יציין שלכל רכיב ₪66 יש אפס או יותר רכיביס מתוך תשעת טיפוסי הרכיביס הללו.
מסתבר שישנס רכיביס אחרים שהם גס כן מטיפוסיס אלו. למעשה, אנו מחשיביס את
כל הטיפוסיםס האלו כטקסט, ולכן יהיה ה שימושי ליצור מאקרו מהיר או קיצור
למחרוזת ארוכה זו. כלומר, הרי רכיביס רביס במסמך שלנו ישתמשו בטיפוסים הנייל.
או במקוס שכל פעס נשתמש בהצהרה הארוכה הנייל, ניצור יימילת קיצוריי בה נשתמש
כשם כולל להגדרת טיפוס ארוכה כזו.
תחביר ה-סדס מאפשר ליצור מאקרוס שכאלו. שני סוגים של מאקרוס כאלו מאפשר
לנו תחביר ה-פדפ ליצור:
1. ייחוס ליישות (₪61660006 עו+חם) - החלפת טקסט לשימוש במסמך |א.
ניתן, למשל, ליצור יישות (שטחפ) להחלפת טקסט. אס אתה רוצה שהטקסט יוחלף
בקובצ ה- ]אא ממש עליך להשתמש בהצהרת יישות פשוטה כמו זו:
".106 ,2550618%65/ /שוסטו |" מ צדדא=!>
שורה זו תאפשר לי להשתמש בייחוס ליישות ;814 במסמך שלי. ובכל מקוס בו
נשתמש ב-;4 81 ה-ז6פזהק יחליף זאת ב- .106 ,550618065 /זזסטו!'י. ממש כמו השימוש
ב-89%, ההופך ישירות על ידי הדפדפן ל-<, או, ;80050 שהופך לתו הרוות.
2. יישות פרמטר (ץ410חם זסְזסוחִבּזבּק) -- החלפת טקסט לשימוש במסמך סדס.
במקרה שלנו, בכל אופן, אנו לא רוציס שההחלפה תתבצע במסמך ה-וויא, אנו רוציס שהיא
תתבצע ב-סדס עצמו. לשס כך אנו משתמשיס ביישות פרמטר (עץזוזח6 וסזסוחגּובּכ).
התחביר ליישות פרמטר הוא להצהיר על היישות עס סימן אחוז (%). לכן ההצהרה על
יישות פרמטר ב-סזפ תיראה כך:
<".106 ,550618065 /סזסטו |" ]| % צדדא=!>
כשנרצה לבצע את ההחלפה, פשוט נקליד ;%14 והטקסט ".106 ,4550618065 וסט |"
יוכנס לתוך ה-ספדס.
בשורה 9 אנו מצהיריסם על יישות פרמטר שכזו. שס היישות הוא אא6, ואס אנו כותביס
%א6ז% במקוס כלשהו ב-פזפ, המחרוזת הבאה:
!6 | הטז50866 | פפז | קט5 | טפ | ט | ו | טפ | בדהסססציי - תושתל במקוס.
שורה 22 משתמשת ביישות פרמטר זו, ונראית כך:
<*(0א%06) ₪6 דאשואם !> = :22
והיא שקולה לכתיבה הבאה:
קפ | טפ | ט | ו | פ | הדהכ6קא) 6סט דאסואם ₪!> | :22
<*(6087 | חט508067 | 90 | =-
פרק 3: סזס, מתן חוקיות למסמך | 89
בשורה 29 אנו מצהיריס על רכיב חדש, צו4, המוגדר גס כן להכיל אפס או יותר רכיביס
מסוג %א6ז (כלומר, אפס או יותר מהרכיבים | 90 | קָט5 | טשפ | ט | ו | טפ | בדמס6ק+
זו | אחטז50866). לרכיב שו יש גס תכונה נדרשת אחת, שהיא 6|855. 61855 עצמו מוגדר
להיות מטיפוס 4ד604.
בשורה 40 אנו מצהיריס על רכיב ההערה (ססא), והוא מורכב משורת הערה (רכיב
6חו|%ס%) אחת או יותר, אשר מוגדרות בשורה 41 להכיל אפס או יותר רכיבי 6%%.
באופן דומה, בשורה 40, הרכיב 6006 מוגדר להכיל רכיב 6חו|6006 אחד או יותר,
המוגדריס בשורה 42 לחיות מורכביס מאפס או יותר רכיבי ז16%.
הדבר מאוד פורמלי ותמציתי, אך עדיין דרך פירוט המובנת בקלות לגבי מה שאנו
יודעיסם על שורות קוד ושורות הערה. אס נתרגס את שורות 39 ו- 41 לעברית, נאמר
ש'יהערה מורכבת משורת טקסט אחת או יותר, כאשר טקסט הוא אפס או יותר תוויס
מנותחיס תחבירית (560ז8ק) ו/או התגיות עבור הדגשה, הטייה, קו תחתון, כתב עילי
או תחתי, טאבים, רווחים, או תוויס מיוחדים."
ההיבט היחידי שעשוי להיות מבלבל בהגדרה זו הוא הרכיב ז608 (תו). ווהי תגית
הנוצרת במיוחד עבור תוויס מיוחדים. היא מוגדרת בשורות 45-47.
הרכיב עצמו מוגדר בשורה 45 עס מלת המפתח ץדקואם. מלת המפתח ץדקןואם מציינת
שלרכיב אין כל תוכן. במקרה שלנו, וה בגלל שהערך בפועל של התו המיוחד יהיה
בתכונה של התגית.
התכונות עבור 608 מוגדרות בשורות 46 ו- 47. מכאן נלמד כי ל-ז609 תכונה הקרויה
6 שהיא מטיפוס 60418 והיא תכונה נדרשת (₪6001760).
לכן נצפה למצוא רכיב ז3ח6 שנראה כך:
<] "6="%018ק/ זהח6>
בשורה 50 אנו מצהיריס על הרכיב 90), ואנו מצייניס שהוא תמיד יהיה ריק.
לכן, הכתיבה הבאה היא חוקית :
80+>
או
<%80<>/)80>
אך הכתיבה הזו אינה חוקית:
<80<4>/%80+>
זכור, תמצית הרעיון של חוקיות מוגדר על ידי סדס וּה. כאשר אנו אומרים יימסמך וה
חוקייי אנו מתכווניס שהוא עומד באילוציס של ה-סדפ שלו.
בשורות 51-53 אנו מצהיריס על הרכיב חטז50866 (רווח), שהוא גם כן בעל התכונה חסו,
שהיא מטיפוס 60414 והיא תכונה נדרשת.
0 וא למפתחי אתרים באינטרנט
לבסוף, בשורות 57-61 אנו מצהירים על הרכיבים פ, 1, ט, 509 ו- סט5, ואנו מצהירים כי
כל אחד מכיל אפס או יותר רכיבים מהטיפוס 4ד604קא או פ או ו או ט או 55 או קְ50
או 95 או ח0ז50866 או זהּחס.
מה ה-פדפ אומר לנו
ה-סזסם הציג את המבנה של ה-חחזס) |68חהסח68 שלנו. לכל מסמך שהוא מסוג
קנוני תהיה תגית <000%> כשורש, אשר תכיל לפחות קטע (ח56600) אחד.
ח56600 יהיה מורכב מכותרת (006) ומאפס או יותר רכיבי ח56000, פסקאות (שום),
הערות (665סח) או בלוקי קוד (6006). חסוז566, מייצג בדרך כלל פרק בספר.
6 יהיה מורכב מאפס או יותר טיפוסי הטקסט השונים (הדהס6ק, פ, ו, ט, פט5, 500,
00ל, הט508667 או זהּחס).
פ, ו, ₪, 508 ו-קְט5 בעצמס יהיו מורכביס מאפס או יותר טיפוסי הטקסט השוניס.
שא גס כן יהיה מורכב מאפס או יותר טיפוסי הטקסט השונים הללו, אך יש לו תכונה,
5, שהיא תכונה נדרשת ומטיפוס אדהס6.
הערות (רכיבי ש6וסח) מורכבות משורת הערה אחת (פחווססא) או יותר, כאשר שורת
הערה בעצמה היא מטיפוס 6%ט. הרכיב 6006 מורכב מאפס או יותר שורות קוד
(6חו|6006), שהס עצמס גס מטיפוסי 6%ס.
יש לנו טיפוס תו מיוחד (זִח6), שהוא אחד מטיפוסי הטקסט, והוא תגית ריקה עס
תכונת 601 נדרשת.
טיפוסי הטקסט כוללים גם %99, שהוא רכיב ריק, ו-חטז50806, שגם הוא ריק, אך יש לו
תכונה נדרשת חש!.
הצעדים הבאים
כעת, לאחר שאיפיינו את המבנה הקנוני של קבצי ה- |ואא שלנו, אנו מוכניס להעביר
את מסמך ה-וו|אזחא שלנו למסמך !אא חוקי, שיעמוד בדרישות ה-סדפ שיצרנו וה
עתה.
נעשה זאת בשני שלביסם: תחילה על ידי שימוש ב-%51 ואחר כך על ידי שינוייס ישירים
במודל האובייקטיס של מסמך ה-|ואא, ה-0%פ של המסמך.
אנו מתחילים עס ה-51א בפרק 4.
פרק 3: סזפ, מתן חוקיות למסמ 91
פרק 4
שינוי עם .51
בפרק זה:
%* | םא בפירוסי
% הצעדים הבאזים
כשבידינו ה-סזפ, כל שנותר הוא לעבור ממסמך ה|אז34א הקיים שלנו למסמך יא
חוקי מתאים.
כאמור, אנו נבצע את השינוי בשני שלביס. בשלב הראשון נעבוד עס !5א, ובשני, עס
ה-ואספ של מסמך ה- וואא.
נוצרה כדי לענות על שתי מטרות: הצגת !א וטרנספורמצית !א. המטרה
הראשונה, הצגה ועיצוב של ]אא, מאוד דומה לתפקיד של 655 (5/6 0חו685080
5)] ב-ואזה. המטרה השנייה של 5% - טרנספורמציה - שונה לחלוטין.
טרנספורמציה על ידי 51א מאפשרת לנו לקחת קלט קובצ !אא וליצור ממנו פלט חדש
שהוא קובצ |אא שונה במידת מה.
מסתבר ש-155 תומך באפשרות הטרנספורמציה של |5א, אך אינו תומך בעיצוב.
בשבילנו זה מצוין, שכן ההתמקדות שלנו היא בשינוייס במסמך.
בתחילה, אנו נשתמש ביכולות הטרנספורמציה של ]5א% כדי לשנות את מסמך
ה- ]אדא שלנו ל-וחזס? |8ו0ח0ח68 שלנו. אחר כך, אנו עשוייס לרצות להשתמש שוב
ב-51א כדי לעבור מה-וזס? |0068ח63 שלנו לתצורת תצוגה, אולי אף חזרה ל- |ואז.
נראה שכיוס, למרבית המעצבים לאינטרנט, 51 משמשת בעיקר להפיכת אא ל- ודו
לשס תצוגה בדפדפן. בהמשך הספר נראה יישוס כזה.
פרק 4: שינוי עם !פא - 93
קלטים ופלטים
דפי 51 נכתבים ב- !!אא, למרות שעשוי להיות להס תחביר פנימי משלהס. העבודה עס
מושגת על ידי הזנת מעבד גיליונות הסגנונות (במקרה שלנו %1א5%!) בשלושת
מסמכי ה- !אא הבאיס :
1. מסמך ה- וא המקורי (במקרה שלנו, מסמך ה- ואד
2 גיליון סגנונות של 51א הבנוי היטב (זכור כי אהו מסמך )!00
3 | מסמך ]אא לפלט - אופציונלי
הצעד המרכזי הוא בקריאה לשיטה 0001606 0860067ז0ו5ח₪8 על ה-וספ של הקלט.
שיטה זו מקבלת שני פרמטרים: אספ עבור גיליון הסגנונות של ה-51א, ופלט של אספ
ה- !וא.
אנו נתחיל ביצירת רכיב קטן, הקרוי ף0)פח8זד51א, | שישמש כמעטפת
ל-000[66% 0061 07ו5ח8ז. זה יהיה התפקיד של חזס)פחגזד51א ליצור ולהכין את
שלושת קבצי ה-05סכ, כך שנוכל לציין את מסמך הקלט על ידי |חט, שם קוב>, או על
ידי העברת אובייקט או על ידי העברת מחרוצת ה- |ואא עצמה.
צעדינו יהיו כדלקמן:
1 יצירת מופע של חזזס)פח8זד |5א.
2 ציון שס הקובצ על ידי שימוש במאפיין 6|ו=זטסח1 של חחזס)פח8זד 51א והעברת שס
קוב הקלט. כתוצאה מכך, חזס)5ח%51119 יקרא קובצ זה וייצור את ה-אספ שלו.
3 ציון שס הקובצ על ידי שימוש במאפיין 6ו51א של חזס)פח8זדו5א והעברת שס
קוב ה-51א. כתוצאה מכך, חסו5ח8זד51א יקרא את קוב ה-51א וייצור את
ה-אספ שלו.
4.| קריאה לשיטה וזס)פח8זד על הסוחד |5א, אשר תיצור וספ ריק כפלט, ותקרא
ל-ז000[60 5+071%0067ח8ט על וספ הקלט, תוך העברת ה-אספ של |5א שיצרנו
זה עתה ו-0%ספ הפלט החדש כפרמטריס.
קריאה לשיטות (0065ח:16/!)
כדי להתחיל, אנו חוזריס לקוב סַ35.!|סשח0ס6 שהוזכר בפרק 2. הפעס נסתכל על מה
שקורה כאשר לוחצים על הכפתור ]זא סש ]ו דו]איי.
נזכיר כי מספר משתני מצב (3780!65/ 016ז5) נשמריס בתוך עוגיות (600665). הס
כולליס את מיקוס התיקיות של התוכניות והקבצים, כמו גם את ה-א5פ והסיסמה
לגישה למסד הנתוניס.
כאשר המשתמש לותח על כפתור, הדף נשלח אל עצמו, (זהו טופס ללא ערך חסטסה, לכן
נתוני הטופס נשלחים שוב לאותו עמוד. טכניקת 452 זו ידועה בשס ₪60 6אַָק)
והתסריט מסתעף בהתאם לכפתור המסויס שנלחצ, כפי שניתן לראות בתדפיס 4.1.
4 וא למפתחי אתרים באינטרנט
תדפיס 4.1
("0ח" )00/65 6856 56|605
" |וא דרא סש סזס/" 6856
() | 237 זס/ 6סוז ).650056
" |ויזא סץ וודו]א" 6856
()2111 וו דו]< 66וו//.0056ק₪65
21:
21:
2121
51
11
11
כפי שניתן לראות בתדפיס המודגש לעיל, במקרה זה, בו המשתמש לחצ על הכפתור
"וזא 0+ ואדחא" אנו נקרא לפונקציה () !2% וואדווא, המוצגת בתדפיס 4.2.
תדפיס 4.2
() וואא2 |וידוא הסססחט :120
הס 11 |68והסח68 זטס 60 ₪6 | דרא +6עחסס'
א ,100 ,=ווחא ,<2הס , ופאס חום
(" 50 ד 51א. ה86 507 סז" 0768+600(66. 50/6 = .051 506%
0 3 הוע |וחא 0ף הזחא +סעחס6
"|ההסחא." ,6 ה08%378% = ס6וו-סטסח1. ופאס
("|5א. 21 |[ דר]אוס/" ,זו 600)ח6הקסווטם.150 = 6וו= ופא. ופאס
הסוח ד. ואס
0וחא. 35 +טוכסטס 58/6'
"|החא." .8 ה09%378% = ח|וחא
"0" 8 ח|וחא = 100
0 6ון-015וכף0וכ58/60. |פאס
3 6 35 / 016007 5806 06 הו 15 000 6 זז 3556 סצצ'
"0 . חסחה6" = 000%
6 0 סו ה הסקרחסס 8/ 66 סס 0|וחא. 6חז שקוכ צוסח'
הווחה 6 ]0 =-
(" 2 | דרא סע ה86 507 סז 06 0768060 ז5076 = א<2חס 560
א , א-|חחא ,10 +ו6ח60.א2חס
6 רסחו 6 660 זס8חס! סח 6צו סחב'
0 6ון-0ז26!6. 150
|וחא ₪ " 60 ".8 "|והזחהא." ₪ ה03%3281 8 " 60לוסעח00" = |ואא2 ודא
1
11
[אלו
11
11
11
11
11
+
+17
1
11
11
11
11
11
11
11
1
1
1
11
141
11
151
11
17:
חסטסחט- 0ח= :148
פרק 4: שינוי עם 51א
55
בשורה 124, אנו יוצריס את האובייקט וחזסו5ח3זד%51 של התיקיה ח866ז50וחסזת,
ומשייכים אותו למשתנה 51א0.
הצעד הבא הוא ליצור את ה-ואסס עבור קוב הקלט. בשורה 127 אנו מציבים למאפיין
6ווזטסהזץוח באובייקט שלנו את המחרוזת המכילה את שס קוב הקלט כמוצג
בתדפיס 4.3.
תדפיס 4.3
(8חו50 35 6טו3/ששסח |ה3/ץ2)סווהסטסח1 :6 | /שוסקסזק
59 5 |החא ,רה )א ד 5 + 5001660 65ווח. 560 צוס] 85 150 וחוס
6 6+ )0 %5ה056ח60 16 686'
?7 הסן. כ וע פוה 00 6צו ס!טסחפ'
0
1
2
3
4:
יפ
6ט| סח = 6!וחסטקח1ערח 4
(6|וטקחז רת )6וו- א 150.06 = 1 56% 7
1.680 = |וחא 8
9: -| 6
:10
("6!= וחסי1 זגוקח1" ,56ו3= ,|ההא)ו 0 סח61פזהק = ססטסחשוח 56% 111
ץסקסזק 0חם :12
אנו מעביריס את שס הקובא כמחרוזת.
אם במקום זאת היה לנו ואט עבור שם הקובץ, היינו קוראים ל- |מטסטסח1.
מטרת הרכיב ףח ס)פחגּזד|5א היא רק להפוך את יצירת המופעים של
6 ה-5ז0 השונים, הנדרשים למעבר, קלה יותר.
הערה |
בשורה 7 אנו פותחיס את הקובץ עס השס שסופק כפרמטר, ובשורה 8 אנו קוראים את
התוכן של קוב וה לתוך מחרוזת שכינינו בשס |וחא. אחר כך אנו סוגריס את הקוב
ומעביריס את המחרוזת |וחא לשיטת העזר שלנו ססספח561זהק, המוצגת בתדפיס 4.4.
תדפיס 4.4
סכ וח 3 ססחו 5066 +וקחו חהּ 680 סף הסטסחג זסאזסצו' :0
50 ]וא חב 15 083 656 ; |( 8 )0 060 6 5! 0868 חסר ,סטש 15 ₪1 ופ זו" :
(8חו5 5 576 ,ה00!68 5 ןופ ,0חו50 45 בז03)ס סח561זהק הסטסחט- ססהעוזק
+חסוהטססכו סכ 5=-
0068 5 6506 ,>חסותנוסססו סכ צוסא 25 וחסס הזוס
6 = סחץ45. וחס
חסחד |פו זז
(080)08%3 ]. 00 = 650|6ז
6
(0803) |!]הס|. 00 = ז|טפסז
+ 0חם
חסחדד 6|טפסז +סא +[ :10
(₪
בבר וער רוכל ור
6 וא למפתחי אתרים באינטרנט
הסט ,576 זסזו56זה +60 :11
+ 0חם לו
הס = |[ססספח561זהק 56% +
חסחס6חט 0חם :14
ואסססה61פזה? מקבלת שלושה פרמטריס: המחרוזת המכילה את המסמך, ערך
בוליאני של 6טש או 18/56 המציין האס שולחים 081 או לא, ואת המחרוזת שטסח1]
6 החסז'י, בה נשתמש לדווח על שגיאה, במידת הצורך.
מכיון שלא העברנו |ט, ערכו של המשתנה 15081 הוא 8|56, הצהרת ה- בשורה 5
נכשלת והצהרת ה-6!56 בשורה 8 מופעלת. אנו קוראים ל-|!086%%ו, ומעביריס את
המחרוזת של כל המסמך, שקראנו קודם.
וה טועןו את ה-ואספ לזיכרון, ובונה את מודל האובייקטיס מהמחרוזת שיצרנו על ידי
קריאת המסמך מהדיסק. כשנסיים, יהיה בידינו ואסס מתוך קובץ הקלט.
טעינת ה- 51
הבה נחזור לתדפיס 3.10 בו ניתן לראות שהפעולה הבאה בקוב ה-450 שלנו, בשורה
0, היא לקרוא לשיטה 6ון51א, הפעס תוך העברת הנתיב של מסמך ה-|5א.
("|5א. !2% |ואדר]אסזסע/" ,זוס06ס6)וסהקטווטם.150 = 6!ן= ופא. ופאס :120
הפקודה קוראת ל-16ן= 51א שבתדפיס 4.5.
תדפיס 4.5
(0חו50 5 6ט|ה/צשוסח |3ץ₪ )6!ו ופא 6% | /שוסקסזק
50 5 |החא ,ההא ד 5 + 5000666 65!וח. 56 שוס 5 150 וחוס
0:
1
2
36 ששח = 6ון= [ופאערח 3
(6!|= |5אץרח)6ון-0א6 150.06 = 1 56% 41
|\1.4680 = |וחא :פ
6-6
7
8
9:
("6|ו רחס 51א" ,8|56= , |ההא) כ סשח61פזהק = וספ ופאץוח 56% :
שזסקסזק סחם
שוב, אנו קוראיס ל-80000%ח561ז8ק, והתוצאה היא יצירת ה-0ספ 51א בזיכרון.
בנקודה גו, אנו מוכניס להתחיל בטרנספורמציה. אין לנו עדייו ואספ לפלט, אך נטפל
בכך בעוד רגע. בשורה 122 בתדפיס 3.10 נמצאת הקריאה הבאה לשיטה חזס)פחפזד:
הסוח ד. ו5אס 1
הפקודה קוראת לשיטה חחזסופחּזד של האובייקט שלנו, המוצגת בתדפיס 4.6.
פרק 4: שינוי עם |פא | 97
תדפיס 4.6
וס טס 0 51 פוץ ז+טסח! 5וס5ח3 ץ!|3608 - >וסצו 6+ 0065 +8ח+ הסטסחט סחס' :0
()החזס51חההז ד סט5 6ווטטק. :1
+חסוהטססכ סכ ופסא = אססזטסטוסץוח 56% :2
ואסססטססטסץוח ,וס ופאץוח 66[ 0סס 6 ססר זסז5חהיט. וא ססטקהזשץוח 3
| הסחך 0 <> 0006זסזזס.זסו50זהק. י!סס+טוקזטסשוח זז 4
[אסססטוקזטסעוח ,"זטססטס" זסזו56זה סקס 1
50 0 :5
כמובטח, בשורה 2 אספ הפלט נוצר על ידי קריאה ל-+חסוחטס6ססוזסכ חדש. בשורה 3,
אנו קוראיס לשיטה 0001606 061סאזס51ח8ז על וספ הקלט. שיטה זו מקבלת שני
פרמטרים: ואס !5א ו-אססזטטוטס, וזה בדיוק מה שאנו מספקיס לה.
התוצאה המיידית היא שעתה יש לנו שלושה 05 קיימים: קלט, 51א ופלט. הקריאה
ל-000[66 0780061ו5ה8 תבצע את עבודת הקריאה של ה-51א ושינוי אסס הקלט
בהתאם, תוך מיקוס התוצאות ב-וסס הפלט.
שיס לב כי בשורה 4 אנו בודקיס זסזו65פזּק (מייצג שגיאה בניתוח תחבירי), ומדווחיס
על כך במידה ונמצאת שגיאה כזו. 6006זסזום בעל ערך 0 מציין שלא היו שגיאות.
מטרת המודול 07ו5ח78ד51א היא רק ליצור את ה-0%68פ הנחוציס ולקרוא לשיטה
המתאימה 0001660 061סאזסו5ח8) תוך העברת הפרמטרים המתאימים. בנקודה זו
מנתח תחביר ה-51א משתלט ויתר העבודה היא אוטומטית.
במידה ומסמך ה-51א בנוי היטב וחוקי, והחוקיס והפקודות שבתוכו נכוניס, לא נידרש
לבצע צעדיס נוספיס; מנתח התחביר יפלוט את ה-1אא המתאים עם כל השינוייס
הנדרשיס. בכל מקרה אחר, הרכיב ידווח על השגיאה.
אפ עצמו מבצע עבודה די טובה בדיווח על שגיאות, אך שלא כמו
מהדר, הוא מדווח רק על השגיאה הראשונה, ועבורנו כל השגיאות הן
| קריטיות.
הערה |
1 בפירוט
הכנו את קבצי הקלט והפלט שלנו, וקראנו ל-%51א לתוך הזיכרון. עכשיו, בזמן
שקוראיס ל-000[60 ז[8006ז5)0ה₪8 נותר לנו להתרוות ולתת ל-|5א לבצע את
העבודה.
תדפיס 4.7 מציג את כל מסמך ה-51א. בשארית הפרק, נעבור עליו בעד אחר צעד.
8 וא למפתחי אתרים באינטרנט
תדפיס 4.7
"1.0"=חסופז6ע |וחא?> :0
> :1
"|5א- ₪ ד/טזס. 3עש. אא / : קח"=!5א:5חוחא
"|ההא- 3 ךס 3 אא /: כ ת"=פ5הוחא
<""=5ח-765016
<-- 65| 0619/06 --!>
<36|קרח5|:00א/ > < /51:/8106-01א<> <" ( )"= 86 306|קרח5|:6א>
<"/"= 306 306|קרח5|:06א>
<וס:|5א/>"1.0"= חסופזסע< "|וחא"=6וחהח וכן:|פא>
065ה|וח6)-ץ!קק5|:8א>
<806!רח51:%6א/>
<-- 905? הששסחאחג שח ה6800 --!>
<"*"= 7806 306!רח5|:06א>
<5|:8010006א/ > < / רה ח-006ח:51א<> < 0+" = סרח ססטס51:30א> < השסה>חט>
8065|מוח6)-ץ!כקה:|5א>
<חשטסח6>חט/>
<06ה|רח51:6א/>
<-- 90 |6/6| 0ף טס --!>
<"|הזח"= 306 306|קרח5|:06א>
<>
3065|קוח6-ץ!כקה:|5א>
<|חוטח/>
<06ה!0רח51:06א/>
<-- 06ח0ו אח68 6א 1005 --!>
| 50| ץ 00 | 56| 006 | 680 "= ה6הרח 306|קרת5|:%6א>
<06ה|ןרח51:06א/ > < /305 | רת66-ץ|סקה:51א> < "עו | אחו] | סרח |8 -
עו 0 הס קרח |[' ו .הס 60 06 )0 א|טום 6חז הובסחס6 כ --!>
<-- 800710006 6!355 ז[ו%6 6|סחו 0ח3 -
<"כ"= 806 356!רח5|:06א>
5|:/8]06-0%א> <"6|3557"= 6וחבּח 6סנוסוה:|5א> <עו0>
<06טס5]:8071א/> < /"50|66%="606|855=-
3065|כוח6-ץ|כק5|:8א>
<שו0/>
<0!806רח51:06א/>
<-- 86 06 0ף %5ח6ח6!6 6006 || הסשחסס --!>
<"['626|355='0] | ['690!355='62]כ | ['66]355='61 ]כ"= 66הרח 6ז3|כרת5|:%6א>
פרק 4: שינוי עם 51א
<6חו|6006/ > < /3065|קרת6ס-ץ|סקה:|5א> <6חו|6006>
<06ה|רח51:%6א/>
<-- 51060815 ]0 0605ח 01 +והק 36 +18 85זבּכ || זס1 530 |506008 --!>
<"[620]355='50]ק | ['661355='140 ]כ"= 66הרח 6ז3|כרת5|:%6א>
<6חו|06ח/ > < /3565|קרח6-ץ|כקה:[5א> <6חו|סססח>
<06ה!0ח51:06א/>
<--65 סוה זוסח) || 61006ח1 - פחס|3 5זבח6 |8ו5066 255 זפט( --!>
<" זה ח6"= 306 06ה!רח5|:06א>
6-0%ט!5|:/8א> <"6ק/ס"=6חבּח 6טוס5|:8א> <>
<זח6/ > <6ט51:8010א/ > < "0/6 6"= 5660 =-
<06ה|רח51:06א/>
,חח 5306 6 0+ רחסל הוח 56גון - 505 6און- [וידדר ב|ווחבצ 6|סחפּת --!>
<-- %ה650ז 06 עה הסוח 5ססטטו3 ץחה פחההסחטו-
<"זס| | קט ]5 פ|1]| ט"= ח6הח 306|כרת5|:%6א>
<0ח6רח5|:6!6א/ > < /305|ק רח6>-ץ|סכה:|5א> <%ח6רח5|:6|6א>
<06ה|0רח51:06א/>
6 5106ח1 ()ח00ח60 סח השואו) 05+ <ק:0> )0 הסחטס 3 חו פוטס סזס/ --|>
6 כ 655 0 0ח6+ 7656 .5805 <> "[הס"=-
6 65000ח כן עה זס) 5א0ס! פוח ד .סוס וחה6חש 866 |['סצו 50 ,פחההססחס ואד
<-- .= 00765 חב כן הסח =-
<"ס//"=806וח 306|כרת5|:%6א>
<06ה!ח51:06א/>
זט 06 ]0 הסחטפ 3 זס] 805+ ה508 פזטססטס סזס/ --!>
5 סח || 6|סחפח 6 סזסר -
<-- טסוה 50/6 8 סעהח זהח+
<"[050/|6 ] "= 306 06ה!רח6ת:|5א>
<0056ח%5|:6>
<-- 90 |506008 3 60 +הס6עחסס |['סצש - כבז 3 שחו טכףטס 06 עְהּצו 5'זסש --!>
<"ח%00-00-50רח' == (15ר06650/|6306)0"= זקא6 חסחצו:|פא>
%90>
<חסחש:|5א/>
סע ]11 51006 - 528065 6005660006 6060065 סזסש צוסר --!>
כ וחסר עוסו|8/ו5-
<-- 508005 01 טח 6 600065 5086 8+ 8 60 686 סע
<"חו50-508607רח' == (06650/!636)015"= זקא6 חסחצו:|פא>
<|5|:6/8א> < "ח6="|6רחבח 6סט5|:300א> <ח8607ק5>
,6/6 סח !5 665015 הו הטוס =-
<חט508007/> <6זטט51:3071א/ > <|8צ5|:6א/> ('80א' ==
0 וויא למפתחי אתרים באינטרנט
:210
2111
:21
:21
2121
1
21
:21
11
:21
תי
11
1
1
1
:לפ
1
:1
1
1
%7
0%
2
1
+
1
1
1
1
+
0:
1:
2
1
1
1:
<חסחש:|5א/>
<-- 60656 006 6/ו --!>
< "אה א50-000רח' == (06650/!636)0015"= ז0א6 חסחצו:|פא>
3065|מוח6ם-ץ|כק5|:8א>
<חסחו:|5א/>
<-- 655הַחח6 %ח0? |68ס| 6זוסח! 34150 ||'ס/ש --!>
<"ץורחה]-ה0' == (06650/!636)15"= ז0א6 חסחצו:|פא>
8065|כוח6ם-ץ|כק5|:8א>
<חסחו:|5א/>
<"50/|6-%חס1' == (15חז)6רח06%50/!63"= ואס חסחצו:|פא>
8065|כוח6ם-ץ|כק5|:8א>
<חסחו:|5א/>
<-- זו 6זסחףו ||'6צו 50 ,15 פוחז )החשש טס 6זטף ח6/6 %'ח68 --|>
< 30-00-00" == (06050/!636)015"= זקא6 חסחצו:|פא>
3065|מח6ם-ץ|כק5|:8א>
<חסחש:|5א/>
6 חל זוז 66000 ,63565 זסרסס עְח3 בה --!>
<-- ]50165066 וס 06000 חה0 סצו 50 50/6 0ח3-
<86!וסר5|:00א>
<חששסח>חט>
<6ט5|:3010א/ >ח508< 6="%0וחבּח ססטטו5|:3א>
<|5|:0/8א> < "]6="/8החבּח 6סטט5|:30א>
<06ט51:80710א/ > < |51:6/8א/ > (15ח6 )סרחה 0/6 06%5 =
8065|כוח6ם-ץ|כק5|:8א>
<השוסתאחנ/>
<5|:0600//!56א/>
<0056ח%51:6/>
<06ה|כרח51:06א/>
<)5|1:5070א>
]מ ]>
5 0חו50 6 הו 6386005 6 01 זסטוהטח הזנססז //
(6 ,000607760065)5חוס6 הסטסחו
2
;0 = ח זפ
(++ו ;חַזחַח5.!6 > | ;0 = | זפש)זסז
/
;++ח (6 == (ו)זבּח5.0) זו
.
פרק 4: שינוי עם 51א
1
1:
1
1
7
11:
2
1
41
51:
1
7:
7
1
01
11:
12:
1
41
51:
1
|:
1
11
10:
14
11
11
11
11
11
:11
11
:+
+11
1
לו
141
11
11
11
:11
11
;ח הזז 11
119: ]
12+
חסוסס ₪6 6ז0ז00 6טופע 5 3 50/16 66 זס ההק שו הזנססז // :121
(6 )36 6%50/!6 הסטסחנ :122
123: +
; ("50/|6" )6.060 = 50/00 זפצ 11
;(':')001א06חו.0ז/50/!6 = כ זפצ 151
;(ש ,50/!610.50050)0 חזנססז 11
127: ]
<[ן :128
129: >/א51:507ו0<
130: >/א51:50/|657006%<
6 והבא
השורה הראשונה בתדפיס 4.7 מצהירה כי גיליון סגנונות זה נכתב בהתאס לגירסה 1.0
של |ואא. זכור כי דף 51א נכתב ב- |ואא הבנוי היטב.
שורה 2 מצהירה על גיליון הסגנונות, וכחלק מהצהרה זו מקימה שלושה
5. הרעלון של 806508665ח אינו ייחודי ל- ]אא; ניתן למצוא 6508065והח
ב- ++6 ובמיגווו שפות אחרות.
הרעיון של ססהּסִפחחאח הוא לאפשר ליצור תגיות בעלות משמעות מבלי לדאוג שמא שס
של תגית שתבחר עשוי להתנגש בשס תגית של ארגון אחר. 36ו הכריו על מספר
5פטוהּח שמוריס, ובכללס פס6הּספסהַהּח עבור וואדה, 51א, ו- |ואא.
מסתבר שזה מאוד עוזר בזמן קריאת גיליון הסגנונות. ה-66הּספפחַאּח עוזר לנו להבחין
בין התגיות הייחודיות ל-51א ואלו שהן !אא.
בשורה 2 אנו מצהיריסם שאנו נשתמש ב-80650806 בשס |5א (התחביר הוא
[פא:5ח!וחא), אותו אנו קובעיס למפרט המצוי ב- 81 הבא:
ופא-ס// ד/פזס. 36או. ואוו /:קאח. שיס לב כי ה- | עשוי שלא להצביע על מסמך בעל
משמעות. מה שהכרחי הוא ש- אש זה יהיה ייחודי. למעשה, ה-081 משמש כמזהה
ייחודי גלובלי.
אנו רוציס להצהיר על ה-8850806ח של 85% כזה המצוי ב-|6ש
|והא-₪56/₪ ד/זס. 36או. וו /:קאח. עס זאת, שיס לב כי התחביר בשורה 3 שונה. כאן
אנו מצהיריס על 8₪650866ח ללא שם. זה מראה שאס אנו לא מציינים בפירוש
6פפההּח בתגית, ניתן להניח שמדובר ב-66ַספפוחהּח של |אא.
2 ווא למפתחי אתרים באינטרנט
לבסוף, בשורה 4, אנו קובעיס את ערך המאפיין 5ח-%/650ז. זהו מאפיין סטנדרטי של
הרכיב 51-50/|65066%א והחוא משמש לציון הפלט של מעבד ה-51א. במקרה שלנו, הגדרנו
אותו כמחרוזת ריקה, ובכך ציינו את ה-870650866ח ללא שס: במקרה זה |אא. מסתבר
שב-155 כל פלט הוא וואא, ומתעלמים ממאפיין זה!
תגית הפתיחה של רכיב גיליון הסגנונות משתרעת על פני 4 שורות ומסתיימת בשורה
4. תגית הסגירה לגיליון הסגנונות היא בשורה 130.
תבניות (13%65כ1ח6 ו-5חווסְזבּק) ופילטרים
מטרתנו בשארית גיליון הסגנונות של %51 היא לחפש אחר רכיבים במסמך המקור
שלנו (מסמך ה- 1 דחא) לטפל בהם ולפלוט אותס למסמך היעד (מסמך ה- !א החדש).
למרבית המתכנתים הקושי ב-51א טמון בכך שהיא שפה הצהרתית ולא פרוצדורלית.
כלומר, במסמך ]51א מצהירים על כל הרכיבים שרוצים למצוא (באמצעות שימוש
בהתאמת תבניות) והפעולה שיש לנקוט על רכיביס אלו. צריך מעט ומן להתרגל לכך.
הרבה יותר קל להבין את בדוגמה.
כדי להתחיל, הבה נדלג מטה לשורה 9, כדי לבחון דוגמה פשוטה יחסית של התאמת
רכיב ונקיטת פעולה. הדבר שאנו מעוניניס להשיג כאן הוא הפניית מעבד ה-51א
לעיבוד כל הרכיבים מצומת השורש ומטה. נבצע ואת באופן הבא :
<"]"=ח800וח 306|קותס::|5א> | :9
<וס:|5א/>"1.0"=חסופזסע<"|וחא"=6רחּח וכ:|פא> :10
3005!קות66-ץ|קק5|:8א> 111
<306|קו6ש:51א/> | :12
בשורה 9, אנו רואיס את תגית ה-%60!8%6 ב-650686וחהח הקרוי |פא. כתיבת :|פא
מציינת את ה6508866ח 83( ]5א-, ולכן, בהתבסס על הצהרת ה-6הּסספפַחאח בראשית
הקובץ, אנו יודעיס שרכיב 806!מח6+ הוא רכיב .51א.
תבנית (6ז0!8וח16) היא רכיב 51א המציין תבנית לפיה יש לבצע התאמה ב-ויספ הקלט.
תבנית המטרה (חזסְאַ3ק) מסומנת במקרה זה בתכונה של ההתאמה (ח860). במקרה
זה, התבנית היא "/", מסתבר כי היא תבנית מיוחדת המתאימה לצומת השורש.
צומת השורש הוא רכיב מרומז בכל מסמך 1א: זו נקודת ההתחלה הגבוהה ביותר
במסמך.
ערך התבנית (0!3%6וח16) מופיע, כמו בכל התגיות, בין התגית הפותחת לסוגרת.
במקרה זה ערך התבנית הוא בשורות 10 ו- 11. כאשר רכיב במסמך הקלט מתאיס
לתבנית, ערך התבנית יועבר לקלט.
בשורה 10 אנו יוצריס פקודת עיבוד (ח0600 1050 0חו6655סזק) של וואא, ששמה הוא ווחא,
וערכה הוא "1.0"=חסופזפש. ניתן לראות פקודת עיבוד וו בראש כל קוב )!א, ואנו
נוסיף אותה לשלנו גם כן.
פרק 4: שינוי עם |5א | 103
בשורה 11 מוצאיס את רכיב ה-51א 8065!מ650?-ץומְקג, אשר גורס למנתח תחביר ה-51א
לפעול ברקורסיה על הצומת הנוכתי. הצומת הנוכחי הוא הצומת שהתאיס לתבנית
ברכיב 86|סוח51::6א בשורה 9.
במקרה שאנו בוחנים, הצומת הנוכחי הוא צומת השורש. בקריאה הנוכחית
ל-0|3065ח5?-ץ!סְקה לא צוינו בניס כלשהס (שכן אחרת היו מצויניס על ידי התכונה
%). כשלא מצוינים בניס, המעבד ינסה למצוא תבניות מתאימות לכל הבניס של
הצומת הנוכתי.
בשורה 12 הצומת 816/כ6ז:|5א נסגר, שכן כל רכיבי ה- |אא חייביס להיסגר. התוצאה
של שורות 9-12 גורמת למנתח התחביר לחפש אחר התאמות לכל צומת במסמך הקלט.
הבה נחזור אחורה לשורה 7:
<806|רח51:%6א/ > < /+5|:/8]6-0א> < " ( )"= 86 306|קרח5|:)6א> 2
כאן אנו רואים תבנית (180!806) נוספת. הפעס התכונה ח8%6ח נקבעת ל-"())א6ש". זה
יתאים לכל צומת טקסט. הערך של תגית ה-86|ק%6 מוכתב על ידי הרכיב
%, המחציר את ערך הצומת התואם כמחרוזת. התוצאה היא העתקת הצומת
התואס למסמך הפלט. שים לב כי תגית ה-816|קוח6ז נסגרת, שכן כל תגיות ה- |א
צריכות להיסגר.
כך כל צמתי הטקסט במסמך המקור (ה- | דהא) יועתקו כפי שהן למסמך הפלט. זוהי
צורת ההתנהגות הטבעית של |5א, אך אנו יצרנו עבורה כלל, שכן 155 לא עושה ואת
באופן אוטומטי.
עד עתה עברנו על 13 השורות הראשונות של דף ה-51א. כל השאר לפי גישה בסיסית זו
של התאמת רכיבים במסמך המקור ונקיטת הפעולה המתאימה.
התאמת תבניות (פ65ז0!3וחו6ד)
דרך אחת לחשוב על מסמך 51א היא לדמיין ממיין מטבעות, כפי הנראה בתרשים 4.1.
המטבעות מוכנסים פנימה לממיין המטבעות ומתגלגלים מטה במורד השיפוע עד אשר
הס מוצאים פתח שדרכו הס יכולים לעבור. כשהס עוברים על פני חריצ מספיק גדול,
הס נופליס לתוך הצינור הימני. בעת יצירת ממיין מטבעות שכזה חייביס לשיס לב
לסדר החריצים. אס תשים חריצ גדול לפני חריצץ קטן יותר, הרי שמטבעות קטניס
יותר יפלו לתוך הצינור הגדול יותר, ואנו לא רוציס שזה יקרה. לכן, החריצים חייביס
להיות ממויניס מהקטן ביותר לגדול ביותר. הסדר אינו מוכתב על פי ערכס היחסי
אלא על פי גודלס היחסי.
באופן דומה, התוכן של מסמך המקור שלנו מתגלגל במורד שיפוע ממיין, כאשר אנו
חייבים לבדוק את המקרים המפורטים ביותר לפני שנבדוק את הכלליים יותר. סך
הכל, אס יש לנו חריץ המקבל ייכל רכיביי הרי שכל הרכיבים יפלו דרך חריצ זה ולעולס
לא יגיעו לתבנית מפורטת יותר המתאימה להם.
4 וויא למפתחי אתרים באינטרנט
השיפוע במקרה זה הוא מתחתית המסמך כלפי מעלה. כלומר, 155 בודק את התבנית
(חז6א8ק) התחתונה ביותר במסמך לפני שהוא בודק את זו שמעל, והוא ממשיך במעלה
מסמך ה-51א עד שהוא מוצא התאמה טובה.
תרשים 4.1: ממיין מטבעות
סיור
קצר
המיון מלמטה למעלה הוא מוסכמה הייחודית למיקרוסופט. המלצת 36\ אומרת שכשישנן
מספר התאמות, "... כל כללי התבניות המתאימות שהם פחות חשובים מהכללים ומכללי
התבניות המתאימות החשובים ביותר לא נלקחים בחשבון."
כלומר, המפרט אומר כי אם ישנה יותר מתבנית מתאימה אחת, ההתאמה היא רק
לחשובה ביותר.
החשיבות נמדדת על פי מיקום התבנית. ניתן לייבא גיליונות סגנונות לתוך גיליון הסגנונות
ה"ראשי", אך תבניות שבגיליונות סגנונות מיובאים חשובים פחות מאלו שבגיליון הסגנונות
הראשי.
המפתח יכול גם לקבוע סדר חשיבות עבור הכלל של תבנית נתונה. העדיפות יכולה
להתבטא על ידי מספר שלילי או חיובי. ערך ברירת המחדל הוא 0. על ידי קביעת
העדיפויות, המפתח חופשי להחליט אלו כללים הם החשובים ביותר.
5 אינו תומך במושג החשיבות, וגם לא בייבוא של גיליונות סגנונות.
מכיון ש-155 יעריך את ההתאמות מתחתית הקובצ עד לתחילתו, נשיס את ההתאמות
הכלליות ביותר בקרבת תחילת הקובצ. וה מבטיח שנתפוס את כל הרכיביס שאחרת
לא היו נמצאים מתאימים.
פרק 4: שינוי עם 5א | 105
מציאת תגיות לא ידועות
אנו רוציס שגיליון הסגנונות של 51 שלנו יקח בחשבון כל תגית במקור שלנו (מסמך
ה- |ואזחא). כל תגית צריכה להיות מזוהה, ומעובדת בצורה כלשהי, ולא רק כדי להיות
מועברת בשלמות למסמך הפלט.
כחלק מתהליך איתור השגיאות, אנו צריכיס למצוא את כל התגיות שלא היינו מצפיס
למצוא בקוב. נסמן תגיות מלאכותיות אלו כיילא ידועות'י, כך שנוכל לאתר אותן מהר
בקוב הפלט ולהחליט מה לעשות איתן.
למשל, נניח שישנה תגית "לשא" ב- ו|אדתא. כמו כן, נניח כי אין לנו כל מושג לגבי
משמעות התגית, ולכן לא טיפלנו בה בגיליון הסגנונות. אנו רוציס שהפלט יכלול:
"?ץא" = 00 חאוסחאחט>
אס לתגית /א> יש תוכן, נרצה לראות ואת בפלט גם כן. כך, שאם במקור קיים:
<2ץא/> רטפ 80זם 60ו2<00/א>
אנו רוציס שהפלט יכלול:
<חהשטסחאחנ/> הטפ 90 60ו2"<009ץא"=0+ האוסתאחט>
הנה האופן בו נעשה זאת. בתחילה, אנו יוצריס בתחילת הקובצ ייכלל התאמה לכל
רכיביי:
<"*"=ח300ח 306!קות0ש:!5א> - :15
ה-* מציינת ייכל רכיביי. וכור, אס וה בתחילת הקוב תהיה התאמה רק אס כל שאר
ההתאמות ייכשלו.
*
מתאימה רק לרכיבים, ולכן אינה מתאימה גם לצומת השורש,
י /
ו צמתי טקסט, הערות, הוראות עיבוד, וכל שאר הצמתים שאינם רכיבים.
כשתושג התאמה שכוו, ניצור תגית <חשסחאחט>, ונשייך תגית שוטטוזה לאותה תגית
<חשסח)חט>. נשיג ואת על ידי הרכיב 16ז5|:87100א, המקבל כתכונה שלו את שס
התכונה שמשייכים לרכיב הנוכתי.
משפט זה מעט קשה לעיכול, לכן נסביר אותו באמצעות דוגמה. אס אנו יוצריס את
התגית <חששסחאחט> אנו יכוליס לתת לה את התגית ססטפוזאה על ידי כתיבת :
<806="580ח 06ט5|:8000א>
משמעות הדבר יילשייך לתגית הנוכתית (<חאוסחאחט>) תכונה ששמה הוא 184"
גוף התגית טפוש הופך לערך של תכונה זו ב-<חטוסחאחט>. לכן היינו יכוליס לכתוב:
<6ט51:300א/ >"2?ץא"< 0ז"=6רהח שזטסלסה:|5א> < הצוסתאחו>
זה אומר יילשייך לתגית הנוכחית תכונה ששמה הוא 18 וערכה הוא <ץא.'י התוצאה
תהיה:
"2ץא"=%0 האוסחאחט>
6 וויא למפתחי אתרים באינטרנט
זה היה עובד פשוט מצוין אס היינו יודעיס שהתגית שאנו עובדיס איתה היא לְָצְא. לרוע
המזל, איננו יכולים לדעת באילו תגיות אנו עשוייס להיתקל, לכן אנו חייביס לשאול
את מסמך המקור מהו שס התגית הלא ידועה. זאת נעשה באמצעות סוִַח-06סח:|8א :
<6ט51:8070א/ > < רה ח-006ח:51א<> < ס68"= 6רחהח ססטפו0ה:|5א> <חצוסהאחט> - :16
יש לקרוא ואת באופן הבא: ייצור תגית <חשסחאחט> ותן לה תכונה ששמה הוא 80
וערכה הוא מה שנמצא ב-6וַַַח-06סח:!פא. י והרי התוצאה במקרה זה:
"2ץא"=80? חשוסח)חט>
לאחר שיצרנו את התגית <חשסחאהט>, אנו חייביס לאסוף את כל בניה. אנו עושיס
ואת על ידי קריאה רקורסיבית ל-6000!8065>-ץ!ס51:8א, שתגרוס למנתח התחביר לבחון
את תוכן התגית . במקרה שהוצג לעיל:
<2ץא/>וחט5 00 2<00000/א>
רקורסיה זו תתאיס לתבנית שבחנו בשורה 7:
<36|סרח5|:06א/ > <"( )"= 316 6ז3|קרת5|:0א> 2
הטקסט ייקבע כצומת-בן של התגית <חשסחאחט>, בדיוק כפי שציפינו, והתוצאה
הינה:
<חשטסחאחנ/> הטפ 90 000 2"<60ץא"=0ל האוסתהאחט>
שים לב שאין לנו שום כלל למעבר באיטרציה על התכונות של צומת זה,
משום כך לא נאסוף תכונות כלשהן בתגית הלא ידועה שלנו. אנו פשוט
נזרוק אותן. לפיכך, אם הצומת המקורי שלנו היה:
הערה |
<2ץא/>וחט5 ₪790 526="3"<60000 2ץא>
הפלט שלנו לא יכלול את התכונה 56, ועדיין יישאר:
<חאוסחאחט/> 5 80זם 090 2"<60ץשא"=50+ הצוסהאחט>
שורות 14-19 מציגות את כל הרצף הזה:
< - - %905 חאוסחאחט ץחה ח6800 - - !> :14
<"*"= 1806 306!רח5|:%6א> 151
<6 51:80 א/ > < /6 ה ח-006ח:51א<> < "= 6רחהח וס 51:80א> < הצוסה>חנ> 11
065ה|קוח66-ץ!קק51:8א> 171
<השוסחהאח/> 11
<0|306ר51::6א/> 1%
הבה נניח שוב כי נתקלנו בתגית במסמך המקור שלנו. אנו לא ננסה להתאים
את תגית ה-<2/א> הזו לאף שורה מתחת לשורה 15 שכן לא היינו מצפיס לתגית זו.
אנו כן נתאיס אותה לשורה 15, שכן * מתאימה לכל דבר.
אנו יוצריסם תגית <חווסחאחט> ונותניס לה את התכונה "?ץְא=ףָ)" כמוצג בשורה 16.
אחר כך אנו יכוליס לקרוא ל-065ז3ומְח6-ץְומְקְג3ּ על תגית ?א זו כדי לוודא שאס יש לה
בניס, גס הס יעובדו. לבסוף, בשורה 18 אנו סוגריס את התגית הלא ידועה ובשורה 19
אנו סוגריס את התבנית.
פרק 4: שינוי עם 5א | 107
בניית ה-0₪פ
הנה שאלה מעניינת שיש לקחת בחשבון לפני שנמשיך. אס בקובצ המקור היינו
מוצאיס :
<"8|06=")00/ 2)א>
מה היה צריך להכיל קובצ הפלט! התשובה היא :
"?ץא"=%0 חאוסחאחו>
כפי שצוין קודס לכן, אנו משליכיס את התגית 00), אך כיצד זה קיבלנו תגית הסוגרת
את עצמה! הרי לפי המקור שלנו יש תגית סגירה <חששסחאחט/>. האס אנו לא אמוריס
לקבל את הפלט הבאז
<הששסחאחט/> <"2ץא"= 0+ האוסתאחוט>
כדי להבין ואת, יש לזכור מה באמת מתרחש. אנו קראנו את מסמך המקור לתוך
ואסס. כמו כן, קראנו גס את מסמך ה-51א לתוך אסת, והפלט שלנו הוא בעצמו וזסס.
כשאנו יוצריס את התגית <חשסחאחט>, אנו לא עושיס זאת בתוך קובצ, אלא ב-ויסס
עצמו. אסס הפלט מכיל עתה תגית חצוסחאחט שיש לה תכונה 90, בעלת הערך ?ץ/א. אס
איו אובייקטיס בניס (כאשר אין טקסט) אז כשנכתוב את ספ הפלט לקובצ טקסט
(למשל |₪א.60802) מנתח התחביר ייצור תגית בודדת, הסוגרת את עצמה:
"?ץא"=%0 חאוסחאחוט>
ובמקרה שבו מסמך המקור הכיל:
<2ץא/>וחט5 ₪00 2<00000/א>
ל-001% הפלט יש תגית <חצוסחאחט> עס התכונה 18 שערכה הוא ?ץא, אך יש לה גס
תגית בן מסוג 6%%ז, שערכה הוא הטפ 0פזם 60000. לכן, כשזה נכתב למסמך הפלט, וה
נכתב כך:
<חהשטסחהאחנ/> הטפ 00 000 2"<60ץא"=0ל האוסתהאחט>
כל וה הוא תוצאה אוטומטית מפליטת תוכן ספ הפלט.
ניתוח תחבירי של ה-51א% (51א 6+ פַחופזְבּק)
עד כה עברנו על שורה 18 של מסמך ה-51א שלנו. הצהרת התבנית הבאה היא ישירה
למדי:
<"|והה"=ח306רח 3%6|קות5|:00א> | :22
<והטח> :23
306|וח6)-ץ!קק8:|פא> :22
<וחסח> :251
<36|קוס::|5א> | :26
אנו מתאימים כל רכיב שבו התגית היא |וחזח. במקרים הרגילים נצפה למצוא רק רכיב
אחד כזה. חיינו יכוליס לפסול את התגית 1אדח בשלב גאה; בסך הכל מסמך הפלט
זא שלנו לא יהיה מסמך ₪ ולכן לא יצטרך את התגית |וד₪.
8 ווא למפתחי אתרים באינטרנט
מכיון שאנו מבצעיס את המעבר ל-חזס) |688ח0ח68 שלנו בשני שלבים, נבנה קובצ א
זמני. קובצ זה וקוק לצומת שורש, ולעת עתה, נוח יותר להשאיר אותו כ- וואזהּ, כך
שאנו פשוט מעתיקיס את התגית !|אז במקוס. במהלך השלב השני של המעבר נחליף
את התגית ₪11 ברכיב השורש החדש שלנו: <200%>.
תגיות שניתן להתעלם מהן
שורה 29 מוצאת את כל התגיות במסמך המקור שלא איכפת לנו מהן, ומשליכה אותן:
| 56| 00 | 56| 6 | 680 "= 86 3%6!קוח6ז:|5א> 200
<6ז3|רח51:6א/ > < /6זה|קרת6ש-ץ|סק3:|פא > < "עום |אחו] | 6% | ה ==
מבחינת התחביר תבנית זו מתאימה ל-680ח או ל-006 או ל-5%6 וכן הלאה, לאורך כל
הרשימה. צריך לקרוא ל-900!8165?-ץוסְכ8, המבטיחה שאס לאחד מן הרכיבים הללו
יש בניס, אנו נאסוף אותם. אנו לא נוקטיס כל פעולה נוספת, כולל העתקת התגית
למסמך הפלט שלנו, כך שבפועל התגית בעצס מושלכת.
טיפול בתגית <>
בחינת מסמך המקור מראה כי מרבית התוכן מוחזק בתוך תגיות <ס>. אין וה
מפתיע; מאחר ומרביתו של הספר הוא בתוכן הספר, והטקסט מאוחסן על ידי סזס/
בפסקאות המסומנות על ידי תגיות <ק> כאשר 6זס\ מייצא ל- וואדת.
תגית ה- <ק> התפתחה מאז ה-1ז₪ המוקדם, וכעת היא נחשבת לתערובת של רכיב
מבנה ורכיב תצוגה. כתוצאה מכך ההתנהגות של תגיות <ק> פחות אמינה. החלטנו
לשנות את הפסקאות האלו ל- <שו0> :
<"כ"=ח806ר 306|קוח5|::6א> | :32
]>< "6="6|355וחהח 066ו5|:80010א> ו0> 1
<51:300706א/> < /"56|606="600|355=-
3065|קרח6-ץ!כקה:|5א> :1
<צוס/> 51
<06ה|קח1:06פא/> | :36
בשורה 32 אנו מבצעיסם התאמה לכל רכיבי ה-ק. הבה נפרק את שורה 33 לארבעת
החלקיס שלה:
<שו0> 31
<"6|355"= 6חחּח 5|:8010066א> :330
"56!606="606|355 )51:/8]06-0א> | :336
<6סנוס01ה:|5א> היא
בחלק (8), אנו כותביס הצהרת <צו0> לפלט. לכן, בכל פעס שנמצא תגית <0> נחליף
אותה ב- <עו0>.
בחלק (ט), אנו משייכיס תכונה שנקראת "6855" ל-שו8. לכן ה-צוס שלנו יראה:
=6!855 /|0>
פרק 4: שינוי עם |5א | 109
בחלק (6), אנו אוספיס את הערך של התגית <ס>, ובוחרים רק את התכונה 6|855.
הסימן 6 מסמל תכונה. התוצאה בפועל היא שאנו לוקחים את התכונה 6855 מ- <ק>.
אס התחלנו עם <"6|855=""1 > נסיים עם <"זת"=6855 ע[0>.
לבסוף, בחלק (6) אנו סוגריס את התבנית שהתחלנו בשורה 32.
צירוף שורות הקוד וההערות
נזכור כי בדיוו הקודס רצינו לצרף יחד את כל שורות הקוד. נעשה ואת בשני שלבים.
השלב הראשון הוא לאסוף את כל השורות עס הסגנון "61", "62" או "63" ולסמן אותן
עס התגית <6חו!6006>. בפרק הבא נראה כיצד הס מצורפיס יחד לבלוקי <0006>.
ההמרה ל- <6חו|6006> מוצגת בשורות 38-41 :
<-- 300876 6חס 0+ %05חה6רח6!6 6006 || הסטחסס --|!> | :38
<"['א)'=626|355] | ['680355='062]כ | ['66!355='61 ]כ"= ח06הוח 306|כות5|::6א> | :39
<6חו|6006/ > < /3065|קרת6ס-ץ|סקה:|5א> <6חו|6006> 7
41: >/א5|:ס6וק|36<
כאן ההתאמה שלנו היא לפי התבנית (חזטא8ּק). אנו מחפשיס אחר רכיבי ם שיש להס
את התכונה '6!855='61 או שיש להס את התכונה '6!855='62 או '6!]855='63. אם נמצא
התאמה לאחד מאלו, נכתוב את התגית <6ח|6006>, ואחר כך נקרא
ל-500|8565?-ץ!סְכה כדי לקבל את בניהס (במקרה זה, כדי לקבל את הטקסט). אחר כך
אנו סוגריס עס תגית הסגירה <6חו|6006/>, ובשורה 41 אנו סוגריס עס תגית הסגירה
<06ה|ח5|:66א/>.
כשאנו יוצריס את ספ הקלט, אנו עשוייס להיתקל בשורות הבאות ב- ||י דחא מפרק 3 :
<"0|855="62 ]> :1
5 ()60803ה [260) הסחטסחט= :1 :1167
<ס/> :+11
כאן נוצר רכיב כ ב-ואספ. רכיב ה- יכיל תכונה ('6|855='62) ויהיה לו בן יחיד: טקסט
שערכו הוא : "46607056 45 ()6080ח 0607 הסטס6חט- :1"
גיליון הסגנונות שלנו יהפוך את רכיב ה-ם לרכיב שורת קוד (6חוו6006) בקובץ הפלט.
אחר כך הקריאה ל-600!866*-עְומֶסג3 תיכנס ברקורסיה לתוך רכיב ה-ם, ותמצא את
צומת ה-(%א6. זה יותאס לתבנית הקודמת :
<306!ר51:66א/> < /+5|:/8]06-0א<> < " ( )אל"= 86 306|קרת5|:0א> 2
אשר תגרוס ל-0%6פ הפלט ליצור רכיב טקסט עס אותו הטקסט:
5 ()0ז603ה [260) הסס6חט= :11
ולשייך את הטקסט לרכיב ה-6חו|6006 החדש. כשזה נכתב למסמך הפלט, התוצאה
תיראה כך:
<6חו|6006>
9 8 ()608%3ה [260) הסססחטת - :1
<6חו|6006/>
0 ווא למפתחי אתרים באינטרנט
אותה תבנית עיצוב בדיוק מיושמת על הערות בשורות 44-46:
<"| 646!355='50]כ | ['600|355='00 ]כ"=ח06הח 306|קוחסש:|5א> - :44
<6חו|06ח/ > < /3565|קרח6-ץ|כקה:|5א> <6חו|סססח> :45
<36|קוח6ס:|5א/> | :40
ההבדל היחידי בין הקוד הזה לקודס הוא שכאן אנו אוספיס קוד המסומן במחלקה
ייסאיי או 'י58'י. 58 מציין סרגלי צד (5ז5/0608) ולעתיס העורכים מעדיפים סרגלי צד
מסוימיס עס סגנון זה במקוס עס סא.
תווים מיוחדים
שורות 49-51 מטפלות בנוכחות של תוויס מיוחדים ב- |דחא. בפרק הקודס כבר היה
לנו עיבוד מיוחד עבור תוויס מסוימיס. ישנם שני סוגי תוויס המענייניס אותנו.
הראשון הוא ציטוטיס חכמים (000%65 זזה0ח5), אשר תייגנו כ-ז3ח6 בקוד הזה:
("" "5ס0והוח5" "= 6כ זהחה6>" ,(146)זת6 ,0!806)5ק46 = 5
("" "6זסגוכ) הרפ" "= 6 זהח6>" ,(147)זת6 ,0!806)5ק46 = 5
("" "סט והות5" "= 6 זהחה6>" ,(148)זח6 ,0!806)5ק46 = 5
הסוג השני הוא תוויס של הוצאת ח₪8!!ווח86, שאותם תייגנו עס הקוד הבא :
("" "650866" "= 6 זהח6>" ,"[רח6]" ,0180605 = 5
("" "62858" "= 26 זהח6>" ,"[0]" ,0180665 = 5
("" "ז6!|טם" "= 6 זהח6>" ,"[ט!]" ,806)5ו₪₪0 = 5
כעת לקוב ה- |ואדחא יש מספר רכיבי תוויס (ז8ח6) עם תכונה של 06, שערכה אומר
לנו איזה סוג של תוויס הס. לעת עתה, אנו רק נעביר אותם הלאה. כדי לעשות זאת,
אנו חייבים ליצור טיפוס <608> במסמך הפלט ואז לשייך לו את התכונה שנמצאת
במסמך המקור:
<"זהח6"= ח0הח 306|קות5|:%0א> | :49
6-0 |/:|5א> < "סק "= 6רחּח 6טס00ה:|5א> <זהה6> ו
<ז8ח6/ > <51:800106א/ > < "60/6" =50!00=-
<806!קוח5|:06א/> | :51
שורה 49 מבצעת התאמות לרכיבי תווים אלו. הבה נפרק את שורה 50 לארבעה
חלקים :
<81ח0> :1
<"6ק/"=6רחפּח 6סנסוה:|5א> :500
"56!60="600/06 51:/8|06-01א> :500
<זהח6/> <5|:8010006א> :500
בחלק (8) אנו כותבים את רכיב ה-<ז8ח6> ל-4ספ הפלט. בחלק (פ) אנו משייכים
לרכיב וה תכונה ששמה הוא 6ק. בחלק (6) אנו נותניס ערך לתכונה חדשה זו, בפרט
את הערך המושג על ידי קריאה ל-)6-0ט|א/ ובחירת התכונה 6קש ברכיב המקור.
לבסוף, בחלק (0) אנו סוגריס את התכונה שיצרנו ב- 500 ואת רכיב ה-ז3ח6 החדש
שיצרנו ב- 508. בשורה 51 אנו סוגריס את התבנית שהתחלנו בשורה 49.
פרק 4: שינוי עם |5א | 111
שלוש השורות הבאות עוברות על רכיבי |חשח מסוימיס (ט ,500 ,508 , ,5 ו-זט) אך
מתעלמות מכל תכונה שעשויה להיות להס :
<"זם | ט | סטפ| פ טפ]ו|פ"= 86 66ה!קוח06:|פא> | :54
<0ח6רח5|:6!6א/ > < /305|ק רח6>-ץ|סכה:|5א> <%חה6רח5|:6|6א> :1
<06ה|קח51:06א/> | :56
הלוגיקה היא כמעט זהה, אך התחביר מעט שונה. מכיון שאנו לא יכוליס לדעת איוה
רכיב אנו יוצריס (הוא עשוי להיות כל אחד מהשישה שמתאימים), אנו משתמשים
ב-51:6!60600א. | הוא בונה רכיב פלט אשר על פי ברירת מחדל קרוי על פי שס התגית
של הרכיב הנוכתי. לכן, אם מצאנו התאמה עס תגית <5>, אז +5|:6!60060א יבנה תגית
<5> במסמך הפלט.
אחר כך נקרא ל-60|8065-ץומְקָה כדי לאסוף את כל הבנים של הרכיבים האלו. אם
במקור יש:
<0010>/0 5! %6%0 פוחד<>
או הבן של רכיב 9 זה הוא רכיב טקסט עס הטקסט: "0|0ם 5 6% פוחד".
ניקוי סימוני פסקאות מקוננות
כפי שצוין בהערות, כאשר 6זסצו יוצר פלט כדף אינטרנט הוא מפור סדרה של תגיות
<ס:0>, חסרות כל תוכן. נדיר למצוא תגיות <ס> מקוננות וישנה עדות אמפירית לכך
שקיומן יוצר בעיות בהצגת מסמך הפלט (כלומר, ניסינו ואת וזה נראה אווילי). לכן
אנו נפטריס מתגיות ה-<ם> המקוננות באמצעות הקוד שבשורות 60 ו- 61:
<"כ//ק"=ח306ר 306|קוח5|:00א> = :60
<06ה|קח51:06א/> | :61
הלוכסן הכפול הוא סימן 51א מיוחד המציין ''כל הצאצאיסיי. לכן יש לקרוא התאמה
זו כיימצא את כל הצאצאיס של כ שהן גם כן פ'' - כלומר, מצא את כל רכיבי ה-ס
המקונניסם.
הפעולה הננקטת: כלום. אנו פשוט סוגריסם את התבנית ללא כל תוכן פנימי. כך שלכל
תגית כזו יותאם - ערך ריק. התוצאה בפועל, תהיה הסרתן מן המסמך.
אתה עשוי לתהות מדוע למצוא להן התאמה מלכתחילה; האם הן לא ייעלמו אס פשוט
נתעלס מהן? זכור כי כל התגיות שלא נמצאת להן התאמה מסווגות כ-<חששסח>חט>.
קיומן ידוע לנו, אנו פשוט לא רוציס אותן, ולכן אנו מוצאיס להן התאמה מפורשת
ומתעלמיס מהן.
תסריט .51
מסתבר שכש-6זס/ מייצא את הקובצ ל- |אזה, הוא יוצר מספר תגיות ח508 שונות.
בדיקה מהירה של פרק 3 שלנו בקובצ ה- | דחא מגלה כמה כאלו:
<"1 :%90-6000-50/!6="7150 ח8ק5> | :14
<"65ץ :ח50/!6="₪150-5086670 ח8ק5> | :49
12 ווא למפתחי אתרים באינטרנט
אנו נמצא גםס שורות עס "אזההואססס-50!6="50 ו-"ץ|וחחה1-%הסז"=56 | או
"50/|6-זחס)"=50/!6 כמו גס "06סח-0וח6-טסעְ50/6="!3. אנו מעונייניס לנקוט בפעולות
שונות עבור כל אחת מאלו, והדרך הקלה ביותר לעשות ואת היא על ידי ניתוח תחבירי
של כל סגנון שנמצא בתגיות ה-ח508, ופעולה מתאימה, על פי סגנון זה.
בשורה 64 אנו מבצעיס התאמה לכל רכיב מטיפוס ח508 שיש לו את התכונה 6ו/5%:
<-- 6)טסוזהה 50/16 3 סעבּח הח 1
<"[650/!6 ]ח508"=ח300וח 806|קוח5|::6א> - :65
התאמת התבניות מתבצעת רק עד לכאן. כדי לצמצס לסגנון המתאיס והמדויק, אנו
פוניס לעוגרת תסריט 50100).
ב- ++6 או 88צ8( היינו יוצריס הצהרת ח66ו/ש5 (הסתעפות); ב-8856 |1508/ היינו יוצריס
הצהרת 6856 56!60%. ב- 51א אנו רושמיס 0056ח5|:6א:
<0056ח%51:6> 1
בדיוק כמו שהצהרת ח60וש5 ב- ++6 או 388 מלווה בהצהרת 6856 (מקרה), והצהרת
6% ב-8/ מלווה בהצהרת 0856, כך גס הצהרת 600056 ב-51א מלווה בסדרת
הצהרות של חסחאו:!פא. התנאי הראשון שאתו נעבוד הוא כשהסגנון הוא טאב:
<"ח50-680-60רח' == (15ה%)6ח06050/!63"= זקאס חהסח/ו:|פא> - :68
<] ס8)> +
<חסחשו:|פא/> | :70
בשורה 68 חלק ה-ח6ש יופעל כאשר ערך הביטוי הוא 6טש. הביטוי הוא
"ח50-600-60רח' = = (15ח%)6ר06650/|603".
זאש הוא מבחן בוליאני עבור הצהרת ה-חסחאו:|5א. אס המבחן מחזיר 6טש, התוכן של
חשחאו (במקרה זה מוצג בשורה 69) יושס בפלט. התוצאה של זקא6 בעל ערך 6טזט, במקרה
זה, שיועבר טאב לפלט. שים לב כי הטאב משתמש בתגית סגירה הסוגרת את עצמה.
6וחףּ\66150/!6 אינו מבחן 51א סטנדרטי. זוהי פונקציה שכתבנו ב-51:56106א. אנו
מעביריס את הרכיב הנוכחי כפרמטר. פוח+ היא מילה שמורה ב-%51 אשר מסמלת את
הרכיב הנוכחי.
שלא כמו ואדה, ל- אא אין יכולת להוסיף תסריטיס בגוף המסמך, אך ל-51א יש.
תסריט ב-51א מתחילה בתגית 51:50710%א, כמוצג בשורה 108. בהמשך מצהיריס על חלק
דה ס6. כפי שאמרנו קודס, 60414 הוא טקסט שלא אמור להיות מנותח תחבירית על
ידי מנתח תחביר ה-51א. אנו עושים זאת מכיון שהתסריט עשוי לכלול סמלים כמו
< זס >, השמוריס על ידי 51א. על ידי כתיבת התסריט בתוך קטע 60418, מנתח
התחביר לא ינסה לתרגס את הסמלים האלה ל-51א.
קטעי 65414 מתחילים ברצף התווים ]4ד604]!> (כפי שניתן לראות בשורה 109)
ומסתיימיס ברצף <[[ (כפי שניתן לראות בשורה 128):
122: נחסטסה 06%50/!6 36) 6(
123:
; ("50/|6" )6.060 = 50/00 זפצ 11
פרק 4: שינוי עם |5א | 113
;(':')001א06חו.0ז/50/!6 = כ זפצ 151
;(ש ,50/!610.50050)0 חזנססז 11
] :127
הרכיב מועבר כפרמטר. בשורה 124 אנו מקבליס את התכונה מהרכיב על ידי קריאה
ל-6ז01ופ86%071, שיטה קיימת לכל אובייקטי אספ ב-51א; תוך העברת שס התכונה
שאנו מעונייניס לקבל. אנו מאחסניס ואת במשתנה מקומי הקרוי 8זב50/6. אחר כך
אנו מאתריס את הנקודתייס (:) בתכונה, ומחזירים את כל מה שלפני הנקודתיים.
במקרה שבו נמצאה התאמה ל:
<"1 :%חט50/!6="50-580-60 ח8ק5>
יוחזר:
%חו150-590-60ח
אנו משוויס ערך מוחזר זה בשורה 68. במקרה שאכן יש לנו ₪ח0ט%80-60-50ח, ערכו של
זקא יהפוך ל-6טש, והטאב ייכתב לקובצ הפלט. אנו סוגריס את התגית חסחשו:|פא
שפתחנו בשורה 68 על ידי תגית סגירה בשורה 70.
בשורות 74-76 אנו מטפליס במקרה בו ישנה התאמה ל-חט50-50866ח. הלוגיקה של
התאמת הסגנון והה, אך הפעולה שאנו נוקטיס מעט שונה.
אס ישנה התאמה ל-חטזסס508 בשורה 4, אנו פולטים תגית <חט50860> בשורה 75.
אחר כך | אנו | משיכים | תכונה | לתגית | זו תוך שימוש | ב-
<"ח6="|6וחהּח 5!:8010006א>. כפי שצוין קודס לכן, זה יוצר בפלט תגית :
=חס]| ח7ז50866>
כעת אנו צריכיס למלא ערך עבור התכונה ח6!. כפי שניתן לזכור, 6ט5|:8010א ימלא
כערך של התכונה החדשה את מה שבין התגית טפוזז5|:8א ותגית הסגירה שלה.
במקרה שלנו, מה שנמצא בין התגיות האלו הוא:
<|51:0/8א/> ("80א' ,6טו06/3סח. 500 15ח)665 הזו חוס6< |%5|:6/8>
התגית |51:68א תעריך ותחזיר את הערך של כל מה שבין תגית הפתיחה והסגירה שלה.
במקרה שלנו, מה שיש בין תגיות אלו וה קריאה לפונקציית התסריט שלנו
5 ה ס6, אליה אנו מעביריס שני פרמטריסם :
'80א' ,6ט|ה/ 6סח. 0!וח5זו. פור+
הפרמטר הראשון הוא ערך הצומת של הבן הראשון של הרכיב הנוכתי. זכרו כי הרכיב
הנוכחי במקרה זה הוא ח508. הבן הראשון יהיה רכיב טקסט, שערכו הוא הטקסט
עצמו. לכן, קיבלנו את כל מה שמוחזק ב-ח508. מסתבר שכש-6זס/ יוצר את תגיות
ה-ח508 האלו, המייצגות מרווחיס רגילים, הוא שס תו רווח בודד ואו סדרה של תווי
0 הקסדצימליים (בסיס 16): אחד לכל תו רווח שהוא מכיל. אנו פשוט מעונייניס
לספור את תווי 80 הללו. בפונקציה הבאה אנו סופריס אותם, %0660760665ח600
מוצגת בשורות 111-113 :
(6 ,60065)5 060 הס הסחסחוח :111
112: +
;0 = ח ז8 141
4 וויא למפתחי אתרים באינטרנט
(++! ;5.6000 > | ;0 = | זפצ)זסז 11
151 ָ
;++ח (6 == (ו)זהּח5.0) זו 11
7 171
;ח הזז 11
119: 7]
המחרוזת מיוצגת על ידי הפרמטר 5; התו על ידי הפרמטר 6. הלולאה זס+ מגדילה את ח
בכל פעס שנמצא מופע של 6 במחרוזת 5, ומחזירה ערך זה.
התוצאה בפועל של קריאה זו ל-/5|:68א בשורה 75 היא לשיוך הערך, מספר המופעיס
של 80, לתכונה ח8! של התגית חטז86ק5 החדשה. שאר הכתוב בשורה 75 פשוט סוגר
את התגיות |6%3, 30065 ו-חט50866.
בשורות 79-81 אנו מבצעיס התאמה לתגיות 65 אסס50-0ח, ומתעלמים מהן. אנו כן
קוראיס ל-9000!8065-ץומְכֶּ כך שאס ישנס רכיביס בתוך הסימניה (6זואסס8), או
הטקסט, נאסוף אותס עס תבניות ההתאמה האחרות שלנו:
< אה א50-000רח' == (06650/!61306)0115"= זא חסחצו:|פא> :2
8065|וח6)-ץ|קק5|:8א> :0
<חסחש:|5א/> :11
אותה הלוגיקה ננקטת במקרה של ץווהח8)-+חס), 50/|6-%חס? ו-06סוח-סוזף-)טסעפו, מכולן
מתעלמים כפי שניתן לראות בשורות 83-95 :
<-- 6080065 %ח0? |063| 6זסחףו 4150 |['סצו --!> 1
<"ץורחה]-)ה0' == (06650/|6306)015"= ז0א6 חסחצו:|פא> 1
3065|כח6ם-ץ|כק5|:8א> :51
<חסחש:|5א/> 1
7:
<"50/|6-%ח10' == (015ז)6רח06%50/!63"= זאש הסחצו:|פא> 5
8065|כוח6ם-ץ|כק5|:8א> :5%
<חסחש:|5א/> :0
1:
<-- זו 6זסחףו ||'6או 50 ,15 פוחז )החש טס 6זטף ח6/6 %'ח68 --!> :12
< 30-00-00 == (06050/!636)0015"= זקא6 חסחצו:|פא> 1
3065|מוח6ם-ץ!כק5|:8א> 1
<חסחצו:|5א/> :51
לבסוף, אנו חייביס להבטיח שאין סגנונות ח8ק5 שחמקו מאיתנו מבלי ששמנו לכך לב,
ולכן אנו יוצריס להס מלכוד בדומה למלכוד שיצרנו לשמות תגיות ₪11 לא ידועיס.
בשורה 98 אנו קוראים ל-56וא51:0076א. בדיוק כמו שב- ++6 וב-8ו08 יש ברירת מחדל
6 בהצהרות ה-וו5 שלהם, ול-%8 יש את ברירת המחדל 6156 בהצהרת ה-56|6%
6 שלו, המסמלת ייכל מקרה אחריי. בדיוק כך, ב-51 יש : 6פוחסוזס. אס לא נמצאה
פרק 4: שינוי עם 5א | 115
התאמה לכל תבנית -₪50 אחרת, ה-656חזס יתאים. במקרה וה, בשורה 99 אנו
יוצריס תגית <חוסחאחט> עס התכונה 589, שערכה הוא ח508. אחר כך אנו משייכים
תכונה שנייה לתגית הלא ידועה שלנו, הקרויה 6!ש5, שערכה הוא סגנון
-80וח :
<00//156ז5|:0א> 1
<חששסחה>חט> 1%
<51:80710006א/ > ח <508 6="680רחבּח ססטטחס5|:3א> :100
<|51:0/8א<> < "|הע"=6וחבח 6סטטו5|:307א> 11
<06ט51:80710א/ > < |51:6/8א/ > (15ח6)ס רחב 6 /06%50 =
3065|כוח6ם-ץ|כק5|:8א> 2
<חשוסהאח/> 141
לבסוף, בשורות 104 ו- 105 אנו סוגריס את ההצהרות 006156 ו-0056ח6, ואחר כך
את הצהרת ה-80%6|ק%6 בשורה 106 :
11 > /<51:000/156<
<0056ח5|:6]/> 11
<806|קוח5|:66א/> :106
הרצת !ודוא ל- !אא
עקבנו אחרי 850.|סחס6 עד לשורה 130, עד לנקודה בה קראנו ל-0ז500ח8ש. תוך כדי
כך, חקרנו את נושא גיליונות ה-51א והטרנספורמציה. בתוס תהליך הטרנספורמציה,
אנו חוזריס ל-01.350ח60, כמוצג בתדפיס 4.8.
תדפיס 4.8
() 2 וו דא הסטסחט= :120
החזס? 11 |68והסחה6 זטס 60 ₪6 | דרוא הסעהס6 11
,10 , א=|וחא ,2חס , ו5אס חחוס 11
141
("ה 50 ד 51א. 50780 סז )76860066 50/6 = 051 56% 11
11
0% 3 הוע |וחא 0ף |ההסזחא +סעחס6 11
"|הוסחא." ,8 ה03%3780 = ס6ון-שסוסח1. ופאס 11
("|5א. !2 |[ דר]אזס/" ,זוס6סס6)ח6הקסווטם.150 = 6ון= ופא. ופאס +11
14
הזחה ד. ופאס 1%
11
0וחא. 35 +טוכסטס 58/6' 11
"|החא." .8 ה08%308% = ח|וחא +14
"0" 8 אחווחא = 100 11
0חז 6ון-05ו58/6000. |פאס :151
11
3 6 35 06007 586 6 ח! 15 000 6 +הר 556 6עצ' 11
"00 חהסחם6" = 000% 14
6 וויא למפתחי אתרים באינטרנט
14
6 0 סו ה הסקרחס6 8/ 66 0ף 0|וחא. 6חז שקוכ צוסח' :10
חס וחבט 6 0 -
(" !2 ]ו ד אס ה50786 חס )076860060 50/0 = 02% 50% 11
0 ,אח|וחא ,0חז ה6עח00.א2רס 11
11
6 6018%6 רסחו 6 660ח זסטחס! סח שעצ סחם' 11
10 6ון-0ז26!6. 150 11
11
אחא 8 " סס " 86 "|ההסחא." 8 הז035373 8 " ס6וסעחהס6" = ]א וואדרוא :1
חסטסחט= 0ח= :148
הפלט של מעבר ה-51א מאוחסן בקובץ !אא עס המספר 0 המשורשר בסוף. כך, שאם
ביצענו את המעבר על 2כִ8ח6, קובץ הפלט הזמני יהיה 10ו₪א.60802.
קוב זה, 0!חא.802ח6, משמש כקלט לשלב הבא בטרנספורמציה, המובא בפרק הבא.
עס השלמת השלב הבא, הקוב הזמני נמחק, כמוצג בשורה 145.
התוכנית לא מפסיקה בין השלב הראשון לשלב השני. השלביס מתבצעיסם ברצף באופן
אוטומטי; בזמן שהתוכנית מדווחת על סיומה (והדבר קורה די מהר), הקוב הזמני
כבר יימחק. במידה ונרצה לבחון את הקוב> הזמני, נוכל לעשות זאת על ידי הפיכת
שורה 145 להערה, ובכך למנוע את מחיקת הקוב>:
0 6|ו-6!600. 150 151
השוואת הקובץ הזמני עם קובץ ה-א הסופי יכולה לסייע לך להבין איוו עבודה
מבוצעת על ידי טרנספורמצית ה-51א, ואיוו עבודה מבוצעת על ידי שינוי ה-ואסס
שב- |ואא, המובא בהמשך.
הצעדים הבאים
סיימנו שלב ראשון במעבר מקובצ ה- |וא דחא למסמך |1א. בפרק הבא נמשיך בשלב
השני והאחרון של המעבר ל-חזס? |688ח0ח63 שלנו. כדי להשלים את המעבר הזה אנחנו
ניצור שינויים ישירות ב-אספ של מסמך ה- ווא.
פרק 4: שינוי עם 5א | 117
פרק 5
ביצוע שינויים ב-!סספ
בפרק זה:
בחינגת סוב הביניים
יצירת סְסטעים
המעבר מ- \ דא ל- \* - חלק \
אזיסוף טססעים: אוססרסוניה
יצירת החיררכיה
בלוסי סוד
הצעדים הבאזים
לאחר הטרנספורמציות שביצענו בפרק 4, יש בידינו קובצ זמני, בדרך אל קובצ ה- !אא
הסופי שלנו העומד ב-וחזס) |683ח0ח68 שלנו. עד כה השתמשנו ב-]5א לשינוי התגיות; כעת
נותר לנו ליצור קיבוץ של הקטעיס לכדי מבנה היררכי, ולצרף את רשימות הקוד וההערות.
אנו נבצע את המטלות הללו בשני שלבים. ראשית ניצור את ההיררכיה של הקטעים על
ידי סריקת ה-וז0פ של מסמך ה-א הקיים ויצירת אספ חדש לפלט. ה-ואספ החדש
ישקף את ההיררכיה של הקטעים.
שנית, נבצע שינויים ב-0%פ החדש הזה כדי ליצור קיבוצ של רשימות הקוד וההערות. שינוי
הרכיביס יעשה ב-אספ עצמו. ואת במקוס לפלוט את המבנה החדש לפלט ספ נוסף.
אס ברצונך לארגן מחדש את מדף הספריס שלך, ישנן שתי דרכים בהן תוכל לעשות
זאת. בדרך הראשונה, תבנה מדף ספרים חדש, ואז תיקח ספרים מהמדף הישן
ותמקם אותם היכן שאתה רוצה על המדף החדש. הדרך השנייה היא להסיר ספרים
מהמדף ולהכניס אותס חזרה לאותו המדף, אך בסדר אחר. כלומר, לשנות את הסדר
בתוך המדף עצמו. בתכנות זה דומה מאוד לשינוייס על מערכים (למשל, מיון מערך) -
אתה יכול לשנות את המערך על ידי שינוי סדר האיבריס שבתוכו, ואתה יכול גס
לעשות ואת על ידי שימוש במערך עזר.
פרק 5: ביצוע שינויים ב-אספ 119
בחינת קובץ הביניים
קבצי הביניים שנקבל לאחר פעולת זסו5ח8זד%51 קרויים 0!וחא.?ק8ח6. למשל, קובצ
הבינייס עבור פרק 3 הוא 0וא.60303. הבה נבחן קטע מתוך קובצ זּה, ונקבל מושג
לגבי הצורך בעבודה נוספת, כפי שניתן לראות בתדפיס 5.1.
תדפיס 5.1
"1.0"=חסופזטע |וחא?> :0
<|ווסה> :1
<"2ח"=0855 צו >0 :2
3) 3
<שו0/> 41
<"ם0855="7 צ|0> | :5
+00 ?0 זססזק(ם) :6
<שו0/> :7
<"]-"=₪855 צן0> | :8
חש רח6וקרחו |['ס וס ססר טהואחורם הו והזו שח סף סצו 6זסו₪6 !ץזססוט הפטסתם :9
ה ץ6ס|סהח66 הס )חס רח6!קוחו 6 3% אסס| 8 66ב+ סז 660 6צו ,6%ססץסוקוחם -
ןאזס 506 =-
<"כק"=6|355 /01> <עוו0/> :1%
***6ת0)] חו60ש*** :171
<צו0/> 11
173: >ח06ס|וח6<
,63 פוסוששזס 06 חו 60חוב!א6 5 .צסכזססח1 |הטפו/ זסז 50605 6 סזבּ סוס :174
6זה טסץ ]ו זס ,%זסצססח זס זססטוקהחסס זטסץ חס %ח011076 06 8 0663|85 6865 6ר%-
00 566 חחו!80ח6 %60706%ח1 %ה01676 הופט-
<6חו|ם6סח/> 11
<"0ק"=6855 ש01> = :176
***60ס)] 0חם*** :177
2 8ח50ו] :982
<שו0/> :3
<6חו|6006> :984
8 ()60800ה [260) הסטסחט- :1 :985
<6חו|6006/> 1
<6ח!|6006> :987
988: 1
"4"= ח6]! חט528067> :0
:0
5 פז וחוכ :991
<6חו|6006/> :2
<6חו|6006> :993
994: 1:
"4"= ח6]! חט528067> :5
:6
0 ווא למפתחי אתרים באינטרנט
997: 56 5 = 6
<6חו|6006/> 1
<6חו| >6006 :999
1000: 1
"4"=ח6! ח5086670> :101
:1
,"05 = 550" ,"פזסחפו!ס וכ וחסי] * 56166")ח06 5.0 וו63. :1003
"1"=ח6! ח5086670> :104
:15
";=ס/ק ;58=כ1 :1006
<6חו|6006/> :1
<6חו|6006> :10
1009: 1
"4"= ח6]! חט'508067> +10
11
1012: 56% 0601 60808 = 5
<6חו|6006/> 141
<6חו|6006> 11
חסטסחטת 0חם :6 :1015
<6חו|6006/> +16
<"]="=6|]355 /01> :171
וק 6 חן 5060!| ז66(סזכן 66 הטוא ,3.11 6זטףו= 6או! אסס! ס|טסח5 ח50766 זטסץ :1018
6 חס 600 6868 0607 סו חו הצוסח5 6006 6 0חה 0 6 חס צוססחוצו-
<צו0/> 14
השמטתי חלק ניכר מהתדפיס כדי לחסוך במקוס, והתמקדתי בשלושה תחומי עניין
מרכזיים. בעוד שקובצ זה קרוב יותר ל-וחזס) |0068ח68 שלנו מאשר קובצ ה- וואדוא,
הוא עדיין לא עומד בדרישות המוצגות ב-סדפ שלנו, ואינו חוקי.
בשורה 1 אנו רואיס את הרכיב |וחא המציין שקובצ זה הוא !יא בגירסה 1. יש לזכור
כי בעוד שקובצ זה אינו חוקי (מכיווו שהוא לא עומד בדרישות ה-סדפ שלנו) הוא עדיין
מסמך אא בנוי היטב (עומד בדרישות המפרט של 1₪א).
שורה 2 מראה כי רכיב השורש הוא . אבל, ב-סדפ שלנו קבענו את רכיב השורש
כ- <000%>. נתקן ואת בטרנספורמציה הבאה שלנו.
נשיס לב גס כי אין התייחסות ל-סדס שלנו בקובצ הביניים. לכן, יש להוסיף לקוב
ה- אא הסופי את השורה הבאה:
<"000. חסח68" = [55 אססס םקץצך6סכ!> 11
הוספת השורה הזו תתבצע בטרנספורמציה ממסמך הביניים למסמך הסופי.
הרכיב 5קץז006 הוא אופציונלי בכל מסמך |אא. אס הוא אכן מופיע, הוא יכול
להופיע רק פעם אחת, והוא מגדיר מהו ה-פדס עבור דף זה. לאחר מילת המפתח
פרק 5: ביצוע שינויים ב-אספ | 121
ץצ 0 נכתב שס המסמך (במקרה שלנו 000%) ולאחריו ייכתב הרכיב 008116 או
א ד צ5.
מילת המפתח 7/8116 באה לאחר המזהה 0060ח106), בו ייעשה שימוש על ידי מנתח
התחביר כדי לקבל את ה-סדס מתוך מאגר פנימי או חיצוני. בדרך כלל הוא בא יחד עס
כך שאם מנתח התחביר לא יכול למצוא את ה-סדס באמצעות המזהה, הוא יוכל
להשתמש ב- |חש.
במקרה שלנו נשתמש במילת המפתח 8% 5/51, המורה למנתח התחביר ללכת ישירות
ל- |א(0 המסופק. אנו מספקים גם שם של קובצ, שימצא באותה תיקייה בה מצוי מסמך
המקור.
בחינת קובץ הביניים בפירוט
שורות 3-7 של תדפיס 5.1 מראות כי שינינו את הכותרת ברמה-4 שלנו ל- <0>, וזה
רק לטובה, | אך בדרישות ה-סדם התלטנו שכותרות | אלו ימוקמו
ב- <ח6566000, ועדיין לא השגנו זאת.
בהמשך קוב הבינייס, בשורה 6 אנו רואיס שהכותרת ברמה-8 הוכרזה כ-צו0. שוב,
עדיין לא קייס כל יחס בין הקטעים (5600005) בקוב ה- |ואא; הס ממשיכיס לשקף את
התצורה הליניארית של המסמך המקורי. בטרנספורמציה הבאה, המטרה שלנו תהיה
ליצור מבנה היררכי של יחסים, בין הקטעיס השונים.
שורות 173-175 מראות את תגיות שורת ההערה (6חו!6סא) שיצרנו בטרנספורמציית
ה-51א, אך ע'יפ דרישות ה-סדפ שלנו, אלו אמורות להיות מוכלות בין התגיות <0%6ח>
ו- <0%6ח/>. באופן דומה, שורות 984-1016 מראות סדרה של תגיות שורת קוד
(6חו!6006), אך שוב, ה-פדפ דורש שאלו תהיינה תחומות על ידי התגיות <0006> ו-
<6006/>. את כל הבעיות הללו נתקן בסבב הזה של טרנספורמציות.
יצירת קטעים (566%0₪5)
המשימה שלנו היא להעביר את הכותרות ברמה-ג, -8, -6, ו- -5 למבנה יחסים היררכי
בין קטעים. אס היינו צריכיס לקרוא את קובצ הבינייס לתוך מסמך ה-ספ הוא היה
מאוד שטוח (688). כל הכותרות ברמה ס-8 היו מיידית נמצאות תחת רכיב השורש, כפי
שניתן לראות בתרשים 5.1.
2 ווא למפתחי אתרים באינטרנט
|ם -וחסם
1 חסופזפע |וחא סוטטס
תרשים 5.1: מסמך הביניים שטוח
במקוס ואת אנו רוציס להפוך אותן לקטעיס המאורגניס בהיררכיה, כמוצג בתרשים 5.2.
₪
1 חסופזפע ווחא
-וחסם
]חפוס
<ח0סו9601>
"" = |608|
<ח938000>
"ם" = |8ש6!
<ח980%0>
"0" = |808|
<ח590%0>
"0" = |800|
<ח0ו!960>
"ס" = |8/6!
<ח936000>
"ס" = |8ש6!
<חסו!560>
"ס" = |606]
<ח0סוו960>
"ס" = |8ש6!
תרשים 5.2: ארגון היררכי
כפי שניתן לראות, מסמך ה-אספ החדש ישקף את היחסים בין הקטעים כפי שהיינו
חושביס עליהס באופן טבעי: קטעי 6 מכילים קטעי פ, ומוכלים בתוך קטעי 8.
פרק 5: ביצוע שינויים ב-אספ | 123
ההגדרה של קטע
הבה נביט בהגדרת ה- דכ של רכיב הקטע ח560000. תדפיס 5.2 הוא חלק מה-סדס כפי
שהופיע בתדפיס 3.9 בפרק 3 :
תדפיס 5.2
6 3 ואו הוס6 300 300665 0 חב |6/6! 6העח 5660005 - -!> - :14
< - - 5660085 0067 חוח60 ץוח 5ה0ו560 :15
<(*(6006 | ש6סח | צו | ח56600) ,006) ח56600 דאשוזם |ם!> | :16
ח56600 ז15|דדה!> :17
וס ד 60 6/6 11
<00150 + ה דה ס6 ו 1
החלטנו שלכל קטע תהיה כותרת אחת בדיוק (כלומר, חייבת להיות לו כותרת אחת
ורק אחת). כמו כן, יכוליס להיות לו אפס או יותר קטעיס אחריס של בלוקי 0006,
סשסח, או עו בתוכו. בנוסף לכך, ניתן לראות כי לכל רכיב שתי תכונות דרושות : |646!
ו-10, שניהס מטיפוס 60414 - שהוא טקסט שאינו מנותח תחבירית.
סיור
קצר
תזכורת: 60868 הוא טקסט המנותח תחבירית: כלומר, זהו טקסט פשוט שמנתח תחביר
ה-|וא ישתמש בו לבחינת תגיות כך שהוא עשוי להשתנות בהתאם. 4זג60 הוא טקסט
שאינו לניתוח תחבירי: אנו משתמשים בו בכל פעם שעשויים להיות לנו סמלים מיוחדים
כמו הסימן קטן מ- (>) או גדול מ- (<), אשר יבלבלו את מנתח התחביר.
תדפיס 5.3 ממחיש כיצד הכותרות ברמה-4 ו-8 ייראו בקובצ ה- !אא הסופי שלנו, כמו
גם איך התגיות <6סח> תתוספנה.
תדפיס 5.3
<"12="3000 "6/6|="4! ח56600>
<3>/006 זססקהה)<6ו">
<"3001"=כ1 "ם"=|6/6| ח56600>
<6601>/006חס6 +0 )ססזק <16?>
<0%ח>
<6חו|זסח>
,63 פגוסוטסזק 66 חו 60חוה!קאם 25 .צסכזססח1 |ה8טפו/ זס) 50605 606 סזבּ 6זסרן
טסץ ) וס ,%זס סח זס זסזטקוחסס זטסץ חס %ה01076 06 עפ 0608185 60866 6ר+=-
6000 ]680 6%ח067ח1 %ה018076 חחופט סה -
<6חו|0%6סח/>
<0%6ח/>
4 וויא למפתחי אתרים באינטרנט
המעבר מ- ודוא ל- |אא - חלק זז
נזכור כי הקוב> %01.850ח60 שלנו יצר את הקובצ (הזמני) 0|חשח. הוא גם ישגר את
השלב השני בטרנספורמציה שלנו. תדפיס 5.4 מציג את הקטע הרלוונטי
מה-01.850 ח60.
תדפיס 5.4
() ]2 || דרא הסטסחט= | :120
רחוס ]וא |63והסח63 וטס 60 6!₪ | דרוא הסעחס6 1
א- 0 ,100 , =וחא ,<2הס , ופאס חום 11
141
("ה0ז5 8 ד 51א. 50780 סז )76860066 50/6 = 051 56% 11
11
3 הוע |וחא סף הזחא +סעחס6 11
"|הסחא." ,8 ה08%378% = ס6ון-שוסח1. ופאס 11
("|5א. !2 |[ דר]אזס/" ,זוס6סס6)השהקסווטם.150 = 6ון= ופא. ופאס +11
14
החזסזפחה זז ד. ואס 1
11
0וחא. 35 +טוכסטס 58/6' 11
"|וחא." 8 הז508ז03 = =|חא +14
"0" 8 אחווחא = 100 11
0 6ון-015וכף0וכ58/60. ופאס :151
11
33 06ז 35 ץז66+0יוו1) סוח53 576 הו 15 060 6+ +03 3556 סע 11
"0 חהסהב63" = %-50 14
14
6 00 0+ +הסהסקוהס6 8 6+ 0+ 0!חוא. 6+ סקוכן עשסח' 1
הסוז3ּוח 510 3+ 6+ +0=-
(" 21 וו ד אוזס//.ה5673%6והסיו- ")166% 63%60ו6.זסע507 = <2רוס 56% 1
א ,א-!וחא ,10 +וסעטהס6.א2וס 11
114
6 הוחו 6 660 זט חהס! סח סע החבּ' 141
0]) 6!ו-150.00]606 :1
:11
א|וחא ₪ " סז " ₪ "!וה+חא." 8 +23 +03 8 " 60צ+וסטחס6" = ווזא2 וואדוזא +11
חסטסחט= 0ח= :148
שורות 120-135 מבססות את הידע שהוצג בפרק 4. קוב הפלט (במקרה וה
0וחא.60803) נשמר בשורה 135.
בשורה 138 המשתנה הלוקאלי א060 מקבל את הערך "060.חסח68" - שהוא שס קובצ
ה-סדפ שלנו.
פרק 5: ביצוע שינויים ב-אספ | 125
כדי לשמור על קוד זה פשוט, אנו מניחים שה-000.חסח69 הוא באותה
התיקיה של קבצי המידע. ניתן להפוך את הקוד לגמיש יותר על ידי שימוש
2 ב-081 כדי להצביע על ה-פזס. אם רוצים להשתמש בזה כפי שהצגנו,
זיכרו כי יש להעתיק את הקובץ 060.ח0ח69 (מצוי בתקליטור) לתיקיה
המכילה את 10א.803ח6.
בשורה 141 אנו יוצרים מופע של אובייקט ה-א6%ע60 |ואא2 וו דהאסזס\ ובשורה 142
אנו קוראיס לשיטה +6₪עח60 על אובייקט זּה, תוך העברת קוב> הביניים (10וחא.3ס8ח6),
קוב הפלט (ווחא.803ח6) וקוב ה-60 (660. חסח608).
מודול ה כתבנו ב-8856 |1808/, כמוצג בתדפיס 5.5.
תדפיס 5.5
6 עם 60הזסזו6ס) הסופזסעהס6 ]וא 0 וא דרא זס 56החכ זו 6 01 %| טפס 6רז 5סאבדי
"שחו|חטט" 006 חחו00 ,00655זכ הסופזס 60 6 65 חח 60 חהסר 0ב (660ח50/65'
.65 רח6!6 זי
,500 5 הזהקשוס |3/ץ8 ,חַחו5 45 הזהקחו [ה/ץם )ה 6עח60 טטפ סווטגוק
("" = 0חו5₪ 5 000086 |3/ש5 |החסטקס=-
,50 45 פטס ,6חהסוהטס6ססוסכ 45 והסססטס ,6הסוהטסססוזסכ צוסאז 5 ההססחו הזוס
58 45 00050=-
סכ 3 ססחו ₪6 6ח+ וחסי ]וא שו פסו'
6 = סחץפה. והססחו
וזה קחו 080 ].והססהו
560005 |6/6! ...,0,6, 2 6 0ח601!600 15 הסה זסקס סז סחש'
(ה חס חו)5ה00!!66056600 = והססטס 56%
0 <0006> 8 ססחו 65חו] <6חו|6006> פוסטס חסס 06 || 66!ו60 6עצ זאסח'
"6006" , רהסכטטס 08ח0כ600!ו0
חן סלסח זסז סאום'
"ס6סח" ,רהסכסטס 08ח60|!66050
500 3 ססח!ן ]פס 6חז 06%'
|וחא.וחסססטס = שפסטס
6 ההא סחה 0060/06 6 ה6פחו ,5060060 הססכ 5בח פד 8 זוי
+ זו 6זטףו %ח63 1 זט ,ףסכ 06 הו א 00 60 עו 3 06 0|טסח5 6סח% 6א!!| 5065
הסח "" <> 000300 ]1
סע 8 "<""" ,8 ההק000 8 """ ם ז5ל5 אססם םקץז06כ!>" = 000576
וק |החא 6 30 %ח 6 שפח %0 זחפצו סעצ'
(1 , ,00050 8 +1)טע 8 "" פע 8 "" ,ססזטס)366ו₪ = שססזטס
0
6 וויא למפתחי אתרים באינטרנט
ד לכל
5
20
6 ב סח 050/05 6 586 6צ עשסח 0חב' 7
1 5 )טסט זס=] הזהק6טס חסקס :21
חסזטס ,41 זחווק 1
1 6|056 1
טפ 0 :34
בשורה 3 ניתן לראות את הפרמטריס המועבריס מקובץ ה-ס35 השולט. בשורה 4 אנו
יוצריס ארבעה משתניס מקומייס. השנייס הראשוניס הס אובייקטי מסמך אספ.
אובייקט ה-1אא היחידי שנוצר ישירות הוא זחסוט6סכ וחספ. כל שאר האובייקטים,
כמו הרכיביס למשל, נוצריס באמצעות שיטות של זחסוחטסססוחס, כפי שנראה מייד.
בשורה 7 אנו קובעיס את המאפיין 6חץ35 של ספ הקלט שלנו ל-89|56. משמעות הדבר
היא שכשנטען את המסמך הזה, התוכנית שלנו תחכה עד שהמסמך ייטען במלואו לפני
שתמשיך. טעינה אסינכרונית נוחה מאוד כאשר התוכנית עלולה להיות עסוקה
במטלות אחרות, אך במקרה זה אנו מעדיפים לתכות.
בשורה 8 אנו טועניס את המסמך, תוך העברת שס הקוב לטעינה. היחס בין קובצ וה
(0|חחא. 3קְהת6) וה-אספ שבויכרון הוא יחס עדין יותר ממה שנראה במבט ראשון.
הגישה מונחית העצמים
כל מתכנת מבין את ההבדל בין קוב על דיסק ובין חייצוג של אותו קובץ בוּיכרון, אך
אנו עדיין נלכדיס בדקויות שבהתקשרות עם ה->|אסק. להלן הסיבה לכך: אנו למעשה
מטפלים בארבע יישויות, לא בשתיים.
%
> יישות 1: המסמך הפיזי בדיסק: סדרת בתים המאוחסנת על ידי מערכת ההפעלה
באחסון קבוע.
+ יישות 2: המסמך הלוגי כפי שהיינו עשוייס לראות אותו בעורך או בדפדפן.
+%
יישות 3: ה-0%פ הפיזי - בתים בציכרון.
+ יישות 4: ה-אספ הלוגי - הרכיביס והצמתיס בהיררכיה כמתואר בהמלצת 36).
הבה נהיה ברורים, עד סוף הספר אני לא אדבר על הבתים הפיזיים, לא בדיסק ולא
בזיכרון. אני מעוניין רק ביישויות הלוגיות.
כן, כמובן שבסופו של דבר המסמך וה-אספ צריכים לבוא לידי ביטוי
בבתים, אך למה לעצור שם? בתים הם למעשה רק תופעת לוואי
0 המתקבלת ממצב רגעי של מעגלים חשמליים. למעשה, מעגלים חשמליים
הם רק מטאפורה למצב כמות החלקיקים הלא-דטרמיניסטיים. הדבר
שמעניין אותנו הוא תמיד ההפשטה הלוגית; הבתים הם פשוט מנגנון
יישום.
הערה |
פרק 5: ביצוע שינויים ב-אספ | 127
המסמך וה-זספ
היחס בין המסמך וה-אסס הוא מורכב ומעניין. ה-ואספ (ו006/ 091666 +חסותטססס)
הינו ייצוג מונחה עצמיס של המסמך. כל רכיב במסמך מיוצג על ידי אובייקט ב-ואסס.
היחס הוא הדדי: המסמך הוא ייצוג ליניארי של ה-|אספ.
כשאנו יוצריס מסמך ספ (מופע של זחסוחט6ססואסכ) אנו יכוליס לאכלס אותו על ידי
הוספת רכיביס בעת הצורך, או על ידי קריאה לשיטה 1080 של מסמך ה-ספ החדש
והעברת מסמך |]אא. במקרה האחרון, ה-0פ המתקבל יהיה מובנה לחלוטין; בייצוג
אובייקטיס ישיר של מסמך ה- !אא שהועבר. זהו האופן בו אנו יוצריס את מסמך ספ
הקלט שלנו, כמוצג בשורה 8:
הזחו 080 |.וחססחו :0
בשורה 9 אנו קוראיס ל-60]!8005660005, תוך העברת ספ הקלט החדש שנטען
במלואו. הערך המוחזר מהקריאה לשיטה יהיה מסמך |אספ חדש, שנשייך אותו ל-וחסספטס.
איסוף קטעים: אסטרטגיה
נזכור כי בתרשים 5.1 הראינו עצ שטוח, עם כותרות ברמה-א, -8, -6 ו-פ, שכולן
מקושרות לשורש. האסטרטגיה שלנו תהיה לסרוק את העצ, וליצור עצ חדש, עס
הקטעיס החדשים שנוצרו, במיקוס הנכון.
יש לזכור כי ישנם גס רכיביס רביס אחרים בע המקורי. למעשה, תרשים 5.1 יהיה
יותר מדויק (אך עדיין מפושט יחסית) אם יכלול רכיבים כמו טקסט, הערות, קוד וכן הלאה.
האסטרטגיה שלנו תהיה לסרוק את |אספ המקור (הנוצר מקובץ הביניים), ולבחון כל
רכיב. אס זהו רכיב 01> עס "?ח"=6855, ניצור רכיב <ח56600> חדש ב-6ספ היעד
(שמאוחר יותר נשמור כקובצ ה-ווחא. שלנו).
נשתמש במשתנה מקומי הקרוי זחסזקזט6, שבתחילה יצביע על רכיב השורש. נוסיף
את רכיב הקטע ח56000 הראשון שלנו כרכיב בן של זחסזפּקזט6 (שורש), ואז נכוון את
+חזהקזוס להצביע על קטע זה.
נמשיך לסרוק את מסמך ספ המקור, ונוסיף כל רכיב שנמצא כילד של 6חסזפקזגו6
(הקטע הראשון שלנו) עד שניתקל ברכיב 01> עס "?6|855="0. בנקודה זו ניצור רכיב
קטע 560000 חדש, נהפוך אותו לרכיב בן של ז)חסז8קזט6, ונכווו את +ח6זקזט6 להצביע
על הקטע החדש שזה עתה הוספנו.
שוב, נסרוק את העצ, כשהפעס נהפוך כל רכיב שנמצא לבן של זחסזפּקזוט6 הנוכחי (הבן
השני שלנו).
נחזור על תהליך זה שוב ושוב עד שנעביר את כל הרכיביס שב-ואסס המקור שלנו
ל-ספ היעד.
8 ווא למפתחי אתרים באינטרנט
איסוף קטעים: יישום
ניישס אסטרטגיה זו באמצעות השיטה 60]!660005600005 כפי שניתן לראות בתדפיס
6.
תדפיס 5.6
6 60 חס 6 5 הפצ 6 + .5חו60 הס5660 3 הסחצו צוסרא זפטן סט ,סזסצצ חו' :0
0 <566007> 3 חן 6000560 06 60 (05ה08ח06506 |31 חוסטוסחו) הסו566 חסצום ב'. :1
:2
5 ח 566 סז סהו)סס! ,05ה6רח6!6 66 | זר 6|האו ס6 15 הסהסזקקבּ סש :3
66 ה0ו5600 6 85 567/6 0+ 006ח שוח 8 070806 סצ' :4
6 56000 6+חסוו₪ 6 קסכן זס הפכ 6 ,680 הסו566 סח ה686 זססהטס6חס סע 5הּ' :5
ח56000 6 01 "[6ע6|" 6 חס 0560 :6
:7
(וסוסם .05) 66 )טכ טס ושח 3 קט סווגטםט חב >טסחו 06 || זוז 6|הצו סצ סח זהרז סזסת' :8
הסרה ססכו סכ 5 סהסוהטסססו סכ 5 ההססחו50ח60|!6056600 הסססחט= סזהשטחק :9
5% |06סזסכ [יזאע 5 הסזסווה6 %6הסוהטסססו סכ 5 והססטטס ,חס | 5 1 הזוס 10
חס רתסום!ז כ |]א1 45 +הסזהקזטס ,סחו50 25 63551436 ,6הסותסום סכ וזא 5 6 הזוס :11
חס רח6ם זכ ]א 5 06 , ההס|סס 5 )חס 6ה6וח6!ם סכ [ווי]א1 5 6אוסח חחוס 121
58 5 5-
חסוס6ו0010507ו6655סזק סכ ]יא 5 וכ ,חס 5 10הס566 הזוס 11
11
0) סח שוסחא 60 660ח שא טס ,0 טוח 3 הס5660 686 סשעוף 60 סחוסס סז'סעצ' :15
ווח 3 ח6 8 15 630% 6806 חן 680 2 6 ,00665 656 זסזי 11
0 עס פוט ץוסטוטוח ||'ס/) 50-
0 0חו5%31 ₪6 35 )|פסז 6ר% 6פט סחבּ' :17
("[ '=6!355 ₪ ] עס" )5616650600 והססחו = 6 56% :ו
("000" .8 ()א6 ד.6007)6 |הסזהקקו50)ַת61 = 10חהסו5060 :1%
:20
טס טס 6 זס+ כ צוסח 8 670806 :21
חר 01006 צו6א = והססטס 56% :22
:2
הסוט50חו 8חו6655סזכ !]א 06 00ב' :22
('"1.0'=חסופזסע" ,"[ההא" )03065550 ההססזטס = וכ 56% :25
וכ 0וח06חהסקקב. והססט טס :20
:27
דחו חוס6כ 6צו 6זסחצו 06 3!50 ||וא הסוחעע - +ה6ח66 |6ע6! קסל ב זו 6עוט סחפ' :20
]טס טס %06-
("א200" )66| 67680. והסכ)טס = זחסזהקזס 56% :20
קוחסט' "0" ,"|6/6|" ססטוסו 566. הסה קז :2
הזה קזנו 6!וח-06תסקקבּ. והססזטוס :211
:2
66% |6ע6|-0סם 6ל 01 ה6זם!וה6 60186 הרח| 6 || רטחש 60 %חהצו סעצ' >
+טסחו 6 )0 (<|ווסחה>)=-
פרק 5: ביצוע שינויים ב-אספ 129
5 006 רסחו = הסזם!וח6 56%
1 - ה00ח6ו. חסזט!וח6 סד 0 = | וס
6 = <>ווחס
הסחד דאשוים ₪1 05 = 6קץ ד6ססה.(1)חסזטווה6 זז
(1)ח6ז1!0ח6 = 6 56%
חסחך "עו" = 6ח8ּ 6סח.6 +[
("06)"0|355ט6.060/ 70 = 613558806
הסרד "ד" = (1 ,06ח6)635588 | זז
6 5 00 60 %ה6רח6|6 חב 676866 - 08007 צוסח 8 סטב סעצ'
("ה0ו5660" )66| 67680. וסוס = 6צוסח 56%
(1 ,₪100%)6!3551%306 , "|סע6!" 6סטוסו566. 6שוסח
5606 ,"סו" 560066 6/עסח
1 + 5660010 = 50600010
ח56600 66 )0 ₪06 6ז 06606 |!וצ +ה6רח6!6 5ור 01 ה ה60 זחה6וט6 6רט'
("6 ")660 6806ז6. והסכ טס = 006 56%
(0א6 6.7)וחוזד = 5
501 ח63 שאו - חהוהחו60ס 06 36 "(א)" הובלחסס 680015 6 + זפסרח'
(5)ז600 |חסזהקקו 5 = 5
זז ה65 605! - סט טח זססקה6 06 6עוף 5%[ 5|סעס| ת'
₪5 " 00" = 5 הסחך "ב" = 63550306 +[
ח0ו566 6 +0 0!וח6 8 35 +ה6וח6!ם ₪06 6+ ה56חו צוסח'
5 = ₪06.76
6 חווח0חסקקה. סח
הזה +66 וס 0ם |6/6| 6306 6 חס 0626005 00 שצו +החעצ'
הסחד ("[6ע6|" )טסו 060 .הס זה קז טס < ("6ע6|" )הסוסה זז
הפוכ 30 670806 ,66 6ח) חן הזק06 זסלה6ז 3 36 .6 ,6/6 זסחטות'
|6/6| ששח 8-
6וסח 6!וה-)סהשסקה.זחסזהק וס
הסרד ("[6ע6|")סס וטו .הס זה קז 6 = ("|סעס|")סס טסו 060 6צוסח 56
ההק זה6 ₪ 6 סש זססכ 3 5 פוחז'
שח !וה השקב 6 סז חס זב +הסז הזוס
6
6 6 פַהוקקסכ 6זהּ 6עצ'
סס
6 .הזוס = %ה6זהק 6 56%
זכ 8 0חה 6צו וסחט סט
("|6/6|")ס טס 0 06.-)צסח = ("[6ע6!")ססטוסו .סקז זז
ספ +א₪ חסה[=-
0 ווא למפתחי אתרים באינטרנט
1
51:
1
1:
1
7
210:
2111
212:
211
1:
1
21
217:
211
21:
1
11
1
1
1:
1
1
1
1
7
7
0%
2
1
+
1
1
1
1
7
0:
1:
1
1
1
2-2
קסס |
החסה וס סח הס 66 שוח 66 +56חו ח63 סע סחם'
6 0!וח- 0 חסככב. 006 חס זכ זהסזהקזוס
₪0 +
סח ז0 הסזס!וח6 06 60 3000005 עשסח || +חפצש סעצ צוסח'
6 = %חסזה תס 56%
ו6זוס הסח 0+ 660ח +'חסם 6צש סחפב'
סד = +ווחחס
+ 0חם
+ 0
+ 0חם
וכ וס 6 60 06סח 5וחש 00ב'
(6וז )1006 6.00 0ווה-0 ח6קסב.זחס הטוס הסח ך 6וחחס זסא זז
כ
6זסוח עֶח3 6! 660ח ז'הס0' "|סע6|" שסוסו 6 רחש .66| סרח טס והססטווס
רחס 5016060חהס6 ץ|/ש6ח 6 הזנססז'
ההסכ טס = 60|!6005660005 56%
1
1:
1
1
7
1:
1
1
1
51:
1
7:
1
7
01
1:
12:
1
1:
51:
חס6חט 0חם :96
בשורה 9 ניתן לראות את מסמך 00% המקור מועבר כפרמטר מסוג )חסוחטסססויוסס,
וניתן לראות גס את ההצהרה שהפלט של פונקציה זו יחיה מסמך |אספ. מסמך פלט וה
נוצר בשורה 22.
הבה נחזור אחורה לשורה 18. כאן המשתנה המקומי 6, המוגדר בשורה 12 להיות
+ח6ח6ום סק |אאת, מקבל את תוצאת הקריאה ל-9!6006ח56!66%51 על אס הקלט.
השיטה 56|6655100!68006 מקבלת פרמטר: מחרוזת של תבנית. 006ח56|6605]00!6
מחזירה צומת (006ח) בודד, המתאיס לתבנית.
התבנית היא "[₪6!855='44]שו8//", תבנית ו מתחלקת לארבעה חלקים :
* חלק1://
+ חלק 2: צו0
* חלק 3: [ =60|855]
+ חלק 4: אח'
ישנו שתי דרכים לציון חיפוש אחר צאצאים. לוכסן יחיד (/) מציין ייהצאצא הישיר של
הצומת הנוכתייי, ולוכסן כפול (//) מציין ייכל הצאצאיס של הצומת הנוכחייי. במקרה
שלנו, אנו מחפשיס אחר כל הצאצאיס של הצומת הנוכחי (שורש).
פרק 5: ביצוע שינויים ב-ואסספ
11
חלק 2 הוא סוג הרכיב אותו אנו מחפשים, במקרה שלנו צו6. לכן נחפש אחר כל רכיבי
שו שבמסמך.
חלק 3 מציין שאנו רוצים להתאים רק רכיבי שו בעלי תכונה מסוימת (הסימן [6]
מציין תכונה), וחלק 4 אומר כי התכונה שאנו מחפשים היא 'הח'.
התוצאה הכוללת היא שאנו מבצעיס התאמה לכל תגיות <טצו₪> עס התכונה .44 '=6|355
ומשייכיס אותן למשתנה 6. בחינה של מסמך הקלט תמצא רק רכיב אחד כזה.
להלן האופן בו נראה רכיב כזה במסמך הקלט, 0ווא.600803 :
<""=0955 עו0> | :8
3) :9
<ט0/> :10
כתוצאה מן הפעולה הז)ן, 6 הוא רכיב <צו0> עס תכונה 6|855 שערכה הוא ח. ל-6 יש
בן שהוא רכיב טקסט שערכו הוא 3(ה).
יצירת ה-15 של הקטע
אנו ממשיכיס עס שורה 19, שגס היא מעט מורכבת :
("000" .8 (?א6 ד.6)ז600 |חסזבקק50)פַח 1 = 10הסו566 | :19
כאן אנו מקבלים את המאפיין 6%ד מהרכיב שלנו, שהוא 8(3) ומעבירים אותו
ל-ז600 1ח876קק501, כמוצג בתדפיס 5.7
תדפיס 5.7
58 5 (0חו50 45 5 |3ץם)זס6 |הסזהקק50 הססס6חטת סזפטוזק :0
"(א)" 8חו680! 6שסותסז' 1
(4 ,11065 = 5 חסחד "(" = (1 ,3 ,5)סו סח ")" = (1 ,665 וז :2
5 = 0007 |הסזהקקו5 3
חסטסחט 0חם :4
התוצאה היא החזרת המחרווזת '3'יי, מספרו של הפרק. אנו משרשרים את המחרוזת
000" ל-יי3'י ושולחיס מחרוזת משורשרת זו לפונקצית 8ח61 המובניית של 8/, אשר
הופכת את המחרוזת "3000 למספר 3000. הערך הזה מוחזר ל-10חסו5660.
כל פרק ימוספר בהתאם. כך, לפרק 4 יהיו קטעיס שימוספרו בתחוס 4000 עד 4999.
אנו לוקחים כנתון שאין פרקיס עם יותר מ- 999 קטעים או תתי-פרקים (למעשה, אין
פרקיס עס יותר מ- 100 קטעים). למרות זאת, אנחנו מגזימיס ליתר ביטחון.
יצירת הוראות עיבוד
עתה אנו שביס לשורה 22, היכן שמסמך ספ הפלט נוצר. מסמך פלט זה יהיה ב- ו!אא,
וכל מסמך 1א דורש הוראת עיבוד בראשית הקוב, כמו זו שלהלן:
"1.0"= חסופזסע |וחא?>
2 ווא למפתחי אתרים באינטרנט
משימתנו הראשונה היא ליצור את הוראת העיבוד הזו, ואת אנו עושים בשורה 25.
שיס לב להצהרה של וס בשורה 13 ; זהו ח665510010500600סזקוחסכ |וא1.
הוראות עיבוד נוצרות על ידי קריאה ל-()ח0ו60ט706655/0010507ק6768%6 על האובייקט
חס ותסטסססוסכ, תוך העברת שני פרמטריס: המטרה והמידע. המטרה הופכת לשס
הצומת (ווחא) עבור הוראת העיבוד והמידע הופך לערך הצומת ("1.0=חסופזסעץ").
עתה כשיש לנו הוראת עיבוד, אנו משרשריס אותה למסמך ספ הפלט בשורה 26.
פעולה זו מוסיפה את הוראת העיבוד לאוסף הבניס של מסמך ה-אספ.
ל-%חסוחט6ספוזסס, כמו לכל רכיב, יש אוסף של בניסם; הבן הראשון באוסף זה יהיה
עתה הוראת עיבוד זו.
יצירת ההיררכיה
עכשיו אנו מוכניס להפוך את היחס המרומז בין הקטעיס במסמך הקלט ליחסים
מפורשיס במסמך הפלט. נעשה ואת על ידי יצירת קטע 566000 ברמה-8 כרכיב בן של
התגית ברמה-א, ואחר כך ניצור קטע ברמה-6 כבן של הרמה-8. לבסוף, ניצור קטעים
ברמה-כ כבניס של הקטעיס ברמה-6.
כדי להשיג את כל זה, אנו חייביס לעקוב אחר מיקומנו במסמך. כשאנו מגיעים לקטע
ברמה-כ אנו חייביס להחליט היכן למקס אותו בהיררכיה החדשה. אס הרכיב הנוכתי
הוא קטע ברמה-6, או רמה-₪ החדשה תהיה הבן שלו. אס הרכיב הנוכחי הוא
ברמה-ת, או רמה-₪ החדשה היא אח, וחייבת להיות מוכנסת כבן של ההורה מן הרכיב
הנוכתי. (אחותך היא הילדה של הוריך).
לבסוף אס הרכיב הנוכחי הוא קטע ברמה-5, אז רמה-ש החדשה היא דודתו, וחייבת
להיות מוכנסת כבן של הסבא מן הרכיב הנוכתי!
יצירת הרכיב ברמה העליונה
לפי ה-סדס שלנו, הרכיב ברמה העליונה יהיה <00%פ>. אנו מתחילים ביצירת רכיב וה
בשורה 29, על ידי קריאה ל- 65!600601ז08ז6 על מסמך וספ הפלט:
("א00" )6 676866|6. והסס טס = %חסזבּקזווס 56 | :29
66806 מקבלת פרמטר אחד (שס הרכיב) ומחזירה את הרכיב החדש שנוצר.
אנו מעביריס את שס הרכיב (06ססט) ומשייכיס את הרכיב המתקבל ל- +ח6ז8קז6.
כדי לעקוב אחר היחסים, נשייך לכל רכיב תכונה עבור היירמהיי שלו. רכיב השורש
(009ם) לא יודקק לציון רמה כשנסיים, אך בזמן יצירת העצ יהיה נוח לקבוע לו את
הרמה 0, המציינת רמה עליונה ביותר. בשורה 30 אנו נותניס לו את התכונה |646!, עס
ערך 0. בשורה 31 אנו משרשרים את רכיב השורש למסמך 0% הפלט החדש שלנו.
מסמך ה-אספ שלנו נראה עתה כמו בתרשים 5.3.
פרק 5: ביצוע שינויים ב-אספ | 133
.₪1 -וחססם
1 חסופזפע |וחא זחסוהטססס
>000%<
1 .6/8| =0
תרשים 5.3: מסמך ה-ויספ לאחר שרשור רכיב השורש.
עכשיו אנו מוכניס לסרוק את מסמך !ספ הקלט (המייצג את 10א.3מְ8ח6), תוך כדי
יצירת רכיביס חדשיס במסמך 0 הפלט ככל שנתקדם.
לכל מסמך 0% יש מאפיין 0ח5!6006זח6וחט006, שהוא נקודת צומת השורש במסמך.
בשורה 34 אנו ניגשיס לצומת וּה, שבמקרה של וספ הקלט הוא וואדת :
00-65 רהסכחו - השז0וח6 56 | :34
אחר כך אנו פוניס למאפיין 0065א0ווח6 של אלמנט השורש הזה, המחזיר אוסף של כל
הצאצאיס הישירים של אז. מסתבר שבמסמך הקלט, כל הקטעיס הס צאצאיס
ישירים של |ואזה. יש לזאכור, למסמך הקלט אין כל מכנה היררכי; וה בדיוק מה שאנו
יוצרים עכשיו.
התוצאה בפועל היא שהאוסף ח6ז6!וח6 מכיל את כל הרכיבים וצמתי הטקסט ממסמך
הקלט. מספר הרכיבים האלו מוחזר על ידי המאפיין חזפָח6!. אנו משתמשים במספר ה
בלולאת זס) בשורה 36, המאפשרת לנו לעבור באיטרציות רכיב אחר רכיב באוסף:
1 - השח הסזטווח6 סד 0 = 1 זסז | :36
בשורה 37 אנו מאתחליס את המשתנה המקומי זוחחס ל-89|56. נחזור למשמעות של
משתנה זה בעוד רגע.
האוסף ₪80065וח6 יכיל שני סוגי במתים: רכיבים וטקסט. בשורה 38 אנו בודקיסם את
סוג הצומת הנוכחי כדי לראות האס והו רכיב. אס כן, אנו נכנסיס לקוד בשורה 39,
שס אנו משייכיס צומת וה ל-6, אותו הגדרנו להיות %ח6חס!םואסכ |אא. שוב, אנו
המרנו במרומוז צומת זה לרכיב:
הסחד דאשוזם ₪1 סא = 6כץ דסססה.(ו)חסזטוותש וז | :38
(ן)ח6ז0!וח6 = 6 56% 1
בשורה 40 אנו בודקיס האס הרכיב שבידינו הוא <טו0>. כל הקטעים מסומנים כ-צו4,
כך שהס הרכיביס היתידים שמענייניס אותנו.
אס אכן יש לנו רכיב וחס, בשורה 41 אנו שולפיסם את התכונה 6855 שלו, ומשייכיסם את
הערך למשתנה המחרוזת המקומי 6!8558₪6. בשורה 42 אנו בודקיס האס האות
4 וויא למפתחי אתרים באינטרנט
הראשונה משמאל של התכונה 6855%8₪06 היא "א₪", המציינת שיש לנו כותרת. במידה
וכן, אנו סוף סוף מוכניס לבצע מעט עבודה, שכן אנו יודעיס שיש לנו כותרת של קטע:
הסחד "עו" = 6וחהּס0סח.6 +[ 20
("6.0600100/06)"6|855 = 6וח6!3553 :211
חסחדד "ד" = (1 ,06ח6)635588 | זז :212
בשורה 44 אנו יוצריס רכיב חדש מטיפוס ח0וז560. בשורה 45 אנו משייכים לרכיב חדש
זה תכונה, |66!, שערכה הוא כל מה שבא אחרי ₪ ברכיב <צו0> המקורי. כך שאם
רכיב הקלט הנוכחי הוא ₪6 אז יצרנו עכשיו רכיב ח0ו56₪ עם התכונה "6" = |6ע6|. אנו
מוסיפים גם תכונה נוספת, 6ו, לה אנו משייכים את הערך 56600010, כפי שתזכור
אתחלנו את פרק 3 ל- 3000. בשורה 47 אנו מגדיליס את הערך של 56600010:
("ה0ו566" )66| 67680. והסכ)וס = 6צו6ח 56% 2141
(1 ,₪100%)6!3551%3706 , "|סע6!" 6סוסו566. 6שוסח :451
566000 ,"סו" 6סטטו566. )סח 211
217: 5060010 = 5660010 + 1
על פי ה-סדס שלנו, לכל קטע חייבת להיות כותרת. אנו יוצריס רכיב חדש מסוג ₪06
ומשייכיס אותו למשתנה המקומי ₪06 מסוג +חסוחסום!סס ואא1.
המשימה הבאה שלנו היא לתת ערך לכותרת החדשה שזה עתה יצרנו. נבסס את
הכותרת על כותרת מסמך הקלט, אך עס מספר שינוייס. אם למשל כותרת הקלט היא
'ץס!סהה66ד הסוח/ (6)יי, נסיר את ה-(6) ונעביר את הכותרת החדשה יחסוח/צ
ץס|סחח66 דיי.
החריגה היחידה מכך היא הכותרת ברמה-4, אשר בקוב הקלט אין לה דבר מלבד
מספר פרק, למשל, 8(3). אנו נטפל בכך במסמך הפלט שלנו, על ידי הסרת ה-()
והוספת המילה "ז6זקְח6" כדי לקבל 3 זְוְכְח6.
בשורה 51 אנו קוצציס את כותרת הקלט, על ידי הסרת כל הרווחיס שבתחילת ובסוף
הכותרת. בשורה 54 אנו מעביריס את המחרוזת ל-ז66 וַחסְזהּקְפָחו5, המסירה את
(8). בשורה 54 אנו משליכים את כותרת הפרק, ובשורה 60 אנו קובעיס את טקסט
הכותרת החדש, למחרוזת שזה עתה בנינו :
("6 ")66 6806ז6. והסכ טס = 006 56% +
(0א6 ד.6)וחוזד = 5 11
52
ק501 ח68 שאו - 6הוהחו60ס 06 36 "(א)" הובלחס6 680015 6 + זפסרח' =
(5)ז600 |חסזהקקו 5 = 5 2
1:
זז ה65 605! - סט טח זססקהה6 06 6עוף 5%[ 6|5עס| ת' 1
85 " ז0זהח6" = 5 הסחד "ב" = 6355306 +[ 1
1
חסו5660 06 01 0!וח6 8 35 %ה6ח6!6 6 6 הסח עשסח' :%
0% 06.76% = 5
פרק 5: ביצוע שינויים ב-אספ | 135
הכותרת מוכנה עכשיו ואנו משרשריס אותה ל-6אופ6ח. כעת יש לנו <ח56600>, המוכן
להוספה למסמך 00% הפלט. במקרה ראשון זּה, רכיב הקטע ₪ח56600 החדש נראה כמו
בתרשים 5.4.
<ח0ו8601>
4 = |8|
0 = 16
סוד
3
תרשים 5.4: רכיב הקטע החדש
אך היכן אנו מכניסים אותו! בשורה 64 אנו משיגיס את התכונה |6/8! מהקטע החדש
שלנו ומשוויס אותה עס הרמה של ההורה הנוכתי:
הסח ("[6/6|" )טס 060 .הזב זט < ("|סעס|")ססטטו 060 6צוסה )1 +
כאן ניתן לראות מדוע סיפקנו רמה (זמנית) לצומת השורש <5006>. אנו משוויס את
רמת הרכיב החדש (8) עס רמת רכיב השורש (0) ומגליס שרכיב חדש זה צריך להיות
בנו של השורש. לכן, משפט התנאי שבשורה 64 הוא אמת - 6שש ואנו משרשריס את
ושפח להורה הנוכחי (השורש).
וש -וחסם
1 חסופזפע |וחא +חסוחטססס
>000%<
1.608| =0
<חסוז560>
= |8ש8|
0 = 6
080] 3
תרשים 5.5: לאחר שרשור 6₪וח6או6ח
6 וויא למפתחי אתרים באינטרנט
לאחר הוספת הרכיב החדש, אנו מדלגיסם מטה לשורה 81, וקובעים את המשתנה
המקומי +ח6ז8קזט6 להצביע על הרכיב החדש (הרכיב שהוספנו ה עתה). אחר כך אנו
קובעיס את הדגל )חס ל-6טש כך שרכיב זה לא ייווסף שוב. זה גורס לנו לעבור
להצהרה )אא בשורה 90, ושוב אנו חוזריס לראשית הלולאה זס) בשורה 36.
לאחר שנוספו חמישה קטעים, מסמך יספ הפלט נראה כמו העצ המוצג בתרשים 5.6.
כאן אנו מתחילים לראות חיררכית הכלה. היחס בין המחלקות מבוטא היטב בתרשים
עץ, אך תרשיס הכלה המוצג בתרשים 5.7, ממש מבהיר את הנקודה.
קטע פ הוא כעת בן של ומוכל על ידי קטע 6. זהו בדיוק היחס אליו שאפנו להגיע.
שימוש בדיאגרמה של תיבות בתוך תיבות הופך ללא יעיל, ולכן נוח יותר לחשוב
במונחיס של עצ, כך שתרשיס 5.4 הוא דרך נפוצה יותר להבעת יחסים אלו. למרות
זאת, הבעיה עס עצ היא שקל לאבד את ההכלות המרומזות בהיררכיה.
₪ -וחסם
1 חסופזפע |וחא ]חפוחטוססס
>000%<
1/6/0| =0
3 !680
סוק .
.6 סה
ב |
הסומצ
סח תד
08) ,8009[סז
סא וח
הַחווה/
תרשים 5.6: לאחר הוספת חמישה קטעים.
פרק 5: ביצוע שינויים ב-אספ | 137
איתור רכיבים
כל רכיב במסמך ספ הפלט שלנו יכול להיות מזוהה בדיוק ובפשטות במונחים של
הקשר שלו למסמכיס אחרים. בדיוק כשס שאני הבן השני של הבן הרביעי של סבא
שלי, כך הרכיב ''פחטו3ּ\ סא ,060080067 ,6615[סזק 66זח דיי הוא הבן הראשון של הבן
השני של הכותרת ברמה-8 3 זסזקְהת0'י.
כאשר עצ וה מושלם, הוא ישקף ישירות ומפורשות את היחסים בין "870665"
(מאמריס) או קטעיס שבספר. מדיאגרמה זו אנו יכוליס לבנות בקלות טבלה של תוכן
הענייניס (ונעשה ואת בהמשך), ונהיה מסוגלים לנווט בין הקטעיס בעקביות גס לוגית
וגם אינטואיטיבית.
< |6/8.] :חסו5601>
<ם |8ש1.6 :חסו5601>
<0 |66.] ח0סו5601>
<6 |68.] חסו95801>
<כ |68.] חסו95601>
תרשים 5.7: דיאגרמת הכלה
אחים ודודים (%5חש חב 5פַחזוטו5)
התחשבנו במקרה של הכנסת רכיב ברמה-6 תחת רכיב ברמה-8 בשורה 64. כיצד
הצלחנו להכניס את רכיב האח ברמה-6 המוצג בדיאגרמה! במקרה גה רמת הרכיב
החדשה תהיה שווה בדיוק לרמת "פשחסז8קזטס". כלומר, לאחר שהכנסנו את הרכיב
הראשון ברמה-6, הוא הפך להורה הנוכחי. כאשר הרכיב השני ברמה-6 יופיע,
ההצהרה )ו בשורה 67 תהיה אמת :
הסח ("|6/6|" )סוס .הזה קוטס = ("6ע6|")ס וטו 060 6צוסח ]56 :7
במקרה זה, בשורה 69 אנו מאחזריס את צומת ההורה לרכיב של זחסז8קזט6 (כלומר,
אנו משיגיסם את הרכיב ברמה-8) ומשרשריס לו את הרכיב החדש (הרכיב ברמה-6
השני שלנו), ובכך מוסיפיס בן שני לאוסף הבניס שלו:
סח 6!וה-)0 השקב 006 ח6זהק.+הס הזוס 1
8 וא למפתחי אתרים באינטרנט
כשאנו מוסיפים את רמה-0 לאותה רמת-6 השנייה אנו חוזריס לתנאי הראשון המובא
בשורה 64. הרכיב ברמה-₪ החדש הופך ל-)חסז8קזט6. מה קורה עכשיו כשניתקל
ברמה-6? וה הזמן לקפוץ מעלה במעלה העצ, מ-ם כל הדרך חורה ל-8 כך שנוכל
להוסיף את רמה-6. קוד וה מוצג בשורות 72-76:
סס 1
6 הזוס = %ה6זהק 6 56% 1
סכ 8 0ח 6צו וסחט סט 1
("|6/6|")ס טס 0 06.-)צסח = ("[6ע6!")ססטוסו 066 6חסזה קז זז 1
ספ +א₪ חסה[=-
קסס | 1
נמשיך להשוות את זחסזפּקזנו₪ לרכיב החדש. אם הרכיב החדש מרמה גבוהה יותר אז
אנו קובעיס את זח6זהקזט6 להיות ההורה של זח6ז8קזטס6. כלומר, אנו מצביעיס על פס
והרכיב החדש הוא, נאמר 6, אנו קובעיס את 06ח6ז8קזט6 להורה של פ (הרכיב ברמה-6
שהוא ההורה שלו). אנו ממשיכיס לעשות ואת עד שאנו נמצאיס מספיק גבוה בע כדי
להיות מסוגליס להוסיף את הצומת החדש.
נזכור כי הצהרת הראשונה, בשורה 38, מבצעת בדיקה הרואה אס אנו עובדיס עס
רכיב. אם היא נכשלת, אנו עובריסם לשורה 89. 0% נקבע בתחילה להיות 18!56, והוא
נקבע ל-6טש רק בתוך ההצהרות )ו, כך ששוב, אס הצומת הנוכחי אינו רכיב אנו בשורה
9 ו-זווחס הוא 88|56. במקרה זה, אנו רוציס ליצור עותק של הצומת הנוכחי ממסמך
הקלט ולשרשר אותו לרכיב הנוכחי במסמך הפלט. הערך שטש הבוליאני יוצר העתקה
'יעמוקה'י, במסגרתה מועתקיס הרכיב וכל בניו וצאצאיו:
(6 )1006 חסו6.6 0!וח0 חהסקקה. )חס הזוס הסחדך אוחחס +סא )1 1
כאשר הלולאה מסתיימת ואנו עובריס לשורה 92, הספקנו כבר להעתיק את כל
הרכיביס למסמך ספ הפלט החדש. כעת אנו יכוליס להסיר את התכונה "66|"
מצומת השורש שלנו. סיימנו עס צירוף הקטעים יחד, ואנו יכוליס להחזיר את מסמך
ואסם הפלט לדף ה-52 שביצע את הקריאה. הדבר מחזיר אותנו לשורה 11 בתדפיס
5.5 :
(ההססחו)5ח0ו0!!6005660 = והססטס 56% 111
הפקודה הבאה בשיטה +6/ח60 היא בשורה 14:
"6006" , ההססט טס 08ח0כ600!ו0 1
מובילה אותנו למחצית השנייה של השקעת מאמצינו, צירוף הכניסות הרציפות
<6חו|6006> לבלוקי <6006/> <6006>.
פרק 5: ביצוע שינויים ב-אספ | 139
בלוקי קוד
טרנספורמציית ה-51א סימנה את כל שורות הקוד בתגית <6חו|6006/> <6חו|6006>
כמוצג בתדפיס 5.1. עתה משימתנו היא להבליט את הבלוקיס של הקוד ולסמן אותס
בתגיות <6006/> <6006>. המטרה שלנו היא לאפשר לגזור, להעתיק, להדביק, לשלות
בדואר אלקטרוני, להציג, ובכלל לשלוט באותס בלוקיס של הקוד.
לפני שנבחן את הקוד בפירוט, הבה נחזור על הגישה הכללית. נתחיל עס כל שורת קוד
כרכיב אינדיבידואלי, כפי שניתן לראות בתרשים 5.8.
הרי לפניכס עובדה מעניינת שנוכל לנצלה אודות רכיבים אלו: כל רכיב יודע מיהו
ההורה שלו ומיהו אחיו הקודס. כך, שורת הקוד 43 יודעת שההורה שלה הוא 560000
2 פ1, ושאחיה הקודס הוא 42 6חו|6006. באופן דומה, 45 6חוו6006 יודעת שאחיה
הקודס הוא רכיב טקסט.
₪ -וחסם
1 חסופזפע |וחא זחסוהטססס
>000%<
1.609| = 0
680 3
00
תרשים 5.8: כל שורת קוד היא רכיב
0 ווא למפתחי אתרים באינטרנט
לכן אנו יכוליס לציין שבלוק קוד חדש מתחיל בשורת קוד שאחיו הקודס הוא לא רכיב
שורת קוד. למשל, 45 6חו|6006 מתחיל בלוק חדש, כמו גס 41 6חוו6006.
המטרה שלנו, כשנסייס עס הטרנספורמציה הבאה, היא ליצור מבנה שנראה יותר כמו
זה שבתרשים 5.9.
הדרך הברורה והישירה להשיג זאת תהיה להכניס רכיב קוד לתוך המבנה, ואז פשוט
להעביר את כל שורות הקוד מתחתיו. לרוע המזל, זה לא יעבוד. אס נעביר את 6חו!6006
1 אל מתחת לרכיב הקוד החדש שלנו,תיווצר בעיה כאשר נבקש מ-42 6חו|6006 את
אחיו הקודס. במקרה כזה, נקבל תשובה שגויה (41 6חו|6006 לא יהיה שס יותר!).
₪ -וחסם
1 חסופזפע |וחא וטס
>000%<
1 .6/8| =0
6 3
1 זססזק
ו
סוד
זאד /
ו
תרשים 5.9: מבנה המטרה שלנו
פרק 5: ביצוע שינויים ב-אספ | 141
לכן מה שאנו חייביס לעשות הוא להעתיק את 41 6חו|6006 אל מתחת לרכיב הקוד
החדש, ולבקש מ- 22 את אחיו הקודס (שעדיין יהיה 1ה). כעת משאנו יודעיס ש- 42
הוא חלק מאותו בלוק של קוד, אנו יכוליס למחוק את 41 המקורי, כך שהוא יופיע רק
כילד של רכיב הקוד החדש.
כדי להשיג זאת, נתחיל ביצירת אוסף של כל הצמתיס המתויגיס כ-6חו|6008.
כעת נוכל להמשיך בעבודה ולחפש באוסף שיצרנו, אחרי רכיבי שורות קוד שאחיהס
הקודמיסם אינס שורות קוד. אחר כך ניצור רכיב קוד ונעתיק את רכיבי שורות הקוד
להיות ילדים של אותו רכיב קוד חדש, תוך מחיקתם עס ההתקדמות לאחיס הבאים.
תדפיס 5.8 השיטה 6016560008
6 זה6זהק 6חס 0סח!ן הרשו טסט חסס 6ח0 |ו3 סהוסוחס6' :0
6 6006 66 36 סע 50 ,חור זס ₪05 %ה6ז10 עו 3 זס פוח% 0 שצ :
6 6!וח/ט <6חו!6006> .6.0 ,5 5 הסוס |הטסועוסחו 6חז זסז 6החהח 0+ סרס'
<6006> 5 %ה6וח6!6 %ח6זהכ -
36 |6 35 "6006" 0855 6עש 0856 פורם חז'
9%
(3006 .5ע) 866!כ חן 66 6 806|טקוחהוח 6צו סזסת'
(0חו507 5 6חה|6 ,)הסוהט6סכ 0 5 ההססחו )סט 060 50 ססהטוזק
6ססאו סכ | ₪5 6 50 וסססצו סכ אא 5 5וח3566ם חחוס
הזה קז ,0חס ]1 5 א06ח3501! ,ףהסות6וםוזסכ וא 5 |מעסזס וחוס
רשוכ | 5
ב
65 סחו|אאא || ]0 הס600|סס 8 06%' :10
("6חו|" ,8 61806 )306 ד 466650 ותסכחו = 5ח28565|6 56% :11
035665 ח1 6 ה₪86 וס :2
?חס פגוסוע6זכן 606 ז0 חחו|0ו5 +א6ח 6 +ה6רח6!6 פוחס 6ו' 11
חסחדך |מע6זכ 15 סחווטופפטסוטסזק.6 זסא זז 11
זכ עסח 676806 - 5סףטחסס +סח' :15
(6 6 )66| 676806 והססחו = %חהסזהק וס 56% 11
0חןאסס| 6זב שאו +הסרח6!ס שר ]0 חחווסו5 8 35 ₪6 הספחו סחם' :1
60ל50חו 5 | 300 - 66בוכ זחטוז 6 חו זו פטס +הרש' 14
6ז דחו 00% 6 50-
515 זססה! 06 רטושצ' 1%
6 ,62 50+061076חו. 006 חש זהק.6 :20
סחם :21
:22
הזה זהס וו 6 01 60 3 35 הסוס זהסנוס סו ]0 שְססס 3 +טכ' :22
06 %א6ח 6 ]| 566 60 60606 0ס 6עבח |[50 6 ססחו5 ,ץְקסס 3 06 0 פפח >ו' :22
0חוסו5 +א6ח 8 6ו' :25
(6 ך)6 06חס!6.6 6|וה-)סהשסקה.זחס הזוס :20
:2
006|66 50 ,%ה6ח6!6 פטסועסזק 6 רוטוו שחסס צוסח 6ז'סעצ' :20
|ם6זכן 6-0 סרח 006 חש זה |םעסזס הסחדד הותססצ 15 |מעסזק זסא זז :20
2 ווא למפתחי אתרים באינטרנט
20:
06 6 6 0חו666% זס+ +ה6רח6!6 +הס וס 6חץ סז זססהוסכן 8 ק66= סחבּ' :21
6 = |ם/6זכ 56% :2
יכ >
1
ץחה ]1 ,|םשסזכ 35%| 6רז 06!6%6' :1
|םע6זס 0!וה-6 סוחס 006 ה6זהס. !םעז הסחד פהותססא 15 |מעסזכ +סא זז 1
:7
טפ 0חם :38
לשיטה 60 מועבריס שני פרמטריס. הראשון הוא מסמך ה-%ספ
(א0כ זחסוחטססכ). חשוב לציין שמסמך ה-ויספ המועבר כאן הוא מסמך וספ הפלט
שנוצר על ידי 005ו60|!6065660.
בעוד שהשיטה הקודמת, 601!6005660005, עבדה עם יצירת מסמך ספ פלט חדש,
השיטה הנוכחית, 60!!66060008, עובדת באמצעות שינוי הרכיבים של מסמך ה-%ספ
במָקום. אס נתוור לאנלוגיה הקודמת שלנו, כאן אנו מסדריס מחדש את הספרים על
גבי המדפים של כוננית הספרים, במקוס להעביר אותם לכוננית ספרים חדשה.
מכיון שאנו עומדיס לבצע כמעט את אותה העבודה על קטעי ההערות, הפכנו את הקוד
הזה לפולימורפי: כלומר, נשתמש באותה הפונקציה לשני המקרים, אך נבחין בין
השנייס באמצעות הפרמטר. לכן, הפרמטר השני המועבר לשיטה זו הוא שס הרכיב,
במקרה זה "6006" (עבור המקרה השני, נעביר את ייסזסחיי).
בשורה 11, אנו משרשריס את המחרוזת "פחון" לפרמטר הזה, ובכך יוצריס "6חו|6006"
(או "סחו|סססח"). מחרוזת חדשה זו מועברת כפרמטר ל-301886 600587 96%!6, אשר
תחזיר רשימה של צמתים עס השס "8חוו6006".
אוסף זה מאוחסן ב-28565|675. המשתנה המקומי 6 פועל כאיטרטור על אוסף זה;
בכל מחזור של הלולאה זס) בשורה 12 המשתנה 6 מקבל את ערך הצומת הבא באוסף
5
בשורה 14 אנו משוויס את האח הקודסם של הרכיב הנוכחי עס משתנה מקומי |=טסזס.
תנאי ה-א אומר: "יהשווה את ה-8ַחו|0ו55טסושפזק של הצומת הנוכחי עס הרכיב שזה
עתה סיימנו לעבוד אתו. האס הס והים! אס לא, והו בלוק חדש של שורות קוד
(65חו 00061).
אס והו כן בלוק חדש, או אנו יוצריס רכיב <6006> בשורה 16 ומשייכים אותו
למשתנה זחסזהקזוס.
הבה נניח שבסיבוב הריצה הראשון של לולאה זו, 6 מתייחס לשורת קוד 41 מתרשים
6.. |םעפזס הוא ריק, כך שאנו יודעיס ש- 41 פותח בלוק קוד חדש.
אנו נכניס את רכיב הקוד החדש הזה להיררכיה כאח של רכיבי שורות הקוד. אחר כך
נבצע את העבודה הנדרשת להעברת רכיבי שורות הקוד רמה אחת למטה, כך שיהפכו
לבניס של רכיב הקוד החדש הזה.
פרק 5: ביצוע שינויים ב-אספ | 143
הכנסת הרכיב החדש
אנו רוציס להכניס את רכיב הקוד החדש באותו מיקוס בהיררכיה בו נמצאת כרגע
שורת הקוד. כדי לעשות ואת, נהפוך את רכיב הקוד החדש לרכיב בן של ההורה של
1. אנו עושיס ואת בשורה 20. אנו אומרים להורה של 6 להכניס רכיב בן חדש
זחסזהקזטוס (שהוא רכיב הקוד החדש) לפני הבן 6.
בנקודה זו הכנסנו את רכיב הקוד החדש טחסזהּקזטס) כאת של 6; כעת אנו צריכיס
להפוך את 6 (ואת כל שורות הקוד העוקבות) להיות בניס של רכיב הקוד החדש,
%חסזה קז טס
כדי להשיג זאת, אנו משכפלים את 6 ומשרשריס את העותק החדש שלו כרכיב בן של
+חסהקזווס. בכך הפכנו את 6 לבן ואח של זחסזהּקזטס, כפי שניתן לראות בתרשיס 5.10.
₪ -וחסם
1 חסופזפע |וחא זחסווססס
<000%>
0 = |9צ6. 1
% זססוק
0 : חסוח/צ
ץְסָסוסהתססד
4
<6חוז|2006)>
1
<6חו!2006)>
1
<6חו|2006)> <6חו|6006>
44 2
6חו|6006>
<6חו|62006>
46 3
<6חו|2006)>
45
תרשים 5.10: 6 הוא כעת רכיב בן ואח של )חפזפקזוס.
4 וויא למפתחי אתרים באינטרנט
| הפרמטר סטש המוצג בשורה 26 אומר ל-06סאפחסו6 ליצור עותק עמוק של
8% 6, כולל צאצאיו; במקרה זה הטקסט והתצורה של שורת הקוד.
[
בנקודה צו, ל-|פעסזם אין כל ערך, כך שמדלגיס על הקטע של חפו₪ בשורה 29. כעת
כש-41 הוא גס רכיב בן וגם אח של זח6ז8קזט6, אנו יכוליס לקבוע את |שטסזק ל-6 (1),
כמוצג בשורה 32.
כעת חוזריס לראש הלולאה לסיבוב הריצה השני. הפעס 6 נקבע ל-42. ההצהרה +ו
בשורה 14 נכשלת. האח הקודס של 42 הוא 41. מכיון ש-מששזק הוא גס כן 41 (קבענו
את ערכו בשורה 32 באיטרציה הקודמת) ערכים אלו שוויס ולכן מדלגיס על ההצהרה ו.
כך אנו מדלגיס מטה לשורה 26 ויוצריס עותק של 42 ומוסיפיס אותו כרכיב בן של
הרכיב <6006>. כעת לרכיב הקוד יש שני בנים, שניהס גם אחיס של רכיב הקוד.
בשורה 29 אנו בוחנים את שעפזם, המכיל את שורת הקוד 41. אנו אומריס לצומת
ההורה שלו להסיר את הבן |שטשזק. זה מסיר את 81 מהמיקוס המקורי שלו ועכשיו
הוא קייס ב-0%פ רק כבן של רכיב הקוד החדש. עכשיו המבנה נראה כמו בתרשיס
1.
נוסיף את 43 ואת 44 באותו אופן. בכל פעס שנוסיף בן חדש ל- <6006> נבטל את
צומת האח הקודם. כך, כשהוספנו את 42 היינו יכוליס לבטל את 82 המקורי. כשנוסיף
את 43 כרכיב בן של רכיב הקוד, נהיה מוכניס לבטל את 42 הישן.
כשנגיע ל-45 יהיה לנו רכיב קוד חדש להוסיף; |פש6זס יהיה רכיב הטקסט וזה לא יהיה
האח הקודם של ₪5 (₪4).
את 5 ו-46 נוסיף כרכיבים בניס של רכיב הקוד השני החדש. העצ יהיה כמעט מושלם,
מלבד החיבור של 46 להורה הקודם שלו. אנו מסדריסם את בשורה 36.
עד שנסיים, כל אחת משורות הקוד כבר תעבור למיקוס החדש שלה, תחת רכיב קוד,
כפי שניתן לראות בתרשים 5.7 (החוזר לשס הדגשה).
פרק 5: ביצוע שינויים ב-אספ | 145
₪ -וחסם
1 חסופזסע |וחא +חסוחטוססס
<000%>
0= |8ש1.0
68010 3
זססוק
ו
חסוחצ
ץְסָסוסחהססד
62חו|6006>
5
<6חו|2006)>
46
<6חו|02006)>
1
תרשים 5.11: 1 כרכיב בן של הרכיב החדש.
6 וויא למפתחי אתרים באינטרנט
<200%>
< |6/8.] :חסו5601>
<ם |8/8 ] :חסו5601>
<0 |66.] חסו5601>
<0 |68.] חסו9801>
<כ |1.68 חסו95601>
תרשים 5.7: דיאגרמת הכלה.
שורות הערה
זה מחזיר אותנו לשיטה (ז8/ח60, כפי שהוצגה קודס לכן בתדפיס 5.5 :
0 <60006> 38 ססח! 65ח1] <6חו|0006> פס חס6 06 || 60|!665 6צו +אסח' 11
"6006" ,רהסכטטס 08ח0כ600!ו0 :1
15:
5חו! 6זסח זס+ סוי 11
"ס6)סח" ,רהססטטוס 08ח60|!66000 :1
לאחר שסיימנו את הקריאה שלנו ל-60!!66060008 בשורה 14, אנו מוכניס עתה לקרוא
לאותה שיטה, 0009ח60|!6060 בשורה 17, הפעס עס המחרוזת "סססח" במקוס "6006".
אותה לוגיקה בדיוק תחול גם לגבי כניסות שורות ההערה ב-0%1ם כפי שעשינו במקרה
של כניסות שורות קוד. לא נעבור על זה בפירוט מייגע, שכן אין כל הבדל בין שני
המקרים.
כשנסיים, נחזור לשורה 20 בתדפיס 5.5 להשלמת השיטה ()ו6עחס6, המוצגת כאן
בתדפיס 5.9.
תדפיס 5.9
|וחא. והסכזטס = חפזטס :20
:22
6 |8ח7ס)6 30 0060/26 66 +וספח! ,50601860 ה6סס פבּח כ דכ 8 זי :22
+ זו 6זטףו %ח63 1 זט ,אסכ 06 הו א 00 סא עו 3 06 0|טסח5 66 6א!!| 5065 :22
חסחד "" <> ה0028% +[ :22
8 "<""" 8 86/0073 """ ם ז5צ5 אססם םקץדך06כ!>" = 000576 :251
פרק 5: ביצוע שינויים ב-אסס | 147
וק |החא 06 301 %ח ₪ שפח %0 +חהצו סעצ' :20
(1 , ,06056 8 +1ש)פע 8 "" ,1 הספע 8 "" ,סזטס)30ו₪0 = חפוס :27
+ 0חם :20
20
6 3 ססח] ]050 6 58/6 סע צוסח סחבּ' :20
1 15 זטסטכ) זס=] הזהק6טס חסקס :21
חסזטס ,41 +חוזק 1
1 6|056 1
50 0חם :34
הפקודה הבאה ב-(6שח60 היא לשייך למשתנה המחרוזת המקומי שפזטס את תוכן
ה-0%פ הנכתב כמסמך. היינו יכוליס לסרוק את העצ, וליצור טקסט לכל רכיב שנפגוש
עבור קוב הפלט שב- וואא, אך ישנה דרך קלה יותר.
במקוס לסרוק את ה-אסס בעצמנו, אנו יכוליס לגשת למאפיין וא של מסמך ספ
הפלט. על ידי גישה למאפיין בודד זה, |וחאפח הופך את כל המבנה שלנו חזרה
למחרוזת כך שנוכל לאחסן אותו כקוב.
בומן שפעולה זו חשפה מאפיין, האובייקט למעשה משטח את ההיררכיה כמחרוזת לדיסק.
בכל מקרה, אין לנו רכיב פקצד06כ ל-פדפ שלנו. אס חשבת שתוכל להשיג זאת פשוט
על ידי שיטה כלשהי כמו-60670|ם6קץ67680600601 | אז, | לצערנו, | טעית.
מאיזושהי סיבה ה עדיין לא מופיע בהמלצת ה- |א.
הפתרון שלנו אולי פחות יפה, אך ישיס. אנו פונים למאפיין !אא כדי לפלוט את כל
הקוב למחרוזת. אחר כך, בשורה 24 אנו משניס ידנית את המחרוזת 00054 כדי
להכניס את הרכיב פקצד006כ מיד לאחר הוראת העיבוד ב- |ואא שלנו. התוצאה היא
שמסמך !אא הפלט יתחיל ב:
"1.0"=חסופזסע |החא?>
<"000. חסחה6" = [5צ5 אססם םקץך6סכ!>
בנקודה וו המחרוות שלנו מושלמת אך היא עדיין לא קוב בדיסק. בשורה 31 אנו
פותחים קובץ, בשורה 32 אנו פולטיס את מחרוזת מסמך ה-וואא, ובשורה 33 אנו
סוגריס את הקובצ. בכך מסתיימת הסברוטינה ()+וששחסס, ואנו חוזריס ל-₪0/.850ח60,
ששורותיו האחרונות מוצגות בתדפיס 5.10.
תדפיס 5.10
א , א-|חחא ,10 +60 א2חס 11
141
6 6018%6סח! 6 660ח זסטחס! סח שעצ סחפ' 11
0 6ן-0ז26!6]. 150 11
11
;|החא ₪ " 60 " ₪ "|והזהא." 6 ה08%378% .8 " 60+וסעח00" = |₪א2 ודא :11
חסטסחט- 0ח= :148
8 ווא למפתחי אתרים באינטרנט
עתה חזרנו מ-6שח60 בשורה 142, ואיננו וקוקים עוד לקובצ הביניים, אותו אנו
מוחקיס בשורה 145. לבסוף, בשורה 147 אנו מחזיריס הודעה על הצלחה למשתמש,
שתוצג על הדפדפן.
הצעדים הבאים
משימתנו להפוך את קוב ה-סזסש ל- !אא בעל מבנה קנוני סוף סוף הושלמה! המסמך
שלנו עומד עתה בדרישות ה-סדס שלנו והוא מסמך וואא, שאינו תלוי בתגיות !ואזה,
וכן בנוי היטב וכמובן חוקי.
את אותו תהליך ניתן ליישס גם על כל יתר הפרקיס הקיימיס בספר שלנו.
לאחר שיחיו לנו כל קבצי ה-|אא המתאימים לכל פרקי הספר, נוכל לעבד אותם לפי
צרכינו.
בפרקיס הבאיס נראה כיצד לעבד נתוניס מתוך מסמכי ה- |אא.
פרק 5: ביצוע שינויים ב-אסס | 149
פרק 6
אחסון, הבאה לתצוגה, והצגת
הסיפורים
בפרק זה:
מציאת סיפוריט מבפניםס החוצה
יישום
שמירת הסיפורים למסד הנתונים
יצירת מסיד הותונים
הצגו הסייפור
אחוור סייפור ממטר הותוויב
ציליי הסגנונות' מ- \א ל- \אדהו
ייצום טרנספורמציית ח- פל
%
%
%
%
%
%
%
%
הצעדים הבאזים
ראשית העברנו את מסמך 6זס\ שלנו ל- וואזה, אחר כך ל- ו|ואדחא וכעת, אחרי כמה
סיבוביס של שינויים, לצורת ה- וויא הקנונית שלנו, התואמת ל-סדס שלנו.
עכשיו משיש לנו את הנתוניס בצורה שבה רצינו, מה נעשה איתם! בנקודה זו ישנן
מספר אפשרויות, ואנו נבחן את חלקן בהמשך הספר.
מטלה אחת היא לחלק את הספר לסיפורים, שבאופן שרירותי הגדרנו אותס להיות
כותרת ברמה-₪ עס התוכן שלה, או כותרת ברמה-6 עס התוכן שלה. כלומר, אס
כותרת ברמה-6 מכילה שלוש כותרות ברמה-כ, יש לנו ארבעה סיפורים: תוכן הכותרת
ברמה-6 עד לכותרת ₪ הראשונה, ותוכן כל אחת משלוש הכותרות ברמה-פ.
בעוד שמטלת החלוקה של פרקי הספר לסיפורים עשויה להיראות שרירותית, היא
מאוד קרובה למטלות שכיחות יותר, כמו מציאת סיפורים במאמרי מערכת
(5ז5!6000/ו6), עיתוניס, ספריות מידע, וכן הלאה.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים | 151
בפרקיס הבאיס נבחן את הבאת מסמך ה-1אא לתצוגה בתצורות שונות, ובכללן
דפדפניס מתקדמים (למשל, 155) כמו גם דפדפניםס בסיסיים (למשל, 3 606806א) או
הדפסה,פורמט =פם, וכן הלאה. כמו כן, ניצור טבלת תוכן ענייניס הניתנת לכיוו,
ובעּרתה נוכל להשתמש למציאת סיפורים במהירות.
לעת עתה, נתרכז בחלוקת הפרקים לסיפורים, היחידות האטומיות של המידע שנאחסן
במסד נתוניס ואחר כך נציג על פי דרישה.
מציאת סיפורים מבפנים החוצה
נתחיל עס מודל האובייקטיס של המסמך, ה-סדס שזה עתה בנינו בפרק 5, ונפרק אותו
לרכיבים, תוך אחסון הסיפוריס ככל שנתקדם.
המבנה של מסמכים אלו הוא מורכב למדי, להלן סכימה שלו המוצגת בתרשים 6.1.
<חסו56060>
4 = |6/6]
<חסו56060>
5 = |6/|
<חסו5660> <חסו56060> <חסו56060>
6 = |6/| 6 = |8/6] 6 = |6/]
<חסו56060>
פ5= |8/6|
תרשים 6.1: סכימה של מבנה מסמך
<חסו56060>
כ = |8/6!
ייצוג מפושט ה של ה-ספדס מציג את צומת השורש שלנו, <900%> למעלה בראש, עס
רכיב בן יחיד מסוג קטע ח56600. לקטע ברמה-4 יש רכיב בן ברמה-8, שבתורו יש לו
מספר קטעים ברמה-6 כבנים. כמובן, שקטע ברמה-4 הוא אב לרכיב בן מסוג כותרת
2 וא למפתחי אתרים באינטרנט
6, אך השארנו זאת מחוץ לתרשים כדי להשאיר את הדברים פשוטים. לקטעים
ברמה-6 יהיו מספר בנים, ובכללם כותרת, טקסט, ואולי אף הערות וקוד. הקטעיס
ברמה-6 יכולים גס להכיל קטעיס ברמה-כ, אשר יכולים להכיל הערות, "מונח טכני",
קוד וטקסט כרכיבים בניס בפני עצמס.
התחלה עם סיפורים ברמה-5פ
המפרט מציין שהסיפור ברמה- כולל את כל הרכיבים המוכלים שלו. הסיפור
ברמה-6 גס מכיל את כל הרכיבים שלו, אך אנו לא רוציס שהסיפוריס ברמה-פ יופיעו
בתוך הסיפוריס ברמה-6.
לכן, אס הקטע האמצעי ברמה-6, בתרשים 6.1 הוא "600!85505/ .5 55 והוא
מכיל טקסט, הערות, קוד ושני קטעיס ברמה-ת, אנו רוציס שהקטעיס ברמה-פ יופרדו
לסיפוריס משלהס.
המפתח ליישום הרעיון הזה הוא להתחיל בתחתית, בסיפורים הפנימיים ביותר:
רמה-פ. אנו נעביר כל רמה-0 (על כל בניה) מה-וז0ספ לתוך מסד הנתונים. אחר כך,
כשנגיע לסיפורים ברמה-6, הקטעים ברמה-5 המוכלים בהם, לא יהיו שם יותר, וכך
נוכל לקחת את מה שנשאר בקטעיס של רמה-6 ללא כל חשש.
יישום (515:6066ו26 טהוזה6וח6!קוה1)
הקוד לביצוע האמור לעיל הוא פשוט באופן מפתיע. נתחיל, כמו תמיד, בקובץ ה-450
שלנו ₪0|.850חס6. תדפיס 6.1 מציג את הפונקציה הרלוונטית.
תדפיס 6.1
(650ו500סו!0ק5 הסטסחט | :150
א|וקפס ,65 חחו 11
14
("50065ו|50. ה6ז5078 הסדה )0[66כ0768060. זס/507 = 6ווקפס 56% 11
11
(855ק0כ ,80507 ,5 ,"חא" 8 הז28בז50065)03פו!6.50ו|קפס = 65ז 11
11
"50065 " 8 65 8 " ססחו |החא." .8 הז085378 ₪ " סווקפ" = 65וחסססטווס50 עו
חסטסחט= 0ח= :158
שוב | אנו | מתתיליס | ביצירת | מופע | של אובייקט | א6/ש260; | הפעס
5 50ו|50. ה507866וחסז=. אנו קוראיס לשיטה 65וזסטפטווק5 של האובייקט, תוך העברת
הקוב שאנו רוצים לפצל.
כדי שלא תתבלבל, שים לב שפונקציית התסריט (500065וווס5), האובייקט
(05607165ו501. 50786 וחסז), ושיטת האובייקט (פ6ספטווק5) הם בעלי אותו
0 שם. זו לא בעיה; ההבחנה נעשית על פי ההקשר.
הערה |
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 153
נזכור כי בממשק המשתמש אנו מתבקשים לציין את שס הקוב הבסיסי (למשל,
3) שאנו מוסיפים לתיקיה כדי ליצור את הנתיב הבא :
(06ח285618 ,זו 0353)הזהקסווטם.150 = ה8%קב08%
עכשיו נוסיף את הסיומת |וזא. כדי ליצור, למשל את |חא.3ּמְ8ח6. אנו מעביריס את שס
הקוב ל-50|₪05001165 כפרמטר היחידי שלה.
תדפיס 6.2 מציג את השיטה 065ספטו|ס5.
תדפיס 6.2
5 סח +8ז0ס? |ה6והסחה6 זטס חו סו [ו]א חב 0+ הזה 8 65אד' :1
"500165" ססחו כ 6| %06=-
ו ןסח דא , ח56600 כ- ח3 01 5 הח 60 06 35 067060 15 5001 ח' :2
5 "06506008 עץחה-
6 06 חן 500760 זה 5007165 פחט|טפסז סחדד' :3
9 ] 5 (0חוזז5 45 הז8ק!והא)5065זווק5 הסטסחט- 6וופטק. :4
5% [06סאןז סכ ]יא 5 5660005 ,חס | 5 1 6חסוהטסססוזסכ צוסא 5מ וו הזוס :פ
,5 5 עס וטש ,0חו50 45 |6ע6! הסוחסום סכ וויא ₪5 6 חחוס :1
זז 35 א06חז/6 [זטס -
פס | 5 5007/10 ,הַח10 5 65הסספוחטח וחוס :7
0:
0 = 65ו0ס5וחנוח :9
10
5 6 50076 ח63 שש 50 08680856 6חז הססס' :11
"" ,"58" ,"5 סא" הססס. החה0ס86כ 2
131
ואסכ 3 ססחו קט [ו]א 6 סהסו' 11
6 = סחץְפב.וןהּ :151
(חזהק!וחא) 080 ]ווה 11
:17
.6 ,6 הסח ,5ח56600 כ 6ח+ || זס+ פהואססו עס חוסם פצצ' 114
00% ||הזסעס 6 ההסז) 500-0766 5'חסו5660 +8חז 0786%א6 שש ,6056 )0 ה6806 זס+' 1%
6 6 חן 8% 6ז560 0חה ,6 והסז) +ה6רח8 |[ שוח 8 6ז08ז0' 20
1 5000 0 0 3 = א06ח1עס טס זס= :2
4 ,5 ,6 הסח ,כ 0 ספזח |ווו פוחז' :22
(א06ח6/1 טס + ("")56)זח) = ע6 [זטס :22
:22
66| פוחז 8% 5600075 || 01 ח60|!6600 8 076806 :25
("[""" 8 עס ]זט 8 """ = |6ע0| ]ח8||.56|6070065)"//56600 = 5660005 56% :20
:2
5 וס +18 50 ,0366/3705 הס0|!66ס 6 וזח 5060 6עצ' :20
0חוא06חו 6ח+ 56%ק +'חס=-
1 5000 0 סד 1 - ה00ַח6ו.5ח56600 = | וס :20
([)5660005 /500765007 :0
4 וויא למפתחי אתרים באינטרנט
1 + 65ו0ס5וחות = 65ו560וחטח :21
1 6%
כ 1
41:
6-כ 51
1
5 )+ זסטרחח הזס6ז' 65ו סספווח = 065ס5טו|50 :7
חסטסחט- 0חם :38
בשורה 4 אנו מקבלים פרמטר יחיד: הנתיב לקוב ה-ווחא, אתייכ מוגדריסם מספר
משתניס מקומיים, ובשורה 9 פסוזסטפחטח מאותחל לאפס; הוא יספור את הסיפוריס
שנמצאו כדי שנוכל לדווח על התוצאות.
בשורה 12 אנו מבצעיס קישור למסד הנתוניס שלנו דרך 0086.
[ התיקיות להגדרת 0086 ניתנות בפרק 2, "מעבר מ-וואדה ל- וואדחא".
הערה,
יש צורך כמובן במסד נתוניס, אותו תוכלו לאחזר מהקבציס שבאתר האינטרנט שלנו,
או ליצור בעצמכס. את מבנה מסד הנתוניס נסקור מאוחר יותר בפרק זה.
בשורה 15 אנו קובעיסם את המאפיין 8506 של מסמך ה-0%כ ל-1856. כפי שצוין
בפרקים הקודמים, הדבר יגרוס לתוכנית לחכות, עד שהמסמך כולו ייטען לפני
שתמשיך. בשורה 16 אנו טועניס את מסמך ה-ספ עם תוכן הקובצ שהועבר כפרמטר
(חזָהק!וחא). התוצאה תביא ליצירת ה-אספ עבור קוב ה- |ואא שלנו.
מרבית העבודה מתבצעת בשורות 21-33.
שורות 21 ו- 23 מאפשרות לנו 'ילספור לאחוריי מ-פ ל-6, ל-8 ומשס ל-ג. בשיטת
הספירה הצו, ניצלנו את העובדה שהאותיות מסודרות בטבלת ה-45011 בזו אחר זו.
אנו מתחיליס עס ערך ה-561 של האות יהי ומוסיפים לו 3, כדי לקבל פ. בפעס
הבאה נוסיף רק 2 (כדי לקבל 6), אחר כך 1, ולבסוף 0. הנה הדרך: א6סחטס |זטס
מאותחל ל- 3 ונוסף לערך המספרי השלס של תו ה-5611 "4"; הערך המתקבל משוערך
כתו, ותו ה משויך למשתנה המקומי ע6 ]זטס.
סיור
קצר
6 |8שו/: הפונקציה (()456 מקבלת מחרוזת ומחזירה את ערך ה-45011 המייצג את האות
הראשונה במחרוזת. ()ח6 עושה את ההיפך, היא מקבלת קוד 45611 ומחזירה מחרוזת
המייצגת את הקוד המסופק.
עכשיו כש-צ6 ]זט מחזיק את האות "ספ" זה הזמן למצוא את כל הקטעיס שתכונתס
היא "פ"=!6ע6!. אנו מצהחירים על אוסף שיכיל את הקטעים האלו, הקרוי (כמה מקור)
5. הוא מוגדר בשורה 5 כ-5% |06סאוחסק |וואאת, כלומר, אוסף של צמתי |וואא.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 155
בשורה 26 אנו קובעיס את ערכו של 5600005 לערך התוצאה של הקריאה
ל-56!60[ 065 על מסמך ה-0% שלנו. השיטה 5616680065 מקבלת תבנית 51א
כפרמטר.
| שיטה זו היא המקבילה ב-וספ לפקודת התבנית ב-51א.
הערה |
אנו בוניס את התבנית עס המשתנה /6 !זט שלנו. אס ל-/6 וטס יש את הערך "פס" אז
הפרמטר 56!6680065 שלנו יהיה ["ס"=|₪16/6 ]005 5600// .
אנו משתמשים ב- // כדי לציין את כל הצאצאים,
י /
ו במקום להשתמש ב- /, המחפש רק בנים ישירים.
הוא מחפש בכל הצאצאיס של השורש אחר רכיביס מטיפוס חסו5660 בעלי התכונה |6ע6!
שערכה הוא "ס", וממקס אותס באוסף 5ח0ו5660.
בשורות 29-32 אנו סורקים את האוסף 5ח56600, ועבור כל קטע באוסף, אנו קוראיס
ל-ץ500765%01.
לולאת זס! החיצונית חוזרת שוב, הפעס מתווסף 2 לערך של "ג" וקביעת |6/6 |זט6
ל-"6". ברגע שקטעים אלו נאספים לאוסף הקטעים, אנו סורקים את האוסף, ושוב
קוראים ל-ץ5)0765001. אחר כך אנו חוזריס על וה עבור רמה-8 ורמה-1. שיס לב
שיהיה רק קטע אחד ברמה-4 וקטע אחד ברמה-8 שיאוחסן עבור כל פרק.
שמירת הסיפורים למסד הנתונים
בכל ריצה של לולאת זס) הפנימית המוצגת בשורות 29-31, אנו קוראיס ל-ץז500765)0,
ומעביריס איבר קטע בודד. הקוד עבור /ז6500ז5%0 מוצג בתדפיס 6.3.
תדפיס 6.3
0 6 חן זס||63 6 ץצ 06060 50066 6 סזסספ' :0
9 ] 5 (השוח6!םז כ 1911 5 6)/ 5007650 הסוססחט- ססהשחק :1
תשש ככ |[ 45 +ה6זבכ %ה6וח6!ם סכ וא 5 |םץוסספצוסה וחוס :2
590 35 6 שחפוזב/ 5 10 חסזהכ ,חס 5 560/10 חחוס 1
חס ססכ סכ שש 5 /וסספצוסח וחוס 4
:פ
וק |החא 6+ 00ב' 1
"| ")6606655050 ץח !וה סקס הלפוס 2
("""1.0""= חסופזסץע"=-
8:
50 ₪6 0!0ח 0ם %+ה6רח6!6 .011 ושח 8 670866 סעצ' :9
("ץ 50 )06666 סוסה = | וסס5שסח 56% :10
6 ויא למפתחי אתרים באינטרנט
סח הווח סקסב סלפ סח
ח56000 6 )0 0ו 6 ההסז 500/10 6חז 06% סצצ'
("0ו")ס סו 6.060 = 500/10
ץחה ]| ,ח56600 +ה6זהכ 606 01 0 סז 15 10ה6זהק 6 סחבּ'
6 = %ח6זהק 56%
("0ו")סס טסו 060.%חסזהס = סשחסזהס
0 = 0ח6זהק הסחד (0ח6זה0)ווטא15 זז
0 56870 60 ץ685 5 6 50 ,₪60 50087806 3 35 3|50 ₪06 606 076ס5 ||'סעצ'
ד ( "6" )600 0הו6.56605 = סח
רחס לס 6 סא ,6786005 6567/60 ץחה סזהּ שוטר 6856 חו אפ
(6)006ססט0 !דר = שח
50 6 ]0 ץ000 6+ הזס1 ס% 500766 0651760 6 הח צוסח'
הס 6 ההוטסרח6 ץ||8608 6זה שצו ,סַהוץְק60 לסח 6זהּ סש 6סחו5 +3רז ס%סח'
+החסזהק |החופחס 06-
6טוסחו ז'חסעט 6|5ע6! טוח 8% 5ח0ו56!660 זסז3! +הח+ 50 ,שחהּעט סעט )הצ 15 הסוחצצ'
ח6ז0!וח6 %06-
6 0-0 חססכה. 5 סלפ סח
6 0 6 חן ,6080813 6030660 06 הסוצו סחסוב , |א 6+ 5606 סחבּ'
חסופזס/ פטסועסזכ חב 06606 ספזח'
0 8 " = 50010 6זסחע 500165 וחסיז 061606" ססטס6אם. ההס6טס
, אא ,חוד ,6061 1ח56600 ,10 הסה ,10 500165)500 ספחו +6פחו" סטססאם. ההס6טס
= ")65 !8/ (+א6 ] 80!655 -
| ","א הזה 8 " ," 8 5010 8
","א (006)ססט0סכ 8 " ," ₪ (("וסעס|")סס טסה 6.060)סססטססס 8
"(" 8 (6 ך.ץזס)פוסח)ססס טכ 8 " ," 8 ([ווחא.ץזס)פשוסח)6שסנוסטס 8
5 500760 6 01 0 ץ 560 6 הזטססז' | 5607/10 = 560050
חסטס6חט= סח
11
2
11
11
151:
11
17:
11
1%
20:
22:
22:
211
22:
251
20:
22:
201
20
7
21:
1
1
1
1
1
1
1
1
210:
2111
בשורה 1 ניתן לראות את החתימה של השיטה /0ו500765; היא מקבלת פרמטר יחיד,
+ח6וח6!םוחסס. מטרתנו היא ליצור מסמך !אא חדש ושלס מסיפור וזה, ולאחסן מסמך
זה במסד הנתוניס.
נתחיל בשורה 4 על ידי יצירת מסמך ה-0%סכ החדש, שנקרא לו ץזסזפוסח. בשורה 7 אנו
מוסיפיס את הוראת העיבוד הסטנדרטית למסמך ה-ויספ החדש שלנו.
בשורה 10 אנו יוצרים רכיב חדש מטיפוס /זסס5, הקרוי |₪ץזסז5או6ח. שים לב כי אנו
יוצריס את הרכיב הזה על ידי קריאה ל-68065|600600ז6 על ץזסז5שוסח.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים
17
כפי שצוין בפרקיס הקודמים, האובייקט היחידי שניצור עס מילת המפתח שפח הוא
+חסותטסססותסכ; כל יתר האובייקטים נוצריס על ידי שיטות ייצור אוטומטיות של
המסמך, כמו לדוגמה 6768065|60606. למעשה 0%ח6768%65|6006 רק מקשרת את הרכיב
החדש עס המסמך; היא לא מכניסה אותו לעצ. זהו צעד נוסף, המוצג כאן בשורה 11
עס הקריאה ל-6ו1ח06ח6כקה.
עכשיו יש לנו מסמך ס, ץוסטפשוסח, עס צומת בודד (הוראת העיבוד), ורכיב יתוס
שץזסז5ו6ח. בשורה 11 אנו מוסיפיס את ץז0ז5שו6ח ל-ץז0ס5או6ח. עכשיו למסמך
ה-אספ, צוסטפשוסח, יש שני צמתיס: הוראת העיבוד ורכיב הייסיפורי'י.
הכנסת הסיפור
אנו מוכניס להכניס את הסיפור הזה למסד הנתונים, אך לפני שנעשה זאת, נשייך
מספר ערכיס למשתנים מקומיים, כך שנוכל למלא במהירות את השדות השונים של
רשומת הסיפור (למשל, ₪₪6, סוח6זהס, וכן הלאה).
כוכור, הרכיב 6, היה הרכיב שהועבר מ-0500165ו|ק5 ל-560765%07165. הבה נניח לעת
עתה שזהו רכיב ברמה-. בשורה 14 אנו מבקשיס מהרכיב ברמה-כ את התכונה "6"
שלו. לכל קטע יש "סו" ייחודי לו לאורך כל הספר, כך שניתן לזהות באופן ייחודי כל
קטע במסד הנתונים. ה-"6ו" הנוכתי, נוסף כאשר יצרנו את קוב ה- |ואא, כפי שתואר
בפרק 4. נחזיק ב-6ו הנוכחי במשתנה המקומי פ1ץז0ז9.
מעקב אחר ה-6ו
אנו גס רוציס לעקוב אחר ה-0ו של ההורה בסיפור הזה, כך שנוכל לשחזר את מבנה
הספר במידה ונצטרך. אם זהו קטע ברמה-פ, ההורה שלו יהיה הקטע ברמה-6 שאליו
הוא שויך בקובצ ה- |ואא. אנו קובעיס את המשתנה המקומי זחסזגּק לרכיב ההורה על
ידי גישה למאפיין 06ס%%חשזהק של 6. כל הרכיבים יכוליס לדעת מי הס הוריהם, כמו
גם מי הס אחיהם הקודמים והבאים.
בשורה 18 אנו מבקשיס את ה-0ו מההורה, ומאחסניס אותו במשתנה המקומי סשטחסזפס.
אס ערך זה הוא 1וטא, אנו קובעיס אותו לאפס בשורה 18. לקטע ברמה העליונה בקוב
זה אין כל הורה, והמוסכמה היא לתת לו כ1 עס ערך 0. כשאנו יוצריס את טבלת תוכן
העניינים, ואנו מוצאיס קטעיס עס הורה אפס, נדע שהס ההתחלה של הפרק.
בשורה 22 אנו קוראיס ל-0!68006ח6.5666%51.
56666 הוא בדיוק כמו 56!66%0065, אלא שהוא מחזיר רק את הצומת
הראשון שהוא מוצא, ומחזיר אותו ישירות לרכיב, במקוס לאוסף. אנו משתמשים בו
כאן מכיווןו שידוע לנו שיש רק צומת אחד, וזהו קיצור דרך נוח.
בשורה 22 0!68%006ח56!60151 מבקשת מ-6 להחזיר את הצומת הבודד, התואס לתבנית
שהועברה כפרמטר. 96%8006ח56!66551 מקבלת כפרמטר תבנית סגנון 51א. במקרה וה
אנו מעביריס את השס המדויק של הצומת שאנו מתפשים, "₪6". 0!68006ח56|66651
8 א למפתחי אתרים באינטרנט
תחזיר את הצומת הראשון התואס לתבנית שלנו; במקרה זה ישנו רק צומת אחד
שיתאיס: הכותרת של הרכיב ברמה-.
ברגע שיש לנו את רכיב הכותרת, אנו משתמשיס במאפיין הטקסט, המחזיר את
השרשור של כל צמתי הטקסט הצאצאיס תחת רכיב זה.
אם הכותרת היתה במקור "תפז <2/>ה6868חה<2פ> פחד", אז לרכיב
הכותרת יהיו שלושה בנים: שני צמתי טקסט ורכיב הדגשה. לרכיב
ההדגשה יהיה צומת טקסט" "חפסווח", מאפיין הטקסט של שש יסרוק
את תת העץ הזה, ישרשר את רכיבי הטקסט, ויחזיר את המחרוזת "פחדך
ההז ה68חחסוחה".
הערה |
בשורה 25 אנו מעביריס את ₪06 לפונקציית עזר שכתבנו, הנקראת 6שסט) וויא דה,
ומוצגת בתדפיס 6.4. מאפיין הטקסט מפריד יישויות. אם היה לוכסן בטקסט המקורי
הוא יאוחסן כ-;0וח88 כשניצור את מסמך ה-1אא. מאפיין הטקסט יחזיר אותו עכשיו
כ-8, אך אנו חייבים להחזיר אותו חזרה ל-;880.
תדפיס 6.4
ההכ 0 ח6 וס ססחו 637800075 0567/60 6 05הה0אס' :0
58 5 (0ח501 5 5 |3ץ66)8סוס |ויזדרו הסטסחט- סווטטק :1
%זו 06 לפ טרח = (";קרח8" ,"8" ,0!806)5ק46 = 5 :2
(";86" ,">" ,₪00!806)5 = 5 3
("806" ,"<" ,₪60!806)5 = 5 4
(";88205" ,"" ,460!806)5 = 5 :5
("8000" ,"""" ,₪60!806)5 = 5 4
5 = סו |ואדר] 2
חססס6חט- 0חם :8
כפי שניתן לראות, ₪0 מחליפה תווים שמורים כמו > ו- < בייצוג היישויות
שלהם, ש|8 ו- 89% בהתאמה.
בחזרה לתדפיס 6.3, בשורה 30 אנו משרשריס את 6, הרכיב שהועבר מ-86560065ו501,
לרכיב החדש שלנו |=ץז500או6ח. וה מעביר את 6 מהמיקוס המקורי שלו במסמך
ה-0%פ המקורי, לרכיב החדש במסמך ה-0% החדש. כאילו שתלשנו אותו מהעצ
הישן והעברנו אותו לעצ החדש.
חשוב להבין שכשאנו מעביריס את 6 הוא מביא אתו את כל הצאצאיס שלו. לכן, אס 6
הוא רכיב ברמה-כ ויש לו צמתים בניס, כמו הערות, טקסט, קוד, וכן הלאה, הס כולס
יועברו מה-0%% הישן שלהס לחדש.
התוצאה בפועל היא שיש לנו עכשיו מסמך אספ חדש המייצג את הסיפור, ומורכב
מהתוכן של הקטע ברמה-כ שלנו. באותה מידת חשיבות, הקטע הוסר ממסמך ה-ויספ
המקורי, וזה מה שרצינו; כשנסיים את עיבוד כל הקטעים ברמה-פ ונפנה לעיבוד
הקטעים ברמה-6, לא ייוותרו בהס שוס קטעיס ברמה-פ; זה בדיוק מה שהמפרט דורש.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 159
יצירת מסד הנתונים
הצעד הבא, כפי שניתן לראות בשורות 34-38, הוא לאחסן את הסיפור החדש במסד
הנתוניס שלנו. אנו משתמשיס במבנה מסד נתוניס פשוט מאוד, שאתס יכולים לשכפל
על ידי ביצוע הצעדיס הבאים:
1
2
פתח את זִסְסַח13!] 56וזכס+ח= 7 ז6ע567 501.
עבור אל רשימת מסדי הנתוניס שלך, ולחץ על הכפתור הימני כדי לבחור ב-"ש6ח
6 , כמוצג בתרשים 6.2.
7 -] חא )ה = זסצז56 .501 5
₪6 | אוסטחועצ | 6|ספחסם |
קטסז) זסצז56 -615501צז56 .501 050/1זסוא3001 5016חס 7
8 מ 0 ש | א | > || 9 | ₪ ₪ < |₪|ם | + = || 1 = ₪ ||
|
3 מ ב
כו 5 55 501 05011זסוא [51 1
הו הפדוסטר סו 568 501 3-63
[דוא פאוסטחו ( ו פאוסטתו = | = ( ד פאוסטחו סזומ 30 כ פד
07| אוסטחו) יהשם הפוא ₪8 כו
6 חסז] עאוסםטתועע או 14
ות
בי
80 09 + | ]| חש | 5 | הק 5 ₪9 מו ₪ ₪ 1 ₪ ב 5 65 | פופו
תרשים 6.2: יצירת מסד נתונים חדש.
תן למסד הנתוניס את השם "5=כ/שא" (עבור ה5678%0 וחסז) )ה6וחט6סכ /60 |א)
ובחר בכל ברירות המחדל של מסד הנתוניס.
כשמסד הנתונים נוצר, עבור אליו, פרוש אותו כדי למצוא את הטבלאות, ולחצ עס
הכפתור חימני על טבלאות כדי לבחור באפשרות '6וסּד שוסחיי, כפי שניתן לראות
בתרשיס 6.3.
0 ואא למפתחי אתרים באינטרנט
7 -] חא )ה = זסצז50 .501 5
]| אוסטמוצ | 5|ספחסם
505 כ ( 1 סח יה ה פטס זפצו56 -15501פצו5 .501 010506 וססח 6ו0פחססו ה
יפ 0 ש |א | = ]| 9 | ם + <> |₪ום | + = | 6% אצ ₪ ||
] ]
4 8005 | 85א06ח1 ₪ 85|טבד 0 וספחסם .|
565 501 !ספסזסו! [[2-55]
טסוה 5676 .501 437-ו
(ד אוסטתו/ן = דוט 8-0
[1 פאוסטתו/ט] הנס תוא א₪- כו
ב
ופוח = 5-0
[פקטטופ] )המוה 1
5 סחוום חווטו 3
6 10/15/99 ה 6 (0פפפט5) אסכ 3)
אס 1
פוב :2 5 8680850
בי 908665 הה3יהַ0/3 68%30856 שסושט
| הסח :סקט 30856+הם 6 אחווח5
1 ₪505 +0 ו פוחטא רם
בונ וי
6 החסז! אוסטחועצ או 14
0
הס |
חס :2 8152850 15%
סחסוא :28 [18ח0יו0/00 185% ב
6 :קטא286 ש0! ח58600 חב 1.85% 88120856 88060 | ]5 חסומוחוםיחמוד 88 0-7 30
ו[
560 [ 0-ו
ופ [ מז
6 05006
53600ה3? 0+ הטיו
₪2
או לשב 800 69 | .טפ ₪ ]| ה ₪ | = | | אק 58 (5: ל מו ש פש בר ₪2 5 5: 69 | |וופופמצו
תרשים 6.3: יצירת טבלה חדשה.
5 תן לטבלה החדשה את השם '56065'י.
6 הוסף את השדות הבאים, כמוצג בתרשיס 6.6.
> פזץזסו5, מספר שלם (606חו).
> כשחסזהק, מספר שלס.
+ |1.606ח56600, תו (ז866זהח6) באורך 1.
+ 6שוד, מטיפוס זהּח6זהּצ באורך 500.
> |אא, מטיפוס טקסט.
%6א80!65516ד, מטיפוס טקסט.
בטל את הסימון ליד |וגטוא אוסו|א בכל שדה, והפוך את פ1זץזס56 למפתת הראשי
(ץ06א עְזהחוזק) של הטבלה. שמור את הטבלה החדשה.
זה הכל. טבלה יחידה זו תהיה מספקת לאחסון הסיפוריס שלנו. בחזרה לתדפיס 6.3,
בשורה 34 אנו מוחקיס כל רשומה קיימת עבור הסיפור החדש שלנו. אס אנו מבצעיס
עדכון, אנו רוציס להיות בטוחיס שהסרנו את כל הנתוניס הישניס; אם אין לנו נתוניס
ישניס דבר לא יתבצע. בשורות 35-38 אנו מכניסיס את הרשומה החדשה:
0 8 " = 50010 6זסחע 5007165 וחסיז 061606" סטס6אם. ההס6טס 1
, אא ,חוד ,6061 1ח56600 ,10 הסה ,10 50065)500 ססחו +6פחו" סטססאם. ההס6טס 1
")8|065/ (+א 6 80!655 -
| ","א 0חסזבּ 8 " ," 8 56/10 8 1
"," 8 (0)006ס80כ 8 " ," 8 (("[6/6|")סטטוז6.00)סססטוסטכ 8 :7
"(" 8 (6 ד.ץ0ס5שש6ח)6ססוטכ ₪ " ," 8 (|וחא.ץזסזפעוסח)סססטססס 8 1
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 161
בי יי 6 1
306% 7 3303565015 כו[ ד +צוסחו/ יח 0 =אקטסום זפצז56 5501ז6צו56 501 |)ספזסווא וטסה 5016ה1:0 חן
69 0 ₪ |א | > 9 | ₪ < | | פופ | + = || זז אצ ₪ |
[= זר | ססות זסשו50 .501
= ]םב
ו [ = אחאס| חס 1--|
וא 35:51 99/ החד א חן חום | 565 501 |ספסוסוו! [55- 2
זב -] ג 56 501 43 3
ו | הדוו מש
₪ 5 6 ₪ | 7 || ₪ מ 4 | מ | 5 ₪ יהנסהסוו % 5
[6
ָּ
₪
5
שש
₪
פס
|1.86ח0ו56
(- ו וד
ב א
6% בוב יוו
פָּ
)>
9 %ם
₪3
שש
ו ו
]881 [-18-0
חב ו 0 מ
5 [ 0-ו
ופ[
80 69 | .₪5 ]| ₪ ₪ | .55 | ה 55 [5 ₪ בו ש ₪ ב ₪ ב 5: 65 | |וופופמב
תרשים 6.4: עיצוב "8שוסזפ".
אנו מעביריס את פזץזסז5, סוחסזהּק ו-6וד שהשגנו קודס לכן, בשורות 14-22. את
רמת הקטע של הרכיב לא שמנו במשתנה מקומי, ולכן נשיג ערך וה בשורה 37 על ידי
קריאה ל 0600006 על 6 עצמו.
ערכי המחרוזת מעובדיס על ידי פונקציית עזר נוספת שכתבנו, סטספכ, המוצגת
בתדפיס 6.5.
תדפיס 6.5
+חסוחטטסזהּ 501 8 85 285560 06 חבש זו 50 חו50 8 פזהחחחסז' :0
(0חו5 5 66)5סו0כ הסטסחטת 6וופטוק :1
וו 8% ( ה 7 ,5 8% וו = פס :2
חססס6חט סח :3
8% פשוט מחליפה את כל המרכאות הבודדות במרכאות בודדות כפולות,
ומחזירה את כל המחרוזת בתוך מרכאות בודדות. למשל, אם היינו רוציס להכניס את
המילה %'ח00 לתוך מסד הנתוניס היינו צריכיס להכניס את המילה ש"חסס'.
לבסוף, בתחזרה לשורה 40 של תדפיס 6.3, אנו מחזיריס את פ1ץזסשפ5 לפונקציה
הקוראת, פ6חסספטווספ.
500 500760 6 ]0 0 5601 6וז הזנטסז' | 500/10 = ץ 50050 20
זה מחזיר אותנו לשורה 30 בתדפיס 6.2, היכן שניתן לראות כי אנו למעשה לא
משתמשים ב-10 הזה כלל; התזרנו אותו רק לשם הנוחות בזמן איתור שגיאות.
בשורה 31 של תדפיס 6.2 אנו מגדיליס את מונה הסיפוריס שלנו. אנו רציס בלולאה
בשורות 29-31 עבור כל קטע באוסף. כשאנו מסיימים, אנו חוזריס ללולאה החיצונית,
המחזירה אותנו לשורה 21, שס אנו ממשיכיס לקבוצת הקטעיס הבאה; כלומר, אנו
עובריס מרמה- לרמה-6, ולאחר מכן לרמה-8 ולרמה-.
2 ווא למפתחי אתרים באינטרנט
לבסוף, כשאנו יוצאים מן הלולאה החיצונית בשורה 33, כלומר, כשאנו מסיימים לפצל
את הסיפורים והתחשבנו בכל הרכיבים במסמך ה-אא, אנו סוגריסם את החיבור
למסד הנתוניס שלנו, ומחזּיריס את מספר הסיפורים שמצאנו:
2: 500765007/ 5660005)[(
1 + 65 0ל5וחח = 65ו560וחווח :21
ישן 1
כ 1
241:
6-כ 1
1
5 )+ זסטהחח הזנס6ז' 65וסספו וח = 65סס5טו|50 :7
וה מחזיר את השליטה חזרה לקובץ ה-459 השולט לשורה 157, המוצגת בתדפיס 6.1
המוצג כאן שוב לנוחיותך.
תדפיס 6.1
(650ו500סו!0ק5 הסטסחט | :150
א|קפס ,65 הו 11
11
("50|5065. ה5678%6 חס" )6076860066 ז/50 = )ווקפס 56% 11
11
(855ק0כ ,80567 ,5 ,"חא" 8 הז8קבז50065)03פו|ס5.זו|קפס = 65ז 11
11
"50065 " 8 65 8 " ססחו |החא." .8 הז085378 ₪ " סווקפ" = 65חסססטווס50 11
חסטסחט= 0ח= :158
נזכור כי היינו בפונקצית התסריט פסוסספטו!ק5 שב-ספ5ה.|סשחס6. בשורה 155 מותחזר
מספר הסיפוריס למשתנה המקומי 65ז, והפונקציה מחזירה את המחרוצת 8 " שו|פ"
"65ו0ל5 " 8 65ז 8 " ססחו |וחא." 6 הִזְהּקבזְב03, כך שאס עיבדנו את הקובצ |חא.60803
והוא פוצל ל-16 סיפוריס, תוחזר המחרוזת הבאה:
"165ז5%0 16 ססחו |וחא. 3מְהח6 סווספ'י.
מחרוזת זו מוחזרת לשורה 50 של ספּ.!סשחסס, שס היא מוצגת לדפדפן המשתמש על
ידי שימוש בשיטת ה-וא של אובייקט 56ח₪6500 של 50( :
(05001650ו!50 .652056 | :50
מה הושג
עתה משראינו את הפרטיסם, הבה נזנק מספר אלפי מטריס מעלה כדי לקבל תמונה
רחבה יותר. ₪01.850ח60 קרא לפונקציה הפנימית שלו 65וז0ז5זווס5, אשר נעזרה בשיטה
5 ו של האובייקט א6עו6 שלנו, שהעבירה את הקובצ שאנו רוציס לפצל
(|וחא. 803ח6).
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 163
השיטה 65ו6500ווק5 הוצגה בתדפיס 6.2. היא פתחה חיבור למסד הנתונים, ואו קבעה
לולאה שסרקה את הקטעיס ברמה-ת, -6, -8 ו-4; כאשר הסריקה מבוצעת מלמטה
(מרמה-0) כלפי מעלה אל רמה-2. כאשר כל קטע שנמצא, הוזן ל-5%07650065,
המוצגת בתדפיס 6.3.
65 חילצה את המידע ההכרתי, ואחסנה את הסיפור במסד הנתוניס.
55 עקבה אחר מספר הסיפורים שאוחסנו, ודיווחה בחזרה על המספר
ל-0|.850ז)ח60, אשר הדפיס את המידע לדפדפו.
כשנסיים, מסמך |0פ הקלט שלנו (המבוסס למשל על ווחא.83ח6) יהיה ריק, וכל אחד
מהסיפוריס הוזן למסד הנתוניס.
בעוד שה-)חסוחטסססויוסס רוקן מתוכן, לא נגענו כלל בקובץ המקורי, למשל,
|
ו |וחא.803ח6. מה ששונה זה רק הייצוג שלו בזיכרון.
[
הצגת הסיפור
לאחר שאחסנו את הסיפוריס במסד הנתוניס, נותרה לנו משימת הצגתס.
מכיון שעכשיו המסמך שלנו מיוצג ב- |אא, אנו יכוליס להציג אותו במספר תצורות.
כמובן, שגישה טבעית ראשונה תהיה להצפגו כ- |ואדו.
המרה מהצורה הקנונית שלנו ל- ואז היא, במספר מובנים, כמו לצעוד לאחור דרך
מראת זכוכית. בדרך כלל, נהפוך בחורה את ההמרות שיצרנו במעבר מ- |ואדה ל- |ואא.
במידה מסוימת, הרבה יותר פשוט לצעוד לאחור, שכן כבר בוצעה עבודה רבה ביצירת
מבנה קשיח. המרות רבות הן מיפוייסם פשוטיס מתגיות ה-א הקנוני שלנו לתגיות
<צו0> ב- ואודת.
חשוב להבין שחיינו יכולים כמובן, להמיר כל מספר של סגנונות ||אדה, התלוייס גס
בדפדפן שברצוננו לתמוך בו, וגם בהחלטות התצוגה/סגנון הנעשות על ידי מעצב גרפי
למשל.
המרה ל- |וודו]
להוזכירכם, מטרתנו הסופית היא ליצור יישוס, שבעזרתו נאפשר דפדוף בחלקי
הסיפורים שלנו, על גבי הדפדפן. המרת הסיפורים שלנו ל- ואד תסייע לנו במטרתנו
זו.
היישוס שלנו יאפשר למשתמש בו לסקור את הנושאים במסגרת השמאלית, ולצפות
בפרטיס של כל סיפור במסגרת הימנית, כמודגס בתרשים 6.5.
4 וויא למפתחי אתרים באינטרנט
זזסוקא = 64חז6)ח! 0504 0% הד
0 1006 שהסופת אשץ 06 6 |
3( ₪4( 8 .98| ₪8 8 | 8 8 98 .5 >
5 ₪685 ווק הו עוס1] 55!וסעב8] ה0ו568 | שהס] 6650 | כסופ וס 0%
* || ₪80 [ד 1031/0150 סס1//:פותו 61 ] 861655 |.
₪ ₪
468% 5
383
+קפסחסט ז0 +ססיו
זס 5ב עְחַס00חח0ט+ הסוחצי
7-ו
8 ? 0|35585 80// ,פט ג
?67 נצס 4.8 :1601010108 ו[טצורעער
150010 5 55 ופגום: ,תס פגוסמופזק 125 מ 019000598 מ4690 1126 [מפמזט1קא 40 עו 1690361
7 זז 430 5808 3791 וגוט 4 שמ פגו 604 סק 1015 גו סוסה 1 זפ :מ860190.
8 9 19 11166 ,/אופבו 1618117617 81111 826 7/60)2188568 ,זר ס1ס בגב 160 צפ[גוק סכ 016: 126 צפ? יט 19 ק.
[גופג 1 8 לס 8 1 .15 מק סז 25910 [גופג?) 81 18106156 06 10 68מסף גו מפ וטג וגוססם מ6ומזר
5 ג וזו 018760 16 0 8 05 61 חספ מ065 189 17 .תש סזס 0 8 1 1 חנז סז 18946 עסו
,6 8גומ0ץ 8 4|וגוס 0+ קנצפגו 009186166 6זיפם 6[גוסשו 1 11281 ₪6 הגוק 18 8 זסם וגו 6פ8 כ ,03018 8ח0 ,5ז80[סזם הפוחד
.81108110 610181 הזוס ט 806 הנס 61-ב קגר] ,8016 81 ]מו ו הַחוזוב שי סא
ץוח 55 ? 1 +ספן[םזס
סח +ספ[סזוס פד החוטווגום
שפסזםשח1 |בטופו/
הב 450 8ומחזום ה
ד זפטן פו זו ,800 8ח+ חך
פוטס 60 3 הַחו0א
אסס זטוסטה
הזו !טסוה אופח 8+ הַחופט
כב
5 3 סל 8 הַחוזזה חס
5 ;86 חו לו התסח/שפת
וז ד פד הַחח3 חס
5 זט
488% 5
40107626 16 501 מ ומס8 16 זכ 457 שמופגו עם 04 םג פנג!1 זט !קוא עשפ 66/17 1
סנוט ג 5 06 1087 7600185568 גג 7 11381 45 168 סז 1-8 .4 מש 00 5 0+ (1712./) טג 1
.57 סו 1500196
+01 81100 10 8591066 85 המו 8 06019 01 991 5 15 התג 1 1806ק ויד שלסזוגוס 4 פיד לזיד ,
016015 0)01/1 015816/ 10 580 סנק סז
96 1146 מס 8010811025 7760 ₪ מוממגת 0+ קש 160010 1/1010808 7 868 366 עו 7 7
ספ מומוו 1177/66 שמופגו (1מ116ט 156 מס תפמ ממ
8 7765 01 1385 116 7 3286 1 המ 1/1 6 67 13 ,זירג
םס 1 8 סגו 185 הקספ 3 םג לגדו זנק סזק 6[קמטפ 7 30
מס 118 28167 56761 15 מס 5מ0ג81ס1[קקפ 7760 = מוממגות 90 010 מב 150 1010050 7 0185869 7760
.0 7191181 מופגו (1מ016 16
160 8815856 גו 696 905 ס?ס:1/1 50781 501
| [0זח60 0+ 8306 005 9300 וזו הזב ססך | וא 105%
00 שש | | סוחס[
6 ו סי | ד | - 800% וד | 45 ו (5 ₪ בו ₪ ₪ 1 ₪ ₪ 5 66 | |ופמצ.
₪
₪
תרשים 6.5: צפייה בפרטים של כל סיפור במסגרת
לעת עתה אנו מעוניניס רק במסגרת הימנית. תצוגה זו של הסיפור נוצרת על ידי
05007/.850ח5. אנו יכוליס לקרוא לדף ישירות, על ידי העברת ה-6! של הסיפור בו אנו
מעונייניס. למשל, אס נבחר ב-081: 10=3002ץ07ז5?ס85.ץ07ל5אוסח5... נראה את
הסיפור 3002 כפי שהוא מאוחסן במסד הנתוניס, כמוצג בתרשים 6.6.
עולות כאן שתי שאלות מרכזיות: כיצד השגנו את הסיפור ממסד הנתונים וכיצד הצגנו
דף !אא כ- ||אדהח! המשך הפרק יתמקד במתן תשובה לשאלות האלו.
זז[ א 61 חז1ח| 110501 - 10=3002עז510? ק5ב. עס סח 5/6155 סתוהססו/ /:קוות בב
| 1005 פפהסום" פע 06 6 |
3( ₪ 8 - - -
₪ 9 | 5 : .
₪ | חק ₪ | עסאה הטסוק 560 | סחסה סוסה ספ 7 ה 7 ממ
* || ₪00 [ד 02 5/0085 15/50 / פס סס1// :קוו 451[ 851055 |
-
?7 זנ 4817 :1501040108 ו[סצודקר
0601זס 8גג11 גו 10 גוסה 1 זנ :מ1601910 קד ס[0ב160 8 1.856 1פגוזג 1 1816[ט פגוס 16 126 בג 019012886 169102 1146 1מ6הז6[סוזע 0+ זו 1 26906
0480 005 5670 76יג3.01, שמפגר
56 10 8681 126 מ מנפם1 זגו 8 מ16!חו 1685 81? 15 111616 ,שופ 7761ג16181 9111 816 6)2188868 77 ,קש 46010 צ8!גוסס כ 6+סמז 16 זג קט 18 קפ
16 0+ 8 02 606 066 188 0 .מק סנ ++2) 8 ג'ק זכ 28816 1981" 8 04ב ונס 1 .68 הנק סז 28510 9181 81 18326166
6סמתמס61 1-0 ,3038016 1מ81 מז ,61691016 ,1פגוס סז 8 4[וגו 0+ ק מנפגו 008106166 6זיבם 8[גוסעו [ 11181 886גושמ3! 8 סב וגוט ,896 1116 מו !קר
010 020381 וסט
סק 61.6 0% 15 זס! 37712 צפזמ/ 1 1806 ו 7 וגוט ב 16 מ 64 ומסח 5מ1 זט 57 שמופגו קט -++0 םג 1315 )מ6מזט1קוה: מס 091 1
.87 0 ₪ 16022010 זסמ6סגופ 181 8 ₪6 קיפות 6002185865/ אמומו 1 18
.006015 0.010 018818 0 989117 18 הנמנפקם סק +04 511017 10 859106 :המופ 605( 01 561 5 5 קהנפטג 1 1806ק וס יד לסזוגוס 4 פיד ל ,זי .
.1171/01 גו (1מ116ס 116 מס 1118 1811261) זרפ 1116 מס 811088 נה 7760 מוממגת צ0+ קש 16011010 1/1020808 ? 868 366 זפוט ג 7 קמ
מס םור
8 076 185 16 7 1.386 1/1 6 13 7 .דד
זס 19785001 88 [סגופ 06 8גום! קש מג1ק503 8 םג מ16!נצשו פותפזק סזכן 16קמטפ ? )קמס
ה פגו (1מ016 126 מס מממ 18161) קספ 115 מס 5מ0ג01ג1סף 0760 ₪ מוממגת זס* 7 16001 1/:0:0808 7 7760018856
160010 38180856 קט1[הגוס 162186 1011020508 366 001
.818 01120 ₪3 881808565 10 1611806מ2 05160 -601 טס תפ 86 מסעס 0+ וש ס1סמ2ג1601 1011010508 7 סנכ 808 נפזיגוס 4 ? כוכה.
8 0 80006 1126 ₪מסק6ט 18 [סגמשו .4.71 01 מסו1ס6טנ6 1116 וזו ,₪0 6ו 85 0601 168161 הג 065 160010 02111656 ב[680 8180285 |!גאו ססט פומ
בכ
|=
ו[ | 6[
א שש | | [6[6 |פ ]> | | | | 8 9 ₪ םד ₪ ₪ םי ₪ 5 5 6 | |פפפב.
תרשים 6.6: סיפור 3002 כפי שהוא מאוחסן במסד הנתונים.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 165
אחזור סיפור ממסד הנתונים
תדפיס 6.6 הוא הקוב 850.ץזסז5צוסח5 במלואו.
תדפיס 6.6
<-- "6|06.350חו"= 6| 100006 --!> :0
1: >%
,36 6 הס 500 5116 וס 11 66 6016065 - ספ3./ סספצוסחפ' - :2
5 6 0150185 חב ,666ח50/65 .51 חב פוט |[ דר ססחו | 5+הסעחס6
50656636 , 51אס ,|וחא ,560/10 וחום
("10/ ")60065 = 5007/10
6 סח חס ]]א< 6 +06'
(10/ 50 8 " = 5007/10 6זסחצו 500165 וחסי |החא ז56|66")ס טס6אם. ה חהס06כ = 5ז 5% :10
סטופּע. ("!וחא")5ז = |וחא :11
12 86
51א 6 הו | ד סש הזסופההט' :14
("הה510 ה ד 5א. 580 סז )68600060 56/6 = ]5אס 56% :15
|וחא = ]!י])סטסח1. ופאס :16
("[5א. || 500/21" ,זו8)60060קטווטפ.150 = 6וו= ופא. ופאס :17
ה ספה ד. ופאס :18
דר 6 ץהוספוס' :20
)סוס טכ ]פאס 66ואו.6פהסקפסז :21
<% :22
כפי שניתן לראות, אין פה הרבה עניין בקובצ. הוא מתחיל בשורה 0, בהכללת הקובצ
0פחו, כפי שהוא מוצג בתדפיס 6.7.
תדפיס 6.7
%> :0
5/א זס) 8|6 6סטוסחו |678ח06' :1
:2
זוסווקאם הסטכס :3
41
3 ,6רה501%3 ,וכז ,7ו60060 ,355קפכ ,ספטכ ,אפפ ,150 ,5ז ,המהסספס הזוס | :5
1
6 6 וחסז פוהבּזהק %06 סעסוחסז' :7
("זו0060"טקחז6 = זוכ 60060 :8
("זו80סה ")06 = זו08030 :9
("פס") 660 = אפ :10
6 וויא למפתחי אתרים באינטרנט
("ז5 )פכ")טקחן06 = ז050ופכ :11
("55הקםכ")טקח06 = 5פהקכ :12
("6ח285613")וקח061 = סוחהּס5ה 0 :13
11
600 חח 60 08730856 3 660ח 5צעְבאו31 זפסוח!ה סצ" - :15
(" 0.6060 576860060 = הה860כ 56% :16
5 ,050 ,אפ ה6ק0.ההס6פכ :17
11
5 ]טוחה 0ף 20[66%) וה500ץ5 6!ן- 3 3150 סחב' | :19
("+060 165/56 . 56 )50/7686 = 500150 :20
21:
(06ח035613 ,7וכ083%3)חזהק0ווטם.150 = הז 080978 :22
22:
(6 הח )קח601כ) הסטסחט :24
(6 3 )("5- א" )₪60065%.600165 = 6טמחזסכ) :251
חססס6חטת 0חם :26
27:
28: %<
הקוב 06.850ש|6ח1 קיים רק כדי לטפל במספר קבועים הנדרשים על ידי דפי ה-450
שבשימוש יישוס זה. יש לו רק פונקציה אחת, +ש0ח6601, המוצגת בשורות 24-26, אשר
מחזירה עוגיה (60066) המבוססת על שס שמסופק לה כפרמטר.
שימו לב כי כל קוב 06ט|6חו מצוי בתוך מצייני התסריט <% 4% בשורות 0 ו- 28. אין
כאן כלל ]ודה, רק 06 856/ בצד השרת. זה נכון גס עבור 0165סז5שוסח5. אחרי השורה
הראשונה בה נכלל 6!006.850חו, יתר הקובצ, משורה 1 עד שורה 22, הוא תסריט בצד
השרת.
בשורה 7 של תדפיס 6.6 אנו אוספים את ה-6! של הסיפור המועבר כפרמטר
(3002=כ50/1 המוצג ב-081). העבודה מתבצעת בשורות 10 עד 12 :
(10 500 8 " = 500/10 6ז חש 5007165 הס [החא 561666" )60 אם. חח סכ = 5605 :10
סע ("]וחא")5ז = |וחא :11
86 12
בשורה 10 אנו מבצעיס הצהרת 501 הנשלחת אל מסד הנתונים שלנו, ומבקשיס את
השדה ווחא מהסיפור התואס ל-פ1ץ500 המסופק. בשורה 11, אנו משייכים את הטקסט
המצוי בשדה |וחא למשתנה המקומי ווחא. כמובן, והו אותו הטקסט המאוחסן במסד
הנתוניס מ-00% הפלט שזה עתה סיימנו לעבוד אתו, מוקדס יותר בפרק זה. בקצרה,
למשתנה ווחא יש עכשיו את מחרוזת ה- !וא המייצגת את הסיפור, המוכנה להיקרא
לתוך מסמך ויזסס.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 167
יצירת מופע של מסמך וספ הקלט שב-!1א
המשימה בשורות הבאות, שורות 15-18, היא ליצור מופע של זחסוחטסססוזסס המתקבל
כקלט מה-1יא שהשגנו ממסד הנתונים, ולהפוך את ה-|א הזה ל-ו|אז₪ על ידי
שימוש בטרנספורמציית 51/:
(" 510 ד ופא הס )076860066 507/06 = 51אס 56% :15
|וחא = ]!י]אסטסח1. ופאס :16
("[פא. | ד0/21ש5" ,7זו60060)והקסווטם.150 = 6 |פא. ופאס :17
ה ופה ד. ופאס :18
בשורה 15 אנו יוצרים את אובייקט 6%ש460 הנקרא החזסו5ח9זד51א, המוכר לנו. בשורה
6 אנו קובעיס את המאפיין |\)סטסח1 שלו למחרוזת |וחא שזה עתה השגנו ממסד
הנתוניס. בשורה 17 אנו קובעיס את המאפיין 6 |פא שלו לגיליון סגנונות. 51
המתאים, "51א. | דח2ץזסט5", בו נדון ממש בעוד רגע. לבסוף, בשורה 18 אנו קוראים
ל-וחזס)פ5חפוד.
כשנסיים, בשורה 21 נכתוב לדפדפן הלקוח, על ידי העברת המאפיין |אאסטסזטס של
מסמך י0פ הפלט.
שימוש ב- 51 להצגת וויודו]
הבה נעמיק מעט את הניתוח של העבודה עס וחזס)5ח8זד |5א. ח567866וחסז=. בחזרה
לשורה 16 של תדפיס 6.6 נוכל לראות את השורה הבאה:
|החא = |אסטסח1. ופאס | :16
מאפיין וה מיושס כפי שניתן לראות בתדפיס 6.8.
תדפיס 6.8
(0חו50 5 6ט|3//שסח |8/ץם) |אסטקח1 16 שזסססזק :0
ספ צוסח 3 ססחו בַחו50 606 חספסו' 1
(" ]וא החסז +וקח1" ,8156 ,6ט|3/ עס )כ ססחז56זבק = אססזטקחזץוח 56% :2
שזסקסזק 0חם :3
כל העבודה מבוצעת בשורה 2, היכן שאנו קוראיס ל-וחסססטח561זהק, תוך העברת
מחרוזת |%א, יחד עם הפרמטרים 856= ו-"|א חס %טסת1". היישוס של
וה00 3756100 נראה כבר קודם לכן, אך מוצג כאן שוב כתדפיס 6.9.
תדפיס 6.9
סכ וח 3 ססחו 5066 +וקחו חב 680 סף הססס6חג זסאזסצו' :0
50 !]א חב 15 083 656 ; |( 8 )0 0 6חז 5| 0868 חסר ,סטש 15 1 ופ זו" :
(0חו50 45 516 ,ה0!68ס8 5 .51 ,0חו50 5 ב00)08% 0שח561זהק הסטסחט- ססהעחוק :
+הסותטססכ סכ 5
0068 5 05016 ,>חסוהנוסססוזסכ צוסא 35 וחסס הזוס :3
6 = סחץ45. וחסס 41
8 =
8 וא למפתחי אתרים באינטרנט
חסחד |₪פו זז 5
(080)08%3 ]. 00 = %/050ז 1
6 :7
(0803) |[]0הס!. 00 = זןטפסז :9
+ 0חם :9
חסחדד 6|פסז +סא +[ :10%
הסט ,576 זסזו56זה +60 :11
+ 0חם 12
החסס = 01%כסח561זהק 56% 1
חסס6חט ₪0 :14
ניתן לראות כי 15081 הוא 9856 ו-6ז5 הוא המחרוות "!1 חס %טסח1ז", בעוד
שהפרמטר הראשון, 0888, הוא ה- |ואא שהשגנו ממסד הנתוניס.
בשורה 3 אנו יוצריס את מסמך ה-ויספ החדש, ובשורה 5 אנו בודקיס את הקלט כדי
לראות האס הוא מגיע מ-0₪1. אס הוא לא, אנו מתקדמיס לשורה 8 כדי לקרוא
ל- |אא080| על מסמך ה-0%ספ החדש שלנו, תוך העברת המחרווזת שהשגנו ממסד
הנתונים. וכך מסמך ספ הקלט, ה-זחסחטסססוזסס מתעורר לתיים.
בחורה לתדפיס 6.6 בשורה 18 אנו קוראיס ל-וחזסופחפזד. שוב, ראינו את הקוד הזה
בעבר, אך מכיון שהוא קצר, הוא מוצג פה שוב כתדפיס 6.10.
תדפיס 6.10
וס 60 51א פוש +טסחו 5וזסו5 חל ץו|36008 - >זסצו 6+ 0065 %080 הסטסחו שרט'
()הס51ח3זזד סטפ סווסגוק
+חסההטססכ סכ וס = אססזטטוסץוח 56%
וזססטטוכסטוסץוח ,סכ ופאץוח 60נט0סס ד ססר וחבט ו'סססטקהזעות
,"טסט" זסזזם ?סק הסחד 0 <> 600006 זסזו 6פזהק. וי!סס+טססטסשוח זו
[אסססטססטסשוח =
ספ 0חם :5
ב ו ב ל
מסמך 20% חדש ריק נוצר עבור הפלט. | אחר כך אנו קוראיס
ל-000[66 0061 'וסו5ח8 ד על +הסוהטס6ססוהססזטטחו, תוך העברת גיליון ה-51א ומסמך
אסס הפלט, ה-6הסוטסססוזסכ שזה עתה נוצר.
גיליון הסגנונות מ- וואא ל- וא דו]
כל התהליך הוא מכני למדי. אנו משיגיסם את ה-|אז כמחרוזת טקסט ממסד
הנתוניס, יוצרים מסמך %הפתטסססאססם %אא מהקובץ, ואחר כך קוראים
ל-000[66% 0061 וזסו5חא+ על מסמך ה-ויספ הזה, תוך העברת גיליון ה-51א שלנו. כפי
שניתן לראות, העבודה האמיתית, הקשה, היא בבניית גיליון הסגנונות (660ח50/65)
הזה.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 169
יישום טרנספורמציית ה-. 51
את מרבית הטקסט שאנו מקבלים ממסמך ספ הקלט נרצה להציג בדיוק כמו שהוא
במסמך הפלט. בדרך אנו חייביס להתמודד עס מספר אתגרים: כיצד אנו צריכיס
להציג כותרות של קטעים וכותרות! כיצד אנו רוצים להציג הערות! איזה סגנון אנו
רוציס להחיל על קוד!
בנוסף, אנו חייביס לנקוט במספר טרנספורמציות כדי להציג את רכיבי ה- |אא שלנו
ב- |ואזת סטנדרטי. למשל, אנו חייביס להמיר רכיבי מרווחים וטאביס למרווחיס
קשיחים, בלתי שבירים.
תדפיס 6.11 מציג את גיליון ה- 51א !וא דה ס 50 השלם, אשר נסקור בפירוט.
תדפיס 6.11
"1.0"= חסופזס/ |וחא?>
01
1:
"|5א-// ד/8זס. 3עש. אא /: קל ח"=!5א:5ח!וחא
"40|ההחח- 5 ךס 3 ואוו /: כ ת"=פ5הווחא
<""=5ח-65016]
<-- 0% 6 זטכ וס 156[ - 0065 666 זס) סוט 061906 --|>
<"(א66"= 306 306|קרח5|:06א>
)%5|:/8|06-0>
<06ה|רח51:06א/>
6 ד 6 ]0 5066 6 לטכס טס - 06סח זססז 06 --|>
<-- הסןפז600 6 חהוס6 סח -
<"/"= 806 66ה!רח5|:06א>
<|וחזו]>
<680>
<50/|6>
:וס ס-חווה ;1006 :526-%ח0? ;018ז060:ץ!ורחפ)-%ח7+0 *
:60 הששסהאחט.
30:37 ; 6 ח0ו!:זסוס6- טס 6+ 6006.
? ;526:1006-%ח0? ;סו סה 60 :ץוור8)-+חס)+ 06006א00.
526:90%-%ח0? ;וס זוסוזטוס6 :שוורחפ-)חהס+0 6חוו6006. ,6חוו6006.
? ;0:ה חס סם-חו הוח ;90%:%ח0וסח-6חו|=
00%:00|07ו6א-ה0ז) 68067 חס 500.
<-- ח0ו680 06 ,ז6806ח חחפו] --!> 6ו0ו:6ו/50-%ח0י+ אח. ,חו.
00:37 ;460 0:חוס הוח ;ה66זססתטו!:זסוס6- הטוס 40360 סזסח.
; 0808 07/:ץ|ורחה"-00%י+ 68007רוסססח. ,1 סחווס6סח. ,₪ שחווס6סח. ,6חווס6סח.
?520:80-ח0)=-
?;6:2670!-חוחזהרח+ 6הווסלסח.
7 ו /ש-%ח0]+ 06800לסח.
0;7: 00-הו הוח 5126:80%-%ח10 ;09/6ו:50/16-00%ז+ הוחו 5.
0 ואא למפתחי אתרים באינטרנט
>/50/6<
<080/>
3065|כוח6-ץ!כקה:|5א>
<חטח/>
<06ה!רח51:06א/>
<-- 305? ]0/6 66| עחה זסז 56006 --!>
<"*"= 7806 306!רח5|:06א>
<"ה/טסחאח"=6!355 /|0>
!!6וההח-06סח:!5א>|!
8065|מוח6)-ץ!|כק5|:8א>
<שו0/>
<06ה|רח51:06א/>
--!|>
680 5'סחצו חס 06260 אססם זס /0ל5 06 %חטורח - +ה6ח6!6 |פע6!| קס+ סחדך
5 <7ץ200> 15106 זה 60 6 5הז זפו3
5 0 סרח זוסט3 0סזחו / הררפ 506 הטוע 65חפוחו1 הסחדך
5 010700 +0-
<--
<"00% | /50"= 806 6זה!רח6ת:|5א>
<ץ000>
3065|כוח6-ץ|כקה:|5א>
<" הוחו 6!355="5 /ו61>
החרוח 5 חסו566
5ס ההק <|5|:6/8א/> ו ח6!. (" עו //" )56660065.וז<|5|:6/8א> < /זסם>
5 0006 <|8ש5|:6א/ > 6( "5605/60 5ורם<|51:6/8א> < /זם>
5 <]51:6/8א/ > ה ח6!. ("6סח//" )15.56|66%0065ח%< |5|:6/8א> < /ום>
<שו0/>
<ץ000/>
<06ה|רח51:06א/>
--!|>
666 |ו'6/ .6855 חצוס זוסח חשואו 15כ ססחו קפוח 5%( 5חסוז566
6 סע 6856חו ססטטו3 |6/6! 606
א חס 08560 חח הוס? 00 60 +חפ/ע
<--
<"ח566000"= 806 66ה!רח5|:06א>
>< "]6/6|"= סח 006ו5|:8010א> <"61355="566000 ש01>
<6ט51:8070א/ > < /"]50|66%="60|]0/6=-
<טו0/> < /365|קרח6-ץ|כקה:|5א>
<06ה!0רח51:06א/>
>!--
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים
201
20
%
21:
1
1
1
351:
1
2
1
41
210:
2111
212:
21:
1:
1
21
:21
11
:21
תי
1
2
1
1
:לפ
1
1
:1
=
7
1
2
1
1
1
1
1
1
11
,307106 61355 66 הבחור 6 .רחשו הסה ההק זא6ל 08516 וטס תי
56 6 ץ||68ז 15 הסוח/-
6וחפח 50/!6 זס/\ |החוףחס שוש 5ב :0
71: -<
<"טו0"=ח800רח 306|קוח5|:%0א> | :72
<צ|0> 1
]>< "6="6|355ה30ח 5|:80100066א> 1
<51:800706א/> < /"56|00="600]355=-
3065|קרח6-ץ!כקה:|5א> 51
<צו0/> 1
<306!קוח5|:00א/> | :77
1
<-- "006 חו269" .6.0 ,5הס66זוס חהוחפו|טטוק סזבּ 0656 - כק 6זסחטו סצו --!> | :79
<"['0ק'=66|355 ]/01"= 8%6וח 66ה!ות6+:|5א> | :80
<06ה|קוח51:06א/> | :81
2
83: >|--
.5 30 010665 6006 10 065 %ה6חהסס 260ו|506018 זוס סזהּ 6פסחדך 1
5 60חו 60500 רסוצ פעו ססחו החשרט 86חה8ח6 6פון 6/ :51
86: --<
<"6חו0ח | 6006 | 6חו|60006"= הח 66ה!קותס::|5א> | :87
< /סהַהח-006ח:]5א> < "61855"= סרח 066 5|:38א> <> :88
<צו/> < /3005|קוח66-ץ|סכה:|5א> <6סטו51:307א/> =
<306!קוח5|:%6א/> | :89
7
3 חו +טוכק 0 חפ סש 06680056 !50603 6וו! 8 15 +66 סזסח 6חד >!-- :91
<-- "000" 585 %086=-
<"06ח"= ח300רח 306|קות5|::6א> | :92
<"000ח"=0!355 /|0> 1
<עו/ >10%6]< 600 66סח"=6|355 /01> :4
3065|קוח6-ץ!כק5|:8א> :51
<צו0/> 1
97: >/א5|:ס6וק|36<
1
<-- 6|855 /01 חאוס זו6ח? ססחו הוח 8|50 5ה56600 זסז 065וד --!> | :99
<"6"= 0 366!ות6ש:51א> :100
<"68001 0|355="566000 /|0> 14
3065|קוח6-ץ|כקה:|5א> :14
<שו0/> 141
<306|קוח5|:66א/> :104
151:
סח 1656 הזו - )6% 6 חן 6006 060016 סל ₪560 שזה %5ח6רח6!6 6חו|ס6סחט --!> :106
<-- 50805 |50668 חאוס זוסת?-
<""=ח30ח 366!קות6ש:|5א> :107
12 ואא למפתחי אתרים באינטרנט
<ח508/> < /3065|קוח66-ץ|סקה:|5א> <"06006א6|855="66 ח508>
<06ה|כח51:06א/>
<-- ההות 586 66 0ף הסח קבוח לפ( - 005ל 6או|- וא דר ה|ווחפצ 6|סחפח --!>
<"זם | כ גפ| טטפ| || פ"=ח6הח 306|קרח%5|::6>
<%ח6ח5|:6|6א>
3065|קוח6-ץ!כק5|:8א>
<+ח6רח51:6|6א/>
<06ה|ח51:06א/>
ואס קה 6/ .25;5ח8 +0 5600060065 ססחו 60כקהרח 06% 05ה+ סחה 5חטזססה0פ --!>
<-- 508665 4 חואו %805=-
<"ח50806"= 306 36| וח0ס:|5א>
,";160 %.400681)"8 <|51:6/8א> <ח508>
<ח508/> <|8ש51:6א/ > (("ח6|" )סח .ור
<06ה|כרח51:06א/>
<"80?"=ח8300רח 36| וח0ס:|5א>
<ח508/> <|51:6/8א/> (4 ,";160 %.0003)"8 <|5|:6/8א> <ח508>
<06ה|כח51:06א/>
טח 56 סע - !ואד חו ץה|קפוס זס 65 ח6 סשחו 5זהח6 |506018 5|806חב0 --!>
0 8/6 ז'ח00 6א 50 000065 -
<-- 15 חן אזסא ץ|חס עה - הסח 066 עטוסווקאס
<"זח6"= 1306 6ז3|קרח6ם:|5א>
<0056ח%5]:6>
<חסח;ו:|5א/>;8.48212<"[ 285 וח6' = . ]0/6 60"=+%05 הסחצו:|5א>
<חסה/:|5א/ >; 8226+.8<"[שס!|טס' = . ]006 %05%="60 הסח/ו:|5א>
<חסחאצו:|5א/>;8.%8230<"[ 5ו5כן]|6' = . ]0/6 %05%="60 חסחצו:|פא>
הח566 %'ה0065 28195 - 650806 זס? 5ק5סח 2 56 %פגון ||'ס/ש --!>
<-- 006060060 35 אזס/ו %0=-
<חסחו:|5א/>;160;8:%160 %.8<"[ 50806 רח6' = . ]0/6 60"=+%05 חסחצו:|5א>
<חסחאו:|5א/> ;146 %.8<"[ 05ק הרפ = . ]006 %05%="60 חסחצו:|פא>
<חהסחאו:|5א/> ; 147 8%< "[ סוכ דה רחפ' = . ]0/6 60"=+%65 הסחצו:|5א>
<חסחצו:|5א/>; 148 8%< "| סכה רתפ = . ]006 %05="60 הסחצו:|5א>
]8-0 ע:|5א> :זה8ח6<"העשסהאהט"=6!355 ח508> <56!צ6ר5|:00א>
<56ש51:0100א/ > < ח508/> < "0/6" =50|60=-
<0056ח%51:6/>
<06ה|כח51:06א/>
<5|1:50700א>
]מ )!>
+ 60165 ח )0 8ח5150ח60 8ח501 8 פחזנססז ]/
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים
11
11:
1
1
11+
1341
11
11
14
11:
11
11+
12+
1
11
[אלו
11
11
11
171
11
+
17+
1
11
11
11
11
11
11
11
14
1
1
11
141
11
151
+
13
(ח ,6068666 הסטסחוח :147
+ :148
;"" = ז זה +
(0 < --ח) 6|וחעע 1
₪ =+ ז 1
;] הזז 11
153: ?
154: [[<
155: >/א51:5010%<
11
157: >/א51:50/|650060<
מתחילים
גיליון ה- ו5א שלנו מתחיל בשורה 0 על ידי יהוי נאות של עצמו עס הוראת עיבוד. אחר
כך רכיב גיליון הסגנונות מזהה את ה-8706508065ח בהסם נשתמש. שורה 2 מזאהה את
ה-8650806ח הקרוי |פ5א כפי שמתואר בפרקיס הקודמיס. שורה 3 מצהירה על
6פטחהּח הקרול וחשח, ושוב נשיס לב כי הוא ללא שם (פח!וחא אינו מלווה בנקודתייס
ומזהה). זה מציין כי אס לא מצוין אף ססְהַספסחחִּח אז אנו מתכווניס ל- |וזדו. לבסוף,
הפלט 8650806ח נקבע ל-6קח6, המצייו שהוא ישתמש ב-8650866ח ללא השם,
במקרה זה ב- |אז. מסמך יספ הפלט שלנו יהיה מסמך וואדה, כך שזה אכן נכון.
הכותרת העליונה ב- !ו דו]
בשורה 12 אנו מבצעיס התאמה לרכיב השורש:
<"/"= 806 806!רת6ש:!פא> - :12
כשאנו מבצעיםס ואת, אנו מוסיפים מספר רכיבים למסמך ספ הפלט. אלו הן
הכותרות שאנו רוציס בקובצ ה- |ואזח שלנו, והן כוללות את <|חזה> ו-<7680>
הסטנדרטיות כמו גס רכיב <5/6>. הרכיב <50/6> יספק עיצוב 655 (50/6 0חו685680
6% למסמך ה-שואדה.
למסמך ה-וא המתקבל יהיה רכיב שורש <900%> או <ץזסופ>. ה-51א המטפל בכך
הוא והה, כפי שניתן לראות בשורות 47-57:
<"א00 | ץ5%01"= ח0הוח 306|קותסש:|5א> | :47
48: >200ץ<
3065|קוח6-ץ!|כקה:|5א> 27
<"/ הוחו( 0!355="5 /|0> ו
ץזה חר 5 ח56600 1
5ס ההק <|6/8:|פא/> ה ח6!. (" עו" )566600065. וחז<|5|:6/8א> < /זסם> 1
65 6006 <|51:6/8א/ > ו ח6|. ( "6006 )00065 5.566ור?<|6/8:|פא<> < /ום> 1
5 <]51:6/8א/ > ה ח6!. ("6סח//" )15.56|66%0065ח%< |5|:6/8א> < /זום> 1
<צו0/> :לפ
56: >/200ץ<
57: >/א5|:06חק|ה06<
4 וויא למפתחי אתרים באינטרנט
אנו מחליפיס את הרכיב 500% או עזסו5 ברכיב 00 של |ואזה, ואחר כך קוראיס
ל-0|8065וח6>-ץְומֶקָה כדי לאסוף את הרכיביס בתוך 500% או עזס)5. אנו נשוב לשורות
4 בקרוב.
מכיון ש- 51א היא הצהרתית באופייה, ולא פונקציונלית, יהיה וה נכון יותר לא לעבור
על קוב ה-51א שורה אחר שורה, אלא לשקול את המשימות השונות שאנו שואפיס
להשיג ולהתמקד בדרך השגתן באמצעות 51א.
טיפול בקטעים
נזכיר כי מסמך ה- וא מחולק לקטעים, 5660005, המייצגיס את הכותרות ברמה-ג,
-8, -6, ו-ש. לכל קטע משויכת כותרת, ומספר כלשהו של רכיבי טקסט, הערות וקוד.
בשורות 63-66 אנו מעבדיס את 5600005 כמוצג בהצהרת ההתאמה של רכיב התבנית :
<"560000"=ח80וח 806|קותס::|5א> - :63
כשמבוצעת התאמה לקטעים, אנו יוצריס רכיב <צו9> חדש עבור מסמך |אספ הפלט
של ה- |אזה. אנו מקודדיס את התכונה הראשונה, 68855, ל-"ח560 'י. אנו רוציס גס
לשמר את התכונה |6/6ו, ולכן אנו יוצריס תכונה חדשה (על ידי שימוש ב-00%6ו51:800א)
וקובעיס את ערכה על ידי שימוש בהצהרה )ס-6טופע כפי שראינו קודס לכן:
]>>> < "]6/6|"= 6רחהח 6סוזה:51א> <"ח0|355="56600 > :64
<51:30071006א/ > < /"|56|606="60|0/6=-
| יש לזכור כי הסימן 6 בתבנית ה-51א מציין התאמה לערך של תכונה.
הערה |
1-7
בשורה 65 אנו קוראיס ל-8065!קְ60*-ץומְק8 כדי להבטיח שאנו עוברים ברקורסיה על
הקטעים, כך שנעבד כל אחד מהרכיבים המוכליס בהם.
למעשה, כל קטע יתחיל ב-א0 המוהה את הקטע, ובין התגית <צו0> הפותחת והתגית
הסוגרת שלה <צו0/>, תהיה הכותרת, כל הטקסט, ההערות והקוד של הקטע.
הכותרת היא הרכיב הראשון שניתן לראות בקטע. שורות 99-104 מבצעות התאמה
לרכיבי כותרת ויוצרות עו עס התכונה ז6806ח56600 :
<-- 6!855 /|0 חאוס זוסח? ססחו הוח 8|50 5ה0ו5660 זסז פ06וד >!-- :99
<"6"= 0 366!ות6ש:51א> | :100
<"768067 6355="5600000 /ו61)> 11
3065|קוח6-ץ|כק5|:8א> 2
<שו0/> 141
<306|קוח5|:66א/> :104
התכונה "ז6!855="5600006806 תשתמש באמצעות הדפדפן בביצוע התאמה לבורר
ה-655 ]6806 566000 כמוצג בשורה 21:
000:00|07ו6א-%ה0ז 6807 חס 500. :22
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 175
התוצאה היא ש-ז76806ח56600 ישתמש בסגנון ברירת המחדל, המוצג בשורה 16 :
:וס סס-חוט הוח 100% :526-%ח10 ;8ו0ז060:ץ|ורח3-%ח70 * 11
אך ישנה את סגנון ברירת המחדל לקביעת זחִאופאו-%ח10 למודגש.
בשורה 102 אנו קוראיס ל-6ז8|מחח6-ץְומְקְג3ּ, אשר תבודד את הטקסט מהכותרת.
בשורות 6-9 אנו מצייניס כי כל רכיב מטיפוס טקסט ימופה כפי שהוא למסמך ספ
הפלט; כלומר הטקסט פשוט יועבר הלאה:
<"(א6)"= 906 306|קרח5|:06א> | :7
)%5|:/8|06-0> :1
<36|קוח6ס:|5א/> | :9
והו הטקסט אשר יוצג בהדגשה. את הקוד הוה בדיוק ניתחנו לפרטיו בדיון הקודס
על 51א ולכן לא ננתח אותו גם כאן.
רוב הטקסט שבמסמך הקלט נמצא ברכיבי <צו0>, שכל אחד מהם מייצג פיסקה של
טקסט. בשורות 72-77 אנו מטפלים ברכיביס האלו, פשוט על ידי יצירה של רכיב עו
חדש עבור פלט ה- !וא והעתקת התכונה 6|355 בשלמותת:
<"טו0"=ח800רח 306|קוח5|:%0א> | :72
<שו0> 1
> <"6="6|355וחהח 06ט5|:80710א> 1+
<51:800706א/> < /"56|00="600]355=-
3065|קרח6-ץ|כקה:|5א> 51
<צו0/> 1
<806!קוח5|:00א/> | :77
הבאת הקוד לתצוגה (6006 0ח1ו06ח₪6)
על פי המפרט שלנו, כשאנו מציגים קוד הוא אמור להיות מופרד מגוף הטקסט
המרכזי. כדי להשיג זאת, ניצור תגית <טו9> עבור הרכיבים <0006> ו- <6ח|6006>
שלנו. לכל אחד תהיה תכונה 6|855 משלו, ולכן כל אחד יתאיס לבורר 655 ייחודי.
בשורה 87 אנו מבצעיס התאמה לכל אחד מה-6חו|6006, 6006 או סחו|סזסת :
<"6חו0ח | 6006 | 6חו|6006"= הח 66ה!קותס::|5א> | :87
הפעולה שלנו על כל אחד מרכיביס אלו היא ליצור רכיב טו, עס התכונה 6|855. הערך
המשויך ל-6!855 הוא ה-6ַַ8ַח-006ח שכנגדו בוצעה ההתאמה (למשל, 6חו|6008, 6006
או 6חו|ספזסח). אחר כך אנו קוראיס ל-600!8065-ץומְק3 כדי להבטיח שאנו עובריס
ברקורסיה על רכיביס אלו:
<"6חו0ח | 6006 | 6חו|6006"= חח 66ה!קותס+:|5א> | :87
< /חהַהח-006ח:]5א> < "61855"= 6חחבּח 06 5|:380א><צוס> :88
<צו0/> < /3005|קוח66-ץ|סכה:|5א> <6סטטו51:307א/> =
<06ה|קוח1:06פא/> | :89
6 וויא למפתחי אתרים באינטרנט
כך, רכיבי קוד יומרו לרכיבי <שו0> עס התכונה 6|855 שערכה הוא 6006. בשורה 18
ניתן לראות כי הסגנון של רכיבי הקוד הוא לשנות את צבע הרקע וליצור רווח בן 3
נקודות (0חו800 30%) :
30:37 ; 6 חטו!: זסוסס- 0 הטסז08600+ 6006. 11
לכן, כשנציג את הקוד ב- !ואד הוא יוצג על גבי רקע בצבע בחיר, ויבלוט מגוף הטקסט.
טיפול בהערות
האסטרטגיה שלנו לטיפול בהערות היא דומה מאוד, וכבר ראינו ששורה 87 מבצעת
התאמה לרכיבי ס6חו|סזסח.
בכל אופן, התאמה לרכיבי הערה חייבת להתבצע בנפרד, שכן אנו רוציס לכתוב את
המילה סא בראש ההערה, לפני הצגת התוכן של ההערה עצמה. אנו רואים יישוס של
זה בשורות 92-97 :
<"06ח"= ח300ח 306|קותס%:|5א> | :92
1 >611/ 6!355="0000"<
<עו/ >1006]< 600 66סח"=6|355 /01> :4
3065|קוח6-ץ|כקה:|5א> :51
<צו0/> 7
97: >/א5|:06וק|36<
כשאנו מבצעיס התאמה להערה, אנו יוצריס צוס חיצוני שהמחלקה שלו נקבעת ל-6זסח.
בשורה 23, אנו מגדיריס את סגנון ה-655 עבור מחלקה זו (צבע רקע ירוק בהיר,
וריווחיס מתאימיס):
:000 ;הח46 0:חוסזהוח ;ה66זססחטו|:זסוס6- הטוס 40360 סזסח. :23
אנו מיד מגדיריס צו6 פנימי עס המחלקה ]06706806סח שתוכנה הוא המילה 6וסח.
סא חולק את הסגנון שלו עס 6חוופזסח ועס שורות הערה מודגשות ומוטות,
כפי שניתן לראות בשורה 24:
;08 /: ץוורח8)-%ח0ז+ ז006ה6רוסססה. ,1 סחווס%סח. ,₪ סחווסססח. ,שחווסלסח. :22
7-ו
?;6:260-חוסזהרח+ 6הווסלסח. :251
7 ו /ש-%ח0]+ 06800לסח. :20
אנו רואים גס סגנונות 655 עבור שורות הערה (המקבלות שולייס שמאלייס) וכותרת
הערה (המוצגת בהדגשה).
קוד 6חווחו
כשמסמך ש6זס/ המקורי נכתב, מליס מסוימות בתוך הפסקאות סומנו בקו תחתון,
במידה והן התייחסו לקוד. למשל, בפרק 3 בספר הדוגמה, כתוב:
0 560 15 זו ץץ0ח6וט6) חן ז6/ו56 6 35 שבח 5וסס וקו 60 הצוס זטסץ 0006 5050 סז 66
(6 5 רת
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים | 177
הקו התחתי מציין לעורך שזהו קוד, שאמור להיקבע בגופן מיוחד. כשזה נשמר
ב- |ואדוז, הקו התחתון נשמר, כפי שניתן לראות במובאה הבאה מ-:0זח.60803 :
6וח 5'זס קר 60 העטס זנטוסץ 006 50050 0ף 66 < [-0855=7 ק> :1989
חן ]507/06 6 85 -
<ס/>.(<ט/ >ז/ו56רח< ט> סל 56% 5 ₪5 ץסח6זוט6) 15 6חו| :1990
בכל ההמרות שלנו - ל- וו זוא, לקוב ה- |ואא הזמני, ולצורת ה- ]וא |00688ח68 שלנו -
רכיב הקו התחתי נשמר ולכן הוא נשמר גס במסד הנתונים.
כעת, כשאנו הופכים ואת חזרה ל- |ואז, נחליט להכיר במשמעות האמיתית של הקו
התחתי הזה, כמובאה של קוד. אנו נשנה את הרכיבים "טש" שלנו (כלומר, רכיבי קו
תחתי) לתגיות ח88ק5 עס המחלקה "60006" :
<"ט"=ח30ח 366!קות6ש:|5א> :107
<ח508/> < /3065|קח66-ץ|סקה:|5א> <"06006א6|855="66 ח508> +14
<306|קוח5|:66א/> :109
על ידי קביעת המחלקה ל-"66006א6" אנו מוריס לדפדפן להחיל את הסגנון המיועד
בבורר ה-06006א68, כפי שניתן לראות בשורה 19 :
7 5126:1006-%ח10 ;צוס] זס הטוס :ץוורח8)-זהס)+ 00006א). 11
את התוצאה ניתן לראות בתרשים 6.7, בו מוצגיס הן הדפדפן והן המקור ב- וויודו.
ניתן לטעון כי עשינו בדיוק את ההיפך. כשביצענו המרה ל-ואא היינו
אמורים לשמור את הכניסות האלו לא כרכיבי ט, אלא כרכיבי 660006ו. זה
- היה נותן לנו את היכולת לבחור האם להשתמש בגיליונות סגנונות במהלך
הדרך.
הערה |
בכל זאת השארנו זאת בדרך שהוצגה, כדי להדגים מספר נקודות:
1. ההבדל בין התחביר והסמנטיקה הוא לא כל כך ברור.
2 ישנה יותר מדרך אחת להשגת אותה המטרה.
3 לעתים, לא מצליחים מיד בפעם הראשונה.
הנקודה השלישית היא לא בדיחה; כשעובדים עם וויא ו-51א, כמו עם כל
שפה מורכבת אחרת, יש מקום לשיקול דעת. לעתים קרובות יש להחליט
האם זה משתלם להפוך תגית נתונה לתגית עשירה יותר מבחינה
סמנטית; והתשובה לא תמיד כל כך ברורה.
8 ואא למפתחי אתרים באינטרנט
:|95- 8 ₪ ₪
8 | |6 חק |
₪ א
עזסופו | 3/0!65- 568100
6 בו 16811118 1126 261126 10 קמבטות 9006 1146 פמגות <6ש56 116 .8001 2 מגה ץק סזכן ומאו או .1171 ,ע11811מ6886 ,15 קב
1מ16ס 1116 10 861 116 8 סנקו (1ג ג 168 5001 5662 סם מומזו) 0386 .1111/11 8 68טגו0 סעכ 6ב8 ,306 07 6מו מו -ז/נ ד
זט 116 ג 19018
7 םג 131 :57 וזו 11866 265 בגו 31| ווק 90 סש 6זה 66ב
(ק1ם2) 457 פמגוץ 18 281) 901 פטגוק 111166מ6 ,886 6[קמצפ זגוס 10 קבוז9ו1 57 1666קנסט 1116 ₪69 מוסזס 3.1 8ַמו91 1
<% סְעְנַעסבמ/=6בַבגו)מ18 %8>
<> 1
<עשט :2 ||
> 1
<"6.0 410ג50 7191181 03056מ1!110"=סמ6סמס0 "תסדג תומ "=מןזך
<פג 1
/><111/ 526286 11 מגוץ <1><>
<4=1מ061128861 6=1מ2801ע06115 1=מ662מסע 75% = בס16ח 16ע18>
3 םגה %>
("026806001605)"88068.2600288369.ש06ע836 = 8ע 866
541506 מ61
"8ע11306מגוץ מסע? * 561608" = 801508
ססשמתס0עס5 ₪18
% "=272; 112=58; 8 מגו836=7 2808; עשטע 56ע1=ע06ע56; (ע6טע56 502)=עשטבעכע" = ססשממססעס8
( 60%ממ00ע56 ,8ע84180)ת8.0262ע 0811
<3.605%ע ססם 116
<ס>
<0/><> ( "18 מגום") פע=%><ס>
זוה [סס 1 55
כל 0 )וס)וסו >
חום סוסעס6ת אספווגום בכ
500 | 85 [ףפ [55 || אק ₪ מו ₪ 5 ל 6 ₪ 5 65 | |ווספמצ
תרשים 6.7: צפייה במקור
ו דו] בקלות
מסמך ה- !אא שלנו מורכב ממספר רכיביס אחרים שחייביס להפוך ל- וואדו].
הפשוטות ביותר הן תגיות ה- ]וא זט,505,500,ו,ם שיש להן התאמות ישירות ב-וודח,
וניתן להעביר אותן כפי שהן, כפי שניתן לראות בשורות 112-116 :
<-- חח 5306 6 0+ החסרש הוח 15%[ - 805 6או]- |!אדר] הווחש 6וסחבּח --!> :111
<"זם | | טטפ|1| פ"=ח806 806|קוח6ז:!5א> :112
<+ח6רח5|:6|6> 141
3065|קרח6-ץ|כק5|:8א> 11
<+ח6רח51:6|6א/ > :151
<806|קוחס%:|5א/> :116
עבור כל אחד מהרכיביס האלו אנו מגדיריס רכיב חדש במסמך 0% הפלט, ומעתיקיס
את התוכן. להלן אופן הביצוע: הרכיב +ח51:6606א מחזיר את הרכיב הנוכתי. כך, שאס
ישנה התאמה לרכיב <0>,אז %ח51:66006א< מכניס רכיב <5> במסמך וספ הפלט. בין
תגיות הפתיחה והסגירה של 0%ח6!60₪6:|פא נראה את התגית 60!8%05ז-ץ!סס5|:8א,
המעתיקה את התוכן של הרכיב <5פ>.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 179
רווחים וטאבים
למסמך סזס/\ המקורי היו רווחים רביס בחלקיס שוניס במסמך. כש-6זס/ שמר אותס
לתוך 1אז₪, הוא שמר אותס על ידי שימוש ברווח בודד המלווה ברצף של תווי 80
הקסה-דצימלייס (בבסיס 16). המרנו אותס לרכיבי חטז50866 שלנו, שהתכונה חפ
שלהס מספרת לנו כמה רווחים נדרשיס.
רווחים
כעת, אנו רוציס להחליף אותס ברצף של מרווחיס קשיחים (ש-1אז₪ לא יצמצמס
לרווח בודד). סימון ה- !אד עבור זה הוא ;950ח8. בשורות 118-121 אנו ממיריס את
הרווח לרכיבי ;50טח8 :
6 חואסזכקקה3 6/ .050;5ח.8 01 560060665 ססחן 60כקהוח 06% 305+ 0ח3 5ח50360700 --!> :118
<-- 508665 4 חואו %805=-
<"חו508607"= ח0הח 366!ות6ש:!פא> :119
,";160 400681)"8.4 <|51:6/8א> <ח508> +12
<ח508/> <|5|:6/8א/ > ( ("ח6|" )וטו .וח =
<36|קוח0ף:|פא/> :121
בשורה 119 אנו מבצעיס התאמה לכל רכיב חטז50866. בשורה 120 אנו משתמשיס
ברכיב |5|:68א כדי להעריך את התוכן של הרכיב |688 כתסריט. כך, מנוע ה-|5א
יתייחס לכל מה שבין <|8ש51:6א> ו- <|5|:6/8א/> כאל תסריט, והתוצאה תמוקם כתוכן
של תגית ה-ח8ס5.
התסריט קורא לפונקציה ₪6068%, תוך העברת היישות המספרית המקבילה ל-;050ח8
כפרמטר הראשון שלה, והערך של התכונה "ח6!" של הרכיב הנוכחי (הרוות).
ניתן לראות את היישוס של הפונקציה (₪60686% בשורות 144-155 :
<51:5000א> :144
]מ ]> :145
+ 6065 ח 01 8ה5150ח60 8חו50 8 פחזונססז // :146
(ח ,₪6068666 הסטסחוח :147
+ :148
;"" = ז זה +
(0 < --ח) סווח/ע 1
₪ =+ ז 14
;] הזז 11
? :153
<[[ :154
<51:5070א/> :155
התסריט חסום על ידי תגיות זסו51:50א, והתוכן של התסריט מוחזק בתוך בלוק 4דגס6
כך שמנתח תחביר ה-51א לא ינתח תוויס שמורים כמו < בשורה 150. פונקציה גו לא
מבצעת דבר מעבר ליצירת מחרוזת של ח עותקיס (הפרמטר השני: האורך של הרווח)
של ז (התו המתקבל: ;4160א8).
0 ווא למפתחי אתרים באינטרנט
טאבים
שורות 123-125 מבצעות עבור הטאביס בדיוק את מה ששורות 119-121 ביצעו עבור
הרוותיס :
<"סה)"= 860 366!ות6ש:|5א> | :123
<ח508/> <|51:6/8א/> (4 ,";160 %.0003)"8 <|5|:6/8א> <ח508> 11
125: >/א5|:%6חוק|306<
שוב אנו קוראים לפונקציה ז6068, הפעס עס ערך קבוע של 4 עבור האורך. כך, כל
טאב יהפוך לארבעה תווי רווח קשיחים.
תווים מיוחדים
למסמך ה- !אא שלנו יש מספר רכיבי ז9ח6 המייצגים תוויס שדורשים טיפול מיוחד
ב- |ואז ובשפות סימון אחרות. הרכיב ז3ּח6 הוא תלוי-שפה ובעל חשיבות סמנטית.
בתלוי-שפה, הכוונה היא שהרכיב זּח6 אינו ייחודי לשפת סימון מסוימת; ווהי תצורה
קנונית לתוויס המיוחדיס האלו. בחשיבות סמנטית, הכוונה היא שהרכיב ז8ח6 הוא
בעל תיאור עצמי. לדוגמה, כשנראה רכיב ז3ח6 עס התכונה 06-670085%, מייד ברור
מהו, בניגוד למקרה בו חיינו רואיס רכיב עס הערך 848218, למשל.
ישנס יתרונות רביס לאחסון רכיבי התוויס במסד הנתוניס כמו שהס, אבל עכשיו
משאנו יוצריס מסמך |ואזה, אנו חייביס להמר אותס חזרה ליישויות הנדרשות על ידי
ודת.
בשורה 129 אנו מבצעים התאמה לכל רכיב ז608. בשורה 130 אנו מגדירים בלוק
6 כדי שנוכל לבצע התאמה בין התכונה לסוג התו שאנו שוקלים:
<" זה "= 00 306!קות6ש:|5א> :129
14 >%5|:670056<
שורות 131-138 מיישמות את הטרנספורמציה של כל הסוגים המיוחדיס שידוע לנו
עליהס:
<חסח;ו:|5א/>;8.48212<"[ 285 וח6' = . ]00/06 60"=+%05 חסחצו:|5א> 11
<חסה/ע:|5א/>; 8226+.8<"[שס!|טס' = . ]006 605="63 הסח/ו:|5א> 11
<חסחאצו:|5א/>;8.%8230<"[ 5ו5כן!]|6' = . ]0/6 %05%="60 חסחצו:|פא> +14
הח566 %'ח0065 28195 - 650806 זס? 05ק5סח 2 56 %פגון ||'ס/ש --!> 11
<-- 0066060 35 אזסצ 0ם-
<חסחו:|5א/>;160 %:160;8 %.8< "[ 50806 ח6' = . ]0/6 60"=+%05 חסחצו:|5א> 11
<חסחאו:|5א/> ;146 %.8<"[ 05ק הרפ = . ]006 %05%="60 חסחצ:|פא> 11
<חסחאו:|5א/> ; 147 8%< "[ סו דה רחפ' = . ]006 60"=+%65 הסחצו:|5א> 11
<חסחצו:|5א/>; 148 %.8< "| סוה רתפ = . ]0/6 60"=+%05 הסחצו:|5א> 11
למשל, כשהתו המיוחד הוא מטיפוס 65!|טפ, תבוצע הטרנספורמציה בשורה 132;
מסמך ספ הפלט יכלול את המחרוזת ;8%8226, היישות המתאימה לתבליט.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים | 181
בשורה 139 ניתן לראות את הרכיב 56וא51:01067א, שיתאיס במידה וכל שאר ההצהרות
חסחו לא יתאימו. שוב, מדובר במלכודת בקוד לסימון תוויס שלא ציפינו להס.
במקרה זה ניצור תגית ח508 עס תכונת המחלקה חווסח)חנו; שתוכנה הוא המילה ז608;
מלווה בערך של התכונה 6כץעש.
המחלקה חאוסחאחט מציגה את הטקסט באדום, כפי שניתן לראות בשורה 17 :
7 :460 הששסהאחט. :17
ההצהרה 6פססח6 נסגרת בשורה 140, ורכיב התבנית נסגר בשורה 141.
טיפול בהנחיות ייצור
ביצענו התאמה לכל הרכיבים שעל קיומם אנו יודעים, ומעונייניס לעבד אותם, מלבד
הנחיות הייצור. אלו הס רכיבים במסמך ה-!ואא שלנו שנוצרו כדי להכיל הנחיות
מיוחדות שיועדו במקור לעורכי ח₪8!|ווח186. אנו לא רוציס להציג אותס בפלט ה- וואדח
שלנו, אך גס לא רוציס שייפלו ברשתה של מלכודת הרכיבים היילא ידועיס" שלנו, לכן
בשורות 79-81 נבצע להס התאמה מפורשת אך לא נבצע שוס פעולה עבורס :
<-- "000 חו60" .6.0 ,5ח0ו66ו ףהוהפווטטס שה 656 - ץק 6וסתףו סא --!> | :79
<"['0ק'=606|355 ]/01"= וח 66ה!כות5|::6א> | :80
<06ה!קוח5|:06א/> | :81
סיכום המסמך
בתחתית כל סיפור נמקס סיכוס קצר המציין כמה פסקאות ישנן בסיפור, וכמה בלוקי
קוד והערות, כמוצג בתרשיס 6.8.
פס 1006 פפאסום? אשץ 206 שם ||
₪( ₪ 8 -₪| 8 ₪ 6% ו
בי ויו יב ווק ו עזסופוו. ב הר 6וחסון 0 סופ פס 0% ו
* 65 | | ₪80 [+ 7 וע 5 59.ע015/5005101אא/081051פ1// :קוו 65] 0055 | |
61 116 מו גו 8 ב[סגופ 11866 7/6'1 .1818886 1116 831181 1186 דנ6גוף 8 01 ]1ג1691 1116 88 6סגו סזסן 18 360010561 8 ,1 טופעד
.5 1
0 1156 10 1מבזקו 6 81816061 501 1116 15 קמוג51 +78 .12 6מו! מס המופ 8 85518 6 סובקו 0 8015106 מסןפמ6מ 6 ,12 6מו1 מכ
.18 00601 +16001086 זגוס 01 1611206 מ6קס 1125 0+ בג 1מ15ת51816 11281 888 6 16 6מ11 םכ) .08180886 1126 קתפגוס
( עשעשמ 56עח 86110 18 )1 ק[!ת16וגוט) 15 6מו] מו זסזרנ36 1126 88 6מנהם 6/8)גוסומנסט בנעוס צגוסזץ 9110216 מגופ 0+ צ6 66
.מ 88560 6זד'6קו מה טסט .5001 116 1591268 86 88180856 1116 מס 86 0ב6ת מ6קס 6מך
7 םת 11961ג0691 15 1181 5.605 זג[ 6 [14מגו 19625מגוס 156 זגוס קמוזמוק ,60010568 ₪ מגו1גופ26 126 שגוסזם1 1161816 6 ,18 16 מכ
.6
1 מו 20 6מו! 6:6 1.65 .86617 4.37 בב .1111/11 גוז 20-22 18165 )1118 וס
<06/><> ("16 מגום") 3ע=%><08ס> :17
7 01 )גוס 8 קט 10110166 18 118 .18016 8 01 עוסץ 8 מו מוזגו[סט 8 11010816 116 ? [מזו 816 <> 01801619 זגוס] +89 6מ
1 6 טגוק 01126 15מ16מסט 5ב (0386 .1111/11 126 660 ומ 10 15 47 5גם1ס 68601 6בך .<%6("ס1 טגוס")9:=%> שפמספ
.11111 01 118186 1ב מנתמגת 801 57 18 118 11181 18 2616 16סם 0+ ונגסכ 1126 ;סט 1116 מג 18167 161811 בג א18מדד6 1118 636
גוס 1116 קַבגפ0ס1ט , <03 / > .1111011 8000010261 בונ 6565 20 6מג 1
9 6זגוקג'] מג משוס0ב[9 15 00066 118 קמוממגת 01 169121 מ
שספטוסם זגוסע מו 55 1פ1ל1 3.9 סש ה
קונ 56007
5 עטיוש םיזע 34
010 0088 2
א 1
תרשים 6.8: סיכום קצר
2 וא למפתחי אתרים באינטרנט
היישוס של סיכוס וה מוביל אותנו חורה לשורות 47-57. אמרנו קודס לכן שכשישנה
התאמה ל-ץז00ס5 או אסספ, אנו יוצריס את התגית שְ00ספ. בתוך ץ00פ נמצא ה- וד
המופק על ידי 065טה|מְחחִס-עְומְקגּ (ולכן עיבוד כל הרכיביס האחריס במסמך). לפני
שנסגור את התגית <ץ000> בשורה 56 ניצור ₪ חדש עס המחלקה ץזפו ו טפ :
<"א00 | ץ5%01"= 30 306|קותס5|:6א> | :47
48: >200ץ<
3065|כוח6-ץ|כקה:|5א> 2
<"/ הוחו( 6!355="5 /|0> ?ו
ץז 5 ח56600 1
ההק <|5|:6/8א/> ו ח6!. (" עו" )566600065. פוז<|5|:6/8א> < /זסם> 1
65 0006 <|51:6/8א/ > ו ח6!. ( "6006 )65 5.56600ור?<|6/8:|פא> < /זם> 1
5 <]51:6/8א/ > ה ח6!. ("6סח// )15.56|66%0065ח%< |5|:6/8א> < /ום> 1
<צוס/> :לפ
<ץ200/> :56
57: >/א5|:06חוק|ה06<
הבורר עזהוחוחטפ5. בשורה 27 קובע את סגנון הסיכוס לסגנון מוטה בן 8 נקודות ללא
שולייסם תחתוניס :
0;7: הס ס0-חוח הוח ;5126:80%6-%ח10 ;6ו/09ו:50/16-%ח0ז+ זה ור 5. :27
אנו מדפיסים את המילים עזּחוחט5 56600 מלוות בפרטיס על מספר הפסקאות,
בלוקי הקוד, וההערות שנמצאו. למען האמת, יש בכך שימוש מועט, אך זה מדגיס
כיצד לגשת ולהציג נתוני-על אודות המסמכיס המאוחסניס במסד הנתוניס.
אנו מחשביס מספריס אלו באמצעות השיטה 56!6080065. שימו לב כי השיטה חייבת
להיקרא על שסם הרכיב, במקרה זה אנו קוראיס לה על שס הרכיב הנוכחי, באמצעות
שימוש במילת המפתת פוחז.
כאן, הרכיב הנוכתחי הוא הרכיב ברמה העליונה: ע0סז5 או אססם. בשורה 52 אנו
מעביריס כפרמטר ל-56!6660065 את תבנית ה-51א "טו6//". כך נמצא כל רכיב עו
שהוא צאצא של הרכיב הנוכחי, ובמליסם אחרות, כל 6 בתוך 0%ספ או עזסופ. מה
שנקבל הוא אוסף, ואנו ניגש למאפיין חְזפַח8! של אוסף וה אשר יאמר לנו כמה
אובייקטיס (למשל, כמה רכיבי <צו0>) ישנס באוסף. לבסוף, אנו מדפיסיס ערך וה על
ידי שימוש ברכיב <|5|:6/8א>.
<|8ו5|:6א> מוסר את התוכן שלו למנוע תסריטים, ומחזּיר את התוצאה כמחרוזת,
המוכנסת במסמך פ הפלט.
הצעדים הבאים
חילקנו כל פרק לסיפורים, אחסנו את הסיפורים הללו במסד הנתונים, ואחר כך גם
הכנו את הסיפוריס לתצוגה ב-%1אז₪4. בכך בעצס השלמנו את חלקו השמאלי של
היישוס הסופי אליו אנו שואפים.הצעד הבא שלנו יהיה לבנות טבלת תוכן ענייניס
שתשרת אותנו במסגרת השמאלית של היישוס.
פרק 6: אחסון, הבאה לתצוגה והצגת הסיפורים 183
פרק 1
יצירת רכיבים על ידי שימוש
ב- 41א ו- 51< עם ו דחפ
בפרק זה:
%* אססרסניה
סס. 06 וסחס
הפיכת' ח- \א לסבלות תוב הענייניםי
יצירת ה- אד מו- \א על ידי שימוש ב- פל
הצעדים הבאזים
עד כה ראינו כיצד להפוך מסמך !319 למסמך |אדא. אחייכ השתמשנו הן במודל
אובייקט המסמך של ה-|אא והן ב-51א כדי ליצור מסמך !אא בו ביצענו שינוייס
ואחסנו אותו במסד הנתוניס. בפרק וה נחזור למסד הנתוניס, נחלץ פיסות של נתונים,
וניצור טבלת תוכן ענייניס דינמית מתקפלת, כפי שניתן לראות בתרשים 7.1.
נשיס לב לסימניס (+) ו-(-) לצד הנושאים. אלו שעס הסימן + מקופלים; לחיצה על
סימני הפלוס תפתח את הנושאיםס שתחתיהם, והם ייראו כמו אלו עס סימני המינוס.
ניתן לראות שהכותרת 1 ז8000ח6 מקופלת, בעוד שהכותרת 2 זסוס8ח6 פרושה. פריטיס
עס כוכבית (*) הס עלים (כלומר, נושאיס ללא בנים).
פרק 7: יצירת רכיבים על ידי שימוש ב- וואא ו-5א עם ואדהפ | 185
|<]ם)- | זסזס!קא = 61חז6!ח! !]ס5סזטווא - כ35.-0 [אוסת 0]5/5אא/51סח31ססו//:כוות |;
צנ פס 1005 פפאסופת אפץ ם 6 |
5 ₪ : ו
| מוז ו עזסופו] 65]סעב] 56808 | 8הסו] ה38/65 | קסופ בבוס 6% |
|* 6 | | ₪90 | 00.90 סח 051/015/5 !מ סס1//-סזוח! [ 45| 8800655 |
1 ז8זק3 0 +
2 ז8ז3ח0 -
חחו085 בחב פו5עובחה -
חחו085 סחב פופץובחג *
0 -
חסוז23ו|בטלקפסח2 *
5 586 *
35 הובּחזסס *
חחופפם + חס -
חפה מ8|0ע08 הפזפוד פפזחד *
זעה | 855חופום פחד *
זעה | הסוז%3ה58פזס פחד *
58370004 '
5 אא '
3 0308 -
חס 0 +ססזס -
7 וחזזחם 450 :עְחַס|ס0חה90ז הסוחעץ *
%זוחו הס 1 [ש] | שחסם [₪]
תרשים 7.1: טבלת תוכן העניינים
אנו נבחן את הקוד המשמש ליצירת כל זה בפירוט. אחר כך נבחן מספר דרכיס אחרות
המשיגות את אותה המטרה.
אסטרטגיה
הפתרון הראשון שלנו לנושא זה, יהיה לחלצ נתוניס ממסד הנתוניס כדי ליצור מסמך
ואס ]אא פשוט, המשקף את המבנה המקורי של הקטעים, ה-005ו5660, כפי שתואר
בפרקיס הקודמים. אחר כך נעביר את מסמך ה- וויא דרך גיליון סגנונות 51א אשר ייצא
קובצ ]ואדח, שנוכל להציג עייג הדפדפן. קוב ה- |ואד יכלול קוד זְַ56אע38 אשר יהיה
אחראי על יצירת טבלת תוכן העניינים הדינמית.
נזכיר כי קטע 5660000 ברמה-4 מכיל קטע ברמה-8, אשר עשוי להכיל (בין היתר) מספר
כלשהו של קטעים ברמה-6, אשר בעצמס עשויים להכיל מספר כלשהו של קטעים
ברמה-ס.
במסד הנתוניס שלנו הפכנו את המבנה הזה לשטוח, אך שמרנו מספיק מידע כדי
לשחזר אותו, וזה בדיוק מה שנעשה עכשיו. ברגע שיש לנו מסמך אספ אא עס המבנה
הזה, אנו נציג אותו כדף ₪11 על ידי טרנספורמציית- |5א.
נזכיר כי במסד הנתוניס שלנו יש רק טבלה אחת, ולה יש רק מספר שדות, כמוצג
בתרשים 7.2.
6 וויא למפתחי אתרים באינטרנט
[< ]ה - | "65וזס)5' 6וטה 1 הו 2:01 חן
ה (8 .50601 מחסמפק| | 54| |
0
2 ז06קבח= ). 1"=חסו65/י |וחא?> 2 זסזקהת ₪ 2000
₪ זה חב 1/515החם <8%ד הַחס.1> זסופק טחב 5ו5עוהחה 8 2000 2001
<16% הַחס.1> <16 הַחס.1> זהו65 חב 515/|החם. 2001 2002
]הח ). 1"=חסופזפ/י |וחא?> בו 2001 2003
חסוה2ו!הסק66חס > ). 1"=חט!5ז6/י |החא> | הסוסה2ו!הק66חס > 2003 2004
<א6 הַחס1> 16% הַחס ]> 5 1566 2003 2005
<6% הַחס ]> <18% הַח10> | 55/)הח הוהוחסם
חהו05 50 חכ 1% הַחס ]> חחָו65 50 חס
[068 ב8זסוד 6שזחד ). 1"=הסופזפ |ת> | [פעס השזשוד סשוחד
<א6 הַחס. ]> <18% הַח1.0> | זפ/3 ]1 55פחופטם שח
<א16 הַחס.]> 15% הַָח10> .1 ח300:%ה656זש חד
לכוי ויו לכויו הַחוח56816
5 ₪6 ). 1"=חסופ5זפ/י |וחא?> 5 6
3 30061 ), 1"=חסו5זפ/י |וחא?> 3 זסזקהת
6 חס6 0 ]סז ). 1"=חסו5זפ/י |וח> || %ק6סחס6 ]0 ]ססזוק
= <6ד הַחס.1> <6ד הַחס.1> | :חַסוסחח60ם תסות/עע
רו רס ס ס רו ס טס ס[₪] רי < שש רו
/ ן
תרשים 7.2: טבלת הסיפורים
לכל רשומה יש פ1ץסז5 המזהה באופן ייחודי את הסיפור, ו-סשחסזהק, שהוא
ה-10ץזסז5 של הקטע המכיל אותו. כך, למשל, בתרשים 7.2 ניתן לראות כי לרשומה
המודגשת עבור סיפור 2011 (קטע ברמה-0) יש את ההורה 2007. אס נסתכל ארבע
שורות למעלה, נמצא ש- 2007 הוא קטע ברמה-6. וה הגיוני; רכיב ברמה-ם אמור
להיות מוכל בתוך קטע ברמה-6. בטבלת תוכן הענייניס שלנו נרצה להזיח (להרתחיק
מהשוליים) את הקטע הזה ברמה-פ בתוך הקטע המכיל אותו ברמה-6.
לסיפור 2007 בעצמו יש 0ח6ו? עס הערך 2001. את 2001 אנו מוצאיס בשורה
השנייה. השדה |56600016/8 מגלה שזהו רכיב ברמה-8 שה-פנחסְזהּק שלו הוא 2000.
0 הוא רכיב ברמה-1, שכזכור הוא פרק. לכל הכניסות ברמה-4 יש סזוחסז8ק עס
הערך 0.
יצירת ההיררכיה מחדש
עס ידיעת המבנה הזה, נחלצ כל רשומה ונבנה מחדש את היחסים המקוריים בין
הקטעים. למסמך זה בכל אופן, אנו וקוקים רק למידע במידה המספקת, ליצירת
טבלת תוכן הענייניסם. הסיפור בפועל עצמו, כמו גס ההערות, הקוד, וכן הלאה אינס
נדרשים לנו (עדיין).
אי לכך, ניצור רכיב חדש, פַח50!|, שיחזיק את המידע שאנו צריכים: פ1ץז50, הרמה
והכותרת שנציג. ברגע שניצור מסמך ספ המשקף את היחסים הללו, אנו יכוליס
להציג אותו בדפדפן שלנו באמצעות שימוש ב-51א לבניית דף |ואדו.
פרק 7: יצירת רכיבים על ידי שימוש ב- וואא ו- ופא עם ואדהפ | 187
ק. דצוסח5
דף ה-ק45 שאחראי לסריקת מסד הנתונים ויצירת טבלת תוכן העניינים הוא
06.5 דאוסח5, כמוצג בתדפיס 7.1.
השתמשנו במילה 06ד בשם קובץ ה-ס5ג. 06ד הינו ראשי תיבות של 6ופפּד
605 0% - ובעברית "תוכן עניינים". כפי שמשתמע משמו, קובץ זה
תפקידו להציג על גבי הדפדפן את תוכן העניינים של הספר. השיטה היא
על ידי יצירת קובץ ואא מתוך מסד הנתונים, ואחר כך, באמצעות
טרנספורמציית 51א, המרת ה-וואא ל- וואדו.
הערה |
תדפיס 7.1
<-- "6|06.350חו"= 6| 100006 --!> :0
%> :1
6 6 הס 06 ד 6 זס? ]א 6+ 6768005 - 06850 [שוסחפ' | :2
5 6 0150135 חב 50/!65066% |פא חה פע ]ו דר ססחו + 5הסעחס6 הסוא :
]0+ , ו5אס הוחו
3
4
1+
(0 = 10 500) 00%ז 56 8% סהוהחוססכ - 606 שו 68%0זס' = :6
= +01 8 "'1.0'=חסופוס |וחא?>" = ]060 :7
"<006/>" ,8 (0)ח0ו00560 01 8 + ה6פע 8 "<%06>" 8 8
:9
51א שר פוט ]ד סש והזסזפההח' :10
("הז510 הז ד א הס )076860066 507/06 = 051 56% :11
0 = ])סטסח1. ופאס :12
("|5א. | ד06211 ד" ,7זו60060)ושהקסווטם.150 = 6 |פא. [פאס :13
350 ד. ו5אס :14
וד 6 שְהוקפו' :16
|])אסטססט. [5אס סו/ש.6פחסקפסז :17
11
:11
(10)ח00656600 סכ הסטסחט :20
6 זס? הס רחשו ה56600 6חס 6|סחהח' :2
5 ,5 וחום :22
:22
5000 הסעוף שוש 01 הסזס!וח6 6רם | ז6ס' :22
5 וחס 6 ,6/6 |הסוס566 ,50010 56166" 60 אם. ה המכ = 5 50% :25
("0 500 ץְ0 ז06זס " 86 0 8 " = 10חסזבק 6זסחצו-
וחחו 00 :20
5ז ההק 6+ 5הו9+ח60 +08 +ה6רח6!6 .]1י]< חב 676806 ,סחס ה686 זסז' :27
""" 8 ("10/ ")75 8 """=0ו 0ח50!ו!|>" 8 5 = 5 :20
סט 8 "<""" ₪ ("|66 |[הסו5)"5660ז 8 """=|6/6|=-
ז סע 8 "<06ם/>" ₪ ("06וד")5ז 8 "<006>" 8 5 = 5 :20
8 וא למפתחי אתרים באינטרנט
ה6זח!וח6 ער ססחו 96ז66ז' :0
(("00)5)"5007/10ו06560 201 8 5 = 5 :211
8 "<חח0פו|/>" 8 5 = 5 :2
סז 1
קסס! 1
351: 86
1
508 0ח650/0ז 6 הזנססז' :7
5 = ח0056600 סכ 1
חססס6חטת 0חם :39
40: %<
הפעם אנו יוצריס מסמך ]אא בדרך שונה מכל הדרכיס שראינו עד כה. בעבר יצרנו את
מסמך ה- שלנו מקוב, או על ידי שינוי של מסמך אסכ אחר, או שיצרנו אותו על
ידי שימוש ב-51א. הפעס, כל העבודה מבוצעת בקוב ה-55. אנו נקרא נתוניס ממסד
הנתוניס, נבנה את המחרוזת בזיכרון, ומזה ניצור את מסמך ה-אספ.
בשורה 0 נכלל 06.850ט!6ח1, כפי שראינו בעבר. שורה 1 מתחילה את חלק התסריט של
קוב ה-859. העבודה הממשית מתחילה בשורה 7, היכן של- |%06 משויכת מחרוות :
= +01 8 "'1.0'=חסופזסע |וחא?>" = |%0601 :7
"<606/>" ,8 (0)ה0056600 סכ 8 011פע 8 "<%06>" .8 :9
]06 הוא מחרוזת שממנה ניצור את מסמך ה-אספ !אא כפי שניתן לראות בשורות
1 ו- 12 :
(" 850 ד 5 580 סז )7680600060 567/06 = ]05 56% :11
0 = !]אס טסח1. ופאס :12
בחזרה לשורה 7, ניתן לראות כי הטקסט הראשון במחרוזת הוא הכותרת הסטנדרטית
שלנו למסמך 1אא: הוראת העיבוד '1.0'=חסופזסע 11א?>, היא כפי שחיינו מצפים.
היא מלווה ב-+1וסטצ, המחייב תו של שורה חדשה בקוב, ובכך משאיר את הוראת
העיבוד לבד בשורה הראשונה של קוב> ה- !אא שלנו.
בהמשך המחרוזת נמצאת התגית <%06>, אשר שוב נקבעת לה שורה משלה. זה מלווה
בקריאה לשיטה 065660000 דס, אליה נחזור בעוד רגע. לבסוף, התגית <006> נסגרת
והמחרוזת מסתיימת. זה הכל. ממחרוזת זו ניצור את מסמך הקלט.
כמובן שהעבודה של יצירת גוף מסמך ה- !אא נמצאת בשיטה 0056600005 1ס0כ, אותה
נמצא בשורות 20-39.
נשיס לב שכשאנו קוראים לפונקציה זו, אנו מעביריס את הערך 0. בשורה 20, הפרמטר
נקרא 6ו. נזכיר כי כשיצרנו את הסיפורים, ושמרנו אותס במסד הנתונים, לכל קטע
ברמה העליונה ביותר (התגית ברמה-ג) שויך ס]וח6זגק עם הערך 0. זו אינה מקריות.
בשורה 25 אנו סורקיסם את מסד הנתוניס. בהינתן 0/10סש5, אנו יוצריס אוסף של
סיפורים, והס הבניס של אותו פ1:
5 וחס 6 ,6/6 |הסו566 ,500/10 56166" 60 אם. המכ = 5 56% :251
("0 500 ץְ0 ז06זס " 8 0 8 " = 0חסזבק 6זסחצו-
פרק 7: יצירת רכיבים על ידי שימוש ב- אא ו-5א עם ואדה 189
הבה נעיף מבט נוסף ברשומות שבמסד הנתוניס שלנו, כמוצג בתרשיס 7.3.
ב* | 5ב 9% 21 ו !) | | 3 ₪ בת םם | ₪
ו ו
2 --- ). 1"=חסו5זפ/י |וחא?> 2 3006 .
₪ הפ חב 515/עיוהחם <16 הַח10> זהו65 טחב 5ו5ץוהחם 8
אד הַָחס 1> 16% הַחס1> זהופס טחב 5!ו5ץ)החם 6
5 ). 1"=חסו5זפ/י |וחא?> בו 6
חסו280ו|הוק66חס ). 1"=חסו5ז6/י [ח)> | 81230 ק66חס > פ
<16%0 הַחס.1> <0א16 הַחס.1> 5 56 פ
<16% הַחס.1> 16% הַח10> | 55/|ח₪ חוהחחזסם פ
חחו065 50 חס <%א16 הַחס 1> חחָו065 50 חכ 6
[66 ב6זסוד 66זחד ). 1"=חסופזפ/י |וח> [עסם בשזסוד שפיוחד פ
<16 הַחס.1> אד הַחס1> זפ/ב.] 5פפחו5ום פחד 5
<%א16 הַחס.1> 16% הַח1'0> .1 ה0ו0ה:ח656זק שחד פ
<6%ז הַחס !> <16%% בַחס.1> הַחוה568 ₪ 20
05 6%%) ). 1"=חסו5זפ/י |וחא?> 5 אסא 6
3 זסזבת6 ). 1"=חסו5זפ/י |וחא?> 3 63056 4 0 30| |
ח60 ]0 ]ססזט ). 1"=חסופזפ/י |ח> | %ק6שחס6 ]ס )טסוק 8 1000 1 |
= אד שַחס !> <א6ד הַחס.1> = :עְחַס|סחת60: תסוחעצ 6 51 2 |
/ ן ן ן
תרשים 7.3: טבלת הסיפורים, שוב.
ניתן לראות שלכל רשומה יש פ[ץ5900, ושכל רשומה גס מצביעה ל-סשחשזפּק
(ה-560/10 של הקטע המכיל אותו), פרט לסיפוריסם ברמה-4, להס יש פשחשזפק עס
הערך 0.
כעת נפתח את מנתח השאילתות (זסלץחג /זסט)) ונבצע את אותו חיפוש כמו זה שביצענו
בדף ה-857, כשאנו מתחילים, כפי שעשינו בשורה 7, עס 0ח6ז? עס הערך 0 (אפס):
6זס ו 5007165 וחסיז 6חוד ,6/6 1ח56600 ,56010 566
כזץ 5 5 זס0זס 0 = כטחסזהק -
תרשים 7.4 מציג את תוצאות הפעלת השאילתה עבור מסד הנתונים לאחר הוספת
סיפוריס משלושת הפרקיס הראשוניס.
[*.... 10עז510 50!601 - (60!!ו)חט] - 01-5.53/< ₪0 א - עוסטם] - זסקעוהּח3 עוסט זסצוס5 .501 ₪
|<|5) = וס אוסנטחועצ עוסטם אע 08 6 מ
[=--- ]םש 9|68| םש | א < ש|- ₪ | ₪ ₪ 0 | ₪ םּ
פ1עַעססט עס עפהעס 0 = כ1סמפעה8ק2 שעשגח 8002188 מעסע2 71616 ,61ע28ם5605102 ,12צ5602 2616668
1 6826062
2 עססקה8ם0
3 0820662
(82260960 (5)חםסע 3)
7
,חן פוווסז 3| = 0:00:00 :פחו) ססאם | .180פ|קוחסס ח0)הם עופטו
תרשים 7.4: בחירת הרמה-.
כפי שניתן לראות, התוצאה היא החזרת הרשומות עבור רמה-4, כפי שחיינו מצפיס.
0 ווא למפתחי אתרים באינטרנט
בשורה 26 אנו יוצריס לולאת |וסחט 00 אשר רצה רשומה רשומה עד סוף ה-5% 66070 :
|סחט 0 :26
בשורה 22 הגדרנו משתנה 5 שישמש לבניית מחרוזת, אשר בשורה 38 יהיה הערך
המוחזר של פונקציה זו. למעשה, כל מה שנשים במחרוות זו יוכנס למסמך ה- !אא
שלנו בין התגיות <%06> ו- <006/>.
בשורה 28 אנו מוסיפיס למחרוזת 5:
""" 8 ("5)"5%07/10ז 8 """=0ו סח50ו|>" ₪ 5 = 5 200
סט 8 "<""" 8 ("|0/6 [הסו5)"5660 8 """=|סעס|-
לתגית <8ח50!!> ניתנת התכונה 6 עס ה-פ1ץזסופ5 של הרשומה הנוכתית. במקרה של
הרשומה הראשונה שלנו, והו ]ספ עס הערך 2000. לתגית 8ַח150! הנוכחית ניתנת גס
תכונה שנייה, |68!, הנקבעת ל-|6ש1.6ח0ו5660 המוחזר מהשאילתה (במקרה זה "").
בשורה 29, אנו מוסיפיס את הכותרת למחרוזת :
]טע 8 "<6ם/>" 8 ("ס0וד")5ז 8 "<006>" ₪ 5 = 5 :2
שוב, מכיון שאנו בוניס מסמך |וא, הכותרת היא בין תגיות <06>, והערך הוא
השדה המתקבל מהשאילתה.
בנקודה זו, בפעס הראשונה, 5 נראה כך:
<""= !66| "1000"=ו 8חפו!>
<1>/006 זססקהה-)<1!6">
בשורה 31 אנו מוסיפיס ל-5 את תוצאת הקריאה הרקורסיבית ל-005660005 דס, תוך
העברת ה-560712 הנוכת* (1000). מנגנוו הרקורסיה הזה הוא הסוד ליצירת כל טבלת
תוכן הענייניס.
עכשיו ₪01005660005 תסרוק את מסד הנתונים כדי למצוא את כל הרשומות
שה-סשח6זא שלהן הוא 2000. חיפוש זה מניב רשומה אחת, עס פ1 עס הערך 2001
(הקטע ברמה-5).
כשנחזור לשורה 31, 5 ייראה כך :
<""=!6ע6| "2000"=סו חח50ו|>
<2>/006 זסקהּה-)<6ו">
<"ם"=!6/6| "2001"=ו חח50ו|>
<006/>ח658 300 515ץ|הח <6!>
נשיס לב לכך שכשפתחנו את תדפיס 2001, עדיין לא סגרנו את תדפיס 2000. כך,
תדפיס 2001 מוכל בתדפיס 2000.
כשאנו מגיעיס לעלה, אנו מוכניס לסגור את התדפיסיס הפתוחים שלנו. ה משלים את
ההכלה, עס תדפיסים ברמה- המוכלים בתדפיסיס ברמה-6, המצוייס בתוך רמה-8
וכן הלאה.
פרק 7: יצירת רכיבים על ידי שימוש ב- וואא ו- ופא עם ואדהס | 191
ניתן לראות את ההשפעה של וה על ידי ביצוע הצעדיס הבאים:
1. פתח את 06.50 דווסח5 בעורך.
2 עבור לשורה 4 והכנס שורה חדשה מתחת, כך שהקוד ייראה כך:
קססן
(106)5/\. 6500056
6
33 שמור את הקוב הזה ופתח את 06.55 דושסח5 בדפדפן.
4 הצג את אד המקור.
התוצאה מוצגת בתרשים 7.5.
כל קטע ברמה-4 ימצא את הרמה-8 שלו, אשר בתורה תמצא את כל הקטעיס ברמה-6
שלה, וכל אחד מהס ימצא את כל הקטעיס ברמה-כ שלו.
הרקורסיה ממשיכה עד שכל רשומה התווספה למחרוזת שלנו. אז, בשורה 35, אנו
סוגריס את 186070560 ובשורה 38 מתחזיריס את המחרוזת. זה מוביל אותנו חזרה
לשורה 8, שס אנו ממקמיס את תגית הסגירה <06?/>.
[<1ם) - | הטוא - [00]1 זויפת5 ₪4
60 ה0ז 568 /0 6ום
<''18081='0 "10="2880 [ה115%1>
<2>/%1%18 2%805ק3ה%1%616<0>
<''18081=''8 "10="2881 [ה115%1>
<%51516/>ה06517 שהב3 310515ה%1%618<8>
<''1808[=''0 '"10="2882 [ה115%1>
<1%16+/>ה06517 שחבּ 310515ה%1%18<0>
<0ח115%1/>
<''18081=''0 "10="2083 [ה115%1>
<310515>/%1%16ה%1%16<8>
<''18081=''0 "10="2088 [ה115%1>
<31123%107>/%1%16ש%1618<007680%>
<0ח115%1/>
<''18081=''0 "10="2885 [ה115%1>
<%1%16/%>03565 %1%616<056>
<0ח115%1/>
<''1808[1=''0 "10="2886 [ה115%1>
<07310515>/%1%16 ה%1%516<00031>
<''160061=''0 "2887
<085170>/%1%18 0 ה%1618<0>
<'18081=''0 "10="2808 ףה115%1>
תרשים 7.5: תוצאות הפעולות הננקטות ב-52ג.06 דווסח5.
בשורה 11 אנו יוצריס את האובייקט ₪ז0ו5ח8ז דו5א. ח5678%6וחסי- שראינו קודס לכן,
ובשורה 12 אנו קובעיס את המאפיין ||אאסטסח1 שלו למחרוזת שזה עתה יצרנו. וה
קורא ל-ו8ִַסספַחִ561זהק, כפי שראינו בפרקים קודמים, ונוצר מסמך |אספ וא חדש
המכיל את ה- וא מהמחרוזת ב- |א006.
2 ווא למפתחי אתרים באינטרנט
הפיכת ה- וואא לטבלת תוכן העניינים
עכשיו כשיש לנו את מסמך ה- וא שלנו, אנו יכוליס להתחיל בתהליך יצירת טבלת
תוכן ענייניס לתצוגה. כדי להשיג ואת, נשתמש ב-|5א, שיהפוך את ה-|אא שלנו
ל- |ואדה, ובדרך נכתוב את התסריט בצד הלקוח.
לפני שנוכל לקחת על עצמנו את השימוש ב-%51 להפיכת ה- ]אא שלנו ל- ואדה, אנו
חייבים לדעת כיצד ייראה ה- |ואדת. בניית טבלת תוכן עניינים (106) מתקפלת, אינה
מטלה רגילה, כך שנתחיל בכך שהיא תפעל ב- |ואדה. ברגע שנדע איזה ואד ותסריטיס
אנו צריכים, יהיה קל יותר ליצור את ה-51א.
בניית ה-06ד ב- ו דו]
ה-106 המתקפל יכיל את רשימת הכותרות של כל ייסיפוריי. בתחילת הטקסט נשרשר
אחד משלושה סמלים: סימן פלוס במידה ויש לו בנים והוא מקופל, סימן מינוס אס
יש לו בניס והוא פרוש, וכוכבית אס הוא עלה. ראינו ואת בתרשים 7.1.
כדי להתחיל בכך, ניצור את התסריטים לשינוי התדפיסים. ברגע שזה יעבוד, נהיה
מסוגליס לחזור ל-%51 וליצור את התסריטים, ה-וויז, והנתוניס ממסמך ה-אסספ
]וזא שנוצר ממסד הנתוניס.
תדפיס 7.2 מציג את ה- ]אד הדרוש להשגת מטרת העיצוב.
תדפיס 7.2
<|והשח> :0
<680ה> :1
>5/6< :2
5120:10067-00%) ; 0808ז0/:ץ|ורחפ)-%חס. * :3
:פטס ;3%: והססט-חוחזהרח+ פהספוו. 41
:0+ 0ח8קא6. :5
>/56< :6
>5000₪ :7
-|> :8
()0חהקאם הסטסחו | :9
:10
עו "סחוחשוס" 6 סל 96% // :11
6% זה .6 חכה 6.5766 /6. אוססחוצ = 6 זפ לו
ח508 ח0ו5 פטחורח/פטוכ סח // (0)ח6ז0!וח6. (0)ח6ז07!ות6.6 = ח0ו5 זפצ או
11
5 חס 6 06 הס ,60 הקאס סזסעט סע זו // 11
(006ח 681! .16) חפו5 סח 6'5זסר זו פהורסץחב3ּ 00 ז'חסם // 11
(0אם דזסחחו. ח510) חהססוצ5 :1
4 11
פרק 7: יצירת רכיבים על ידי שימוש ב- |וואא ו- ופא עם ואדהפ | 193
:'- 6856
'+' = 6% דוסחחו.ח0ו5
(++! ;רחס ח6זם!וח6.0 > | ;1 = | זפט) זסז
; "6חסח"= ץ50/!6.015013. (1)ח6 זט !ות6.6
;686
:'+' 6856
;-' = 6% דוס6חחו. ח0ו5
(++ן ;ה0ח6!.ח6ז0!ות6.6 > | ;1 = | זפצ) זסז
;""= ץ50/!6.0150!3. (1)ח6 !6.61
;זט
ד
(חס)חםווחפור! הסחסס6חטז
.
566605 זס/0 245565 156סוח 6ז 35 ההטסז0א6ה0 6 6פחההחס ]/
;("" : "אוסו|6ץ" ? חס) = זס|ס06חט0ז50/6.08660. 57066 חס
;18!56 זוז
/
()/ 50/50 הסטס6חט1
ָ
0 לס 6+ סה 6צו - ץזס5 56166660 606 015018 0ף 6ב הז 6 6פטובס ]/
0 65| 50| 6חז 85 -
;6/6566 = 576010 ופצ
5 חס 08560 ,שְ3!ק015 +0 "סח" 6 |סישחס6 0+ פהסטקס חס 806ל //
והסח.5|סהס6א800 חו=-
55.0 סא הס סט 65 רה %חסזהק = 655חס ופצ
,60א6006106%5.6066. הס 65.00רחה.+חהס הק = 6006010065 זפ
"=5007/10? 45. סש סח" = )6 זח. 0630 חז.65רחה. הטטק
+ ("" : "ץ=055חס8" ? 655חסא) + 5700 +=-
;("" : "ץ=800060|0065" ? 60060|0665)=-
;18156 הזז
/
<--
<50100/>
<7680/>
<ץ000>
<צ|0>
<"ו6:067|-חוחזהרח"=50/!6 "8ח50!ו|"=0|355 /ן0>
<ח508/>-<"( )חאש "= 06166 " 0חה0א0|355="6 ח8ק5>
"(6ו )וח סודן"= זס/ס6פוסוהחס ההק5>
"(18156)%חו!חפו"=סספטסרתחס
<ח1>/508 ז8700חה1000"<6"=ו "()/סספעשסת5"=>סוסחס
4 וויא למפתחי אתרים באינטרנט
<צו /> :5
<צו|0> 0%
<"ו6:267!-חוחזהרה"=50/6 0ח50ו!"=01855 /01> 1
<ח508/>-<"() = "=>6ו חס "0ח08א0855="6 ח8ק5> 2
"(6ט)חטו!חפוח"=ז/ס6פטסותחס ה8ק5> 1
"(18156)%תו!ח "= ס60פטסרתחס :+
<"1001"=ו "()/50וסת6>="5סו!סחס :1
<500160>/5087 0ח60כ)-
<צו0/> 1
<צו|0> :7
<"ו6:467!-חוחזהרה"=50/6 0ח50ו!"=61855 /01> 1
<ח508/>-<"()0 חאש "= 06166 " 0חה0א0|355="6 ח8ק5> תי
"(6 )תווח "= ס6פטטסותחס ה8ק5> :0
"(18156)%חו!חפו"=סספטסרתחס :1
א)ססט פוחל עוסרז<"1002"=ו "()/ סספוסת6>="5ו!סחס 2
<ח07080260>/508 15-
<צו0/> 1
<צו|0> 1+
<"ו6:667!-חוחזהרה"=50/6 0ח50ו!"=61855 /01> 51
<ח508/>*<"( )חאש "= 0666 " 0חה0א0|355="6 ח8ק5> 1
"(6 )תווח "= ס6פטסוהחס ה8ק5> 27
"(18156) טוח "= ס0ספוסרחס 1
ץו0סחַ455ח/<"0="1003ו "()/ סלפאוסח5"=אסו|סחס 1
<ח508/>ץ!ח0 16050 -
<צו0/> :0%
<צו /> :11
<צו0/> :2
83: >]000ץ<
<|חשה/> :84
אם נשיס את הקוד הזה בקוב> (ללא מספרי השורות, כמובן) ונשמור אותו כקובצ
ואדו, נוכל להציג אותו בדפדפן ולראות שהתוכן אכן ניתן לפרישה ולקיפול, כמוצג
בתרשים 7.6.
פרק 7: יצירת רכיבים על ידי שימוש ב- וואא ו- ופא עם ואזהפ | 195
זסזס!א = 61חז6)ת! 05011ז4:0 - הזוח .15/151:007.2עא/ 54סח!הססו// :קוו ב
1006 פפסופת אשע 06ם שם |
9 8
₪ ₪ 9 4
תה ₪ | עסטה פהסוב] ה5680 | פחסה הנסחשה | קפ 7 הכומסה 7 8806
ב חן 0 [+ חז1ח.015/1500007.2וא/9 1 ס1// :וו 45| 8831655 |
1 037 -
8088 -
ההז 5! אססם 5וחז שופ -
ץוח א ספסזסווא עץ|80מ35 טבּחש *
הזוחו ומסס.1 ו
תרשים 7.6: פרישה וקיפול של התוכן.
|
/ כדאי לנסות! פתח מסמך |אא בתוך דפדפן 5 זסוזס!קאם, ללא שימוש
הערה |
ו בטרנספורמציות |5א, גיליונות סגנון או מסמך 55. שים לב כיצד יוצג
2 מסמך ה- !יא בדפדפן. מראה מתקפל זה, הוא ברירת המחדל של זפזסוקאס
5 להצגת מסמכי |א. ללא כל קשר, מראה זה מזכיר את המראה
המתקפל של ה-6סד שלנו.
כדי לאפשר לקסם הזה לפעול, אנו וקוקיס לשלושה תסריטיס בצד הלקוח, המוצגיס
בשורות 9-50. אנו נבחן אותס בסדר מורכבות עולה, כשנתחיל עס הפשוט ביותר:
()חפווחפות.
+הפווחטוה
%חפווחפוה, המוצג בשורות 31-36, לא עושה דבר מלבד לגשת לרכיב שעורר את הליך
הטיפול באירועים, ולקבוע את צבע הרקע שלו לצהוב, אס הפרמטר שהועבר הוא "חס"
או אחרת למחרוזת הריקה (ולכן צבע הרקע לפי ברירת המחדל).
צבע הרקע שבברירת המחדל נקבע ברכיב הסגנון בתוך הרכיב 680ח, כמוצג בשורות
6. שורה 3 מראה כי סגנוו הטקסט של ברירת המחדל הוא גופן 8ח06ז6 בן 10
נקודות:
107 :526-+חס) ;8ח08ז0/: ץ|ורח8)-%ח0+ * :3
ניתן לראות, לדוגמה בשורות 56-57, ש-שחאווחפו נקבע כהליך לטיפול באירועיס
טסו ו-5600%וסח עבור הכותרת:
"(6 !"= ס6פטטסותחס ה8ק5> 1
"(18156)%חו!חפוה"=סספטוסרתחס :1
הדבר חוזר עבור כל כותרת, כפי שניתן לראות בשורות 64, 65, 70, 71, 77, ו- 78.
6 וויא למפתחי אתרים באינטרנט
אנו קוראיס ל-אחִ8ַווחפָו כשהעכבר מעל הכותרת, וזה קובע את צבע הרקע לצהוב,
ומשחזר אותו לברירת המחדל כשמתעורר האירוע זטסספטסוח.
וסז5 עשסו5 (6)
מעט יותר מורכב הוא הליך הטיפול באירועיס ()/5607או50, הנקרא כאשר המשתמש
לוחץ על כותרת מסוימת, כפי שניתן לראות למשל בשורה 58:
<ח1>/508 ז0ז0ק8חה1000"<6"=ו "()/ 0ס56/שסח5"=אסוו6חס 1
הדבר מעורר את השיטה עזסזפווסח5 המוצגת בשורות 37-48. לכל כותרת יש 6ו,
ובשורה 40 למשל, אנו ניגשיס ל-10 הזה. אנו עושיס זאת על ידי בקשת ה-0ו של
ה-%ח5765|6006 (זהו רכיב המקור) של המאורע:
66.50 = 57610 זפצ 210
לעת עתה נדלג על שורות 42-44 ונחזור אליהן מאוחר יותר, בהמשך הפרק.
בשורה 46 אנו קובעיס את המסגרת הימנית ל-סַּ.עץְז0סס5שוסח5, אליו אנו מעביריס את
ה-6ו כפרמטר:
"=5007/10? 5ה. ץ זסס5/שס 5" = ו זח. הס 63ס!. הז 65רחה. הס זה 211
+ ("" : "ץ=655חס8" ? 655חסא) + 57610 +=-
;("" : "ץ=800068|0665" ? 60068|0665)=-
הקאס (6)
0חקאם, המוצגת בשורות 9-30, היא הלב והנשמה של טבלת תוכן הענייניס
המתקפלת. בשורה 55, למשל, אנו משייכיס את ההליך של הטיפול באירוע, לאירוע
6% של סימן המינוס שלנו:
<ח508/>-<"()0חהקאם"=א6ו|6 חס "0ח8א6!355="6 ח8ק5> 1
כל כותרת בדף ה- !וא שלנו תהיה בתוך שני רכיבי טו9: חיצוני ופנימי. הרכיב עו
הפנימי יהיה מהמחלקה 8ַחפו! ויכיל מידע על התצוגה כמו כמה רחוק להזיח. הרכיב
שו החיצוני יהיה נקודת השליטה עבור קיפול ופרישת הכותרת.
כדי לגרוס לה לעבוד, כשנלתצ על סימן מינוס של כותרת מסוימת, אנו חייביסם להשיג
גישה לרכיב שו החיצוני של הכותרת הזו. בשורה 12 אנו עושיס זאת על ידי השגת
הסבא של ה-5706060% :
6 63| ההק 16 576. 66% שוססחוש = 6 זפט - :12
הבה נפרק ואת לחלקיס. אנו מקבלים אירוע שאפשר להתייחס אליו כ-זח6עס.אוססחוצו.
אנו יכוליס לפנות לרכיב שעורר את האירוע (כאן, הקליק על סימן המינוס) על ידי
6.5766 חה/6. אוססחוצו. נוכל גס לפנות אל ההורה של 5760560606 (שזה רכיב ה-עו6
הפנימל) על ידי +ה6וח5|6זח6ז08.%ח6וח576!6.)ח6עס. צוססחוצו. כך אנו מגיעיס לרכיב ה-צו6
החיצוני שלו על ידי +ה606!ח36ק. 66| 6.86 רח6! 0ז5. 6% ע6. צשססחואו.
אנו משייכים את הרכיב טווס)טס הזה למשתנה המקומי 6. אחר כך אנו מבקשים מ-6
את הבן הראשון של הבן הראשון שלו (נזכיר כי ב-856870ש38 אוספים הס
פרק 7: יצירת רכיבים על ידי שימוש ב- וואא ו- ופא עם ואדהפ | 197
מבוססי-אפס; הרכיב הראשון הוא רכיב 0). הבן הראשון של הבן הראשון שלו הוא
הסימן מינוס (או פלוס), ואנו משייכים אותו למשתנה ח518:
ח508 ח0ו5 פטחורח/פטוכ סח // ;(0)ח6ז0!וח6. (0)ח6ז0!וח6.6 = חף5 זפ 11
הקוד הוה מסתמך על הבנה פנימית של ה-ויספ שיצרנו, אך זה בטוח כי זהו אותו
הקוד שיצר את ה-וזסם, וכך אנו יודעים היכן למצוא את סימן המינוס או הפלוס.
ב- |ואדחם הטקסט הפנימי של רכיב הוא הטקסט שהוצג בפועל עבור אותו רכיב.
במקרה של )6% דו6חחו.חף51 זה יחיה הסימן '-' או '+' עצמו. בשורה 17, אנו בוחניס את
הערך (ח166או5) ונוקטים פעולה בהתאם לכך.
| השימוש כאן ב-ח6וש5 במקום ב-0056ח51:6א עשוי להיות מבלבל. נזכיר כי
ו בנקודה זו אנו ב-ְִס5ע28 שבצד הלקוח, אשר יישלח לדפדפן ויעובד שם.
[
אס יש לנו סימן מינוס, כפי שקורה בשורות 19-23, נשנה אותו לסימן פלוס 0א6 דזסחחו
הוא קריאה/כתיבה ב- ווזחפ, ולכן דרוש 154 ומעלה, כדי להשתמש ביישוס הזה).
ונעבור באיטרציה על כל הצאצאיס של רכיב זה ונקבע את מאפיין ץ015088 שלהס
ל-"6חסח".
יצירת ה- !אדוו מ- |ואא על ידי שימוש ב- 51א
עכשיו כשה-|אז שלנו עובד, אנו רוציס ליצור קוב 51א שיפלוט את ה- ואדה שאנו
צריכיס מה- |ואא שבידינו. נקרא לקוב זה |פא. 1ד1062, את הקריאה לו, ראינו
בשורה 13 של ק06.5 דושסח5 :
("|5א. | ד062 ד" ,7זו60060)זב3קטווטם.150 = 6!ו=|פא :|פאס 11
תוצאת ההחלה של קוב ה-%51 הזה על קובצ ה- !אא שבנינו ממסד הנתוניס צריכה
להיות מאוד דומה ל-₪411 שזה עתה בחנו. הבה נבחן את קובצ ה-51א בפירוט, כמוצג
בתדפיס 7.3.
תדפיס 7.3
"1.0"=חסופז6ע |וחא?> :0
<-- 600005 ]0 90|6? 06 !0150 0ם 566% 50/6 5ורם ספ שאו --!> :1
2
"|פא- ₪ ד זס. 3א. אא /: קשח "=!5א:פחווחא | :3
"40|והסח-6 ₪ ד/8זס/3/עטאו//:קטח"=5הווחא | :4
<""=5ח-|050] | :5
:6
7
8
9
<-- 65| 0619/06 --!>
<36|רת5|:%6א/ > < /6-01ט[5|:/8א> <"()+א6"= ה6הח 306|קרח6ז:|5א>
<"]"=ח900וח 806|קוחס::|5א> | :10
065ה|כוח6)-ץ!|קק5|:8א> 111
8 ווא למפתחי אתרים באינטרנט
<36|קוחט::|5א/> | :12
55 66 טחוס !סח ,50-66 | דר 6 76866 .זה 66 0856 זטס --!> | :14
<-- 66| 6 80% 60 /0ח28א6 60 66060 =-
<"06"= ח00וח 8%6|קות5|::5א> | :15
16: >הזוו|<
17: >ח680<
18: >506<
526:1007-100% ;8ח08ז6/: ץווהזב'-%חה10 * 11
7; :50 זט ;30%: וחסהסס-חוףזהרח+ פחספוו. :20
;0 ז:זס|סס+ 0ח8קאס. :21
22: >/56<
]ד 0 ]!> <+ח חר ס5|:6א> <50006> | :23
()0חקא= הסטסחות :24
25:
;6 הרש ז.ה רח576|6.+ה6/6. צוססחוצ = 6 זפ :20
עו "שחוחצוס" 06 סז 06% //=
ח508 ח0ו5 פטחורח/פטוכ סח // (0)ח6ז0!וח6. (0)ח6ז07!וח6.6 = ח0ו5 זפצ :27
201:
5 חס 6 06 הס ,60 הקאס סזסעט סע זו // :20
(006ח 681! .6!) חפו5 סח 6'5זס זו פהורסעחב3ּ 00 ז'חס // :2
א דוסחחו. ח510) הססוצ5 :21
1 ָ
1 6856 -':
'+' = 6% דוסחחו. 5100 :5
(++! ;רחס ח6ז0!וח6.0 > | ;1 = | זפט) זסז :1
; "6חסח"= ץ50/!6.0150!3. (1)ח6 זט !ות6.6 1
37: 686;
7 6856 '+':
;-' = 6% דו6חחו. ח0ו5 :2%
(++ן ;ה0ח6!. ח6ז0!ות6.6 > | ;1 = | זפצ) זסז 7
;""= ץ50/!6.0150!3. (1)ח6זס!ות6.6 2111
212: 686;
13: 7
ץ] :44
(חס)תפווחפור הסטסחט :45
46: +
;("" : "שוסו|6ץ" ? חס) = זס|ס6חטסז0א50/!6.086.+ח6 6 0ז5.%חס/ס :217
;18156 חזוחז 211
49: ][
50: זטחסטסה 50/50 /)(
51: +
; .6/6 = 57610 ופצ 1
;560-5566060 הס 00. 65רחה. הסה = 5655 זפ 1
פרק 7: יצירת רכיבים על ידי שימוש ב- אא ו- ופא עם ואדהפ 199
0 + "=10 3502500 560 סח" = )6 זח. הס 63סו. חז.65רחהיו.+חס הק
;("ץ=55)חס8" : "" ? 056095) +-
;18!56 חזוחז
.
<5610/ > <+חס רוהרה ס51:6א/> <ן[
>/080<
<ץ000>
065ה|וח6)-ץ!קק5|:8א>
<ץ000/>
<חטח/>
<36|קרחס%:|5א/>
<0כ]5|:507א>
66| %ה06חו +ח6 טס 66 הַהוהובזחוהרח זס+ |הססוף //
;0 = %ח06חו זפצ
<5|:500א/>
<-- 50606 0006 6 חס 03560 05060 זב זה ,סרח חהספו! 8 ₪85 560 ה80ם --!>
<0ח50ו|"= 306 6ה!רח6ת:|5א>
<צ|0>
<-- |606! הח הסח 6 5|סשחסס עו זסחחו פוחד --!>
<"8ח0!355="|!50 /[0>
<|5|:6/8א> :66!-חוס זה < "6="50/!6וחבּת 6סטטוה:|5א>
<5|:80071006א/ > רח6 < |51:6/8א/ >%ח06ח[*=-
<-- 6800 זז חט51 -+ 6 5חהולח60 6086 הסופסז סד --!>
<"()0חהקאם"=א6ו|6חס "0ח8א6355="6 חהק5>
<%5|:670056>
--!>
,ח6ז0!וח6 35 65סח 8חפו! צְחהּ סעבח ז )זז
זכ וס 50 0חה ,686 8 זסח חב 1 הסו%-
חטו5 פטחווח =
8 הח 1 + וס חס 86% 60 הקאס 06 זסז
% |8ח5 8 056 5%( חסום ,686|-
<--
<חסחצו:|5א/> <- ח5!|"=ז%65 הסחו:|5א>
<5|:0001/156א/ > ; 183 %,8< 6156 ר5|:0א>
<חה50/> <0056ח5|:6א/>
--!>
0 6/6656 056 85 300 ,006 5007 6 05|סח ה503 פוחד
| ]06 065 6פסרח 606 35 ₪6 זסוסס -
חכ הז 06 חו /500 שר שְבו5ו0 ||ואו ח8ס5 פוש חו סחואסו|)
סוה 0 6חז 660ח 6 שחצו 15 הסוחצ=-
0 וא למפתחי אתרים באינטרנט
"(00018156ו1ח "= ססר חס "(6טח)תטווחפוה"= 6 סספטטסוהחס ה8ק5> :0
<"()/ 50 /וסח66>="5ו|0ח0=-
=56|606 +5|:/8106-0<> < "= סרחהח 66טו5|:80א> :11
<06ט5|:300א/> "610"=-
<ח56!60="./006"/<>/508 ]6-0ט|5|:/8א> :2
<צו0/> 1
27 >!--
650016 הסח ,6096 סע סזסזס +הססחו 66 קט קוחטום :51
006 6ז'סעט הסחצ-
5 0 ץבא 0000 סח 0676'5+ 66חן5 |הפסוס 8 ₪56 0ף ס6עהח סע 1
+חסוחטטטזהּ ח3 ח|=-
|: --<
<|2;"";>/51:6/8 =+ +ח06חן<|5|:6/8א> 1
3065|וח6)-ץ!|קק5|:8א> :5%
<|5:08א/>;"";2 =- %ח06חו<|5|:6/8א> :10
<שו0/> 14
<306|קוח5|:66א/> :102
11
סע 05! 016/60 6/ 06חו5 ,65 השוצצ פַהורסץח3 00 60 סעבּח +'חסט 6צ --!> | :104
<-- ]ה6ח6!6 18| 6ח% 0ַהו6655סזכ הסח/ו-
<"6"= 0 366!קרת6ש:51א> :105
<306|קוח5|:%6א/> :106
11
<51:50/!65006%א/> :108
כעת אתס צריכיס כבר להרגיש נוח בסריקת מסמך |5א, ולכן לא נסקור בפירוט את
אותו החומר שבחנו מוקדס יותר בספר. בשורה 0 ניתן לראות, למשל, את הוראת
העיבוד הסטנדרטית, ובשורות 2-5 אנו יוצריס את ה-פססהספסוח8ח. שורה 8 מטפלת
ברכיבי טקסט, ושורות 10-12 מבצעות התאמה לרכיב השורש ועוברות ברקורסיה על
מסמך וספ הקלט שב- ואא.
הרכיב החדש הראשון שנראה, הוא בשורה 15, היכן שאנו מבצעיס התאמה לרכיב 06
שיצרנו בשורה 8 בתדפיס 7.1:
<"06)"= 80 366!רת0ש:!5א> :15
בשורות 16-63 נכתב קוד 1א41. התוצאה היא שהרכיב 6סד מוחלף על ידי קוד !ואד
(בראש מסמך ה-)1ז₪4 של טבלת תוכן הענייניס שלנו). הבה נבחן זאת ביתר פירוט.
שורות 17 ו-18 יוצרות את התגיות הצפויות |ח)ח ו-680ח. שורות 18-22 מגדירות
שלושה סגנונות. הראשון, המוצג בשורה 19, יהיה סגנון ברירת המחדל עבור מסמך
ה- !ואד החדש שלנו. השני, בשורה 20, יהיה הסגנון המשויך לכל רכיב המסומן עס
התכונה "פַח6|855="|!50. לבסוף, בשורה 21, אנו יוצרים סגנון הקרוי 60800 עבור
סימני הפלוס והמינוס.
פרק 7: יצירת רכיבים על ידי שימוש ב- וויא ו-51א עם |אדחכ 201
שורה 23 יוצרת רכיב 5610 במסמך ספ הפלט. הוא ייצור תסריט בצד הלקות בקובצ
ה- ]|אדח, אשר יורצ בדפדפן של המשתמש:
]ד ]!> < חר ס5|:6א> <50006> - :23
הערות 51 אינן מועברות הלאה לדף ה-]אז4. אס אנו רוציס הערה ב- ואד (ואנו
רוצים) אנו חייביס להשתמש ברכיב +חסוחוחסס:!5א כדי ליצור אותה. אנו רוציס לשיס
את התסריט שלנו בתוך הערה בקובצ ה-11, כדי שדפדפניס שלא יכולים לטפל
בתסריטים, יתעלמו מהם.
בסוף שורה 23 אנו מוסיפיס תגית ]ה דהס6]!>, האומרת למנתח תחביר ה-51א שתוכן
ההערה אינו מיועד לניתותח (כך, אנו יכוליס להשתמש בתוויס שמורים כמו הסימנים <
(- >).
בשורות 23-57 נמצא התסריט שבצד הלקוח אשר אמור לטפל בהרחבה וכיווצ רכיביס
בטבלת תוכן העניינים. זהו בדיוק התסריט שבחנו בקובצ ה- !א שלנו, המועבר
ישירות למסמך ה-51א שלנו, ומסומן ב-60414 כך שלא יעובד, אלא רק יועבר הלאה
ל- |ואד הפלט.
בשורה 57 אנו סוגריס את הרכיב 8ד603, את הרכיב 6חסוחוחסס:|פא, ואת רכיב תסריט
ה- |ואזה. בשורה 58 אנו סוגריס את הרכיב 680 של מסמך ה- וואדו].
שורות 59-63 מבטיחות שהפלט הנותר יהיה תחוס בין תגיות ץ00פ, ושכל מסמך
ה- ד יסתיים עס תגית <|חשח/> סוגרת.
יצירת רכיבי התדפיס
מה שנכנס לתוך התגית /0סט, נקבע על ידי מה שנותר בדף ה-51א.
שורות 65-68 יוצרות משתנה גלובאלי לשימוש ביתרת המסמך. כדי לעשות כן, אנו
פותחיס 51:5670%א, אך העבודה היחידה שאנו עושיס בתסריט היא ליצור את המשתנה
חח ולאתחל אותו ל- 0 (אפס). נראה למה זה משמש בעוד רגע:
<ז5]:500א> | :65
66| +ח06חו )חסונו 66 סהוחובזחוהרח זס? |הטסוף // 1
;0 = %ח06חו זפצ :1
<51:500א/> | :68
נוכיר כי בתדפיס 7.1 יצרנו רכיבי תדפיס. בשורה 71 של תדפיס 7.2 ביצענו התאמה
לרכיבי התדפיס האלו:
< 0חחפו|"=ח00ח 806|קותס::|5א> - :71
לכל תדפיס שנמצא, נוסיף עבור מסמך הפלט רכיב עו6, אליו נתייחס כאל ייהרכיב עו
החיצונייי ("צוס זפוטס") מכיון שבתוך רכיב ה ניצור רכיב טו0 שני, ייפנימייי. לרכיב עו
הפנימי תהיה תכונה 6855 עם הערך פַח0פו!. התוצאה היא שה-טו6 הפנימי ישתמש
בסגנון עבור תדפיס, אותו הוספנו קודס בשורה 20 (לכל תדפיס יש שוליים תחתונים
של 3 נקודות, והוא קובע את סמן העכבר לכף היד).
2 וא למפתחי אתרים באינטרנט
נזכיר שבמסמך ה- !אד שלנו, יצרנו האחה עבור רכיביס מוכלים על ידי שימוש ברכיב
סגנון. אנו רואיס ואת למשל בשורות 54 ו-61 בתדפיס 7.2:
<"ו6:067|-חוסזהרת"=50/!6 "8ַח50!ו|"=0355 ע|0> =
<"ו6:260|-חוחזהרת"=50/!6 "8ַח50!ו|"=0355 ע|0> 1
בשורה 75 של קוב ה-51א שלנו, המוצג בתדפיס 7.3, אנו נותניס ל-צו0 הפנימי את
התכונה 56 שערכה יהיה :6%!-חוףזהוח מלווה בערך המשתנה הגלובאלי %ח06חו. אחר
כך אנו מוסיפיסם את האותיות "6" לערך של התכונה. לכן כרגע הוא ייצור:
<"60:067|-חוטזהרת"=50/6 "8ח50!ו!"=0355 עוו6>
נראה מוכר! זה בדיוק מה שראינו בשורה 54 של ה- |ואדו.
אחר כך אנו יוצרים רכיב ח8ס5 שיכיל את הפלוס, מינוס, או הכוכבית. ל-ח508 יש
תכונת מחלקה 0ח08א6, ומטפל אירוע (ייטריגריי). התוצאה היא שמסמך הפלט מכיל
עתה גס את התגית הבאה:
<"()0ח8קאם"=>6ו61חס "0חהכא6355="6 ח8ק5>
תוכן תגית ה-ח8ק5 מוחלט בשורות 78-85. את הרכיבים 0056ח5|:6א, חסחאו:|פא
(-156ש51:00707%א ראינו קודם לכן.
לכל שורה תינתן כוכבית (*) אס היא עלה, או סימן מינוס (-) אס יש לה בניס. לאף
שורה לא יינתן הסימן (+) בשלב ּה, מכיוו שהמפרט שלנו מציין שכל הנושאיס
פרושיס במלואס כשהם מוצגים לראשונה.
בשורה 83 אנו משתמשיס בתכונה חז280₪6=+05+ של הרכיב ח6חצו:|5א:
<חסח/ץ:|5א/>-< ח%65%="|!50 חסחצ:|פא> 1
הוא מחזיר 6ט% אס סריקת הבנים של הרכיב הנוכחי, תמצא לפחות אחד שיתאים
לתבנית. התבנית בה אנו משתמשים כאן היא פַח50ו!; התוצאה צריכה לקבל התאמה
כשלרכיב הנוכחי יש בנים שהם גם תדפיסים (לדוגמה, כאשר לרמה-6 יש בנים
ברמה-כ). אם אכן ישנה התאמה, הפלט יהיה סימן מינוס (-), אחרת זהו עלה והפלט
יהיה כוכבית. שורה 85 סוגרת את 0056ח5]:6א ואת תגית ה-ח508.
הפלט שלנו, עבור תדפיסים עס בנים, ייראה עכשיו כך:
<ח508/>-<"()0ח8קאם "= סוחס "0 חההכאס"=6!355 חהק5>
כעת, אנו צריכים ליצור תגית ח508 עבור הכותרת עצמה. הפלט יהיה רכיב ח508 עס
שלושה מטפלי אירוע בשורה 90:
"(18156)ת0ו!חפודו"= ססר חס "(6ט)תטווחטוה"= סוחס ה508> :0
<"()/ 50 אוסח6>="5ו|0חס=-
אנו מוסיפים לתגית ה-ח508, תכונה נוספת, שהיא רכיב של ה- ואד , הקרויה 6ו,
וערכה נקבע לערך תכונת רכיב ה-אא הנוכחי 6ו. לכן, תגית ה-ח8ק5 הפותחת בפלט
ה- !אדו תיראה כך:
"(18156) חוד" = 560 סוחס "(6ט)חטווחפוה"= זס/ס6פטסותחס ה8ק5>
<"6="1000ו "()/ 60פעשסת6=="5סו!6חס=-
פרק 7: יצירת רכיבים על ידי שימוש ב- וויא ו-51א עם |אדחפ | 203
לאחר מכן נוציא את פלט הכותרת. אנו משיגיס את הכותרת על ידי שימוש ברכיב
]0 עס התכונה 56/66 המחפשת אחר הרכיב ₪6, שהוא בן של הרכיב הנוכתי.
לעצם העניין
כפי שאתה ודאי יודע, לעתים קרובות במטלות תכנות, יש יותר מדרך אחת להשגת
אותה המטרה. המצב דומה ב-]אא. כאן יצרנו את ה-06ד שלנו על ידי חילוץ סיפוריס
ממסד הנתונים, בניית מסמך אסכ אא באמצעות שרשור מחרווות, והחלת גיליון
סגנונות 51א.
נזכיר כי לפני ששמנו את הסיפורים בתוך מסד הנתונים, יצרנו קודס קבצי !אא לכל
פרק. אס היינו רוצים, היינו יכולים ליצור את אותה טבלת תוכן עניינים דינמית על
ידי חזרה לאותס פרקיס והחלת קוב 51א עליהס ליצירת ה-06ד.
למעשה, יש לנו שתי אפשרויות. מצד אחד, היינו יכוליס לשנות את קובצ ה- ]אא של
הפרק, למסמך ספ של טבלת תוכן עניינים. לא ניתן יהיה להבדיל בינו לבין גה שנוצר
ממסד הנתונים. לאחר מכן, היינו פשוט מחיליס את אותו קובצ 51א כפי שעשינו בפרק
הזה: |5א. 1 ד62סד.
מצד שני, אנו יכולים לשנות את ה-!אא של הפרק ישירות ל- |ואז₪ הנדרש על ידי
יצירת קוב 51א חדש, שניתן לכנותו |5א. 1 ד2606213!וחא.
הבה נבחן כל אחת משתי הדרכים, כדי לראות כיצד ניתן לבצע זאת.
מ- !אא ל- וואא
נתחיל בכתיבת קוב 51 שנוכל להחיל על |חא.2כְ8ח6 ולהפיק קוב פלט שיוזן
ל-15א. !106201 חשוב לציין, כי קובצ ה- וואא שנפיק יהיה וּהה למסמך ה-אסם ואא
שזה עתה יצרנו ממסד הנתוניס; הפעם ניצור אותו ישירות מ-|א.2כ8ח6.
כדי לעשות זאת, יעזור לחזור על מבנה קובצ !אא ה-קלט (וחא.60802) ואז לשקול את
המבנה של הקלט הנדרש על ידי |פא. | ד62סד.
אנו יודעיס שה-]91א לו מצפה |פא. 06211 הוא פשוט מאוד, כפי שניתן לראות
בתרשים 7.7.
4 וויא למפתחי אתרים באינטרנט
זסזס!א = 61חז6)ת! 05011ז4:0 - הזוח .15/151:007.2עא/ 54סח!הססו// :קוו ב
1006 65וסטב" | אפוע 20% 86 |
כ
5 ומוק | עס 85!סט3] 00ז568 | >הס] | 360658 | קסופ ו 0%
ב חן 5 [+ חז1ח.015/1500007.2וא/9 1 ס1// :וו 45| 8831655 |
1 037 -
8088 -
ההז 5! אססם 5וחז שופ -
ץוח א 50סזסווא עו80מ5ב טבּחט *
הזוחו ומסס.1 ו
תרשים 7.7: תוצאות הפעולות הננקטות על ידי 06.50 דווסח5, שוב.
נזכיר כי המבנה הופק על ידי קריאה ממסד הנתונים, ויצירת מחרוות ששימשה
ליצירת מסמך |0. מסמך ה-וספ הוזן אחר כך ל-|פא. | 621סד.
(וחא.802ח6 הוא הרבה יותר מורכב; להלן קטע מתוך הקוב בתדפיס 7.4.
תדפיס 7.4
"1.0"=חסופזסע |וחא?> :0
<"000. ה0ח68" 1זם 55 אססט =קצזן06כ!> :
<16?/ >2 ז0%6ְ6<)63!?+> <"6="2000ו "ה "= |6ע6] ה0ול200%<>566> .:
<0!6ול/ > 26510 סחהּ 5ו5ץ!הּח <0!6?> <"6="2001ו "ם"= |6עס] ה0ו5000>-
<" ]0|355="7 /|[0> =-
זע ץ680ז|3 1 .חטו65 סה 55| 066-660 חס 0%סכ ב 6סח 15 פוחד :3
) 056 )0 6ח0=-
8 =
41 >|<
(150111-861-001-33-9 1998 655זק אס .חסופסכ 30 5ו5ץוח/ 0ססחהסוזס-00[60 סהוהחוססם. :5
<ו/> 4
7:
06% ץחה חו ;00080 הוב|קאס 0ף 08065 60זסחטוה עו 3 9805+ זו סחהּ , :8
<שו0/> 1
10 >0[/ 0|855="-]"<
סח ח0ח503ז06חט זטסתסוצ ה%ק06 חו הזה זססזק 3 6חורבא6 %'ח63 6צ ,5800 )החד :11
,30000 ח1 .515/|הח3 חס סחחוז 506 0ה506 6פטרח שצ 50 0ח3 ,560 06 |ווצו -
006 00(66% 6 0חה007508ח 0+ +ההצ |['פצ ,6006 6+ 6הורת8א6 6צו 6זסוס=-
!קוחו 0סף הבוק 6/-
<צו0/> 1
13+ >0[/ 0|855="-]"<
פרק 7: יצירת רכיבים על ידי שימוש ב- וויא ו-51א עם ואדחפ | 205
06500 300 5ו5ץ!הּחה 06 ז0 הסטק 0656 הוע-הוחצו 3 6סועסזכ |!וא זססקהח6 פוחד
חן 650065 ההרחטת הַחוהַהחברח זס? הס הסו!|סקה חב :66%60ץסוקותם 01=-
סו סע ור 0 60 פהוסט 6ז'ס הח זוסץ סף חס פחהר .הססבזסססס 00!6-5260ורח 8 -
<צו0/>
סה 5ו5ץ!הּח <6!+> <"6="2002ו "6[!="6ע6! הסוז500>
<"]-"=6!355 ען0> <116/ >0שו5 -
0 260א6 6|!טוסצו 1 ,66146%6ץסוקוח= 35 ה506 6[סזק 86זב! 3 חטו
0ב (5זה6 רשו וז 6 530 0חג) 515ץ|החה חס סרח )0 +הטסרחה %ה168ח510 8 -
. (6006 6 פחטועע) הסוח רח6!קרחו 8 הוהחוט6 061076 (הסטטו50 06 0חוו06סו) ח0ו065 -
<צו0/>
<"]-"=0!855 /|0>
6 סו 3 5הצ 66%6%ץס|קוח= 8% 50660|3060 6עבח סוטסצו 1 1992 חז
סח 6|טסצו 6 ,0006 6זסעט סו סח 006 עם ;6פזטסס )0 ,פחסזצ הססכ 6עבח סוטסצו [=-
[59ז6ץ 66זחץ 60 %וס 60סכן|פ=-
<צו0/>
<"]-"=0!855 /|0>
3 !וטס סל 68 3 הבר 655! הח 6צו 8% הצוסחא 6עבח שת8ורח 1 1995 ץ₪
ה ]060 80 51005 +6חזלח1 חב ,קט 0חהו50660 15 !סע 606 0008056 ,5וח6 1>6|=-
זסץ 3 זססחט חו ז6אזהוח 6ר%-
<צו0/>
<"]-"=0!855 /01>
סווטום סז צוסח זטספה סוה 5 0חו060 || 6ז'סצו ,60 0חו 06 6זבּ פ|סס+ סחד
0חואחוח5 66605 שרחה סרח שה ד .6706 15 הסח סקוה ס6 שו 0ח3 פהסספסווסכה סט/=-
זסס ו 6 +00 66856 5% 8 +06 60 זסע068ח6 )פטרח סצ סעסווסכ 1 ,שְהססךד=-
5 חס הזהסוח 3 +וסטה 0ה506 1'0 ,פוחל 00 סד .655! 305חז6ק .פהסחסוח 4-6 חו-
50 ה סרח 3 30 חו600 5 הסוח סע הס 30 06514 חס הסחסוח זסתזסחה -
5 00 6 06076 6005 56החכן 6חס 6או| 500 6 886 65008065 656 =-
חסוטהוואסזקק3 680 חב הפטסז 0000 3 6טוף סם ע6ש זטם ,6טט זסח 15 הסוחצ-
.וח ץוח 6סועו 1'6 עוסת 01=-
<צו0/>
5 <16ו?> <"1="2003)ן "0]="6ע6] ה0ו566%> <ח50600/>
<"6!855="1 /[0> <1:]6+/ > =-
.05 0]8כ60 0!6-51260 וח 01 6605 50065 ההרחוח 6 06החברח |!וא ז666עסוקוח=
א סוס ||'סו םה ,הז 6 וח 66 עפ 5005060 סחוספ 15 66[סזק 6ח=-
.0 6 85 65ח8 60 0 זס1 8|26 ה הסח 30 6605 זוסחץ ז6סוח %0-
<צו0/>
<"]-"=0!855 /|0>
.05 חס 0ח6-חוח + 136 טהר 6 הו 6!קססק 2,000 665ץסוקוח6 6וחס
.020 0₪05רח8)-10וסע וס 300 006%ו/ 66 6ש סזה 6ז6טוססזכ |הקוסחחזק זוסתךד-
0% חס צוסא חב אהטוססק 85% חו שחבוכ פחההטס186טחהוח 6עבח עסהדך-
.הח8ר00כ) חן 6זה 018065 הוחו זוסחז 0ח8 -
<צו0/>
<6ו?> <"6="2004ו "פ"=|6ע6! ה0ו5000>
<"6!855="1 /01> 116 / > 0020012810 0=-
6 וא למפתחי אתרים באינטרנט
11
11
11
17:
11
1%
20:
22:
22:
2:
22:
251:
20:
27:
201:
20
2:
21:
2:
1
24:
5 || 786% 60 +ה6רחצו0608 |סההספוזסכ 6 עוסו|בּ |ווו ז666ץסוקותם :35
0 צוסועסז 0 665ץס|קוח6 עעסו!ב ||ואו 0חה ,665ץסוקוח6 זס1-
.5 הסרתה ץס!רח6 הצוס זוסת%=-
<צו0/> 1
<6!?> <"6="2005ו "כש"=!6ע6] ה0וז566><ח56600/> :7
<"]-"=0|355 שו0> <1016+/ >685065 056 -
5070876 3 107 05חה6רח6 וטש |ה6וס/ 6חז הסחצו סח 8 85עו סזסחד :38
חס 15 6!ןח/ .66חה וסוס חב 65טוו0 638 01 65ל חן 682765560 6זס/-
,5 06 52601160 הו60+8 6% הח6ל5ש5 0ח5]0סז סח 68% -
"1"=ח6! ח80670ק5> 7
20
זו 6 ץ!|ה6וכקץד .זו 6פט סז +חפצו !סע זס 6!טס6 6הסץחב 8% 6זטפחס %סח בו א :41
00 606 0 85 6%ו0סז 66 30 [חט הסו 6050 ססח! 156007 %ח0ו=-
<צו0/> 21
211 >0|/ 0!855="-]"<
סח 0 0ח0ה5+9ז0 חנ חס ססר 3 הפו 5הופס0 5ו5ץ|החהּ 660ח6חס-060. :44
6 |ווו ז6טוססזס %06-
<ן> 11
46: 0
<ן/> :27
4. :48
<:ם> :21
6 :50
כפי שניתן לראות, אנו וקוקיס רק לחלק קטן מאוד של המידע בקלט של קוב ה- וווא,
כדי להפיק את הפלט של קובצ ה- וויא שלנו. באופן עקרוני, אנו צריכיס למצוא את
רכיבי הקטעים (המודגשיס בקטע שלפנינו) ולהפוך אותס לרכיבי תדפיסים, תוך איסוף
הכותרות בדרך, ושמירה על המבנה המקונן. מכל שאר הרכיבים, אפשר להתעלם.
כדי לבצע זאת, נשמור את 60001.8 כ-0|₪2.850ח60 (הגהה 2), ונוסיף אפשרות
תפריט עבור !וא הס 706 1866!, כפי שניתן לראות בקטע הבא:
"וואא סז 706 1886" 0856 :55
() ]וא רחסז--20) 1367 שסוז/. 650056 4
ניתן לראות כי וה מעורר את פונקציית התסריט () |ואאוחסז18661067, המוצגת
בתדפיס 7.5 (מספור השורות מציין כי והו קטע מתוך הקובף 6000₪082.850).
תדפיס 7.5
() |אוחסז-00 [1866] הסחססחט- :180
6 5008 | 06ד 0ס 6 ]וזא +הסעחס6 11
חז , ו5אס הוחו 11
11
("ההז510 3 ד 51א. 50800 הס" )0[66כ6768860. 56/06 = 51אס 566 11
:151
0 3 בוט |וחא 0ף |ההזחא +סעחס6 11
פרק 7: יצירת רכיבים על ידי שימוש ב- וויא ו-51א עם ואדחס | 207
"|החא." ,6 ה08%378% = ס6ווהסטסח1. ופאס
("51א. 2706 ]זא" ,זוס06ס6)ףזהקסווטם. 150 = 6ון- |פא. ואס
הסח ד. פאס
"|החא.06." 8 08187817 = חז
חז 0000516 53/60. ופאס
"605 06" = |וי]אוחסז- 00 ך66הו
חסטס6חט= 6ח=
171
11
+
11
1
11
141
11
11
11+
הפעולה של קוד ה היא ליצור מופע של אובייקט ה-6%ע460 שלנו, המוצג בשורה 184,
ולספק כקלט את קוב ה-|אא המקורי של הפרק, המוצג בשורה 187, כמו גס קובצ
ה-51א, המוצג בשורה 188.
אחר כך אנו קוראים ל-ח5007ח78+, המוצגת בשורה 190, שזו בדיוק השיטה שקראנו לה
בעבר, כדי להחיל דף 51א על מסמך וספ ואא.
קוב הפלט |וחא.60802.%06 נוצר בשורות 192-193. העבודה האמיתית כמובן, מבוצעת
ב-|5א.06ד2 |אא, כפי שנראה בתדפיס 7.6.
תדפיס 7.6
"1.0"= חסופזסע |וחא?>
--!>
וס טס ח3 076806 (|וחא.303ח6 ,-6.0) ,6 |וחא. 5'זססקה ה6 3 הסעוכ)
ופא |וח%ח062* עס 680 06 ח68 תסוחצו ווחא
--<
:>
"|5א- ₪ ד/8זס. 3עש. או /: קח"=!5א:5חווחא
"|ההא- 3 ךס 3 ואוו /: כ ת"=פ5הווחא
<""=5ח-650]6]
<"/"= 806 06ה!רח5|:06א>
<וס:|5א/>"1.0"= חסופז6ע< "|וחא"=6וחהח וכן:|פא>
065ה|וח6)-ץ!כק5|:8א>
<06ה!רח51:06א/>
<-- 905? הששסחאחג שח ה6800 --!>
<"*"= 806 366!רח5|:06א>
<5|:80710006א/ > < / סרחה ח-006ח:51<> < 0+" = סרח ססטס51:30א> < השסה>ח>
8065|כוח6)-ץ!|קקה:|5א>
<חשטסח=>חט/>
<06ה!רח51:06א/>
8 וא למפתחי אתרים באינטרנט
-
בה
5 כ ו ב ל
₪ + + 4 7-4 7-2 7-2 7% 2
+ יכ ל +מ ות 00
וי
= 8%
:22
<-- 90 |66! 00 זטס --!> | :24
<"א000"=ח306ר 306|קוח5|:00א> | :25
20: >"06<
3065|קוח6-ץ|כקה:|5א> :2
<06)/> :20
<06ה|קוח5|:06א/> | :29
0:
<-- 006 ח68 6 0905 --!> | :31
| 80| 1| ט | עו | אחו! | בר | 3 | 56| ץ ספ | 56| 06 | 680 "= הר 06ה!קות6+:|5א> | :32
<306| 51:00 > < /05 3 | רת6>-עוכק51:3<> < " ז 6 | 6006 | 6 תזו6 600 | סחווסססת | ט | טסה | פפ+-
1
<-- .165 670816 הסח 7 .150005] 670866 ,56000005 6 סחח --|> | :34
<"566000"=ח306רח 306|קוח5|:00א> | :35
<0ח50ו|> 41
<6ט51:30710א/> "6010"= 56160 ₪6-01|ה5|:/8<> <"0ו"= סרח ססנוסוה:|5א> 1
=56160 ]5|:/8|₪6-0<> < "|6ע6]"= סרח ססטטחהה:|%5> 1
<0ט5|:300א/ > "|6₪|0/6"=-
<006/> "06/. "=56!666 )6-0ט]ה/:51א> <6> 7
3065|קוח6-ץ|כקה:|5א> 7
<0חפו!/> :211
<36|קוחטס:|5א/> | :42
<5|:50/!605066%א/> :43
בשלב זה, 15 השורות הראשונות אמורות להיות מאוד מוכרות. שורות 18-25 מטפלות
בתגיות בלתי מזוהות; אס הכל מתנהל כשורה, הן לעולס לא מתבצעות.
העבודה היא בין שורות 24 ו-42. מטרתנו לבצע התאמה לרכיב 00%פ בקובצ ה- !אא
ולהפוך אותו לתגית %06. אחר כך אנו נבצע התאמה לכל קטע, וניצור את רכיבי
התדפיס 6, |6ע6), ו-6ש₪ שיהוו את קובצ הפלט שלנו, אותו נוכל להזין
ל-|5א. ]| ד62סד.
שורות 24-29 מבצעות התאמה לרכיב אסספ (אמור להיות רק אחד כזה), ויוצרות את
רכיב 66 החדש שלנו. כל מה שנמצא, יהיה תחוס בתוך תגית הרכיביס <%06> הפותחת
ותגית <%06/> הסוגרת, היא תגית השורש שלנו.
ידוע לנו כי איננו צריכים להתאים רכיבי סיפור, מאחר והקלט שלנו הוא
תמיד פרק, לדוגמה, |חא.802ח6. אנו יודעים שפרקים תמיד מורכבים
ינ מרכיבי >ססט, כמתואר על ידי ה-סדס שלנו.
הערה |
בשורה 32 אנו מתעלמיס במפורש מכל התגיות שאנו יודעים על קיומן ושאיננו
מתענייניס בהן. אנו מתעלמיס במיוחד ובמפורש מן התגית 6ש₪; מכיון שהכותרת
תיאסף יחד עס הרכיב ח566000, כפי שניתן לראות בשורות האחרונות של הקובצ. הבה
נבחן אותן ביתר פירוט.
פרק 7: יצירת רכיבים על ידי שימוש ב- וויא ו-51א עם ואדחס | 209
בשורה 35 מתקבלת התאמה לרכיב קטע, ח56600, ואנו יוצריס רכיב פַח150! במסמך
אסס הפלט. אנו משייכים שתי תכונות לרכיב 88ח50!!: 0 ו-|6ע6!.
שתי התכונות נלקחות ישירות מהתכונות המתאימות ברכיב ה-ח56000. אחר כך אנו
מוסיפים רכיב ₪6, וסורקים את הבניס הישירים של הרכיב הנוכתי (ח0ו5660), במטרה
למצוא רכיב ₪06 תואס ולשייך אותו לרכיב ₪66 החדש שלנו.
זה הכל. כשאנו קוראים ל-וחזסופח3זד כפי שניתן לראות בשורה 190 בתדפיס 7.5, קובצ
ה- !אא שלנו משתנה לפי חוקי טרנספורמציית ה-51א שיצרנו. לבסוף, הקובץ המתקבל
נשמר לדיסק, כמוצג בתדפיס 7.7.
תדפיס 7.7
"1.0"=חסופזסע |וחא?> :0
<006> :1
<""=|6ע6| "0="1000ו סחספו|> :2
<1>/006א זס80%ה)<6> 21
<"ם"=|6/6]! "0="1001ו סחספו|> 41
<06/ >568160 0חו6<)260> :5
<""=|6ע6| "1002"=סו 8ח50!ו|> 1
<260>/006ח08זס 15 אסספ פוחל טס <> 71
<"ס"=|6ע6! "0="1003ו פחספו|> :9
<006/>ץ!חכ) אספססון ץו60ח5הטבּח[(<6ו> :9
<0חפו!/> 10%
<"ס"=]|6ע6! "0="1004ו פחחפו|> :11
<006/ >6661ץס|קרחם :660[סז 6חז )טסט <6> 2
<0חפו!/> 11
<0חפו!/> :14
<"6/6|="6]! "0="1005ו חח0פו|> :151
<660>/006ח טסץ 0015ף 8%ח/<6וז> 11
<"כ"=|6/6! "0="1006ו 0ח50ו|> :17
<6/ >?65חוחה6הרח שחהוח עוסר <6> 11
<0חפו!/> 1%
<"ס"=|6/6! "0="1007ו 0ח50ו|> :20
<6/ >+חסר הסזוח6 +ה6רחקס!|06/6 וטסץ קט 8חו6<560> :21
<0חפו!/> :22
<0חפו!/> :21
<"6/6|="6]| "0="1008ו סח0פו|> :22
<06/>?אוסחא 0+ 660ח הזוה וסץ 00 ז8ח/<₪6> :25
<"ס"=|6/6! "0="1009ו ח50ו|> :20
<6|ז0/ >16<568|6)> :27
<0חספו!/> :20
<0חפו!/> :20
<""=|6ע6| "0="1010ו 0ח50ו|> :0%
<06/ >%ח6וחקס!06/6 זסוד- 5הססבסו|קסה 6%ססחו 60סטסוספוכ <6> :21
<"ס"=|6ע6! "0="1011ו פחספו|> :2
0 א למפתחי אתרים באינטרנט
<06/>/ פוה ]סוס /<6> 1
<0חפו!/> :5
<"כ"=!6/6] "0="1012ו 0ח50ו|> :1
<5>/006ז0/ץ3| |ה6ו5ץחק .5ע |63ו0ס 6<1ס> 1
<0חפו!/> :7
<0חפו!/> 5
<""=|6ע6| "0="1013ו 0ח50ו|> 6
<1006|>/06] 66[ +ה6הסקרח 60 500'5סיסוי] 30 5זה6הסקוהס6<6> 7
<"ס"=]|6ע6]| "0="1014ו פחספו|> :211
<006/> 0011 חב 5 ד]<₪6> :212
<0חפו!/> 211
<0חפו!/> :14
<""=|6ע6| "1015"=ס0ו 8ח50ו!|> :451
<50005>/006 %א1]6<])6> 21
<0חפו!/> :217
<0חפו!/> 211
<שחספו|/> 2
50: >/)06<
כעת ניתן לצפות בקוב זה על ידי שימוש באותו קוב |8א. |ח62סד ששימש אותנו
בבניית המבנה ממסד הנתונים.
מ- !אא ל- וו דרו
למה לטרוח ביצירת הקוב הזמני הזה! לא יותר פשוט להוציא פלט וואזח! מספר
שינוייס לקובצ ה-51א שלנו ישיגו ואת. ידוע לנו מה נדרש כי כבר כתבנו
5א. ]א 06271ד. אנו יכוליס לשלב את הלוגיקה של |5א.06ד2 וזא עם |5א. | ד62סד כדי
להפיק את |5א.!ח2%0620%וחחא !
הבה נוסיף עוד פונקציה (וכפתור נוסף) ל-0ק60000/₪2.85 :
"|אא חס 06ך ]ואד 1886" 0896 | :58
() | דרז2 | אוהסז-06 1866 סז 56ה6500 1
היישוס של פונקציה מוצג בתדפיס 7.8.
פרק 7: יצירת רכיבים על ידי שימוש ב- וא ו-51א עם |אדחכ | 211
תדפיס 7.8
() !וא ד1ו2 |]אותסז-06 ₪86 הססס6תטת |:
:200
:20
6 חפ ] 06ד סף ₪|6 1וא +סעחס6
חז , ו5אס הוחו
1.9
20:
(" 50 ד 51א. ה86 507 סז" 0768+6000(66. 50/6 = .051 506%
201:
20:
3 הוע |וחא סל |והטחא הסעחהס6
"|החא." ,6 ה08%378% = ס6וו-סטסח1. ופאס
("[פא. || דר0621 ך2 [זא" ,זוס06ס6)ף6הקסווטם. 50 = 6ון- ופא. ופאס
200:
200:
20:
20:
הסח ד. ואס
200:
2201:
"הה606.0." ,8 ה081878% = ח1
חז 6ו53/6000005. ופאס
22:
22:
221:
"|| 85 6000ט50ח60 06" = || ד2 |וי]אוחסז- 00 ד66הו
חסטסחטת סח |:
22:
205
פונקציה גו כמעט וזהה לקודמת, אלא שהפעס בשורה 207 אנו משתמשיס בגיליון
סגנונות 51א שונה : |5א.|וח260620%|וחא, כמוצג בתדפיס 7.9.
תדפיס 7.9
"1.0"=חסופזס/ |וחא? >
--!>
8 676866 (]חחא. 803ח6 ,-6.0) ,₪16 [החא. 5'זססקהח6 8 הסעו)
|החשח חו 06ד 6והההחץ
--<
>
"|5א-כ ₪ ד זס. 3עש. אא /: קה ח"=!5א:5ח!וחא
"40|ההחח-/ 3 ואוו /: כ ח"=5הוחא
<""=5ח-650]6]
<"/"= 806 66ה!רח5|:06א>
065ה|וח6)-ץ!קק5|:8א>
<06ה|רח51:06א/>
<-- 305 חששסחאחנ שח ה08%0 --!>
<"*"= 1306 306|קח5|:06א>
<51:3071006א/ > < /86 ח-006ח:51א<> < "= הח 06וס51:80א> < העשסה>חט>
3065|סוח66-ץ|מקהּ:|5א>
<חשטסח=>חט/>
12 וא למפתחי אתרים באינטרנט
כ + מ ה ו 0
+ ₪
5
<06ה|רח51:06א/>
<-- 90 |66! סל טס --|>
<"א000"=ח306ר 0|306ח5|:06א>
<|וחז]>
<680>
<50/6>
:0-2 ;8ה08זס: ץווחחה'-%ח10 *
:ספ טס ;36: ההסאהסס-חוףזהרח+ סהספוו.
:0+ חא
<50/6/>
ד 0 ]!> <6חסרוהסס:|5א> <זכ50>
()0חהקא= הסחסחט
ָ
6 ההק 66| 570.%ה6ע6. /ששס0חוצ = 6 זפצ
עו "שחוחץשס" 6 סז 86 // הק -
6 | ; (0)ח6ז0!וח6. (0)ח6זס!וח6.6 = חףו5 זפ
ח508 590 פטחווח/פטוס =
5 חס 6 06 הש ,60 ההא סזסעט סצ זו //
(006ח +68! .6ו) חףו5 סח 5 סזסרט )ו סהוה6ץחב סט +'חסם ]/
(0אם דוסחחו. ח510) הספוצ5
0
:'- 6856
'+' = 6 דוסחחו. 5100
(++! ;הז0ח6!. ח6ז0!ות6.0 > | ;1 = | זפצ) זסז
;"6חסח"= 0|3פו50/16.0. (1)ח06!ות6.6
;686
:+ 6856
-' = 6% דוסחחו. 5100
(++ו ;הז0ח6!. ח6ז0!ו 6.0 > | ;1 = | זפצ) זסז
;""= ץ50/!6.0150|3. (1)ח076!ות6.6
;זו
.
(חס)זחטווחפור הסטסחטז
,
5 0156 6 35 6הט0ז0א086 6 6פחהחס ]/
5 06 -
= זס|0006-0א50/16.086.+ח6רח570|6. 00%
;("" : "אוסו|6ץ" ? חס)=-
;856 הזז
1
()/וסל5/סח5 הסטסחו
פרק 7: יצירת רכיבים על ידי שימוש ב-וואא ו-51א עם ואדהוס
22:
22:
22:
22:
251
20:
27:
20:
20:
7
21:
1
31
41:
51
1
2
1
1
:210
2111
:1
:21
2121
251
:21
:21
211
:21
1
1
1
1
1
:לפ
1
1
1
7
7
203
- 5001 56!66060 6 ץ0150|3 0+ 6וחהז הז 6 6פט8ס ]/
0 65| חה50!ו! 6 35 6 560 6 סעבח 6-
;6/6506 = 57610 הצ
,0508 +0 "6 סרח" 6 |סישחסס 0+ סקס חס %66 //
07015.0 200600 ח! 65א00א66ח6 חס 08560-
365.00 +ח6זהק = 655חסא ופצ //
;60א66ח55.6חס =-
רהס 65.00רחה .)חס זכ = 60060|06%65 ופצ //
0
5050" = ז6זח. הס ה6ס!. .1365 +חס הס ]/
=055ח8\0" ? 055ח0)) + 57610 + "=850?50010=-
;("" : "ץ=8,00060!0065" ? 00060100%5) + ("" : "ץ-
=350?500/10. 500/50" = זזה הס ב6ס|.זחסוהס
17 "=
6 תס סז
,
<5000/> <+חסרהרס51:6א/> <ן1
<680/>
<ץ000>
8065|מח6ם-ץ|כק5|:8א>
<ץ000/>
<|חוטח/>
<0!306רח51:06א/>
<-- 06| אח68 סא 1005 --!>
| הזה 1|50| פ | עו | אחז | 6 | 3 | 56% | ספ | 56| 6 | 680"= 6 36|קרח6ז:|5א>
<306| 51:00 > < /05 8 | רת6>-ץוכק51:3<> < "זה 6 | 6006 | 6 תוס 600 | סחווסססת | ט | טסה | 8+
<5|:500%א>
66 הח ז+הס וס 6 הַהוהובזחוהרח זס+ והססוף //
;0 = %ח06חו זפצ
<5|:5070א/>
<-- .065 676806 חס ך .95ח150| 676866 ,5ה56600 6חז סח --!>
<"566000"=ח306רח 306|קוח0ס:|5א>
>0|/<
<-- |66| ה ח06חו 06 !סי חס6 עו זוסחחו פוחד --!>
<"0ח0855="|!50 /01>
4 וויא למפתחי אתרים באינטרנט
2%
<|8ש51:6א> :66!-חוסז הר < "6="50/!6רחבּח ססטטחחס5|:3א> :17|
<5|:80071006א/ > רח6 < |51:6/8א/ >%ח06ח[*=-
<-- 60800 זז חט51 -+ 6 5חהולח60 6086 הסופסז סד --!> 1
<"()0ח08אם"= 06106 "0חה0א0|355="6 ח8ק57> 1
100: >%5|:670056<
114 >|--
חסר , ה6ז0!וח6 35 65סח פחפו! צְחהּ סטבח ז זז :11
פחורח ה זוכםטס 50 0חב ,6860! 8 זסח וחב 1=-
חטו5
רה 1 + !0 חס 86% 60 חקא 6 זסז +14
6% ||58 8 56 5%[ הסח% 68| 8=-
11 --<
<חסחשו:51א/>-<"ח%056="56600 חסחצו:|פא> :151
<56ו5]:00א/ > ; 1 821 א,8< 156חסרס:|5א> 11
<חה50/> <0056ח5|:60א/> :11
11+ >!--
5 56ס 85 0חהב ,6 ץ0ל5 6 5סוסח ה508 פוחד +
]06 65/סרח 6פסרח 06 85 6 זסוס6 %0-
,חכ חז ₪6 חו /500 שוש שְבוק5ו |!ואו ח8ס5 פוש חו סחואסוו) 1%
סוה ו 6חז 660ח 6 שחצו 15 הסוחצ-
1 --<
=5600 סרח חס " (6 )"= ס6פטסרהחס ה8ק5> 11
<"()ץז0)/טסח5"=אסו!6חס "(18156)תטווחפוח"=
=56!6 5|:/8]06-01<> <"6="|0וחבּח 6סטטו5|:30א> 141
<06ט51:310א/ > "610"=-
<ח508/> "56|66%="./016 5|:/8106-01א> 11
<צו0/> :151
11 >|--
656076 הסור ,6פזוססז סו 6זסז06 זהססחו ₪6 קט קוטס :171
006 6ז'סץט הסח/-
5 0 ץבא 0000 סח 06765 66חן5 |הססוס 8 56 0ף סעפח סע 11
+חסוחטוטזהּ חהּ חו=-
14 --<
<|5|:6/8א/>;"";2 =+ %ח6ח%51:0/8|<1> +17
ץ 68| 6/'סצ - 65ה6ח6!6 ח00 566 15 +טסטה 6876 סע || --!> 1
<-- 30006 %ה6ח6!6 ₪06 606 0!60חח -
<] "ח56!60="56600 3065|קרח6ם-ץ|כקהּ:|5א> 11
<|5|:6/8א>;"";2 =- %ח06חו<|5|:0/8א> 141
<שו0/> 11
<06ה!רח51:06א/> 151
<51:50/!65006%א/> | :126
פרק 7: יצירת רכיבים על ידי שימוש ב- וויא ו-51א עם |אדחפ | 215
למרות שזהו תדפיס ארוך, יש הפתעות מעטות בלבד. המטרה שלנו היא לבצע את
העבודה שקודס לכן בוצעה בשני קבצי 51א נפרדיס. קובצ חדש זה מייצג חיבור פשוט
של הלוגיקה שלהס.
0 השורות הראשונות מגדירות את קובצ ה-|5א וה-פססַספוִַַאַח. נשיס לב כי
ה-8650806ח של הפלט הוא ואזו₪, כפי שציפינו; התוצר הסופי שלנו מקובץ ה-51א
הוא קובצ 1אז4 שניתן להצגה עייג הדפדפן.
הלוגיקה בשורות 12 עד 21 זהה לזו שבקבציס הקודמים, ולכן לא נרחיב בנקודה צו.
בשורה 24 מבוצעת התאמה ל-006פ, כאשר אנו יכוליס להיות בטוחים שוב, שמסמך
הקלט יהיה פרק, כגון |וחא.1קח6.
בעת ביצוע ההתאמה ל-אסספ, אנו לא ניצור הפעס רכיב 606, אלא נוציא פלט למסמך
ה-ואספ ואד שלנו עס ה- וואדח הנחוצ, שראינו קודס לכן ב-|פא. |א0621ד. כך, אנו
רואיס את אותו הסגנון והתסריט שראינו בניתוח הקודס. הוא מוצג בשורות 23 עד 80.
בשורה 83 אנו מבצעיס התאמה, ומתעלמיס בדיוק מאותס הרכיבים שהתאימו,
והתעלמנו מהם ב-|5א.06ז2!חחא.
בשורה 92 מתבצעת התאמה לקטע חסו560, וכאן הלוגיקה הופכת לצירוף של שתי
הגישות הקודמות. מתבצעת התאמה לרכיב הקטע, מכיון שזה מה שיש לנו בקובצ
ה- 1אא, והפלט יהיה של רכיבי ה-צו0 הפנימי והחיצוני שאנו דורשיס עבור ה-06ד
הדינמית. לוגיקה זו נותרת ללא שינוי עד שורה 125, ובשורה 126 אנו סוגרים את
גיליון סגנונות ה-51א שלנו.
כפי שניתן לראות, אין שוס דבר חדש בשימוש שלנו ב-51א, אך בכל זאת יש חדש בכך
שאנו מקבליס את הקלט שלנו ישירות מקוב> ה- וא של הפרק, והפלט שלנו הוא
קובצ |אזח שניתן להצגה בדפדפן.
הצעדים הבאים
ראינו כי 51 בשילוב עס שינויים של מסמך ה-אספ, מאפשר לנו גמישות רבה
ביכולתנו לשנות )אא בכמה דרכים. כעת משכל החלקים הבודדים קיימים ופועלים, וה
הומן להרכיב את היישוס שלנו, ווה מה שנעשה בפרק הבא.
6 וויא למפתחי אתרים באינטרנט
פרק 8
בניית היישום והרחבתו
בפרק זה:
היישום
בחינת היישוט בפירוטי
ייצוב 60660 0669
הצעדים הבאזים
עכשיו כמעט כל החלקים שבידינו עובדים ומוכניס עבור היישוס.
זה הזמן לחבר אותס יחד ולהוסיף את יתר החלקיס החסרים ליישוס המלא שלנו.
והו למעשה הפרק האחרון, שבו נגיע סוף סוף למטרתנו המיועדת - יישוס לדפדוף
בפרקי ספר, על גבי האינטרנט.
היישום
ניזכר רגע אחורה, בפרק 1, בו היישום הססזסו!|פ10ו8, הוא מנוע חיפוש פשוט
מבוסס-דפדפן, המאחזר סיפוריס או תת-פרקיס מתוך ספרים.
ראינו בכך שימוש עבור הגולש למציאת הסברים הולמים של מושגים, אשר יוכל
לדפדף בין חלקי הספר, לקרוא, לגזור ולהעתיק טקסט.
חש דסווטופ תספק רשימה של כל הנושאיס בספר, בצורת רשימה או בטבלת תוכן
ענייניס מתקפלת. כל נושא יהיה פעיל; לחיצה על הנושא תציג את המאמר הקשור.
כמו כן, המשתמש יכול לחפש אחר מילים, או בכותרת, או בסופו של דבר, בכל מקוס
בטקסט.
פרק 8: בניית היישום והרחבתו 217
תרשים 8.1 מציג כיצד נראה היישוס כשהוא מופעל לראשונה.
[<51]-] זסזסוקא = ]פחזסוח! 050/1ז0ו - אס שד 0
6 1006 80065" אפוצ 08 06] |
₪ ₪ 83| ₪ ור קריק
8 | 6% זחווק ]א | עוסופור] 89!מסב] ה0ז568 | פסה ₪669 | קסופ 7 6ב
5 || 70 [ד הזז 00% 05/3157 !3 סס1// :קוח 45| 8001655 |
.
3 1
9 | 0
ותבס 15 אססם 5וח+ אוסו
ץוח א 50סזסוו 580 בח
:%ספןסזם 8חז זטוסט ה
ווח
טסץ 0015 זבּח//
?וח סבוה הבח אוסון
חפ מ088!0 וטופץ קט הַח89%0
חפוהתםזוטחט
0 80פח ע830ז|בּ גוסץ סם זבח/
?יוסח
8
הו ספלטטוזפוס
זפוד-₪ ? פחסוסבּסוומקא
חפ מס| עפ
ץוח +פחם ג
פזפץב] |בסופעחס .5ע ופוח 1
34 5זחהפחסטחזס
חח 60 8:3005;5 ס5סזסווא
|8סוא +ספןטס
+60 בחבּ דוי
| מז ]שו
5 55 סא 7 | 00 60 ₪806 56 6 7 רת |[06ד. |
וס א | | 6וסם [6)
2 שב | א 86 2 ₪ מ פש 4 פש מ 4 5 5 6 | |וופופמצ
ו | |..וסו- 65 מ 0 - אס חן ] ..ו0 )41010900 - סז חס בל ו
תרשים 8.1: 66 דסוופום.
דרישות הדפסה של 6ט0 מכתיבות רזולוציה של 600א800, ולכן קיצצנו את
|
ו הכפתור "וו 15%!", וקיצרנו את שדה הטקסט לתרשים זה.
,
נזכיר כי מטרת היישוס היא לסייע בידי המחבר במתן תשובות לשאלות הקוראים. אנו
רוציס להיות מסוגליס לחפש אחר סיפוריס על בסיס של מיליס בטקסט או בכותרת,
ואנו רוציס להבטיח שהמשתמש יוכל להעתיק קטעי קוד לוזיכרון, ומאוחר יותר
להדביק אותס למסמכיס אחרים, או הודעות דואר אלקטרוני. כמו כן, נרצה להיות
מסוגליסם להשתמש ביישוס זה בדפדפניםס מיושנים, במקרה שנצטרך להריצ את
היישוס ב-153.
רישום סיפורים
ניתן לגלול לאורך רשימת הנושאים, להאיר נושא על ידי השתהות מעליו עס סמן
העכבר, וללחוצ עליו להצגת הסיפור, כמוצג בתרשים 8.2.
אפשר גסם לראות את רשימת הסיפוריס בטבלת תוכן ענייניס מתקפלת, כמוצג בתרשים
3, על ידי לחיצה על הכפתור 06ד.
מאפיין חדש הוא היכולת לחפש אחר מאמר על פי הכותרת או התוכן שלו, על ידי
מילוי תיבת הטקסט ולחיצה על הכפתור המתאים, כמוצג בתרשיס 8.4.
8 וא למפתחי אתרים באינטרנט
זסזס!קא = !6חז6!ח! +/050 - 800% 6
% ₪ 3
1 יצ ווק [
9 ₪ (₪
עזסופו | 65)זסץב = 568100
* פא | | ב
6 8 ונוט א
שמטעת 9030 126 פמגת קטע50 716 .50101 מננזם סצכן בושו 0 6סוז: .1171/01 ,699611811 ,15 3
סם ב1) 36 .1111611 8 65טגו סז 0ב ,0386 450 6מ1 םג .11111 1126 וו 125ג161 1116 861161 10
זט 1116 מג 0190187 זס? 1מ116ט 1116 0 561 מ5ב1 15 סנב ()ג מג 168 501104 זרפ
7 ב +13 :00ב מו 11860 65 4גו 3! קמוזקמס9 סע 816 66
8 זמכ5570טגוק 6111150 ,386 6[קטפ צגוס 01 8ב1190 4.07 1666קוסס 116 ₪69מוסזס 2.1 ₪מו91ו 1
(ע1מ0 487 פטגו
<% סְמְנעספְתא=פּהַבּגות18 %8> :5
<>
<>
<"6.0 0נגבגוס5 81גו713 1]10203056"=סת6סתס0 "ת0דךהת:תוטס"=מנגזן ג'דן>
<פגמ1/>
<00%>
<21<>/?2/ >32623 ב מגו?<11><>
<1=מ061128881 6=1מ801ע06118 1=ע6בעסע 75% = בס16ח 016ב1>
5 1ב %> :
(["60028860ע . ע062.02680800[605)"8806ע36 = 8ע 866 :114
51505 81 :1%
"1180688עגון מסע2 * 3616065" = 311808 :1
5פמססעסה ם81 | :14
5=)1ט1עע" = 6008מת00ע80 - :15
"=210 ; 017=58; 8 מגו? =836 228085 עסקע 56 ע=ע6שע56; (ע6קע6ט
| ( 2606מ00ע30 ,3413006)ם3.026ע 0811 1%
יפו
100 א 7 7 |
ואש 231 ב
תרשים 8.2: הצגת סיפור.
60 100 5 סטב אוסוצ 08ם 6 |
9( .7 . >
חס | 36658 | קסו5 מז זס-] 0%
ותזר! .00 /15טאוא /1 80 סוס!/ / :סזור [ש בי
ו | --- ]]66ה |אן
8 5 ₪ בו ₪ 4 ₪ מ ₪ ₪ 5 6 | |ייספפ
[. 00( - 465 4051505005/ 09 | ...סוסא - אס שמ ד | 6 ]| .01 08פסוסו - טופס פוחסוה ב |
3 הסוב 1ה56בק ₪
0ַחוה0ז3 58
5 :א
0387 3
+מפסחסס ז0 +ססזס
זם 45 יעְהַ0ו0ח800+ הסוחצ
ו ו
4 ? 6|35505 80/ש .פע 50ב
המץזסזסזס
,30%87ח0 פח0) ,%5ספ[סזם הפוחד
החולובּעו סא
ץוחס 50 ? 1 0%פ[סזס
זוסחזו +ספןסזם פחחד החוטווטם
ע08ז7פ+ח1 |הפו
ההָבּק 450 8[קחחום 4
וד %פגון 15 ו ,סול %פחז חן
0:3007] 001
60 זטוסטה
הזו !וטו אופח חל הַחופט
ב
5 3 סם-צ זו הַחוזְזְהַ000
5 86ף/ חו 15 החולתעיפם
וזח ד פד הַחוז3קוחס6
ב
פס 6
זסזס!קא = !6חז6)ח! ]1 0% 6
9 ₪ (₪
עזסופו | 65)זסץב = ה56810
5 ₪ ₪
יצ ווק 0
6 005[ 865)סטב] | אסוץ 08 ₪ |
ה [ ו
סו | 36658 | קסו5 מזם וס 0%
*< 165 ו 0 |+ וזח 00%ם/051/015 1001 / :כוות! ₪ ב חן
- 038 1
- 0810088 8
5 אססם פוח? אום₪ -
הפוחבּזס
3580 החש *
ץוח א ספסהסוות
שח זטסםג *
:)ספוטו
וסוס
גוסץ 0015 בח -
ספת
שבח אוסה +
?7 תבוח
זטוסץ מ חַחו59% +
חפ !89
+חפוהטזושחט
טסץ 00 זבּחעל -
0 880ח צבּפזובּ
?סח
ב
5 0 זז 055 סא = | ]000 ל 880% | 005 563708 | 6 56870 | [
100 א 7 ]7 |
ו
תרשים 8.3: טבלת תוכן העניינים.
₪5 5 ₪ ב ₪ 4 ₪ מ ₪ :5 6 | |יפפ
[.. 6 - 65 50 5 ...4:00 - 800% 6 ]| .0009011 - ופוסו לד |
פס 8
פרק 8: בניית היישום והרחבתו 219
[<51]-] זסזט!קא = ]חזסוח! 4005011 - 0% סח ד ב
]1008 88|סעב] | אפוע 260 86] |
| > . + . 8 ₪ 8
0 ₪ 3 |98: 8 ₪ 3
ררל שוסטם 86 | תו | | עספה פפהסוםץ ה5680 | שחסה הנשושה | ספ 7 הפעוט) 7 אפ |
* | | ₪80 [* הזז 000% /315אוא/1051סו10// קוה 45| 001695 |
הַח9
0 80פח ע30פזובּ גוסץ 00 זבּח/
?סח
הַחוחס37 8
זם 450 :עְהַ0|0ח800+ הסוחצ
7
ההָבק 450 פ|מחזום 4
5 3 ס זו הַחוזְזְהַעח00
0 6 ח80 56 50% ל3] | סד | 10%
סוס [6
006 17 055 סא = חס 60 880%
]זו 1008 = [ ות
235 (של + |
ל כ |
או ד 1 יור
...0010 - 155 1506130900 ₪9 | ... /50סזסו - 800% חזוש || .0105014 - 81 5 חחסו בל 1
תרשים 8.4: חיפוש.
כאן חיפשנו בתוכנס של כל הסיפורים אחר המללה 'שמו856ע8ניי, והיישוס נתן רשימה
של כל הסיפוריס המכילים את המילה במקוס כלשהו בטקסט.
דפדפנים מיושנים והעתקת קוד
כדי לתמוך בדפדפנים שלא תומכים בגיליונות סגנון מדורגים, הוספנו תיבת סימון:
"055 סא'י. כדי להבין את ההשפעה של תיבת הסימון, הבה נראה כיצד משתמשיס
בגיליונות סגנונות מדורגיס כשהתיבה לא מסומנת.
תרשיס 8.5 מראה קטע מהסיפור "0806 455 6!קחו5 ", המוצג באמצעות גיליונות
סגנון מדורגיס.
בפועל, האזורים המייצגיס קוד מקור מוצג על גבי רקע אפור, וההערות מוצגות על גבי
רקע ירוק. על ידי השימוש בגיליונות סגנון מדורגיס, כפי שניתן לראות בתרשיס 8.6,
המראה את המקור המוצג במסגרת הימנית.
סימון "655 סא" מבטל את ה-655, ומנצל את פונקציונליות התצוגה של דפדפניס
מיושנים, כפי שניתן לראות בתרשים 8.7.
כשאנו מציגים קוד מקור, שוס עיצוב 655 לא מסופק, אך כדי ליישר את הפלט, כך
שיעוצב באופן מסודר יותר, אנו משתמשיסם בטבלאות, ובגופנים כדי לטפל בהצגת
הטקסט.
0 וא למפתחי אתרים באינטרנט
| < | זסזס!קא = 61חז6)ח] !)50סזסווא - 800% 6חד |₪
| מ 1005 55הס/ם" אע אם ₪ |
ב 0
4 זחווק ו עזסופו | 3/0165 568100 חס | 3₪/658 | קסו5 מזם וס 0%
< 165 ו 0 |+ וזה .ססם/5]םאוא /51סוח]]ה סוס!/ / :קן!ות! ₪ בי
<3.605%ע ססם 16[נתק :11
<> 1% 1 038 +
<0/><> ("16 מגוש") 5ע=%><08> :20
<04/><> ("6מפת מגוע") פע=%><אס> :21 2 6318 +
<8 /><> ( "עס 1ס") פע=%><0ס> :22 3 זפ סבתס -
<עס/> :2
מא6מ6טס. 5ע%> :2 +פסחסס ז+0 +ססזס -
2 2 !סח 90 הסוח >
<%()%283.01036> :27 7 זז 450
<2/>; 3 ממ2<6> 2 טפ .05 קם4 -
<200%/> | :30 פמץזסזסזק 4 ? 0|35585
| 0 ,80%5[טזכן 8פזוחד +
.11771 1ג[1+8:0פ 616 11869 9 ופצת תד סא ,030% פחס
ל החוזוב או
מסנפצגוטצי .
קםג ? 1 +ספ[סזס >
סוסא ץוחס
חוב!ק<6 עשופ 6רח 6% , ויד הסוא זבו|ורחבוחט שוב טסץ +1 [ וזד] שד הַחוט!וטם +
5% )0 זום עח₪ 3 טח 6או 0 6חו! חס .שפח חס הַחוסףָ 15 זה חצ +טסחו 80%[סזס
שחו! פוחד .זו 6'וסחטו חבס 6 , |ססף 56 עם 068673660 ₪85 תסוחאו שסםזם+ח1 |בטפול
.56 60 פִחַבְהַח3| הַחקו50 הסותאו זפ/567 606 66|!5 ץ|קרחו5
הּהָבּק 450 8|קחום ב -
5 + ,חפ 8 חן +
5 8705 5חָב ך , חססט"ס5חו ויד חב 15 הָבּל מ .חָ 3 15 1 6חו! חס
חס .5זו3ק חו שהחסס 5הַב% ץ||הסוקץ ד . 6%5>סבפ 6והַחבּ עפ ה6בחטסיחט5
06 0+ פוחל 260% <6 ב!טסאו 6/ . הָב !וד חב 15 615 ,6|קרחה6%8 ואד 6פטן
| 8 סַתוחשקט זופת) 6א!! לט( 376 5+ חש , חַ6- ח6- וד חב עפ |= 00 3 החו0םג -
170 6 הז וטנו משטההוטוטו מטהווום | || ₪
ו סמו ו | 7 | 6[
8 5 ₪ בו ₪ 4 ₪ מ ₪ ₪ 5 6 | ספמ
000( - 165 6005 ה10515 0/9 |.. 00וס:1א - 0% שמ ד | 6 ]| .01 01פסוסו - ומוס פוחסוה בצ |
תרשים 8.5: תצוגה עם גיליונות סגנון מדורגים (655).
243 שי
|< |₪. | זפזס!קא = 61חזפ]ח! !]ס5סזסוא - 800% 6חד | ₪
| סו 005 מפהסוםת אשץ ₪ 6 |
3'| ₪( 8 | ₪ ₪ 68 | 8-8 798 >
[זם) -] | 89% |
חספ א מו 6| ספה ||
<1ח+ח>
<630ת>
<16ע55>
;30110:00607713+-%ה0+) *
ל %ק005600:6-ח1 בה | 630% -
?;60-ו:ו6010+ השסהאחהט-
(?;8:30%ה3001ק;ע8ו%0הף6-60100:11הטס"ףא36ם+ ₪006.
(? :0%ק5126:18-00%+ ;₪460 6007186 :110ה3+-%ה0++ %0068א56.
00010 :ש11ה3+-%ה0++ 8ה₪008611. ,86ה₪00811.
? :05600:0ם-הננָ"ְבּה ;1085:90%פה-6ה11 ;%ק5128:9-%ה0+
(160%:00100פש-%ה0++ 8308%/ה560%10.
(;16:183116שָ55-%ה0++ א]. ,₪8].
;חס 8:ה1חָ"בּה ; ה66ו50המ6010:11-ההטסף530+ %6סה.
?: 30%: 8ה3001ק
]058]0300ה. ,1 6ה05811ה. ,ם 6ה05811ה. ,6ה6611סה.
(;5126:80%-600% ; 3ה30110:06003+-%ה0++
(;280:%+16-ה1הָ"ְבּה+ 86ה06611ה.-
(;010ם :%ה817ש-%ה0+) %6]!63680סה-
חוב
שו ;18:1%3116ש55-%ה60+ טְ"ובּההט5.
6חון ?:05500:0ם-ה1ף"ובּח
<5%016/>
-- |<0680/>
זס.
וח 6 סל פוח? 6260 ב|טסאו 6) . הָבץ וד חב 15 5וחף , 6קרח6%8 פטך
8 5 וט ו 6 ו 6 5 בח , 580-ח5- וחד חב צם |= 00 3 החו00ג -
7 | 0 8800 | | | תוח0ם הח50 | | 06 הממ ן ] |6סד. [אט
10 מ | 7 | ₪
240 4 4 אק 58 (5 ₪ מו 5 [) ₪9 מ [₪ ₪ 5 665 | |ופמ
לפ
ו .₪ 05/50 ₪9 |..065- 800% פחזן6 .4 ופוסו ד |
תרשים 8.6: הצגת קוד מקור.
פרק 8: בניית היישום והרחבתו 221
[<51]-) זזס!קא = 61חז!ח! 05011 הי
קפ 1006 55הסטם" אצ א0ם 5 |
₪ ₪ ₪ | של | ה א תי
די יב ווק ובו עזסופו] | 3/0!65- 568100 6וחסן] | 46/658] | קסופ מס 0%
*< 65ח10 [ 0 [+ הז -00%פ/51//415סח1.סיס1// :קזות! ₪ חן
= סאפמסטסוע. פע %> :2
<%המסט 21 1 3 +
<08016/> 21 2 63187 +
<%()8.01086ם%> 275 3 391 3
<50;>/5ממ2<6> :20
:2 חס + +ססזס -
<צפסם/> 4 : !8+ תסוחש
<חנדת/> | :31 7 זז 450
טפש .פע 00 -
.1111001 )91181814 816 65ב[ 9 81 6מך )סז 4 ? 0135585
,80%5[סזם 8פזחד
מסופזגוסנ. סא ,8זמ3ח0 חס
בחולובאו
סא ג ? 1 זספןסזם
ץוחס
ו חוב!קאם עפחחם פחח 8%! , וואד הפוצ זבו|וחזב?חט פזב גוסץ + [ וא דח] + ב
5 הסוחאו 850601 +ם זום עחוז 3 הח פע ם פחו! חס .פיופח חס הַחוסףָ 15 ה . ו
8 18115 ץ|קוחו5 פחו| פוחד .זו פוסחטו חבס פע .וססז 8 עֶם 80זבּוטחפם ו 8
.8 50 פּהַבּהַח3! הַחוק 50 הסוחעו זפשז50 8 850 פומחום ₪ -
5 ו ,חפ פח+ ח1
5 וו זב 5חָבד , חסוסנ ספתו !דר חב 5 הָב? ₪ .הָבז 3 5 1 פחו| חס ואד 5%
= זסת .פזובם חו פחזסם 5חַב+ ץו|הסומץד .5זפאסבזם פּוהַחבּ עֶם הפהחטסיחטפ [= 601 3 000 -
5 6 055 סא > ]0000 0ף ₪806 005 568708 6 5630 ססד 19%
זו 1008 ₪ [ וה 6חסם ₪
2 ב ₪ 5 *ם בו ש | פש מ ₪ 5 5 6 | |ויפפ
(*%
בב כ |
]..0 - ₪165 5ססחמ16051 פש. 010906 - 800% סח ]| .0% 000500 - חס!מזס פוחסול לד |
תרשים 8.7: ללא 655.
נוסף לתיבת הסימון לביטול השימוש בעיצוב 055, נוספה תיבת הסימון "6006
6 י.ָ הדבר מוסיף את היכולת להעתיק קוד לתצוגת הלוח (0ַזפּססכו!6) ישירות
מהתצוגה. סימון *8!0665 6006!י גורס לתצוגה לכלול כפתור בכל בלוק קוד, כפי שניתן
לראות בתרשים 8.8.
זסזס!קא = הזס)ח! /050ז0ו4 - =ססם שד 0
| שפם 1006 פפהסוב" אע אצת ₪ |
₪ ₪ ₪ | | זר +
וי ה 1 סופ | 65!סעב = 508100 6וחסו | 46/0658 | קסופ וס 79 8806
* | | ₪06 [ד הוח .0/8/085/500%ת81סס1// :קוח 57 88655 |
6 48 16פוף .
1 זזב3ת6 +
2 03187 +
3 0387 -
00 + +ססזוס -
!8+ תפחש
7 זז 50ב
מע ,5001 16 פמגת 506 1116 .9001 מנמטמנהזם סעכ בושו 3 06מ .1/1 117 ,6996118117 ,15 פב
סם בונש) 0386 .1111/11 8 068גו סז 8 ,0306 30 6ב מג .1171/11 116 וו 1691215 16 6162 0+
.561ו0ץ 1116 ג 8190187 זס] 01161 1146 0+ 1מ56 6ב 15 מטובו (וג םג 168 5004 86761
7 םג 1 זיג 1 :07 מו 966גו 65 3גו 3] ק בוו 90 סש 816 66ב
8 ז1מ5300 סגו 111166ת6 ,886 6[קחטפ זגוס זס? ₪ םג91ו1 457 1616קנסט 1116 68 סע 3.1 8מו91 1
(ע1מכ) 487 פמגוץ .פע 80 -
הקץזסזסזק 4 ? 0|35585
6 ,05פ[סזם הפחד
סא ,0030187 פחס
<% סְמְבמספמִ0/=מְהַבגומ18 %8> הַחוזובּ או
<>
<סגחן> ג ? 1 +ספןסזם
<"6.0 30610 81גו713 710203050"=סת6סת00 "תסדךגתמומט"=מנגון גדן> ץוחס
<פהד/> בה
<> החד בחוט!וטם
+טסחזוע +80[סזס
<11<>/9/ 1.5686 בגוע <11><פ> ב
<1=[מ061128861 6=1מ2801ע06115 1=מ662מסע 75% = בס16ח 16ע182> 8ב ספה ש|קוחום 4-
5 םגה %> .
("60028360ע. ע680600(600)"8806ע0.ע6קע36 = בע 366 5 ,חפ 8ח% ח1
3115 81 ודו זפ
זה שרשת +ומום מתש< % שהה ותה" למסה ואת
1 2 60 3 החוסטה -
5 0 055 סא הז 00001 ס% 80% 0 ה0סז 6 606 | סד 8
סו מש | | שחסם [ 6
20 [000 0 צ א 88 5 לם מו פש [4 פש מ 1 3 5 65 | | חופמ
בי | |.. 100 - 165 0006מ015091 ₪5 ספסוסוו/ - אססם הד ]| 7 סוס - סומספחסו ב |
תרשים 8.8: עם 810666 6006.
2 א למפתחי אתרים באינטרנט
לחיצה על לחצן "6006 ץ600'י בתדפיס הקוד מעתיקה את הקוד לויכרון המחשב
(ה-0ז808כן!6 של פאוססחו/) ללא מספרי השורות וללא סימון |אדה. ואת כדי להעתיק
קוד נקי לזיכרון. כך, המשתמש יוכל, לנוחיותו, למשל, להדביק את הקוד בעורך קוד
מקור, כמודגס בתרשים 8.9.
[<דן . ₪
ופ סח 100 טלפ 6%סזם ופצ 806 06 ₪9
ד
- ₪ 0 |₪ ₪ | בי
<% 8ש1ת806=0850ו1820 %8>
<.זד1ן>
<פגמזז>
5 713081 6020626="11₪203026 "תסךגתמאמ6"=פוגא גדט>
<פגמז/>
>8001<
, ₪ ₪|88| 0 -
טוח 5006 1116 פמגת 506 1116 88 ₪ זזש ס:
סמ מומו) 886 .111111 8 68טגו סנכ 6מ8 ,086 57 6
זט 116 ג 615018 0? 01161 16 0+
סט 6 + 13733 :5 מומן
8 ק[םכ5/5)0מגוק 6111166 ,86 16קזפ זגוס 0+ ק בגו5ן
6
<1152625>/111<>/5 מגות<2<>1>
484 [60=51[1מם801ע06113 1=ת6העסם 75% = מ146ח 18016>
>% 4180 3
("60028365ם. 83000") 685600[605מ02. עסטעפב = פע 868
188 301506
"8מ65מ115עוץ מסע1 * 5618606" = 8415088
ססשתמ1 3000 310
> נ ע6עמ56ע=ת6טע56; (עפעע562 2ם50)=מפט1תכ2" = 6606מםת00עסב
]'
<"6.0 501410 81גו713 10505050!["=סת6סג הפחז 8 הי 2תן [
טדדד דדדהההווובהיז
זטסחזו/ +80[סזס
צ08זםזח1 |בטפו/י
8 450 8|קחום 4 -
5 זו ,חפ %08 חן +
6
7
/><11/ 526286 11 מגוץ <1><ם> 8
<4=1מ061128841 1=[מ2801ק06115 1=ע66מסע 75% = בס6בח 16ע180> :1%
5 םגה %> :1
("680600[605)"88068.260028360ע0.ע06ע86 = 8ע 866 1ב
12
- : 51505 81 ואד זט
=
+ 2 00 ב החו00 -
5 066 > 055 סא הז ]0000 0ף ₪306 005 568708 6 5630 סשסך ו
זו 1008 ר-| [ 3 6חסם ₪
+ ₪ (₪ ל בו ₪ 4 פש מ ₪ ב 5: 65 | |פמצ
פט | ... - 11105 1405001!800005 מ || ז6וח! /90סזסו1 - 800% פחד | 45 | .4009001 - 1810 פוחסו: ב |
תרשים 8.9: הדבקת קוד המקור.
0 250 0
נ-.
בחינת היישום בפירוט
ראינו חלק ניכר מהפונקציונליות של יישוס זה בפרקיס קודמיס. חיבור של הכל יחד
ליישוס מבוסס מסגרות, הוספת החיפוש, הפונקציונליות של ביטול השימוש ב-655,
ובלוקי הקוד הס כולס חדשים. בהמשך הפרק נבחן זאת.
את היישוס ניתן להריץ על ידי לחיצה על "חסטפסו!קקה אססם סד 60" ב-ספ.!סשח0ס6 או
על ידי מעבר ישיר ל-חזח.אססט. הקוב חשה.אססט, המנהל את היישוס, הוא קוב
מסגרות פשוט למדי, כמוצג בתדפיס 8.1.
תדפיס 8.1
< |ודה> :0
<סגםח> :1
<"0ו5010 ז6/6|006 050%ז6ו]"=ח6 חס "אס דה השא 6"=םו הא הדםו!> :2
<"56%=|50-8859-1ז88ח60 ;|החח /+א06"=+ח 60 "סק ז-%חח0"= /וסם-ק דד ה דםו> :3
<ם 1ד11/>א500 שחד<ם ודנד> :4
<סשה/> :5
6: >1?800656] 0/5="*,32"<
7: = >17876560 60015="30%,*"<
פרק 8: בניית היישום והרחבתו 223
"5.850! |/'576="500 "ח|"=6רחהּח סוחה!> :0
"חז]"=6וחהּח 6וחהּ]> :9
10: | >/)18700566<
"הח.5ו0 7 ח00א576="800 "והסאספ"=6וחהח 6וחב"> :11
<0566ו787/> :12
< |וזדת/> :13
כפי שניתן לראות, קבוצת המסגרות החיצונית מכילה בתוכה קבוצת מסגרות פנימית,
אשר בעצמה מכילה שתי מסגרות. הראשונה היא ח! (עבור הַחַהַח-א6), המאותחלת
ל-115%.850/זסז5. המסגרת השנייה היא חז (עבור 6ַחהַּח-90%וז). בקבוצת המסגרות
החיצונית נמצאת גס המסגרת התחתונה הקרויה (באופןו הולס) וחסאספ, המאותחלת
ל-0ח.07-015ח800%60. למסגרת הימנית, חז, אין בתחילה אף דף, ולכן היא ריקה.
ביישוס וה ישנס מספר דבריס שצריך לבחון, אך מרכו הבקרה הוא ₪0/5.850ח800660,
ולכן נתחיל שם, כמוצג בתדפיס 8.2.
תדפיס 8.2
< |אדח> :
<סגשה>
<"608756%=150-8859-1 ;[הה0ח/+60"=%ח6חס6 "סכ דהה ס6"= /תוסם-ק דד ג דםו!>
<50/|6>
:הוח 5126:80%-%ח0) ; 8ה08ז0/:ץ|ורחם)-%ח70 *
<50/6/>
<סגשח/>
<00ו50>
<5070/>
<צ00ם>
"|| זפ ]"=6ט|פּע "חסחטט"=6כ/ זטסחו> :
< "6.850 !50 =61 זה סו 068|.ח רו 00 ח]. רהז הסה כ"=>סו|סחס=-
"06 ך"=6ט|ע "חסטט"=6כץ זטסחו> :11
<"00.350 ד אס 5 =61 זה סו 068|. חח 00 ח]. רהז חש הכ"=>סו|סחס=-
<526=20 "600 [ה0="50876ו זטסחו> :12
"סחוד ה6ז6="568ט|פע "הסחטט"=6כ/ זטסחו> :13
= 0 068]. רו 00 | 65 תפז +ה6והכק"=>סוסחס. - :14
<"6ט|8/.ז6 568760 + '=06 7ה50.350?56876 !500 =-
"605 ה0ז6="568ט|פע "הסחטט"=06/ זטסחו> :15
=256876000000005? 155.85 !50 = זז הס סרח 00 ]865 +ה6זהק"=>סו|סחס - :16
<"6./8|06 [0ה56870 + '-
"|סח60 0ף 6="86%ט|/ "חסאטט"=06/ זטסחו> :17
< "!סז חס = זח. הס 068!.%ח6הק"=>סו[סחס =
5 ס55"<60>)חסו]"=10 "א00א66ח6="6כע זטסחו> :18
68 10="0006010665"<0006 "א00א66ח6="6קט זטסחו> :19
<צ800/> :20
< |אדה/> :21
ו סי 5 ו ב
=
]=(
4 וא למפתחי אתרים באינטרנט
השורות הראשונות הן |אזח סטנדרטי. בשורה 10 אנו יוצריס כפתור עבור "!| 115%"
(המוצג כ-%/1 בתרשים 8.1 כדי לחסוך במקום), והאירוע 616%חס שלו נקבע להצגת
850 וץז0ס5 במסגרת השמאלית.
בשורה 11 אנו רואיס כפתור המסומן ב-106, המציג את 06.8950 01ח5 במסגרת
השמאלית. באמצעות שני הכפתוריס האלו, ניתן לעבור הלוך ותזור בין רשימת
נושאיס פשוטה ובין טבלת תוכן ענייניס מוזחת. את 06.850 ש0ח5 כבר ראינו, אבל
50.57 הוא חדש.
את 115%.850/ז5%0 נבחן בעוד רגע, אך נשיס לב כי בשורה 12 ישנו שדה קלט. בשורה 13
אנו יוצריס כפתור שנקרא "06וד ח56870", אשר קורא ל-01/8ט5 גם כן, אך הפעס
מעביר את המחרוזת =5687601106 משורשרת עס הערך של הטקסט שנכתב בשדה
הטקסט.
כמו כן, בשורה 15 ישנו כפתור הקרוי 568760600%606, הוהה גס כן לשורה 14, אך
הפעס הוא מעביר את המחרוזת =568760600160065 עס שרשור התוכן של שדה הטקסט.
התוצאה היא ש-118ץז0ש5 יכול להיקרא באחת משלוש דרכים: לבד, עם =116ח50876,
או עס =568760600%60%5.
כק35ּ.פו |וס+5
לשורות האחרונות של תדפיס 8.2 נחזור מאוחר יותר בפרק ה, אך הבה נבחן תחילה
כיצד ז15ץזסז5 עובד, כמוצג בתדפיס 8.3.
תדפיס 8.3
<-- "06.850ט|סחו"= 6 06ט|סח1< --!> |
< |אד>
<סגםה> :
<"608756%=150-8859-1 ;[הה0ח/+66"=%ח6ח 60 "סכ דהה ס6"= /תסם-ק דד ג דםו]>
<50/|6>
526:10007-00%? ;0808ז6/: ץ!ורחם)-+ח0-+ *
;חח :זספזס+ / 500.
<50/6/>
<סגשח/>
<50100>
(חס)תפווחפוה הסטסחטת :
+
5 חס 245565 156סוח 6ז 35 ההטסז0א6ה0 6 6פחההס ]/
("" : "אוס||6ץ" ? חס) = זס|ס6חהטסז0א50/6.086.זה6ת576|6.ה6 6 :13
6 זונס :14
17
()/ 0ספאוסח5 הסטסחט :16
4 :17
כ מ ל ב ל
= +
5 = גת
פרק 8: בניית היישום והרחבתו 225
0 500 06 6/הח 6צו - ץז5%0 56!66060 6 ץב|קפוס 0+ 6חבז1 הז 6חז 6פט8ס ]/
0 65| 50| 6 85 -
;6/5 = 57610 זהצ
65 חס 28560 , עְה|ק5ו0 01 "סח" שר |סיחס6 סל פהסטקס חס 806 ]//
וסח.5|סהס6א500 חו-
;055.6060660 חס וה65.000חה.+ח6זהק = 655חס הצ
.65.0 .הס הכ = 0006010665 זה
+ 5700 + "=350?500/10. 550" = ז6זח. הס בססו. הז 65רחבי.+חס הק
;("" : "ץ=820060|0665" ? 00060|00%5) + ("" : "ץ=655חסאא8" ? 655חסא)=-
;56| הזוס
:[
<5070/> :
<צ800> :
%> :
65חסטחז3 ה56870 6 חס 03560 68056 םשר 501 8 זט חס
חצ ו
5 !ןה סש %/06180'
"" = 6וסח/ו
6 לפ ה50870'
חסרש "" <> ("6ו 7ה5636" )065 זו
"%" ₪ (""" ,"" ,("6 5676 )6065 )306 8 "%" 66!| 06 סזסחעו" = 6זסחשצ
226
60
5 שוח הוחסוצ סל עס ה50870'
חס "" <> ("5חהח00ה956876 )60065 זו
8 "6" 66!] )6% 801655 ך 6זסח//" = 6זסח/ע
"%" ₪ (""" ,"ה 568760 )065 )6306 -
] חס
6 666 680 + 0! 6 86 .65 זו ז5ו! חב 560765 56166060 66 06%'
0 ץ סלפ %06-
5 והחס 6 ,6/6 [הסו566 ,500/10 561606" 60 אם. ה ה סכ = 5 56%
("10/ 500 0 זססזס " 8 6זסחשו 8 "=-
וסחט 0
<% :
"<% ("5)"5007/10]= %>"=6ו "/ 6!355="500 ח508> <עו0> | :
"<%6 ("5)"500/10ז 8 ":" 8 ("|6ש0 1ה5)"56600]= %>"=₪06=-
"(18|56) טוח "= ססר חס "(6 הסור" = ססר חס
<טו0/> <חה508/> <%6 ("06וד")5ז= %> <"()/ 60פעשסת66="5סו!סחס=-
: >%
]אא למפתחי אתרים באינטרנט
1 5.6
55: !ססק
56: %<
<צ800/> :57
< |ואד/> :58
הקובצ מחולק לשלושה חלקים: תסריט בצד הלקוח, תסריט בצד השרת, ו - |ואזו. השנייס
האחרוניס חופפיס מעט, שכן התסריט בצד הלקוח וה- !וא מעורבים בקבצי ₪5.
אנו מתחילים בשורות 4-7 עס קטע עיצוב 655 קצר בו אנו קובעים את סגנון ברירת
המחדל (על ידי שימוש ב- *) ואת הסגנון עבור סיפורים (הקובע את סמן העכבר לסמן
של יד כשהעכבר מעל הטקסט, ז6ש60פטסח).
שורות 9-28 מציגות את חלק התסריט שבצד הלקוח, המורכב משתי שיטות : אחִפָּווחִפָוח
ו-ץזסס5/וסח5. הן והות ביסודם כפי שראינו בפרק הקודס.
(ח9ווחפו משמשת לתיחוס של כותרת הסיפור בעת ז860/6וסוח ; ץזסספאוסח5 משמשת
לבחירת הסיפור כשהכותרת נלחצת. כל אחת מהן נקבעת כהליך לטיפול באירוע
בשורות 51-52. נחזור לשורות אלו בעוד ומן קצר.
ץז5%0/סח5 מתחילה בשורה 19 בקביעת ה-12 של הרכיב שעורר את ההליך: כלומר,
הכותרת שנבחרה. בשורה 22 אנו יכוליס לראות האס תיבת הסימון 655חסא סומנה,
ובשורה 23 אנו יכוליס לראות את תיבת הסימון 60068|0665.
העבודה נעשית בשורה 25. אנו קובעיס את המסגרת הימנית להצגת הדף
וסח5, תוך העברה לדף את הפרמטר פ1ץזסו5 שנקבע ל-6ו שהישגנו בשורה
9, מלווה באחד או יותר משני דגלים אפשרייס. אס 655חסא מסומנת, או לפרמטר
המחרוזת משורשר "ץ=655חסא8", ואס 60068|0068 מסומנת, אז משורשר
"ץ=80060|06%".
- האופרטור המשולש (מיוצג על ידי סימן שאלה - ?) הוא מושג ב-זקְח18856,
88 |- ++6. הוא מורכב משלושה ביטויים: המבחן, הערך המוחזר במקרה
5 של פטש, וערך המוחזר במקרה של 58|₪. במקרה המוצג לפנינו, למשל, אנו
בודקים את הערך של 655חסא; אם הוא 6ט₪ אנו מחזירים את הערך
"ץ=655חסא"; אם הוא 18156 אנו מחזירים את המחרוזת הריקה.
הערה |
כשדף 450 נקרא עם מחרוזת כמו "ץ=655ח581 = 450?5007/1. ץזס5%/שסח5"
אוסף אובייקטי בקשות ה-50ג, פחוחפעזפט), יכיל שתי יישויות: פזץזסו5
ו-655חסא. הערך של הקודם יהיה 5, והערך של השני יהיה ץ.
בשורה 30 אנו מתחיליסם את התסריט בצד השרת אשר בונה הצהרת 501 להפעלה
בשרת, בהתאס לערך של המשתנים 5687601106 ו-65ח6זח56876060 באובייקט בקשת
ה-452. ערכיס אלו נקבעיס כש-0/11%ס5 נקראת על ידי השה.5!סחהס00אססס כמוצג
בשורה 14 בתדפיס 8.2:
=6 .0 006.06 ח]. 365 +ח6זהכק"=>סו|סחס - :14
<"6./8|06 [ה56876 + '=06 [ה150.850256876 1 560 =
פרק 8: בניית היישום והרחבתו 227
הצהרת ה-501 עצמה נקראת בשורה 48, ומחזירה רשומות עס שלושה שדות כל אחת:
סזץזס50, |166ח56600, ו-6שוד. בשורות 49-55 אנו עובריס באיטרציה על הרשומות
האלו, ויוצריסם <צו0> עבור כל רשומה, שיחזיק את הכותרות של סיפור. אהו המקוס
בו אנו קובעיס את הליכי הטיפול באירועיס.
יישום !5 עבור דפדפנים מיושנים
הבה נבצע חזרה קצרה: ה8ח.000% ו-קפ.|סשחס6אססט עובדיס עס 06זַאוסח5 או
% ליצירת רשימה של כותרות במסגרת הימנית.
כשהמשתמש לוח על סיפור מסוים, ץסז5ווסח5 נקראת, והמצב של שתי תיבות
הסימון מועבר כפרמטר. בפרק הקודם, כשבחתנו את ץזטפווסח5, התעלמנו
מהפרמטריס האלו, והנחנו שהס ריקים (למעשה, זה מייצג מצב בו שתי תיבות הסימון
אינו מסומנות).
הבה נבחן מה קורה כאשר תיבת הסימון 655חסא כן מסומנת, וזהו המקרה בו אנו
רוציס שהסיפור יוצג, ללא שימוש בגיליונות סגנונות מדורגים. מכיון ש-צעְז50שוסח5
היא קצרה, להלן עותק מלא שלה בתדפיס 8.4.
תדפיס 8.4
<-- "6!006.850חו"= 1|6 1061006 --!> :0
%> :1
,36 6 הס 500 5116 וס 11 66 6016065 - ספ3./ סספצשוסתפ' :2
5 6 01501375 0חה ,50/650666 .51 חב בוש [וי דר ססחו ₪ פדוסטהסס' :3
41
5065066036 , ולאס ,והחא ,50/10 וחום | :5
4
("10/ ")60065 = 10ץ0ספ | :7
:8
6 סח הס ]וא סו 6% :9
(10 500 8 " = 500/10 6ז חש 5007165 הס [החא 561666" )60 אם. חח 00כ = 5605 :10
סע ("[וחא")5ז = |וחא :11
86 12
131
א סו פוע ו דה סש ה חסזפההט' :14
("הז510 הז ד פא הס )076860066 507/06 = 51אס 56% :15
|וחא = ]!י]אסטסח1. ופאס :16
"|5א. || 5607/21" = 06ח3\ז50/65060 :17
"|פא. 55כ)חס ]וי 27 500" = 36 50/6566 הסחש "" <> ("655חסא" 665 זו :18
(6רח50/!65066118 ,7זו60060)והקסווטם.150 = 6!ן= ופא ופאס. :19
והז0ו5ההזד. ופאס :20
:21
וד 6 ץה!ספוס' :22
)סוס טכ ]פאס 66ואו.6פחהסקפסז :23
<% :24
8 א למפתחי אתרים באינטרנט
נוכיר כי אנו משיגים את הסיפור ממסד הנתוניס בשורות 7-12, ואחר כך, בשורות
6, אנו קוראיס אותו ממסד הנתוניס לתוך מסמך וספ אא.
בשורה 17 אנו קובעיס את גיליון הסגנונות ל-|פא. 1 21/ז0ס5 כפי שראינו קודס לכן.
בשורה 18 אנו מסמניס את משתנה הבקשה 655חסא.
"|פא. 55כ)חס 1 50/27" = 6חה 50650660 הסחש "" <> ("655חס" סח זו :18
בפעס האחרונה הנחנו שהוא היה ריק, לכן לא היתה לו כל השפעה. הפעם נניח שתיבת
הסימון מסומנת, ולמשתנה הזה יש עכשיו את הערך "ץ"; במקרה הזה המשתנה
86 5%/!65066 ישונה ל-|5א.655חסו !וא דו2ץזסט5, הקורא לגיליון סגנונות 51א שונה,
כפי שניתן לראות בתדפיס 8.5.
תדפיס 8.5
"1.0"=חסופזסע |וחא?> :0
6 סח - זספאוסזכ |6ע6|-חהצוס ו 3 זסז לס ,500165 וא פחהוץ3|ספו0 זסז 66%ח50/65 --!> :1
<-- 50/65 01=-
2
"|פא-/ ד זס. 3א. אא /: כ ח"=!5א:5חווחא | :3
"40|והסח- א ד/8זס/3/עעטאו// :קט ח"=5הווחא | :4
<""=5ח-|090] | :5
4
<-- )6% 06 )כ 0 156[ - 0065ח 6% זז 6|ג +/0ה/06 --!> :7
<"()א66"= 306 306|קוח5|:0א> | :8
)%5|:/8|06-0> 1
<36|קוח51::5א/> | :10
11
חופ6כ סחה 0806 11 ד 6חש 01 5006076 6 +טס טס - 06סח סססז סו --!> :12
<-- הסן9ז]וו60 %06=-
<"]"=ח00וח 8%6|קוחס::|5א> | :13
<|וושת> :14
< / 365!כןוח6+-ץ!ככ5!:3<> 1
<|וחץה/> :16
<36|קוחט::|5א/> | :17
11
<-- 1005 ז6ש0 60| חב 107 56006 --!> | :19
<"*"= 1806 306|ק5|:00א> | :20
<"60"=ז0ס!60 %ח10> 01> :21
!!6וההח-06סח:]5א>|! :22
8065|מוח6)-ץ!קק5|:8א> :22
<שו0/><%ח0+/> :22
<06ה|קוח1:06פא/> | :25
:20
--|> :27
0חו|68 5'סחצו חס 06060 אססם זס / 0ל5 06 %חטורח - %ה6ח6!6 |פע6!| קס+ החד :201
5 <7ץ200> 15106 זה 60 6 5הזצ זפור :20
פרק 8: בניית היישום והרחבתו 229
5 0 5זססרחוח זוסט3 סזחו /הררחט5 506 הטוצו 65חפוחו1 הסחך
5 010700 +0-
<--
<"00% | /50"= 306 6ה!רח6ת:|5א>
<ץ000>
<"5126="2 "1306="0007013 +ח0ס)]>
3065|קרח6-ץ|כק5|:8א>
<ו><ק>
ץז 5 ח56600
5 הז ההכ <|51:6/8א/ > רו ח6!. ("עוס// )56600065. 15חז< |8ע5|:6א> < /ום>
הז ח6!. ("6006// )15.5666%0065ח%<|5|:6/8א> < /ום>
6 0006 <|5|:6/8> =-
5 <51:6/81א/ > ח6!. "סח )15.56|6070065חז< |5|:6/8א> זם>
20
<חס+/><1<>]0/>
<ץ000/>
<306!רח51:06א/>
<-- |6/6| הסוז566 006 3% |506008 פהורץח3 00 0ם 660 ז'חסס 6/ --|>
<"ח560000"= 306 6זה!רח5|:06א>
3065|קוח6-ץ!כקה:|5א>
<36|קרחס%:|5א/>
--!>
3016 61855 6 הובלחוהרח 6 66 הקה ההק )א6ל 8516 זטוס
56 6 ץ||68 15 הסוח/=-
6וחפח 50/!6 זס/\ |החוףחס שו 5ב
>--
<"עו0"= 306 366|רח5|:06א>
<>
3065|קוח6-ץ!כקה:|5א>
<ס/>
<806!רח51:06א/>
<"['-'=626!355]עו0 | ['4 606|355='1]עו"= ה6בּוח 6+ !ןוה 6+:|5א>
<ק>
<ו]/ >< / 65+ב3ּ!0וח66-ץ|כְכְ3ּ:|5א>
<ט/>
<>6ז3!כןוח51:%0א/ >
<-- "006 חו6ט" .6.0 ,066005 חַהוחפווטטוק שה 0656 - סק 6זסחטו סש --!>
<"['ק'=₪6|355 ]עו "= 6הח 306|רת5|:%6א>
<0!306רח51:06א/>
>!--
]אא למפתחי אתרים באינטרנט
7
21:
1
1
21:
51:
1
2
1
1
:210
2111
:212
211
2121
1
21
:21
211
:21
תי
11
1
1
1
:לפ
1
:1
1
=
תי
:1
:1
1
:4
1
7
1
1
+
:0
.5 30 010665 6006 10 265 %ה6חה0ס 260ו|506018 זוס סזהּ 6פסחדך
005 100% הששס 165 6605ח אוסח ה586
--<
<"6חן!6006"= 306 06ה!רח6ת:|5א>
<טו0/> < /365|מרח6-ץ!כקהּ:|5א> ו0>
<06ה!0רח51:06א/>
<"סחו|0ח"= 306 306|קרח5|:06א>
<ק/> < /3665|רח6ם-/ץ!קס51:3א> <>
<06ה!רח51:06א/>
<"6006"= 306 366|רח5|:06א>
<ק/> <%ח0?/ > < /3665|ק וח6-ץ!קק5|:8<> < "עס זס ה טס13606="6 %ח0+> <ק>
<06ה|0רח51:06א/>
3 חו זכ סז זחפ/ע סש 0668056 ,|50603 6וחו! 8 15 +הסוחסוס ס6סח סחד --!>
<-- "000" 585 %08%6=-
<"006ח" = ה3%6 וו 36 |כןוח6+:!5<>
"5"= 0חו300כ!!66 "06="1זס0 3016+> <ז000+0>
<"526="2 "הח366="/0]0)3) 00%+> <1))> <ז?> < "9096" = 1)/ע-
<ט/>%0%6< >
< / 365!כןוח6+-ץ!ככ5!:3א>
<ז6ח06 / > <3216?/ > <ול/ > <0/ > <+חס+/ >
<>סז3!כןוח51:%0א/ >
<-- 20!060 876 5660075 זס1 65וד --!>
<"06"= 306 306|קרח5|:06א>
<צו0/> <%ח0+/> <> < /3%05|קות66-ץ|סכ51:8א> <> <"526="3 זחס1> ו>
<06ה!0רח51:06א/>
ססחו 656 הזו - ]א 6+ חן 6006 0%06ח06 %0 1560 סז 65ח6וח6!6 שחווססחנ --!>
<-- 50805 |50668 חאוס זוסח?-
<"ט"= 136 3%6!כן1וח6+:|5<>
<"עש6 סו 306="60) %ח0+> < ההק5>
<ההבּ50/ ><100%/ > < / 665ב1כוח6+-ץ!כקב3ּ:!5א>
<366]|כןוח5]:)0א/ >
<-- (חוץ 5806 66 0ף הסח קבוח לפ( - 005ל 6או|- וא דר ה|ווחפצ 6|סחפח --!>
<"זם | כגפ| טטפ| || פ"=ח6הח 306|קרח%5|::6>
<%ח6ח5|:6|6א>
3065|קוח6-ץ|כקה:|5א>
<+ח6רח51:6|6א/ >
<06ה|ח51:06א/>
פרק 8: בניית היישום והרחבתו
1:
2
1
1
5:
1
1:
1
1
7
11:
2
1
1
51:
1
1
1
ת:
:0
:11
:2
1
:4
:51
1
:17|
1
11
10:
11:
11
141
11
151
14
11:
11+
+
1
21
.5 ]0 50060065 60חו 60כקרח 06% 505+ סחה 5תטזססה50 --!>
<-- 508605 4 ווא 305ל 66הוחואסזקקה 6/)=-
<"ח50806"= ח306רח 36| וח5|:0א>
,";160 %.46068%)"8 <|5|:6/8א> <ח8ק5>
<ח508/> <|5|:6/8א/ > (("ח6|")ס וטו .וח =
<6ה|כךח51:06א/>
<"80;"=ח8300רח 3%6|קוח0ז:|5א>
<>ח508/> <|51:6/8א/> (4 ,";160 %.0063)"8 <|5|:6/8א> <ח508>
<06ה|כח51:06א/>
6 סא - !אד חו ץ3!קפו זס 065 ח6 סח 5זהח6 |8ו5060 5|806ח08 --!>
0 8/6 00% 6עע 50 600065 60זססוהטח-
<-- החסר) 0606 ץסוסו|כקאס
<"זח6"= 306 306|קרח0ס:|5א>
<0056ח%5]:6>
<חסח;ו:|5א/>;8.48212<"[ 285 וח6' = 06 ₪]."=%05 חסחצו:|5א>
<חסה/:|5א/>; 8226+.8<"[שס!|טס' = 006 05%=".])0 החסח/ו:|5א>
<חסחאצו:|5א/>;8.%8230<"[ 5ו5כן]|6' = 006 %05%=".]6 חסחצו:|פא>
הח566 %'חה0065 28195 - 650806 זס? 5ק5סח 2 56 %פגון ||'ס/ש --!>
<-- 00606060 35 אזסצו %0=-
<חסח;ו:|5א/>;160 %:160;8 8%< "[ 06ה50ח6' = 06 %05=".]₪0 חסחצו:|5א>
<חסחאצו:|5א/> ;146 %.8<"[ 05 והוח5' = 006 105%=".]6 חסחצו:|פא>
<חסחצו:|5א/> ; 147 %,8< "[ סוס דוה וח5' = 26ץ%05=".]60 חסחצו:|5א>
<חסחצו:|5א/>; 148 %.8< "| סכ הוח5' = 26 %05=".])₪0 חסחצו:|5א>
]> :ה ח6< "העשסהאהט"=6!355 ח508> <56!צ6ר5|:00א>
<56ש51:0100א/ > < ח508/> < "0/6" =50|60=-
<0056ח%51:6/>
<06ה|כרח51:06א/>
<51:50700א>
]מ ]>
+ 600165 ח )0 515008ח60 ח501 8 פחזונססז //
(ח ,₪6068%06 הסטסחו
0
" = ] זה
(0 < --ח) ס!וח/ע
₪ =+ ז
;] הזז
,
<ןן
<5|:50705א/>
<5|:50/!650660א/>
2 וא למפתחי אתרים באינטרנט
1
1
14+
11
11
+
11:
11
14
12+
1
11
[אלו
11
11
11
171
11
+
17+
1
11
11
11
11
11
11
11
14
1
1
11
141
11
11:
11
11:
11
+
גיליון הסגנונות הובא כאן במלואו, למרות שרק מעט ממנו שונה מ- | דחסזץ5007
שהובא בפרק הקודם. זה יספק הקשר לשינויים המודגשים בתדפיס.
השינוי הראשון והברור ביותר הוא שהתגית המוצגת בשורות 14 ו-16 מכילה
עכשיו רק את הערכים המוחזריס מהקריאה ל-600|3065?-ץוסְק. בגירסה הקודמת
מצאנו קבוצה נרחבת של רכיבי סגנון.
באופן לא מפתיע, אנו חייבים לקבוע את הגופן באופן מפורש, כמו לדוגמה בשורה 34.
אחר כך נגלה שבעוד שהיינו מסוגליס להשתמש ברכיבי <שו9> עם תכונת המחלקה
בגירסה הקודמת, כאן נשתמש ברכיבי <ס>, ובעיצוב מפורש, כמו השימוש ברכיב <]>
המוצג בשורה 36. מאחר ואין לנו את היכולת לשנות את העיצוב בהתבסס על המחלקה
של הרכיב, אנו חייביס לחפש אחר רכיבים ספציפיים בתוך מסמך המקור ולקבוע את
העיצוב בהתאם. לכן, בשורות 60-64 אנו קובעיס את הרכיבים ה ! ו-א= לתצוגה בהטיה.
בשורות 87-92 אנו ממקמיס את ההערות בתוך קופסה על ידי יצירת טבלה עס גבולות.
קוד 6חו|חו מצוין על ידי שינוי הגופן ל-ש6א זפוזטס6 כפי שניתן לראות בשורות
2.
בקצרה, בעוד שעלינו להיות מעט מתוחכמים בנוגע לדרך שינוי ה- |ואז בדפדפניס
מיושניס, אין כאן הפתעות גדולות. ניתן לדמיין בקלות יצירה של גיליונות סגנון 51א
דומיס למעבר לכל מפרט של הפלט.
יישום 0665ו6006₪
גיליון ה-51א ליישוס 60068|0665 הוא מעט יותר מורכב. כדי להתחיל לכתוב גיליון
סגנונות כזה, אנו חייבים לשקול מה אנחנו רוצים בדף ה- ₪411 שהוא מפיק.
המטרה שלנו היא ליצור כפתור שיעתיק את הקוד לזיכרון. הבה נניח שהמפרט דורש
5. ניסיון לגרוס להתאמה ל-154 ול-6056806 יהיה, אס לא בלתי אפשרי, לפחות לא
נעים. ניתן כמובן, לכתוב אובייקט לקוח מותאס אישית, אבל זה הרבה יותר קל לתת
ל-155 לעשות את העבודה.
יצירת 6006510665 ב- ואוד
נזכיר מהפרקיס הקודמים שכשאנו מציגים קוד ב- |ואזה, אנו יוצריס רכיב <0₪>
חיצוני עס התכונה 6|855 שערכה הוא 6006, ורכיב <טו6> פנימי לכל שורת קוד, כמוצג
בקטע להלן מה- ₪411 המתקבל:
<"6חו|6!355="6006 /|0> <"6|855="6006 עו|6>
פרק 8: בניית היישום והרחבתו 233
לטיפול בכפתור, נוסיף לרכיב <צו0> החיצוני כפתור שערכו (ולכן הטקסט שלו) יהיה
06 שץ6000. נשייך הליך לטיפול במאורעות עבור לחיצה על הכפתור שיקרא לפונקציית
התסריט בצד הלקוח 6006ץ000, ונעביר מזהה ייחודי לבלוק הקוד. ה-1א₪1 המתקבל
נראה כך:
<"לח0וז"=ח0ו3 %> <> <"100% "= הסוש %90!6> <"0355="6006 צוו6>
"חסטס"=6!355 "0006 ץקס6="6טופע "חסטס"=6ק/ס 6טמחו> =-
<8016?/> <"/ > > < /"('60006)'00060106%84542208ץקס6>="6ו[6חס=-
נשיס לב כי הכפתור מוקס בתוך טבלה כך שנוכל לגרוס לו לזוז ימינה. לשיטה
6 מועבר מזהה ייחודי: המילה 60068!06% מלווה במספר מזהה ייחודי. בעוד
רגע נראה מהיכן מגיע המזהה הזה.
כשהכפתור נלחץ, השיטה 6006006 תיקרא, כמוצג בתדפיס 8.6.
תדפיס 8.6
<|והשה> :0
>680< :1
<50/6> 2
:וס סס-חוס הוח 100% :526-%ח0? ;8ו0ז60:ץ|ורחם-%ח70+ * :3
:0+ העשצסתאחט. 21
:8000 ; 16| זסוס0-6הטס 403660 6006. 51
? 526:1006-%ח0? ;סא 60 :ץוורח8)-+חסו+ 06006א00. 6
:0-52 ;עס זט 60 :צוור8ז-ח0ז+ 6חוו6006. ,60606 7
? ;0:ה חס סם-חוס הוח ;6:90%ח0וסח-6חו|=
0-7 560680 :0
0ומזו:50/6-)%חסי+ אם. ,חן. :9
00:37 ;460 0:חוס הוח ;ה66זססתטו|:זסוס6- הטוס 40360 סססח. :10
;הז /: ץו 40-89 ז006ה6רוס6סה. ,1 סחווס%סח. ,₪ סחווסססח. ,שחווסלסח. 11
?:520-ח0)=-
?;6:2670-חוסזהרח+ 6הווסלסח. 2
7 ו /ש-%ח10+ ז06800לסח. 11
0;7: הסטסט-חוחזהוח ;0%ק5126:8-%חס1 ;6ו|בזו:6ו/50-)חהס!+ הרוח 5. :14
?5126:800-%ח0? ;|פוזה, :ץוורחב)-)חסי+ הסאטס. :151
>/56< :16
--!> <50706> :17
(0ו)6000/0006 הסטסחטז 11
4 1%
6% )0 01066 66ההוקסוקקבּ סו 0ח ]// :20
;("[" + 0 + "=0 ]600601068 )56605606 6006083 = 0 זהצ :21
5 350 15 - +א6? 606 ||3 6הו80ה6306ה00 ץכ 0006 6 0780 ]/ :22
פחססטף וד 6ת%=-
0% = 5 זה :21
6 זל 3 670866 ח68 6 50 6ח6 6 חב חו 6% סו ה5%35 // :22
;5 = 60 דז6חחו.+חסרתס|םח :251
4 וא למפתחי אתרים באינטרנט
5 זה סטקווס 6 חס הזר 50 06% 60 ]0 אוסחא 1 עבצו ץוחס סח //
6 זא 8 חס חח 00 8 6066 0ם-
( )6806 ] 676806.+ח6רת6|םט = ₪ זפצ
; (" סרח ס666א6.יס
1
--<>/5005<
>/080<
20:
22:
20
20
%
21:
תדפיס 8.6 הוא הקטע הראשי של קובצ ה- ואזה. הוא כולל את אזור הסגנונות, כמו
גם את התסריט שבצד הלקוח, במקרה וה השיטה 600/6006.
6 מסתמכת על קיומו של אי (0ח15!8) ואא במסמך ה- וואד₪. כפי שצויו בפרק
הראשון, אי !אא הוא המצאה של 6-050%ו1א, הנתמכת על ידי 155, כדי לשב אזור של
]אא בקובף ואזה. אי אא מוגדר על ידי תגית ה- |אדה, <ווחא>. אנו רואיס ואת
מאוחר יותר בקובצ ה- וואזּ, כמוצג בתדפיס 8.7. כדי להבין כיצד וה עובד נצטרך
לבחון את תדפיס 8.6 ותדפיס 8.7 ביחד.
תדפיס 8.7
<"/הוחות0!355="5 /[0>
ץ הרוח 5 ח0ו5660
5פחוףָהזהק 34זם>
68 6006 2זם>
65 1זם>
<שו0/>
<60060808> <"28%8 60006ח0="6ו |החא>
<"84542208א0="00060106ו 60060106%>
80% 05006 /=00806ח3 | 80%
0% | דה;סוא
ו
0% 50000 |הטפו/ 050%סו]"=+ח06ח60 "0 דההםא=6"=םוזגא ה דםוא;שוא
;וא
6 וא
;180% ;580 ח8ווסג ,80% 1 ;86 ;260% ;₪6
0% = 068000 1 = 0ח06|!5030/ 1 = זס0זסם 75% = הססוצש סוסב ד;₪6
5 וחוס %;8₪|0
("66010560ז. 40000" )07/68%600[66. 507/07 = 5 56%
5050 וו
"!סכ וס * 561665" = + וס50|5
5 וחוס
;67 5001+=זסעוזכ" = 66%הה0ס576
"=ס/ק; 05;12=58ק=800856 56/6 ץוח = 5/0 -
( 507000066 ,50|5006)ח5.06ז ||68
פרק 8: בניית היישום והרחבתו
0
₪ +
₪5 = גת
22:
205
08 )סח 6!וח/ע :20
ו :2
;80% /;0"(%680%;80 טטס")5ז= ;806080686 :20
הח טטס")5ז= ;86 ;8,0;508,0% :20
80% ;8 680%(" ")= 6 ;86 (8416;008.0% :2
ו 11
]66% /סוח.8|6;%5 1
יי 1
34: 66
35 1%
;050 ח; רה 80%;8ק;8|6 :36
8% ססם ;וא :38
0% דרוא :39
>/00060!06%< :40
<"84549536א0="00060!06 60060106%> :21
פטס")פז= %;8,16;008.0%;8.6 :212
>/60060|06%< :43
<|חחא/> < 600608%8/> 211
<]"זה6רח6!ם "= 0 "חה06וח"=6כ/ס 6טסחו> :45
<ץ000/> :46
<|ווטח/> :47
בשורה 6 בתדפיס 8.7, ניתן לראות את אי ה- ]אא מוגדר באמצעות הרכיב |וחא:
<60060303> <"6000608%8ח0="6ו |וחא> 1
83 ההוא ה-6ו או השס המזהה של אי ה-|וואא. בתוך ה-41 אנו יכוליס
להתייחס לאי ה- |ואא באמצעות ה-6!, 600060813ח. בין התגית |וחא הפותחת בשורה 6,
ובין התגית |וחא הסוגרת בשורה 44, אנו בתוך אי של |אא, וכל הרכיביס חייביס להיות
רכיבי |ואא, ולא שואדו.
רכיב ה- ]אא הראשון שאנו רואיס הוא גס כן בשורה 6; זהו רכיב ה- |!א <60060818>.
הרכיב 60060818 משמש לתיחוס של אזור הקוד השמור שלנו, והוא מספק את הרכיב
הבודד ברמה העליונה הנדרש על ידי |אא, בדיוק כמו 00%פ ו-ץזסו5 בפרקיס הקודמיס.
בתוך הרכיב 60060888 יהיו מוכלים אחד או יותר רכיבי 600601066 כל רכיב
0% תותחס בלוק מסויס של קוד. כל 60060|06% מזוהה על ידי 6 ייחודי, כך שאנו
יכולים להתייחס אליו בנפרד. בתוך בלוק הקוד מצוי הקוד ללא מספרי שורות וללא
תגיות |ואדו. תוכן ה-60060106 הוא שיועתק לזיכרון המחשב.
אנו נניח לעת עתה לשאלה איך יצרנו את אי ה-|%א עם הרכיבים 60060888
ו-60060!06% המוכלים בו; נחזור לכך כשנסתכל על גיליון ה-51א. כעת, נצא מנקודת
ההנחה שאי ה-1אא קיים. בחזרה לתדפיס 8.6 והיישוס של 600/0006, בשורה 21 אנו
רואיס שאנו יכוליס לקרוא ל-0166006ח56!66%51 על אי ה- וואא.
6 ויא למפתחי אתרים באינטרנט
נזכיר ש- 0060006080 הוא רכיב מסוג אא, שהוא בעצמו רכיב וואדוז, ולכן
0% יכול להיקרא בתוך תסריט וואזווס.
868 !50 אינה שיטה ב-ואזהּ; זוהי שיטה ב-ואא. כיצד זה ייתכן
שאנו קוראים לשיטה ב-ואא על רכיב |אז₪? מסתבר שמאפיין ברירת
המחדל של רכיב ה-ואא הוא מסמך תחסחטסססכ !וא. מאפיין זה מחזיר
הפנייה למסמך ה-ואספ וויא הבסיסי.
כך, | הקריאה 600060868.50!600500|6%006ו | זהה בדיוק לקריאה
6 56!60. 6 206 | א. 08%8 560006.
כך שאנו לא קוראים ל-6 06ַחו56!6605 על האי, אלא על >חסוחטססכ וווא,
שהוא אובייקט ווא.
בעודנו בררניים, אנו יכולים לקרוא ישירות 7ל-66006088₪ח0, מכיון ש-וואדחס
מניחה שאובייקט ברירת המחדל הוא וו3.)חסוחטסס0. כך, ההצהרה התמימה
0.6 היא למעשה קיצור ל-
6 6.5616 ט6סכ | א. 28%8 60006ח*. || +ה6ותטססס.
אנו מעביריס הצהרת 01א (18080806 ץזסט0 1א) ל-4!6%006חו56!660:5, המחפשת אחר
הרכיב >60060|06 הראשון מבין הצאצאיס (לא רק הבניס הישירים) של
+חסוהט6סק !וזא, עס התכונה 6ו שנקבעה ל-16 שהעברנו כפרמטר של 6006ץ600. בקיצור,
היא מוצאת את ה-א60069!06 עס ה-6ו המתאיס.
בשורה 23 אנו מחלציס את הטקסט מה-600601066 המתאים. נשים לב כי בהערה
בשורה 22 הקריאה למאפיין 6% מפרידה גס את ציטוט ה- וואזה, כך למשל, 810
מוחזר כ- > בדיוק כמו שהיינו רוציס.
שורות 25-28 הן ספציפיות ל-155 והכרחיות להעתקת הטקסט לתצוגת הלוח. בשורה
5 אנו קובעים את הרכיב החבול זחסוח6|פש למחרוזת על ידי שימוש במאפיין
ה- |אדחופ, 6% דופחחו. בשורה 27 אנו קוראיס ל-608₪8706 6768061 על רכיב וה,
ומחזיריס תחוס טקסט עליו נקרא ל-0ח8ו6060א6, אשר מפעילה את הפקודה /600
ומעתיקה את הטקסט לזיכרון.
יצירת ה- !אדו על ידי טרנספורמציית .51
עכשיו כשאנו יודעיס כיצד ה-1ד הסופי צריך להיראות, קל יותר ליצור את גיליון
ה-%51א שלנו. שוב, אנו מתתילים עס |6א. |21ץ07ז5 ומשנים אותו ליצירת
[5א.5א60068|06 | ד2ץזס56, כמוצג בתדפיס 8.8.
תדפיס 8.8
"1.0"=חסופזטע |וחא?> :0
הסופ יז חס בח 3 666 0 60 הסרה 500165 ]יזא פחהוץ3|ספו0 זסז 50/65066% --!> :1
<-- 15800 ]1 ח8 85 0!06%5 6006 01=-
2
"|פא- ₪ ד זס. 3א. אא /: כקח"=!5א:5חווחא | :3
פרק 8: בניית היישום והרחבתו 237
"40|החח- 5 ךס 3 ואוו /: כ ת"=פ5הווחא
<""=5ח-65016]
<-- )6% %06 )00 055[ - 0065 אל 107 6 0679086 --|>
<"(א66"= 306 306|קרח5|:06א>
>%5|:/8|06-0)/<
<06ה!רח51:06א/>
חו6 0חה 6הָהכ !ו ד 6 0 5066 6 לכוס - 6ססח זססז 06 --|>
<-- הסן9ז]ו 60 %06=-
<"/"= 806 66ה!רח5|:06א>
<וחטח>
>0680<
>50/|6<
7 6: סא סס-חו זה 0%ק526:10-%חס1 ;8ו0זס6: עץוווחוב'-%חה0ס1 *
:60 הששטסהאחט.
30:37 ; טח 0ו!:זסוס6- 0 הטסז08600+ 6006.
? ;526:1006-%ח0? ;סא סה 60 :ץוור3-+חס)+ 06006א00.
:0 ;צוס סוס :ץורח8-ח0++0 6חו6006. ,6006
? ;0:ה חס סם-חוזהרח ;6:90%ח0וסח-6חו|=
000:00|07ו6א/-ה0ז) 68067 חס 500.
<-- ה00קה6 6זגוס ,6800 8ח50ו! --!> 60ו0ו:6ו/50-%ח0?+ אח. ,חו.
00:37 ;460 0:חוס הוח ;ה66זססתטו!:זסוס6- הטוס 40360 סססח.
; 0808 07/: ץ|ורחה'-00%י+ 68007רוס6סח. ,1 סחו|ס6סח. ,₪ שחווס6סח. ,6חווס6סח.
7-ו
?;6:2670!-חוסזהרח+ 6הווסלסח.
7 ו /ש-%חס]+ 06800לסח.
0;7: הסאסט-חוחזוח ;0%ק526:8-%חס1 ;6ו|בזו:50/!6-%חהס!+ הרוח 5.
?5126:800-%ח0? ;|פוה :ץוורחב)-)חסי+ הסאטס.
<50/6/>
]ה דה6]!><+חה6וח וה סס:|5א<> <+קוו50>
(60276006)10 הסוס6הט+
+
6% 01 0!06% 6זבּ1וקסיוכקקהּ 66 הו ] /
6 9" = ₪ זב
;("['" + 16 + "=₪16 ]א060!06ס00] /")-
0 5+ - +6%+ 606 !31 הְַחוזְבּחה60063+6 ץק 6006 6+ 6%בּולא ] /
טסט 11 דו] 6+ 6501/65 =-
= 5 בע
ג 6%%+ 3 60306 63 ס/ 50 ,+הסוח6!6 חב חו %א6+ 6+ ה5%35 ] /
;5 = 6% דוסחחו.+הסווס!םו>
חס 0חוהז6וה50 06% 0+ +0 עוסחא 1 צְבּעצ ץ!חס סח ] /
הז 6% 3 חס הבוח וה 60 3 666 60 15 'והּסטקןו!6 6+
;( )06ה13א0 031061ז6.+חה0וה6]=ז) = ול ובע
8 א למפתחי אתרים באינטרנט
;("ץ0 בוח 6000 .זל 21
11 7
<1%ז50 / > <+חסוהוה0ס:51א/ ><ן[ :44
<680ח/> :45
3065|קוח6-ץ|כקה:|5א> 211
<|חטח/> :47
<36|קוחםסס:|5א/> | :48
2
<-- 905 0/6 66| ץחה זס? 56006 --!> | :50
<"*"= 806 306|וח5!:06א> | :51
<"ה/טסחאח"=6!355 /|0> 52
!!6וחהח-06סח:]5א>|! 1
065ה|כוח6)-ץ!כק5|:8א> =
<צו0/> :לפ
<06ה|קח5|:%6א/> | :56
1
>!-- :58
680 5'סחצו חס 06260 אססם זס /0ל5 06 %חטורח - %ה6ח6!6 |פע6| קס+ סחדך 9%
5 <7ץ200> 15106 זה 60 6 5הז זפו3 7
5 0 סט וחנוח זוסס3ּ סזחו /והוהרהט5 6וח50 וטוצו פעשסו!ס1 הסחדך 1
5 0/0700 ]0 -
00 8 500765 8% 1588005 < |!]<> 01 56% 8 15 6ססו 85%! סוד 1
0 10665 6006 ץחה 0%-
0 הטוס 6 60 6006 60אההוסזחגו +0 פַהוץקסס צוסווםּ 1
<-- :64
<"א00ס| /500"= 306 306|קו5|:00א> | :65
<ץ >200 :66
3065|קוח6-ץ|כקה:|5א> :7
<"/זהוחו(6!355="5 /|0> 1
ץז 5 ח56600 +
5 הזה <|3ע51:6א/ > רס ח6!. ("עו//" )5.56|660065וחז<|5|:6/8א> < /וסם> :0
ח6]. ("6006//" )5.56!660%0065וחז< |5|:6/8א> < /זם> 1
-= >/<5|:6/8|< 6006 6
5 <]51:6/8א/ > ה ח6!. ("6סח//" )15.56|66%0065ח%< |5|:6/8א> < /ום> 1
<צו0/> 1
זס) 6006 6+ 5הו%3ח60 +73+ 0ח5!3 .11 חהבּ 0703%6 --!> 1
<-- +16 006 15ח+ הו 06 %0 5הסכקב3ּה +ב3ה+ 106% 00066 ה6ה63-
<60000318> < "0318 1="%600006ו |והא> 1
<"006/ / "=56166% 0367-ז51:10<> 1
<א600601!00> 1
+ ו 6טף וח 3 <600062106%> 6360 סעוש --!> 1
6 וס |600660ו6)6ו 06 הבּס-
<-- 60061100 6!טו5וע-
פרק 8: בניית היישום והרחבתו 239
0068100%)< "11" = סובה ססטטווהּ:[5א<>
<6)טטוזז3ּ:]5א / > <[בש5]:0א / > (15ח+)0 61טףוחט-
וח 0 +חהבּ/עש סע ,60001106 636 זוס) --!>
)ועט בּזזא6 01 0%| בּ סעבּח סצו טכ 6+ 6ה+-
<-- 50110% 50016 ₪56 50 ,528066=-
<"*"=56!60% 3605!כוח66-ץ1כק51:3א>
<"6חו]00006" = ה3%6ורו 3%6|כןוח6+:!5<>
<1הע5]:6א / > (15ח)ההּכקאם <[51:0/3<>
200
<>סז3ּ!כןו51:%0א/ >
<3065!כןוח6>- עְוכןכְ51:3 >
<א600062106/ >
<0ח036-ז0ס):51/ >
<|וחזא/ > <6001603%3 / >
+ 60 63 סע ה6וח/ע הס +ה6וח6!ס חב 660 סע חב --!>
<-- 0זבּסטכן!6 6+ %0 602 63 סע 50 ,06ַחהה%3+א0+ ב
"+חהסוח6!םו?"=1)! "ה006וחה"=6כע %+טקחו>
<ץ000/ >
<>6ז3!כןוח51:%0א/ >
--!>
666 |ו'6/ .0355 חאוס זוסח חשואו 15כ ססחו קפוח 5%( 5חסוז566
6 סע 6856חו 366 |6/6! 606
א חס 08560 0ח ה זס? 00 60 +חב/ע
<--
<"566000"=ח306רח 36| וח5|:60א>
<"|6="|6/6ח3ח 51:800710006א<> <"0|355="560000 צוו6>
<5|:301006א/ > < /"|56|60="60|6/6 ]%5|:/8]06-0> =-
<טו0/> < /365|כוח6-ץ|קקה:|פא>
<06ה|כרח51:06א/>
--!>
,3070 6355 6 הובלחוהרח 6/ .הס רחשו הסבזבזהק זא6ל 8516 וטס
56 6 ץ||68 15 הסוחצ=-
6וחפח 50/16 זס/\ |החוטזס שו 5ב
<--
<"טו0"=ח800רח 36| וח0ם:|5א>
<|0>
<"306="6|855ח 5|:8010066א>
<5|:30006א/> "56|606="600|355 +%5|:/8]06-0> =-
3065|קרח6-ץ|כקה:|5א>
<שו0/>
<06ה|כרח51:06א/>
<-- "סח חו060" .6.0 ,5ח6600זוס הוחפו|טטכ 6זה 0656 - סק 6זסחט! שאו --!>
]אא למפתחי אתרים באינטרנט
1
+
1
:21
1
:1
:5
1
1
1
ת:
10:
1:
1
31
41:
15:
1
|:
1
7
:10
14
11
141
וו
151
+
11.
11+
+
11+
1
11+
1341
11
<"['ק'=₪6!855 ]עוס"= 816 306|קרח%5|::6>
<06ה|כח51:06א/>
--!>
.5 30 0!06%5 6006 10 265 הס חהסס 260ו|50608 טס סז 56סחדך
5 60 6050 רסוו פע ססחו החסר 86ח8ח6 15% 6/
-->
<"סחו| 0 | 6חו|6006"= 316 306|קרת5|:06א>
<5|:3006א/ > < /6רחההח-006ח:51<> < "6="6!855וחבּח מסטס5|:3א> <עוס>
<טו0/> < /065ה|מוח6-ץ!קקה:|פא> =
<06ה|כרח51:06א/>
63 ס/ש 50 ,||6/ש 5 6006 +0 6356 !520613 3 6א הוח עשוסחה סש --!>
<-- ['ובּס0קן!6 6+ 0+ 6006 60ח'וסוהּחט 6 ץקקסס 60 אחו! 6ח% הו וטק -
<"606"= 66הוה 366|כן1וח6+:|5<>
<"0![355="606 עו]6>
<-- הסאטט 6 ץ)5ט[ 0% --!>
<"%ח0וז"=ח0ו!3ּ %1+> <זל?> <"100965"= ה)וע 6|פב+>
"60006 6="6027ט!בּע "הססטפ"=6כץ +טקחו>
<"ח60ט0 =0!355=-
+56 ( וו דוו ) וטס |ו63 סז +חבּש סש ,60א6!6 הסח --!>
<-- 0!06% 6006 ס6זהּווכןסזככב3ּ 06 01 06 56 ה6ו/ט סהוטסי -
026006)'60068|06%=< "א6%ו!6הס" = 6וחבּה סלטטווו3ּ:|5<>
(' (15ח+)61טףוחט< |הע5!:6<> -
<56וו10ו05]:30/ > =-
<%טקחו/ >
<%30|6/ ><ו+/ ><%1/ >
< / 13+65וחה6+-ץ!כןכ51:3<>
<צו/>
<>366]כןוח5]:)0א/ >
3 חו זטוק סז +ח8ש סש 0668056 ,|50603 6וו| 8 15 +הסוחסוס סססח 6חד --!>
<-- "000]" 585 %08%6=-
<"6ססח"= 18300 36| וח0ס:|5א>
<"6!355="0000 /611>
<עו/ <])0%6> ז6800הו66סח"=6|355 /01>
65ה|כוח6-ץ|קק5|:8א>
<שו0/>
<06ה|כח51:06א/>
<-- 61855 01 חצוס זוסר) ססחו קהוח 50| 5660005 זס] 65וד --!>
<"06ו"=ח306רח 3%6|קוח0ז:|5א>
<"0|355="56600076800 /|0>
3065|כוח6-ץ|כק5|:8א>
פרק 8: בניית היישום והרחבתו
11
+
:11
11
שו
+12
1
11
[אלו
11
11:
1201
11
121
12+
14
1
11
14+
14
1:
11+
11+
1:
1
1%
1
11+
141
11
151
11
11:
14+
+
11
1
21
<שו0/>
<06ה|כוח51:06א/>
6 חזו - 6% 6 חן 6006 0%06ח06 0 1560 סז 6ח6ח6!6 6חוהססחנ --!>
<-- 50875 |8ו5060 חצוס וטו ס6חו=-
<"ט"=ח306רח 306|קוח0ם:|5א>
<ח508/> < /365|ק 6 -ץ!ככה:|5א> <"6006א6!355="06 ח8ק5>
<06ה|כרח51:06א/>
<-- החו 586 66 0ם הסח קבוח לפ( - 205ל 6או!- וא דר ה|ווחפצ 6|סחפח --!>
<"זם | | טטפ| || "= 806 306|קרח%5|::6>
<%ח6ח5|:6|6א>
3065|קח6-ץ|כק5|:8א>
<%ח6רח5|:6|6א/>
<06ה|כח51:06א/>
.5 01 56060065 סח 60קברח 06% 905+ 0ח3 5ח5080670 --!>
<-- 58005 4 וחואו 905ל 66הוחואסזקקה 6/)-
<"ח508067"= ח306רח 36| וח5|:0א>
(("ח6|")סטט 15.06 ,";160 %.8" )006 <|5|:6/8א> <ח508>
<ח508/> <|5|:6/8> =
<06ה|ח51:06א/>
<"80?"=ח800רח 3%6|קוח0ם:|5א>
<ח508/> <|51:6/8א/> (4 ,"160 %.0003)"8 <|5|:6/8א> <ח508>
<06ה|ח51:06א/>
6 סא - | ד חו ץ3|קפוס זס 065 ח6 ססחו 5זהח6 |50608 5|806ח03 --!>
0 806 ז'ח00 6עט 50 60065 60זססוהטח=-
<-- הסח 0606 שץטוסו!כקאס
<"זח6"= 1306 306|קוח0ס:|5א>
<0056ח%5]:6>
<חסח;ו:|5א/>;8.48212<"[ 285 וח6' = 06 ₪]."=%05 חסחצו:|5א>
<חסה/ע:|5א/>; 8226+.8<"[שס!|טס' = 056=".])0006 הסח/ש:|5א>
<חסחאצו:|5א/>;8.%8230<"[ 5ו5כן]|6' = 105%=".]600/06 חסחצ:|פא>
הח566 %'ח0065 28195 - 650806 זס) 5ק5סח 2 56 %פגון ||'ס/ש --|>
<-- 00606060 35 אזסצו %0=-
<חסח;ו:|5א/>;160 %:160;8 %.8< "[ 650806 = 06 ₪]."=%05 חסחצו:|5א>
<חסחאו:|5א/> ;146 %.8<"[ 05 החפ = 06 1056=".]6 חסחצו:|פא>
<חסחצו:|5א/>; 147 8%< "[ סו דה וח5' = 26 %05=".])₪0 חסחצו:|5א>
<חסחצו:|5א/>; 148 %.8< "| סכ הוח5' = 06 6₪0]. "=%05 הסחצו:|5א>
:<< "השוסחא הט"=6!355 ה508> <6פ!וצוסר0ס:|5א>
<51:0001/156א/ > < הפ > < /"56!606="600/6 )6-0ט]%51:/8> -
<0056ח%51:6/>
2 וא למפתחי אתרים באינטרנט
11
11
11
151:
11
11
11+
1
+
1
11
11
+
11
11
11
1:
1:
1
1
11
11
11
11
11+
11:
11
+
17+
1
11
11
11
151
11
11
11
+
<06ה|כח51:06א/>
<5|1:50700א>
]ה )!>
+ 60165 ח +0 8ח5150ח60 ח50 8 פחזססז //
(ח ₪6068%66 הסססחטז
/
;"" = ז זה
(0 < --ח) סווח/ש
₪ =+ ז
;7 הזוס
חצ 63 || סהטההוחחווס , (ץ8ו₪150 .5/) פַהוץק60 סז 6חו|6006 3 +החזסז //
5חז 50866 06 חו פחוסטס זטפ-
6% חו ||3 טס ,365|קותסס-ץ|קב -וחורח 3 6א!ו! 15 פוחל //
(6וחה)הבּכקאם הססס6הט1
+
;"" = 5 זב
;5-ה = ה6ז0!וה6 זוב
₪ זב
6 600016 506 01 הסיו1!0ה6 !1ב ט'זח+ א|בּ/ט סצ ] /
(()1006+אסח. חה6ז0!וח6 = 6)6!וח/ע
+
(16ח0006113ח.6)ח6ו/ש5
+
:"הט זס 500" 6356
0 0656 6230 0+ +חהּעצ סצצ ] /
5 )+ סכ וחטח 6זבּווקסזכקהּ 6+
;(("הס!" )6.0616 ," " )₪203 =+ 5
;בסו
:"+" 6856
00 16% 05%[ 00065 +אסט ] /
ו 63 |!בּ ]0 וו 06% 0+ +חבּ/עעט סע זט -
פחו!ובּז+ חב
5טסווזהּע 6+ ה6וה/ע ,66בכ5טוחצצ ] /
4 סעהּח 5הסוהּו0ס51ה3ּו>-
;(0063]06ח.6)וחוזד = +5
;סוט
:ו
פרק 8: בניית היישום והרחבתו
+
1
2
141
11
11
11+
11.
11+
+
200:
20:
20:
200:
20:
205:
200:
20:
200
200
220
221:
222:
22:
22:
225:
220:
22:
22:
220
220:
22:
2221:
220:
22:
225:
220:
22:
23
השוע 065 זסהזס צְחבּ פָהּו / / :220
סח חו 06 +חווח -
;"!" + 6וח00003ח.6 + "!" = +5 220
ד :200
20: 7
זסוחטח 6הוז! 0הו630! סעסוחסז / / :222
2031 5 = 5.7001366) / * +:/, ""(;
;5 הטסיו 221
2251 7
2201
ועו פחווובּזז חב 0חו630! צחהבּ סעסוחסז ] / :22
(5)וחוו ד הסוס6הט+ 201
20 ָ
2020 5 = 5./61366) / > 5* /, ""(;
;("" ,/%*5 / )5.7601366 ח'וטשסיו :22
22: 7
<ן[ :243
<51:5071%א/ > :244
2251
246: >/א5|:50/!650660<
הקטעים המודגשים הס תחומים של גיליון הסגנונות, השוניס ממה שראינו עד כה.
מטרת כל אחד מהשינוייסם הללו היא לתמוך בטיפול ב-60060106% ב-ודו].
התוספת החשובה הראשונה היא בשורות 31-44 שם אנו מספקים את הפונקציה
6. הו הקוד שוה עתה בחנו. אנו מכניסיס אותו לקוב ה- |אז₪ בדיוק כמו
שעשינו עס כל התסריטים שבצד הלקוח: על ידי תחימתו בתגיות ה- ואדה, <5606>,
המגנות עליו בעורת הערות מדפדפנים מיושנים, ותחימה בקטע 6041 להגנה מפני מנתח
תחביר ה-51א. הסברנו ואת בפירוט בפרקיס הקודמים, ולכן לא נרחיב על כך שוב.
אי ה- ]אא המחזיק את ה-60060808 הממשי מוצג בשורות 74-92. אנו מכניסיס רכיב
|וחא בשורה 75, ומקודדיס את התכונה 6ו שלו ל-"6600608%8וש", כמצופה מתסריט
בצד הלקות.
בשורה 76 אנו מתחיליס לולאת ח686-זס+ של טרנספורמציית 51א. לולאה זו תעבור
באיטרציות על הרכיבים התואמיס: במקרה זה כל הרכיבים מטיפוס 6006 בתחוס
הנוכתי. כזכור, הלוכסן הכפול מוצא את כל הצאצאים, לא רק את הבניס הישירים.
התחום המיידי של חיפוש זה הוא הרכיב הנוכחי, שבשורה 65 ניתן לראות כי זהו
הרכיב ץזסו5 או 500% - כלומר, כל המסמך.
בשורה 77 אנו מגדיריסם רכיב 60060!06% שיחזיק כל קטע 6006 שימצא. בשורה 79 אנו
משייכים את התכונה 6 לרכיב 6006006 הזה. הערך של התכונה הזו הוא המחרוזת
606% מלווה בתוצאת הקריאה לפונקציית ה-51א, ס1ז6טףוחט. ל-ס1סטףוחט אנו
מעביריס את הרכיב הנוכחי (הרכיב 6006 המתאים).
4 וא למפתחי אתרים באינטרנט
סזפטטוח היא פונקציה קטנה וחזקה. היא מחזירה ערך אשר מובטח שהוא ייחודי לכל
רכיב שנותח תחבירית במסמך. ההיבט החיוני של הפונקציה הזו הוא בכך שהיא
מבטיחה להחזיר את אותו מזהה ייחודי בכל פעס שניתן לה רכיב מסוים. כך, שאס
נקרא שוב ל-ס61טףוחט עס אותו הרכיב, נקבל את אותו הערך בכל פעס מחדש. בהמשך
הקוב וה יהיה חשוב מאוד.
עדיין בתוך ה-,60069|06 שאנו יוצריס, בשורה 81 אנו קוראיס ל-0|8065וח6-ץוסס8.
הפעס אנו מוסיפים הצהרת 56!66, אך החיפוש הוא אחר * המוצאת את כל הרכיבים
(אך לא את כל הצמתים).
אנו מבצעיס התאמה לרכיבי 6חו ]6006 פעמיים: פעם אחת כדי לאחסן את הקוד בתוך
אי וא ללא עיצוב מספרי קוד, ובפעס השנייה לעיצוב עבור התצוגה.
בשורה 82 אנו מבצעים התאמה לכל רכיב מטיפוס 6ח(60061 ומעביריס אותו לשיטה
0פקא, הממקמת את התוצאה ברכיב. העבודה של 0ח08אם היא להסיר רוותחים
מיותרים, עוקבים ונגררים, תוך שימור הרווחים הפנימיים. את דרך היישום ניתן
לראות בשורות 203-235.
| התאמה זו ל-6ח|6000 בשורה 82 היא בתוך התחום של הרכיב
הצ 5 -ץומְקָ בשורה 81, אשר בעצמו נמצא בתחום של הלולאה
ב ח686-זס!. ההתאמה השנייה ל-6ח!/6006 היא בשורה 122, בתוך הרמה
העליונה או בתחום ברירת המחדל של גליון הסגנונות.
בשורה 207 אנו מאתחלים את המחרוות 5 מאפס, ובשורה 208 אנו מאחזרים את כל
ה-601!6%0065 מהרכיב שהועבר. אנו מצפים שה-601!680065 היחידים יהיו צמתי
טקסט (הטקסט הפנימי של הרכיב) או צמתי רווחים שיצרנו. אנו רוציס לשמר את
הרווחיס אך לסלק את כל הרווחים הלבנים,המובילים והנגרריס האחרים.
כשהשיטה סוַהחס0סח נקראת על רכיב כלשהו, היא מחזירה את שס התגית של הרכיב
הזה, וכשהיא היא נקראת על צומת טקסט היא מחזירה את המחרוזת 0א6זא.
בשורה 216, כשמתקבלת התאמה לרכיב חטז50866, אנו מוסיפים את מספר הרווחיס
הנדרש למחרוזת. כשמתקבלת התאמה ל-6א6א, אנו מוסיפים את הטקסט למחרוזת
שלנו, לאחר שאנו מעביריס אותו דרך השיטה חוש שלנו, המוצגת בשורות 238-243.
וחוש משתמשת בשיטה 60|806ז, שהיא שיטה של אובייקט המחרוזת של :18/8560
להחלפת תו במחרוזת בתו אחר. היא מחליפה רווחים מובילים ונגרריס במחרוות
ריקה (יייי) ובכך מסירה את הרווחיס.
פרק 8: בניית היישום והרחבתו 245
[ 6 מקבלת שני פרמטרים, המחרוזת המקורית ומחרוזת ההחלפה.
0 ב-8צ38 וב-זמַח956ש38 ביטויים רגולריים נתחמים על ידי תו לוכסן קדמי (0
2 במקום מרכאות כפולות.
התו * מציין את תחילת השורה. התו פ מציין רווח, וה- * מציינת "אפס או
יותר", כך ניתן לקרוא את /5*5*/ כ"מצא את כל תווי הרווחים מתחילת
השורה עד שנתקלים בתו שאינו תו רווח" והפרמטר השני "" גורם להחליף
את הרווחים האלו במחרוזת ריקה.
96 השנייה, הנקראת בשורה 241, מבצעת את אותו הדבר, אלא
שהפעם היא עובדת בסוף השורה (%) במקום בתחילתה.
בשורות 227-229 נשים לב כי אנו מוסיפים כרגיל, מלכודת לרכיבי ₪0065א0!וח6 בלתי
צפוייס (שאינס חט50366 או א06).
טקסט מורחב זה מוחזר בשורה 83 ומוכנס למסמך ספ הפלט. בשורה 84 אנו סוגריס
את ההתאמה, בשורה 85 אנו סוגריס את 83065!קח6-ץמְכְהּ, ובשורה 86 את ה-60060106%.
אנו חוזריס על כך עבור כל אחד מהרכיבים שנמצאו ולבסוף, בשורה 87, אנו סוגריס את
הלולאה ח686-זס+. בשורה 88 התגית 60060818 נסגרת, כמו גם אי ה- |ואא עצמו.
לכן אנו מסוגלים עכשיו להכניס את ה-6006088 לתוך ה- !וא יחד עם התסריט
לשינויו. החתיכה היחידה החסרה היא, יצירת הכפתור בכל קטע קוד מוצג. את זה אנו
עושיס בשורות 126-138.
עד כה, לא היינו חייביס לקרוא לרכיב 6006; טיפלנו בו בדיוק כמו בקטע פוסח. עכשיו
אנו מבצעיס לו התאמה בנפרד בשורה 127. לכל רכיב 6006 שנמצא אנו יוצריס בשורה
8 רכיב צוס חיצוני ואחר כך אנו יוצריס טבלה כך שנוכל להצמיד לימין את הכפתור.
בשורה 131 אנו יוצריס את הכפתור ובשורה 133 אנו נותניס לכפתור תכונה עס
האירוע 6%ו|6ח0.
הנה החלק המתוחכם (והמעניין): הליך הטיפול באירוע הוא הקריאה ל-600/6006 עס
מזהה. אנו יוצריס את המזהה על ידי הוספת המחרוזת 60068|06% ולאחריה קריאה
ל-610טשוחט, תוך העברת הרכיב עצמו. כפי שצוין קודס לכן, מובטח לנו שיוחזר אותו
מספר ייחודי כפי שהיה מוחור בקריאה בשורה 79! זה יוצר את הקשר בין הכפתור
ובלוק הקוד בסוף הקוב.
כשאנו בוחניס את המקור של ה-א המופק על ידי גיליון ה-51א, ניתן לראות שה-0ו
המוצמד ל-600860!06% יהיה בדיוק אותו 6 כמו זה המוצמד לכפתור המתאים! ניתן
לבדוק 1את: נשתמש ביישוס ליצירת הדף כמוצג בתרשים 8.10.
6 וא למפתחי אתרים באינטרנט
|<]פ)- | זסזס!קא = 61חז6)ח] !)50סזסווא - 800% 6חד |₪
[ ] 46 05סך >פהסטם" אש את 6 |
||( ₪( 9 | 6 ₪ 6 | 8 ₪8 9. ל
30 || ק כבהו המבב וו הבשו כב 0
6 | | 0 | הזז .81051/0015/000%ס1// :שת ₪ חן
2 .
6 57 תונופ א 1 630187 +
2 7ז3018ח6 +
3 זזקב3ת0 -
+פסחסס ז+0 +ססזס -
:חחח 80 תסוחעש
?7 זוז 450
טפ .פע 80 -
פמץזסזסזק 4 ? 0|35585
,80%5[סז 88וחחד
סא ,030% פחס
שמטעת 9030 126 פמגת <טעק50 716 .50101 הצק סצכן בושו 0 06וז: .1171/01 ,699611811 ,15 3
סמ מזנש) 0386 .1111611 מה 65סגוטסזס מ ,6ב 457 6ב מ .1111/01 116 וד 1612115 116 861116 10
זט 1116 מג 6190187 זס? 1מ116ט 1116 0 561 מ5ב1 15 סנב ()ג מג 168 501104 זרפ
ב + זי 1 :4.50 םושו 860גו 28065 133 ווק ספ סע 816 66
8 זמכ500 .5 טגוק 6111150 ,886 16ספ צגוס 01 8ב1190 4.07 1616קוסס 116 ₪68מוסזס 2.1 ₪מו91 1
.(ע1מ0) 487 פטגוץ
6
<% סְענמספִח=פְהַבּגונַ18 %8> | :0 הַחו ובש
<> :1
<פגפזן> 21 ספה ? 1 %ספן[םזק
<"6.0 501810 81גו719 6="1]10203050מ6סמס6 "ת0דהתנתנןתט"=מנגזן ג'די]> :3 ץוחס
<10/> :+ ,
<08%> - :5 פד הַחוט!וגום
2 סח +ספ[םוק
<1<>/9ם/ 865% ב1מגות<2<>1> :8 ו
<6=1מ061128881 6>1מ801ע061183 1=ע6בעסע 75% = בס4ב1ח 016ב1> :1 ההָבּק קה שמחו 8-
1: >% 1 53
( "8360ע600ע . פ68086007600)"8806ע02.ע06ע36 = פע 360 :11 5 + ,חפ פחז חן
-/ לש שיו בבר חמה מה ו
, | 00 3 החו0םג -
5 0 055 סא -ז ]000 0ף 880% | 005 568700 | 6 568700 ] 6סך [6
ו 1008 ר-| 5 6 ₪
2 00 4 8 [5 ₪ בו ₪ ) ₪ םי [₪ ₪ 5 6 | |ווספפ
ל | |..6ש- 65 15065 ₪9 = -.. ))ספטזסווא - אססם פחדן ]| .1010500 - 08100 חס בל |
תרשים 8.10: עם בלוקי קוד.
בעוד וה מוצג בדפדפן שלנו, נפתח את המקור ונחפש אחר 60068!066. נמצא את
ה- !ויז ליצירת הכפתור. עכשיו נחפש אחר ה-10 המוצג; נמצא אותו באי ה- אא
שבסוף הקובצ.
מזל טוב, היישום גמור!
כאן סיימנו למעשה את היישוס שאליו שאפנו להגיע. יצרנו יישוס מלא לדפדוף בספר
בחלקיו השונים, בצורה ידידותית למשתמש. תוך כדי העבודה, סקרנו את
הטכנולוגיות החשובות המשתתפות בעבודה עס !1אא. ביניהס : !וא חוקי ובנוי היטב,
סדס, 51א וטרנספורמציות עבודה עס ]א בצד השרת באמצעות טכנולוגיית 850 של
'ימיקרוסופטיי, ומסד נתונים ז6/ז56 -501, שימוש בקבצי מערכת 00660 5/5060 6ו=),
ואובייקטיס של סס. כמו כן, עבודה בצד הלקות עס 2885606 ו- וואדהופ, וואדח
ו-655. וכמובן, שימוש באובייקטיס שיצרנו בעצמנו עס 8/.
ללא ספק, כמות חומר רבה, ושימוש במספר רב של כלים. מכך אתה למד, כמובן, כי
עבודה יעילה עס קבצי ]אא ו-56א כרוכה בשימוש נרחב עס כל הטטכנולוגיות
העכשוויות לבניית אתריס.
פרק 8: בניית היישום והרחבתו 247
הבה נחשוב על זה לרגע, לקחנו ספר ופירקנו אותו אל תוך מסד נתונים, שמרנו אותו
בפורמט |אא ושיחזרנו אותו ליישוס אינטרט.
כעת, נוכל לשלוף בקלות את הנתוניס באופן המתאיס לכל פלט שרק נרצה, למשל:
מסמך *פק, הצגה ב-ק4\, הצגה ב-5 ח85|=, הצגה ב-ז₪6806 167050 וכדומה.
זהו ייחודה של |אא!
הצעדים הבאים
בפרק הבא נבחן יחידת שירות שנקראת ז6ק|6 51 - כשמה כן היא, באה להקל על
העבודה עם גיליונות 51א. הפרק הבא מסביר כיצד ליצור תוכנית זו, תוך כדי חזרה על
חלק מהחומר שעברנו בנושא 51א והצגה על גבי הדפדפן כ- |ואדו.
8 וא למפתחי אתרים באינטרנט
פרק 9
שימוש בתוכנת העזר
ז6!06] 51א ליצירה
ותחזוקה של מסמכי 51א
בפרק זה:
ביטוס יצירת פל
ייצום) ז6ס6 . פאל
הצגת' \% עב \אד
בינת התובאו
עריכה ושמירה של ציצויים
%
%
%
%
%
%
הצעדים הבאזים
בפרק זה נסתכל על ז6ק| 46 51א, תוכנית עזר שנכתבה על ידי ץ8|6זא 6אווא כדי לסייע
ביצירה ובתחזוקה של מסמכי |5א.
עזרה ביצירת 51א
06| 51 נבנתה כדי לעזור ביצירה ובאיתור השגיאות בדפי 51א. חלק מן הקושי
שביצירת דפי 51 הוא בניסיון לשמור על אינטראקציה בין ארבעה מסמכיס שוניס
במקביל. ארבעת המסמכיס הם:
1 מסמך ה- וא המקורי המשרת כמסמך המקור או הקלט.
2 | גיליון הסגנונות ב-51א שאנחנו יוצריס, ושמטרתו שינוי מסמך המקור בכדי
להפיק את מסמך הפלט.
3 מסמך הפלט, שנוצר על ידי הפעלת ה-51א על מסמך המקור.
4 ההצגה של מסמך הפלט (למשל, בדפדפן), באופן שבו הוא מוצג למשתמש, לאחר
תהליך הטרנספורמציה.
פרק 9: שימוש ב-ז6ק36! 51א ליצירה ותחזוקה של מסמכי |5א | 249
| 51 היא תוכנית עזר שמטרתה להציג בפניך סימולטנית את כל ארבעת
המסמכים הללו. ווהי דוגמה טובה לאפשרויות העומדות בפניך כמתכנת, ליצירת
עזריס משלך לעבודתך עס אא ו- 51א.
ממשק התוכנית מחולק לארבעה חלקים, שהם מסגרות |ואדה. בכל מסגרת מוצג אחד
מבין המסמכים שמנינו לעיל.
נניח והיינו יוצריס קוב %51 בשם: |פא. | 21/זסז5, שתפקידו להמיר מסמך מ- |אא
ל- |ואדו.
לשם כך, היינו משתמשיסם במסמך קלט |אא בשס |חא.60803 ומסמך הפלט היה יכול
להיות |%ח.803ח6.
זו | 51 היתה מציגה את |0א.3קהה6 במסגרת השמאלית העליונה, את
[5א. 1 50/27 במסגרת הימנית העליונה, את |חא.803ח6, כקוד |וואזה, במסגרת
השמאלית התתתונה, ואת |חא.60803, כפי שייראה בדפדפן, במסגרת הימנית
התחתונה. כל גה מוצג בתרשים 9.1.
[<51) - | זסזס!קא = 1סחזס)ח! ו/050זסו - זסקוסו 51< 3
₪ 0 6ססך הסופת מפץ א ₪6 |
₪ ₪ 8 -3 ל |
08 | |6 חק וו עוסווה 89וסע8] ה0ז568 | הסה 8690 | קסופ וק 0%
* | | ₪0 [* תו ז6ס1181 61/51 כ|16 015/451ויוא/51ס סו / :סוה 45| 001695 |
ו 546 [5א. (החזח2 /רו0ס5] ;51 = | 500 חא 3 כ 3 הס8185> סספ] שפח 665א6015[סוס:8] :זו
>
"1.0"=חסו5ז6ץ |וחא?>
<500%>
<"1="3000) "6%6|="8! ח56000>
<₪06>
373
<006/>
<"4="3001) "88|="8] ח5600>
<0066>
%קפסחסס + +ססזוק
<00%6/>
<"0!355="]7 /ו6>
- הַחואחות+ חו זפת+זנ) ץחב סףָ 6או 60076 !| ץז0פח+ ההַטסהם
]*
0!3%65רח6>- ץ|סקב :%51 >
<ץז רות 0!355="5 ש|0>
ץז רה רחט5 ה0ו560%
|-| <"8/8|="8] "ח0!355="56000 >
<"0!855="56000068067 שו₪>
3 ז%8ק8ת0
וט 0 ל
<""=|66] "ח0!355="5600 /ו6>
<"0!355="550000063067 שו₪>
%פסחסס ז0 )סוק
<צו8/>
וס (שגוסץם1 ₪ מב!מגר!1 ג עמ הג קמה סש 6 269026 !11607 שגוסמע.
6 1005 8 1866 0+ 11660 6 ,61 61 06 1ןמגין 61 16קןנג [['6 קר
בסו 5061 64 ה זדם 160010 מ16618110קחג
<"7ם"=0!355 /ו6>
בַחואחוחץ חו זופח+וט+ צֶח3 סףָ 6או 6זס)₪6 !ץוספח+ תסַָטסחם
6 ,66466 0|קרח= +ה6רח6|קרח! ||'ש או סח תהַטסיות+
5 6800 רח6!קרח! 6+ 8% 00%| 8 866 ס+ 680
[ ,
1 6[גת 6בס :6 ממזגום קיו ,06918 בב 8317918 בג 06116776 1 6[גב/קר
:5 15 קמננט דש סז
19 [ד1וול לדנטש !1 קטט) 0ם , עסו 1071 שהט1וסיו 501 091
40% . |
סחבזוחו וסט 1 בש ן סוס [6
א 7.27 000 | 55 5 ל בד ₪ [4) פש 0 21 5 5: 65 | |וופופמצ
ל | -..050ז0ו1א - 1161061 ופאן6]|.₪ 0 וע 3 |
תרשים 9.1: זסקו6 51א
חוא"וסאו טחור6% 50 06% ₪ח3 צסס|פחחספף
בנוסף לארבעת המבטיס האלו, ישנה מסגרת עליונה קטנה, המכילה תיבות טקסט
וכפתורים. כדי להשתמש ב-ז6ק|₪ 51 יש להכניס לתיבת הטקסט הראשונה את
הנתיב לתיקיה שבה מאוחסנים אובייקטי ה- וא ודפי ה-450. בתיבת הטקסט השנייה
יש להכניס את הקוב בו נרצה להשתמש כקלט (בדוגמה המוצגת ווחא.3מְ8ח6), ובתיבת
הטקסט השלישית יש להכניס את גיליון הסגנונות שב-51א, שפיתחנו או שאנו
מעוניניס לבחון (בדוגמה המוצגת |5א.|ח%ח2ץזסל5).
0 א למפתחי אתרים באינטרנט
לחיצה על לחצן ₪6!080 גורמת ל-זפק|פ .51 לקרוא את קוב הקלט ולהציג אותו
במסגרת השמאלית העליונה. היא מציגה ייצוג !אד של קוד ה- אא הממשי, כפי
שנתאר בקרוב. באופן דומה, ז6ק! 6 %51 קוראת את קוב ה-51א שסופק, ומציגה
אותו במסגרת הימנית העליונה.
במקרה זּה, התוצאה של טרנספורמציית ה-51א היא מסמך |ואזהּ, המוצג במסגרת
השמאלית התחתתונה. לבסוף, ה-1א המתקבל מובא לתצוגה במסגרת הימנית
התחתונה בדיוק כאילו היה בדפדפן 1=5.
הן קובצ הקלט והן קוב ה-51א יכוליס להיערך במקום על ידי לחיצה על הכפתור 501%
המתאיס במסגרת העליונה.
בהמשך הפרק נסקור כיצד ז6ק| 46 51א מיושמת. בדרך נבחן את עיבוד ה- |ואא שבצד הלקוח.
הערה |
זסק! 51א דורשת לחלוטין את 155. לעתים האבטחה בתוך 155 מגבילה
את השימוש בקובץ זה. כדי להפחית זאת, יש לבחור בתפריט באפשרות
5 ה5/1וססד ולבחור %99 שהט500.
כש-זס₪6!0 51 נטענת, ניתן למצוא את האזור המופיע בפינה הימנית
התחתונה של הדפדפן. במחשבים מסוימים, מופיע 6%ח8שח1 |1068;
במחשבים אחרים יתכן ומופיע אחרת. אנו עשויים להזדקק להגדרות
אבטחה המותאמות אישית, שיאפשרו לכם את פקדי ה-6%ש60₪ שבשימוש
!36 51א. נראה כי קביעה ל-6פאַח5, בחלק מן המחשבים, פותרת את
הבעיה, אם כי ידוע שקשה לבצע זאת נכון.
כמו כן, זסק!46 51א משתמשת באובייקט מערכת הקבצים. זו לא אמורה
להיות בעיה, מכיון שכבר השתמשנו ב-%86 במהלך התרגילים בספר,
והתקנת 8 מתקינה את אובייקט מערכת הקבצים.
יישום ז6כ|6ו 51א
נשיס לב כי בתרשים 9.1 הקוב הממשי שאליו ניווט הדפדפן הוא החשח.ז6ק|6 |5א.
קוב וה מכיל את קבוצות המסגרות, המכילות את ארבע המסגרות שהוצגו בתרשיס
1. הקוד של קוב ה מוצג בתדפיס 9.1.
תדפיס 9.1
<"608756%=150-8859-1 ;[הה0ח/+66"=%ח6חס6 "סכ דהה ס6"= /תסם-ק דד ג דםו]>
< ||אדר]>
<3= ח>
<= |דך/>ז6קו 6 |פא<ם וד >
<סגשח/>
<"*,08="28ז 0067=0 1 = 18600006 656וח8>
<"ו68007.00 576="%5[1 168067]= 6רחבּח סוחה]>
<"60!5="50%,50% "50% 0/8="50% 1 = ז06סססרחבו ז56סוחה]>
<)טסח6=1רחהּח 6וחבּז?>
<6=50/!65066%רח8ח 6וחבז!1>
5 ל מ ו 7
פרק 9: שימוש ב-ז6ק!46! 5א ליצירה ותחזוקה של מסמכי |5א | 251
<500706וכ0כ6=0רחהּח סחרחה!>
<+ט6=00רח8ח 6וח3ז)>
>/)8700056%6<
<8707056%)/>
< |וזדר]/>
10:
11
2
11
11:
ישנו שתי קבוצות מסגרות בקובץ וה. קבוצת המסגרות החיצונית מכילה מסגרת
בודדת, ז346806. קבוצת המסגרות החיצונית מכילה גס קבוצת מסגרות פנימית, אשר
בעצמה מכילה ארבע מסגרות נוספות : +טסח1, 5%/!65066%, 6סוטספזטססטס, ו-זטקלטס.
אלו מתאימות למסגרות השמאלית העליונה, הימנית העליונה, השמאלית התחתונה,
וחימנית התחתונה, בהתאמה.
נשיס לב כי לאף אחת מן המסגרות הללו אין תוכן פרט ל-ז36806, המציגה את
וחזח. ז16800 51א, המוצג בתדפיס 9.2. מסמך זה הוא שמבצע את העבודה, ואנו נבחן
אותו בפירוט.
תדפיס 9.2
< ||אדר]>
<3=4 ח>
<"8750%=150-8859-1ח60 ; |החזח/+06"= חח 60 "סכ 6% חהס"= /וסם-ק דד ג דםו!>
<50/|6>
520:807-+ח0?; 00808/:ץ|ורחם-%חס-7 *
<50/6/>
202
<סגשח/>
<501]0>
( "1655062016 הו 56 60/6006 שוסח = 150 זפ
חס 080ו46 6 ַחו655זכ עס 60ו|68 , הסוסחט הוהרח 6 5 פוחט ]/
()₪617050 הסטסחו
6 %'ח00 6צ 50 ,60066 3 חן 5זס+6רחה זהכן זוס זססוהסוחסז //
חו החסרט פהוק/? 6660 %0-
"|" + (6טוהע.זטסח650806)1 + "=פוחִהּזבק" = 05 זפצ
;(6968026)50/65006%./8|06 +=-
(6טןא8ע.זו)656806 + "|" =+ 05
()2806 /ו6ח = 0806כא6 זפ
; (1 + ()ז ה ]60 6 קא6 )6 ץ]|-56. סקאס
;() 50 806.00 6% + "=01765א6;" =+ 05
;65 = 1060%.600616ו006
5 זטוס? 6 ]0 ה ח60 6 לוס 637 ]/
( 66 .חח 000.זוכח1. סרחה +חס וק
; ()50/65066%.00010760%.6|6817. 65 רהו +חסיוהק
; ()6|687. 6 ו00. 06ז ססז וכ 65רחהו.+חס וק
]אא למפתחי אתרים באינטרנט
.
-
5
₪
וי תב לס ל
+ ₪
=
+ -
5 9
₪ = 72 ₪2 = שא כ כ
תש תס בר פס סש ו כ
.%
5
; ()0|681. 0.0066 סרחה +חס וק :25
:20
0% 50/6 6 סחב |וחא +טקחו 6+ זס+ %65ה6והט006 / ]א 00806 ]/ :27
; ("[זכ0כ |א.050ז6ו" 6/6066 שוסח = זטסח וא זפצ :201
("[ז0כ 1[1א.6050ו" )60/6060 צוסח = 50650666 |וא זפצ :20
;6 =ח35.)טקחד !זא :0
;60/!65066%.85/06=19]96 |וזא :21
:2
5 6ח? סה זטסחו 6חז זס? !וא 6חז 56זה // 21
5זסזוס זו סקז 800 0חו60ה6-
; ((6ט|הע.זטסח6)1!-680) |ואאסבּסו.%טסחד וזא :1
(ה6850. זסזו 56זהק.זוסח1 |וו]א) זו :51
; סח ]א ,"סו 6+טסח")זס 56 וק סססה 1
; ((6)50/!65066%./8|06!ן- 680 ) ]0 הס 66%ח65ו/50 |ואא :7
(68500ז. ]סז 56זה66%.0ח50/!65 |וא) זו 1
; (50/|650667 ]]א ,"5066 50/6" )זזה + סקס :2%
7
טס רשו חס 8חור0ז5חהט ,65 זטסחו 6 זס0ת6ז ]/ :211
חסופזסע !ואד חה סש |5א. | אעטסח5 500870 -
;סכ |וזא.50!6ץה|מפוכ ו[]א)6 סו זסז5חהיח.זטסח1 וא = 5 זפצ :212
;5 = 1 ד חחו. ץ00. הרהט 00.זוקח1. סרחה +חס וס 211
; (?הסוהטססכ ]זא 3506 !סוכ ו] א ססו סז5 הט 6% 50/65 וזא = 5 :214
;5 = 6 חח ץ 66.06.00 50/65 פס רחבי .%הס וק :451
211
5 0+ 666% ה ,ה 0ז5ח3 0651760 6 0 צוסח // :21
("0סכ .6050" )60/6066 צוסח = 6טססטכ) וא זפצ 211
;18|56 = 6חץ6.485טססט0 |ווזא 2
;סוכ 111 ,50/65066% |[א660נסכס ד ססצוסז5חבט. )וקחד וזא ?ו
(ה6850ז. ]סח 56זהק.+טכ וס [) + 1
; טסט !וזא ,"לטססטס")זס ההק סקס 52
א
5 35 066ח0 חב 1 דרו סזחו 0760ז5ח8 6סחס - זטסטס 6 זס0ח6ז חב ]/ 1
; (?ה6וחט6סכ ]!א. 50/16 /5!3וכ !)6 סא ותחזס)פחבט.%טססטס וויא = 5 :1
;5 = 1 ד חחו. ץ0סט. הרו 00 06 ססס וס 0 סרחה +חסוהק 4
; (|רחא.+נוכס וכ )סש חס רו 00.ס וסט סרחה +חס וק :1
] :58
1
סז החופזהכ 3 01 5|ו0613 6ר% הסקסז // :60
]50 006 01 6 30 + הסרה 006 66 65 ח06ו זרז חַחהוח5 3 וצו |ו63 // = :61
(החסח ,6ז5)זסזו56זהק+ ₪60 הסטסחנת :62
63:
;6850 סקר 00 + " :" + 516 + " פחופזהק זסיזם" = 5 זפצ :+
;6חזן סז 56זהק. וס + " :סחו|ח" =+ 5 :51
;605חו] זס 6 זה ק. חס + " :פסקח" =+ 5 1
פרק 9: שימוש ב-ז6ק!6 51א ליצירה ותחזוקה של מסמכי |5א | 253
6% 576 סק 00 + " :סזפח" =+ 5
;(6)5|
סוה 5060160 6 01 5זה 60 6 601 0ם ספ סח צצסווה //
(חז0ם הסטסחו
6חה 50601060 66 סף 61076006 3 96 //
וו 00 (ח)65רחהז].%חסזהק = 0 זפ
0ח5 8 35 6|ו 6+ )0 %5חה%0ח60 66 680 //
(6ט81ע. (ח)!|8.%ה6ט6)006ון-080] = 5 זפצ
<07108זא0+> סַחָזה| 6חס 06 0ף 36 6 01 חס חה0ס6 66 56% אוסח //
(0=חו0ז3ח.50/!6. 0.000
:ו 0וא'=50/6 6 0107 =0 68זבזא?>" = ]וא דרהסהחו. ץ0.000
;"<9708)א0ל/>" + "< ;5126:80%-100%; ה 0ז6/: ץורח13-+הסו;0: זט זסס -
6 6 ]0 65חה 60 6 60 ב6זה א 6 0 605 66 56% ]/
;5 = 6טו8ץ. ("0א6 00ם")ו|0.8
חססגוס ₪0 06 וח 30 5הסס6טוט ₪06 חב 586 06 ץבוספו ]/
[(50050)0,2.ח = אח6זכ זה
;""=ץ50/!6.015013. ("6ש58" + א6זכ)!|3.]הס רחוסו
;""=ץ0150!3. 50/!6. ("[06חה" + א6ז)ו|3. +06
;"6חסח"= /ה!50/!6.0150. ("זו0ם" + אח6זק)!|8 .הר טסט
/
0ח50 3 35 6 5060160 6 )0 5חח60 6 680 ]/
(ח6)1!ו-₪680 הסטסחו
;(1 ,(חז ,6טו8ּ/.זוס )תהק סוט )ואס דה150.006 = + זפצ
;()||\1.080 = 5 זפ
(060ז
;5 חזו סז
0
% סס 6 60060 6+ 58/6 //
(ח)58/6 הסססחט1
חח חצו זס1 6החהח 16 6סהווקסזקקב3ּ 6 הסמס //
(6טט , (6ט|הץ. (ח)!|.+ח6רתט006 ,6ט|הע.זוכ )תהק וטס )סו|- חא [150.0768%6 = 1 זהצ
)א 06 )0 %5ח%5ח60 ₪6 ססחצצ סחה //
4 ווא למפתחי אתרים באינטרנט
4
1
1
+
0:
1:
1
1
1
5:
1
1:
1
1
7
11:
2
1
1
1:
1
7:
7
7
7
11:
2:
1
1:
51:
1
|17:
1
1
:10
14
לוו
141
11
151
+10
:11
11
+
; (6ט|פץ. ("+א6 ₪010 ")|| .הרו סח ( )65 רח .הז הק )1.6
;()1.0|056
56 6-5016זכ 6 60 0866 060100 60 8565 הסרה וח 60 6 0165ח8ח |66ח3 ]/
; (ח)|66ח8)
6 |החוף חס 6 0+ 086% 066 - הסאטס |68006 6 65560זק 85 ספ // 1
(ח)|66ח68 הסססחטז | :
/
הסוס ₪0 66 צוסח5 ,5חהסטנום |66ח68 סחהּ 586 6 ססוח ]/
,(50050)0,2.ח = א6זכ זה
;"6חסח"= 50/!6.0150!3. ("6ע58" + א6זכ)||3.הס רטסט
; "6חסח"= ץ50/!6.015013. ("[06ח68" + א6זכ)||3.הס רטסט
;""= 50/!6.0150!3. ("016=" + א6זכ)||3.הס רהס
ה |!3 ה60705ז ||וא 5וחז - 65560 ח066 85 080 ]ו 85 365 סחה ]/
()6050
6וחפח ₪6 0חה ץזס6זוס הסטוס 6 וחסי הזכ 16 3 ₪806 ]/ 1
( ,0)הזהק0ווטם הסטסחו -:
/
;(? ,0)ה80ק 150.10 חזנססז
,
: >/5000₪
<6/60%=07!080 עשססחוש= סז 5070%> =:
שווופופוצ הסט 6 6קווהטוחו // =:
; "6חסח"= ץ58/6.50/!6.0150!3ח1
; "6חסח"= /50/16.0150!3. [66ח68ח1
; "6חסח"= 015013 50/|6. 51586
; "6חסח"= 015013 50/|6. 5168006
6 סו 1065 076ס05ז // | :
;(";"ו|060%.600606.50 000 = 5סותטחס זפ :
([05]0וחטזס) זו
/
("="או!מ5]0[.5סוחוז6 = עח זהצ
("5וחבּזהק" == [0]עח) )1
/
;("|"ווס1[.5]שח = 605 זפ
;([650806)05]0ח1 = סטןהץ.זטקחז
;([1 ]656806)65ח1) = 50/650061./8|₪06
פרק 9: שימוש ב-זפ0|₪ 51א ליצירה ותחזוקה של מסמכי 51א
11
25
;([6508026)65]2ח = סט|פץ.זוס +
11 7
156: ]
157: >/5010<
11+
1
<';5 2:חוזהוח'=5%/!6 +800%> :160
1
הסוחצט 566% 506 " ]וידר 35 ןא צוסוע" 50800870 טס 05|סח סחהו5! ]א פווז --!> :162
<-- 608006 60 8/6 0% 30 סח שחפוח 6056 6-
<|רחא/>< "[א. |1אאוסח576="5 "6!ש50ץ3|ספוס |[']א"=טו |וחא> :163
11
165: >!-- 06 (1 --<
<זוק=6ו )טסחו> :זום :166
<6טמח1=ו ז+טוקחו> שטסח1 :167
<"(טסח0)'1ם"=>6ו!סחס 6=016טןפע %ו0ח1=סו חסטפ=6ק זטסחו> :168
<"(6טסח58/6)'1"=>סו|6ח0 6=58/6ט|פ/ 58/6ח0=1ו הסטפ=6ק/ זטקחו> :169
<"(שטסח66/)'1חה)"=>6ו|6ח0 |06ח6=68ט[8/ |06ח68ח1=סו הסחטס=6ק/ זטסחו> :170
114
<0=50/65006%ו זטסחו> :51 :172
<"( 0)'50/!65066%ם"=>6ו|סחס 06 =6ט|פע 0=5006ו חסטפ=6ק/; 6טקחו> :173
<"(50/|650066% )58/6"=>סו|6חס 6=58/6ט]8/ 0=5058/6ו חסטפ=6ק/; 6טקחו> :174
<"(06|)'50/!650660ח6==")8ו61ח0 |66ח6=68|/ |66ח50-8=סו הסטפ=6ק זטסחו> :175
11
<"()0>="6050ו61ח0 46|080] =6טןפע 080ו0=46ו הסטפ=6כ/ +טקחו> :177
<צ800/> :178
< |ומדה/> :179
וחזח. ז6כ|36 51 מחולק לשני חלקיס: הכותרת העליונה והגוף. הכותרת העליונה היא
משורות 1 עד 159. הגוף מתחיל בשורה 160. אנו נתחיל את הניתוח שלנו בשורה 166.
בשורות 166-167 נוצריס הפקדיס ומוצביס בהס שיטות הטיפול השונות. לשני שדות
הטקסט זטסח1 ו- 51א מקושרים שלושה כפתוריס 0ו50, 58/6, ו-06ח68). כשהדף נטען
לראשונה, השיטה 1080חס תופעל, והכפתורים 58/6 ו-|66ח68 יוחבאו, כמוצג בשורות
12 :
; "6חסח"= ץ58/6.50/16.015013ח 1 :139
;"6חסח"= ש50/!6.0150!3. |68006ח 1 :140
;"6חסח"= /6.50/|6.0150!3ש58ז 5 :141
; "6חסח"= ש661.50/!6.0150|3ח 508 :142
אס המשתמש לוחץ על 50%, או הכפתוריס 58/6 ו-|66ח68 יוצגו. נראה ואת מאוחר
יותר בפרק.
6 וא למפתחי אתרים באינטרנט
המשתמש מכניס את שמות הקבצים המתאימים (או שהס משוחזרים מעוגיות, נראה
זאת בהמשך) ואחר כך לוחץ על ₪6|080. הכפתור ₪6|080 נוצר בשורה 177, ומקושרת
אליו השיטה ח₪61765, בה מבוצעת עיקר העבודה:
<"()6=="67650ו61ח0 6=]46|080|ה/ 080ו0=46ו הססטפ=6ק/0 6טסחו> :177
מה מבצעת ()₪46/:657
התפקיד של 86/7050 הוא לנקות את המסגרות ואחר כך למלא אותן במסמכים כפי
שתואר קודם. ואת נעשה על ידי יצירת מסמך וספ ב- |ואא עבור קוב הקלט שב-ווא,
ומסמך אסכ ב- וויא אחר עבור גיליון הסגנונות. הן קובץ הקלט שב- אא והן גיליון
הסגנונות שב-51א (שהוא בעצמו קוב |ואא) מנותחיס תחבירית, לבדיקת שגיאות
ודיווח על בעיות.
אנו רוציסם להיות מסוגלים להסתכל על התוכן של קבצי ה-1א האלו במסגרות
העליונות. הדרך הקלה ביותר לעשות זאת היא להמיר אותס לקבצי ואד ולהציג
אותס על ידי שימוש בטכנולוגיית דפדפן בסיסית. כדי להשיג ואת, השיטה ₪666
משתמשת ב-5א. |ו]אאוסח5. זהו גיליון סגנונות פשוט ב- 51א, שיצרנו להבאת קוב !אא
לתצוגה בדפדפן. נבחן קובצ זה ביתר פירוט בעוד רגע.
כעת, משקובץ המקור ב- |אא וגיליון הסגנונות ב- 51א הובאו לתצוגה, הצעד הבא הוא
להשיג את הטרנספורמציה המוכתבת על ידי גיליון הסגנונות ב-51א, לדווח על שגיאות
שהתעוררו, ולהציג את קוב הפלט המתקבל. למעשה, פלט זה מובא לתצוגה פעמיים :
פעם אחת להצגת תגיות ה- !ואד בגירסה המוצגת במסגרת השמאלית התחתונה, ופעס
שנייה להצגת הפלט כפי שהיה נראה בדפדפן, במסגרת הימנית התחתונה.
כיצד 6/7658 עובדת
הצעדיס של ₪665 הס כדלקמן:
1 איסוף כל הפרמטריס שהוכנסו על ידי המשתמש ואחסונסם בעוגיה.
2 ניקוי המסגרות.
3 הצגת קובצ הקלט וגיליון הסגנונות (ה- |אא וה- 51א), במסגרות המתאימות להס.
4 ביצוע טרנספורמציית ה-51א על קוב> !אא הקלט.
5 הצגת קוב הפלט המתקבל, הן כ ואזח והן כפי שהיה נראה למשתמש על
הדפדפן.
איסוף הפרמטרים
כאמור, ז6ק! ₪6 51א דורשת שלוש פיסות מידע, או ייפרמטריסיי, והן: קובצ הקלט
(|וחא.803ח6), גיליון הסגנונות (|5א. 211/סט5), וקובצ הפלט (|הושח.3כְח6). לאחר
מספר פעמים, תהליך הכנסת הערכים הללו, נעשה מייגע, ולכן אנו מאחסניס אותס
פרק 9: שימוש ב-ז46|06 5א ליצירה ותחזוקה של מסמכי |5א | 257
בעוגיות לשס הנוחות. במקוס להתעסק עס אוספי העוגיות, בשורה 14 אנו פשוט
משרשריס את שלושת פיסות המידע הללו לתוך מחרוזת אחת, ושומריס אותה כעוגיה
בודדת.
0 | ()656806 היא שיטה ב-6ַמְחִ856ע38 המקודדת מחרוזות טקסט כך שהן יוכלו
ו להיות מאוחסנות בבטחה בתוך עוגיה (60066). ניתן להחזיר מחרוזות
0 שהשיטה ()656806 הופעלה עליהן למחרוזות רגילות, על ידי שימוש
ב-()656306חט, כפי שמוצג מאוחר יותר בקובץ זה.
ואם נדייק עוד יותר: ערכה של עוגיה (60066) לא יכול להכיל רווחים.
()556906 פשוט דואגת להחליף כל רווח בסימן %20 המייצג את תו הרווח,
ובאחזור העוגיה בעזרת ()6906פפחט מוחזרת המחרוזת שוב עם רווחים.
בשורות 16 ו-17 תאריך אנחנו מכווניס את וזמן התפוגה של העוגיה לעוד שנה מעכשיו,
ובשורה 19 אוסף העוגיות של המסמך, נקבע להחזיק את העוגיה עס הפרמטרים של
הקבצים:
19: | 00600060%.60066 = 65
בשורות 22-25 אנו מנקיס את כל המסגרות כהכנה להצגת ארבעת המבטים.
הצגת !וזא הקלט וגיליון ה--51<
בשורות 28 ו-29 אנו יוצריס שני אובייקטיסם חדשים, שכל אחד מהס הוא מסוג
וחסק ]ואא, אשר יחזיק אזספ ואא:
; ("[זכ0כ |א.050ז6ו]" 6/6066 שוסח = זטסח וא זפצ :201
("[ז0כ ][1א.6050ו" )60/6060 צוסח = 50650666 |וא זפצ :20
לאחר קביעת המאפיין שלהם, 6חץ85 ל-19156 (כפי שצוין בפרקיס קודמים, וה גורס
לתוכנית לעצור עד שהמסמכים נטענים במלואם), אנו מוכניס לטעון את מסמכי
ה- |ואא מהקבצים המתאימים שלהס.
בשורה 34 אנו ממלאים את מסמך ה-סכ שב- |אא הראשון עס מסמך הקלט (המקור):
; ((סט!8ע.זוסח6)1!ו- 680 ) |אסבּסו.סטסחז וזא 41
וה מעורר את השיטה ()6ו₪680, המוצגת בשורות 95-100, אשר יוצרת אובייקט
655 חדש, קוראת את התוכן של הקובץ, ומחזירה את התוכן כמחרוזת.
הקריאה ל-1080%%1 גורמת למחרוזת להיקרא לתוך מסמך ה-אס א. אס יש
שגיאות ניתוח תחבירי, אנו נדווח למשתמש על השגיאות האלו באמצעות השיטה
3+ סקסה, המוצגת בשורות 62-68.
שיטה זו, זסז56₪7ז3+וסק6, יוצרת מחרוזת מהאובייקט זסז65פזהק של מסמך
ה-אס, ומניחה את המחרוות בתוך תיבת התראה מסוג +ו6!. כדאי להקדיש רגע
לסקירת השיטה הפשוטה הזו, שכן היא חושפת את הפרטים הזמינים בשבילנו,
ממנגנון דיווח השגיאות המובנה במסמך ה-|אסס:
8 א למפתחי אתרים באינטרנט
;6850 סק 00 + " :" + 516 + " פחופזהק זסזם" = 5 זפצ :+
;6חון סז 56זהק. 00 + " :סחו|ח" =+ 5 :1
;6005חו] ]סו 56 הק חס + " :פססח" =+ 5 :+
6% 576 סק 00 + " :סזפח" =+ 5 :7
1 |6)5(;
בחורה לשורה 37, אנו טועניס את גיליון ה-51א באמצעות אותו המנגנון, ומדווחיס על
שגיאות ניתוח תחבירי עבור גיליון הסגנונות גס כן:
;((6)50/!65066%./8]06!ן- 680 ) ]0 הס 66%ח65ו/50 |ואא :7
(68500]. ]סז 56זה66%.0ח50/!65 |וא) זו 1
; (50/|65066 ]]א ,"5066 50/6 )סה הק סקס :2%
עתה כאשר שני הקבצים נטענו, כל אחד במסמך ה-ואס שלו, אנו מוכניס להצגתסם
בדפדפן.
המטרה היא שהדפדפן יציג בדיוק את ה- |אא, כפי שהוא יכול להיות מוצג בעורך
הטקסט שלנו. אם חיינו מנסים פשוט להזין את ה-!אא לדפדפן, הוא היה מנסה
לתרגם אותו; וה לא מה שאנו רוצים. במקוס ואת אנו רוציס שהדפדפן יציג את
ה- !אא כתוכן, כמעט כמו תמונה של הקוב>.
כדי לעשות ואת, אנו צריכים שה-1אא ייהפך למחרוזת !אד שתוכנס למסגרות
המתאימות.
זוהי פעולה בת שני שלבים. ראשית, המסמך הופך למחרוזת בהתבסס על גיליון
הסגנונות |פא. |ואצוסח5, שנבחן בפירוט בעוד רגע. אחר כך המחרוזת עצמה תוכנס
לתוך המסגרת. אנו מתחילים בשורה 42:
;השס |!וזא.50!6ץה|ספוכ ו[]א)6 סאר זסז5חח.זטסח1 וא = 5 זפצ :212
השיטה 07 06ו5ח78+ מקבלת גיליון סגנונות כארגומנט. כדי להבין את הארגומנט
שאנו מספקים, אנו חייבים להסתכל על שורה 163 :
<|וחא/>< "|פא. |1אאוסח576="5 "50/!6ץה|ספוס |[]א"=טו |וחא>. :163
כאן, בגוף מסמך ה- |ואדה, הגדרנו אי !אא שה-6ו שלו הוא 16/ש8/5וספוס |אא ומסמך
המקור שלו הוא |5א. |ו]אשצוסח5. כשאי ה- וואא הזה נוצר, 51א. וואשוסח5 נקרא מהקובצ
ונוצר בזיכרון. אנו יכוליס לגשת אליו כמסמך |א על ידי קריאה למאפיין
+חסהנו6סכ |וזא, כפי שאנו עושיס בשורה 42. מסמך ה-1אא הזה מהאִי, הוא ה שמועבר
כפרמטר לשיטה 06סחזס)5ח8 של זטסחז וא.
בקיצור, קראנו לשיטה 06סאחזס)פחט על מסמך הקלט ב- אא (מקור) שלנו, תוך
העברת גיליון הסגנונות 51א. |!אאצוסח5. גיליון הסגנונות הגה מציג את מסמך ה- !אא
הזה כ- ||אד₪, כך שאנו יכוליס להציג אותו במסגרת השמאלית העליונה. אנו נחזור
פרק 9: שימוש ב-ז6ק|46 51א ליצירה ותחזוקה של מסמכי |5א | 259
ל- |5א. ]500 מאוחר יותר בפרק זה, ולעת עתה נניח שמוחזרת מחרוצת עם ואדה
חוקי להבאת מסמך המקור לתצוגה. מחרוזת וו ממוקמת במשתנה 5, אשר מוצגת
בשורה 43 במסגרת השמאלית העליונה:
;5 = ד חח ץ00ס. חר 006 טקח]. 65רחה.%חס וה 211
זה מושג על ידי קביעת המאפיין | ז4זסחחו השייך לרכיב הגוף של המסמך, מן
המסגרת הפנימית.
אחר כך אנו חוזריס על תהליך וה בשורות 44-45 עבור גיליון הסגנונות, כך שהוא יוצג
במסגרת הימנית העליונה.
עד עכשיו טענו את קבצי ה-51א שלנו על ידי יצירת אובייקט מסמך |אספ,
וקריאה מפורשת לשיטות 030! או וואאסַסו. כאן אנו משתמשים באִי וואא,
1 = הן מכיון שזה נותן לנו את ההזדמנות להציג את הטכניקה הזו, והן מכיון
שנשתמש בקובץ ה-51א הזה לעתים תכופות, והרבה יותר יעיל לטעון אותו
רק פעם אחת.
הערה |
ביצוע הטרנספורמציה
השלב הבא שלנו הוא להחיל את גיליון הסגנונות שלנו על מסמך המקור ב-|ואא, ואנו
עושים ואת בשורות 48-52. אנו מתחילים ביצירת מסמך פלט ב- ]א בשורה 48:
; ("ו0כ .6050" )60/6066 אוסח = 6טססטכ וא זפצ 211
לאחר קביעת המאפיין שלו, 6חץ85 ל-8156), אנו קוראיס לשיטה של מסמך המקור,
0 וחזסו5ח8ט, | המקבלת שני ארגומנטים: שם גיליון הסגנונות עבור
הטרנספורמציה, ושס האובייקט שבו אנו ממקמים את התוצאה:
;סוכ ]א ,50/65066% |[א660נטכס ד ססצוסז5הבט.לטוסחד וזא 0%
בשורות 51 ו-52 אנו בודקיס אס ישנן שגיאות ניתוח תחתבירי, ואם אין כאלו, אז
ה-+טסזטס יא מכיל עכשיו את התוצאה של החלת גיליון הסגנונות על מסמך המקור.
כעת אנו מוכניס להצגת התוצאה הזו.
כאן השתמשנון ב-07080061009[6%ופהה | במקום ב-06סהזס)פהאזד.
6 הזד מחזירה מחרוזת, | |-067000[60סותזסזפה₪8 | מקבלת
0 כפרמטר השני שלה אובייקט, במקרה זה מסמך אספ, אליו היא ממקמת
את תוצאות הטרנספורמציה.
הערה |
מכיון שזו פעולה בת שני שלבים, יהיה נוח יותר לשמור את התוצאות
בתוך אובייקט שנוכל לטפל בו אחר כך. בנוסף, אנו יכולים לבדוק
באובייקט שגיאות ניתוח תחבירי, ואנו אכן עושים זאת בשורות 51 ו- 52.
0 וא למפתחי אתרים באינטרנט
הצגת התוצאות
בשורה 55, אנו יוצריס מחרוות )דח עבור מסמך התוצאה, בדיוק כפי שעשינו קודס
לכן עבור המקור וגיליון הסגנונות. בשורה 56 אנו מציגיס מחרוזת זו בחלון השמאלי
התחתון:
; (?ח6וחט6סק ]א 5!3/50/!6וכ !)6 סוה חס)5חבס.%טססטס וויא = 5 :לפ
;5 = 1 ךס חחו. ץ0סט. חר 00 06 סוס 0 סרחה +חסוק 1
לבסוף, בשורה 57, אנו קוראיס לשיטה ווזאו על המסגרת הימנית התחתונה, המביאה
לתצוגה את ה-|אז שאנו מספקיס לה, כאילו היה מוצג בדפדפן. ה-א שאנו
מעביריס הוא התוצאה של גישה למאפיין |וחא על מסמך אספ הפלט. זה מחזיר את
המחרוזת של וואא, שבמקרה זה הוא 1אדח המוכן לתצוגה.
הצגת וא עם דח
סקרנו באופן כללי, את אופן ההצגה בדפדפן של מסמך המקור שב- !וא וגיליון
הסגנונות שב-51א. הבה נחזור אחורה, ונבחן ואת בפירוט יתר.
המשימה שלנו היא להפוך את ה- |אא לתצורת |אדה. באופן לא מפתיע, אנו נשתמש
ב- 51א. אנו זקוקים לגיליון סגנונות שייצור 1אד, כך שהדפדפן יציג את ה- |וואא בדיוק
כפי שהיה מופיע אם היה מוצג בעורך טקסט. גיליון הסגנונות שבו נשתמש הוא
1א. |ואאאוסח5, כמוצג בתדפיס 9.3.
תדפיס 9.3
"1.0"=חסופזסע |וחא?> :0
,0 זה|ורחו5 - זספוסזם |ו דר חה חו וויא /ובהטוטזבּ ץְ0150|3 סז 66%ח50/65 51א --!> :1
<-- |5א.0618 ]055 , חבש זס|קוחו5 הסוח זט =-
2
"|פא-/ ד זס. 3א. אא /: כ ח"=!5א:5חווחא | :3
"40|והסח- א ד/זס/3/עעטאוע//:קח"=5הווחא | :4
<""=5ח-|090] | :5
1
<"]"=ח800וח 3%6|קותס%:|5א> :7
<|השה> :8
<ץ200> 91
<50/6> :10
26:8007ו5-100% ; 8ח08ז6/":ץ|ורחה]-זח0ס: * 1
<-- ז6חן%3ח60 %ח6!67006 --|> 121
;16 -:ח06ח-6 ;16 :6!-חוסזהוח+ 6. +
<-- ₪0 --!> 11
0-7 | 11
<-- 580 :51 --]> 11
][4990099:זס|4+60 זא. 2
<-- 6037860015 קאזהוח --!> 141
פרק 9: שימוש ב-ז46|06 5א ליצירה ותחזוקה של מסמכי |5א | 261
2002
[סטוס:זסוסס+ וח.
<-- 006ח 0% --!>
306;7!ט:זס|סס+ 0.
<-- 00808 --!]>
;אס זסהטס0:עוווחב-%הסו וס.
<-- ח066!37800 םקץ 2061 --!>
[סטופ:זסוס6+ 0.
<-- | --!>
[6טופ:זסוס6+ וש.
<-- +ח6וחוח0ס --!>
:600 6₪.
<5!6/>
3065|קרח6-ץ|כקה:|5א>
<ץ000/>
<|חטח/>
<36|קוח5|:%6א/> :
<-- ז9! 015 | 866 08%ז 15ה6ח6!6 השוסהאחט ץחה 80 --!> |
<"*"= 800 306|ןרת5|:%0א> | :
<עו0/> < /0|3065וח66-ץ!סק5|:8א> <"60:זסוס50/!6="6 /ו0>
<36|קוח5|:%6א/> :
<-- 40700065 --!> |:
<"ז"=0|355 ח508> <"056/6ז"=50806:|החא "* "= ה0ה 366וות6ש:|5א> -:
51:/8106-01א<> < ח508/>"= <"הח"=61855 ה508> < חה50/> < /6הההח-06סח:|5א> =-
<0|36רח5|:00א/ > < חה508/>"<"וח"=0!355 ח58> =-
<-- 0065ח 00 --!> 1
<"()006א6)"= ה%6הרח %6ה!ות5|:0א> | :
<"6|855="6 /|0>
<ח508/> < /)5|:/8]06-0א> <"א6!955="6% ח578>
<שו0/>
<36|קוח5|:%6א/> :
<-- 00313 --!> :
<"()608%3"= 800 306|רת5|:%6א> | :
<"6]855="6 /ו61>
<ח508/> ]ה ]| 81< "וח"=6!855 ח578>
<ח508/> <6זכ/> < /51:/8]06-01א> <6זק> <"א"=6!355 ח8ק5>
<ח18.0%;>/508[< "וח"=6!855 ח578>
<שו0/>
<36|קוח5|:%6א/> :
<-- 6005וח00 --!> 1
]אא למפתחי אתרים באינטרנט
<"( )חר 60"= הח 306|קרח6ש:|5א>
<"6|855="6 /|0>
<ח508/>--!;)]|8< "הח"=6!855 ח578>
<ח508/> ]6-0ט51:/81א> <"6|855="0 ח5708>
<ח508/> ;8,06--<"רח"=6!855 ח578>
<שו0/>
<0|3%6ר51:%60א/>
<-- 00176 65] 8% 58 5%( 50 | 680 +'חה0 - 060/06 --!>
<"[6)(=10כץ 0061ח]()06סח"= 36 306|קוח5|:06א>
>01/ 0855="6"<
... ץ0150!8 %ח08) <|> < /סהַַהח-06סח:51א> םק ץד06כ!;0355="0"<8 ח8ק5>
<ח1<80%>/508/> =
<צו0/>
<0|306רח51:%6א/>
>!-- 015 --<
<"()וק"=ח306רח 306|קוח5|:06א>
>0|/ 0|855="6"<
< /סההַהח-06סח:]5א> < "וק"=6!355 ה508> <ה86;?>/508<"וח"=0355 ח8ק5>
"5|:/8|6-01<> "= < /ְהַַהַח-06סח:|5א<> <"*56|600="60 ח5|:107-6806א> =-
<ח508/> ,8.0%?<"וח"=6|355 ח508> <ח508/ > < ה680-ז51:]0א/> =-
<שו0/>
<0|306ר51:%6א/>
<-- 1005 600 066 7656 - (68/65!) 0650600805 זטסחסוו פ)חסוחסום --!>
<"*"= 306 306|קרח5|:06א>
<"6|855="6 /|0>
<שו0>
<ח508> < 5087/> ,/8< "הח"=6!355 ח578>
א<"*:]פא"= 86 ]5|:1א> <"6="6!855החפּח 6סטס%51:801> -
<ח508/> < /6ההח-06סח:]5א<> <6סט51:80071א/>+<)!:51א/> =
<"הח"=6!855 ח508> "*56|606="60 3065|קוח6-ץ|כקה:|5א> =
<ח80%>/508/ =
<שו0/>
<שו0/>
<0|306ר51::6א/>
<--0305ח06500 + 0חוא עחב וסוו %5חהסרח6!ם --!>
<"[ ()006ח]*"= 66הח 306|רח6ש:|5א>
<"6|855="6 /|0>
ו0>
<ח508> < 5087/> ,/8< "הח"=0!355 ח578>
<"306="6!855ח %5|:8007100006> =-
פרק 9: שימוש ב-זפ0ו8 51א ליצירה ותחזוקה של מסמכי 51א
1
2
1
6
1
1
1
1
7
0:
1:
1
31
1
5:
1
1:
1
1
01
11:
2
1
41
51:
1
7:
7
1
01
1:
12:
1
4:
51:
7
203
<6ט0ו51:000א/ >+<)ן:|5א/ >א<"*:|5א"= ח6הרח )]:|%5> =-
<ח508/> < /6הההה-006ת:%51> =
<ח8.05;>/508<"וח"=6!855 ה508> "*50|60="60 3005|קוח6ל-ץ!כקה:|5א> ==
<צו0/> :|
065ה|מןח6)-ץ!קקה:|5א> ו0> 1
<שו0> :10
<ח508> < ח508/> /;)8< "וח"=6!355 ח578> :100
א<"*:]פא"= 80 ]51:1> <"6="6!855החבח 006 51:80א> -
<ח508/> < /6רחהח-06סח:51א> <ססטטוחס3ּ:|פא/ >+<)5|:1> -
<ח508/> ;8:0%<"וח"=6|355 ח528> =-
<שו0/> 14
<שו0/> גוו
<שו0/> :103
<306!קח51::6א/> :104
11
<51:50/!650066%א/> :106
הדרך הטובה ביותר לבחון את הקובץ הזה היא מלמטה למעלה.
רכיבי עלים
הבה נתחיל בשורה 83, בה אנו עומדיס לבצע התאמה לכל הרכיבים שאין להס צאצאים.
התאמת ה-01א (פְאַהּטחַח18 שזסטס |אא) היא ב- *. כיצד אנו יודעים
שתתקבל התאמה רק לרכיבים ללא צאצאים? מכיון, שאנו מבצעים
2 התאמה לכל הרכיבים עם צאצאים בשורה 93, כפי שנראה בעוד זמן קצר.
נזכיר כי !5א עובדת מלמטה כלפי מעלה. לאחר שביצענו התאמה לכל
הרכיבים עם צאצאים בשורה 93, רק הרכיבים שיהיו ללא צאצאים, יתאימו
בשורה 84.
הערה |
אנו מציביס צו0 חיצוני ופנימי, החיצוני לשליטה בהזחה, והפנימי להחזקת התוכן שלנו.
הבה נפרק את שורה 87 לחלקים, שכן מתרחשיס מספר דבריס בשורת קוד בודדת זִו:
<"6!355"= 6רחפח 0006 0ה:|5א> < חהה50> < הה50 / >;8₪]6 < "וח"=6!355 ההק5> | :87
<ח508/> < /סההַהח-06סח:|5א> <שסטטוה:|5א/ >+<)1:|פא/ >א<"*:|פא"= הסה ]%5|:1> =-
<ח508/> 806 <"רח"=01855 ה508> "*56!606="60 8005!כוח6-ץ!קק5|:8א> =
אנו מתחילים ברכיב ח8ק5 שתכונתו נקבעת ל-"וח"=6₪855 (גורס לטקסט להופיע
בכחול). אחר כך אנו כותביס את התוויס ש!8 שיופיעו בדפדפן כסוגר משולש פותת (>).
4 וא למפתחי אתרים באינטרנט
לבסוף, כמו בכל ןא הבנוי היטב, הרכיב ח508 נסגר:
<"6="61855ח 5|:800100005א> < ה508> < ה508/> 86<"וח"=0!855 ח8ק5> - :87
<6ז000ה:51א/ >+<]ו:51א/ >א<"* :[5א"= ה66הח )%5|:1> =-
"* (56|666="60 3005|קרח66-ץ|סכה:|5א> < ה508/ > < /6הההח-06סח:|פא> =
<ח508/> 8.00/<"וח"=6!855 ח508> =-
אחר כך אנו יוצריס חאק5 חדש שהתכונה שלו היא "א"=6855 או "זא"=6!355, תלוי אס
הרכיב הזה הוא ב-6סַספ6וִַח של |5א.
אנו מגדיריס האס יש לנו, או לא, רכיב ב-8650866ח של %51 באמצעות הרכיב וו:!5א,
אשר מפיק את הפלט שלו (במקרה וה האות א) רק אס תנאי המבחן הוא אמת. המבחן
במקרה זה הוא התאמה של האותיות :פא מלוות באפס או יותר אותיות. לאחר שזה
מתבצע, אנו סוגריסם את תגית התכונה, ומשתמשיס בתגית ה-!1א, 6וַהַח-06סח,
הסוגרת את עצמה, כדי להעתיק את הצומת שזה עתה נמצא מתאים (דהיינו, הרכיב
שנמצא מתאיס בשורה 84), וסוגריס את המרוות:
<"6="6|855חחּח 5|:8017100006א> < ה508> < ח508/> ,]8 <"וח"=6!355 ח8ק5> | :87
<ח508/> < /סהההח-06סח:|5א> <שסטטוה:|5א/ >+<)1:|פא/ >א<"*:|פא"= הסה ]%5|:1> =-
<ח8.06;>/508/<"וח"=6!855 ה508> < / "*50]66%="6 2!365וח6+-ץ!קק5!:3<> =
בשלב הבא, אנו קוראים ל-865|מח6-ץְומְק3 כדי לבצע התאמה לתכונות של הצומת.
זה מטופל על ידי שורות אחרות בקוב>-51א, שנבחן בעוד זמן קצר:
<"6="6!855חחּח 5|:8077100₪א> < ה508> < ח508/> ,8 <"וח"=6!855 ח8ק5> | :87
<ח508/> < /סהההח-06סח:|5א> <6סטטוה:|5א/ >+<1:|פא/ >א<"*:|פא"= הסה ]%5|:1> =-
<חה50/ >;80% / <"וח"=6!355 הב 52> < /"*56|60="60 665ה|קוח6-ץ!קקה:|פא> =
לבסוף, אנו מסיימים ברכיב ח508 נוסף, "וח"=6|855, המחזיק את התגית הסוגרת שאנו
יוצריס באמצעות 88%₪/ המתורגם ב- !אדו ל- א5|:06חו!306 136 =" *]0006)(["<
לא ראינו שימוש בסוגריים מרובעיס, כמו כאן, קודס לכן. הס נקראיס בשס
פילטר (זסטוף), להלן הדרך להבנתס. אס היינו כותביס "ז00/88)"=ח6זח, .51 היתה
מוצאת כל רכיב 00 עס רכיב בן ז9פ, ומחזירה את הרכיב זבּפ. אס, לעומת זאת, היינו
כותביס "[87פ]00)"=ח800ח אז %51 היתה מוצאת כל רכיב 100 עס רכיב בן זפם
ומחזירה את הרכיב 00+. כלומר, משמעות הדבר היא, יימצא את הרכיביסם שיש להס
בניס בפילטריי.
פרק 9: שימוש ב-ז6ק|46! |5א ליצירה ותחזוקה של מסמכי |5א | 265
* מצא התאמה לכל רכיב ו-()006ח המחציריס צומת כלשהי, כך שאת ההתאמה הזו יש
לקרוא '"מצא את כל הרכיביס שיש להס צומת כלשהי כבן'י - כלומר, "*מצא את כל
הרכיביס שאינם עלים'י.
שוב אנו יוצריס צו0 חיצוני ופנימי. למעשה, שורה 96 היא כמעט בדיוק כמו שורה 87,
פרט לכך שהפעם אנו לא יוצריס תגית הסוגרת את עצמה; אלא תגית פותחת.
בהמשך, אנו יובריס צו0 שני שיכיל את התוכן (כלומר, את הבניס) של הרכיב שזה עתה
נמצא מתאיסם. לבסוף, בשורות 99-101 אנו יוצריסם ₪ שלישי שיכיל את התגית
הסוגרת.
התאמה להוראות עיבוד
בשורה 77 אנו מבצעיס התאמה להוראות עיבוד, ומסמניס אותן לתצוגה בכחול. הבה
נבחן את שורה 79 ביט אחר ביט, שכן תבנית זו חוזרת עבור רכיביס אחרים גם כן:
< /סוַהַהַח-06סח:51א> < "וכ" =6!355 ח508> < הבכ5/ >?;+]8₪< "וח"=6!355 ההק5> :79
"5|:/8|06-01<> "= < /6הַהח-006ח:|5<> <"*56|606="60 ה%5|:]07-680> =-
<ח508/> ,8.0%?<"וח"=6|355 ח508> <ח508/ > < ה680-ז51:10א/> =
אנו מתחילים עס מרווח שהמחלקה שלו נקבעת ל-"ח" (עבור תווי סימון,
68786005 קטאז18א) ולכן יוצג בכחול. בתוך וה אנו ממקמיס ?8, שיוצג ב- |ואדת כ- ?> :
< /ְהַהַח-06סח:51א<> <"וק"=61355 ה508> <ה846;?>/508<"וח"=0355 ח8ק5> :79
"5|:/8!06-01א> "= < /ְהַַהַח-06סח:|5א<> <"*56|600="60 ח5|:107-686א> =-
<ח508/> 8.0%?<"וח"=0|355 ח508> <חה508/ > < ה686-ז51:]0א/> =
אנו ממשיכיס במרווח שהמחלקה שלו נקבעת ל-"ום" (ח0 60ט10507 0ח66551זק) וגם וה
יהיה בכחול. הרכיב הראשון שאנו רואיס במרווח ה הוא 6וחח-006ח:|5א>, הרכיב
סוגר את עצמו, וממקס את שס הצומת הנוכחי בתוך המרווח. לכן, אס נמצאה
התאמה להוראת העיבוד הראשונה בקוב:
"1.0"=חסו5ז6/ |וחא?>
התוצאה של הִַהַח-06סח:51א> תהיה כתיבת |וחא לתוך תגית ה-ח508 של |חשזח. אחר
כך אנו מתתילים לולאת. ה686-זס):|5א, ועוברים באיטרציה על כל התכונות
("*56!606="60). לכל תכונה שנמצאת אנו מוצאיס את השורה הבאה:
"5|:/8|6-01א> "= < /6ההַהח-06סח:|5א>
המשמעות היא, מקס את שס הצומת, כשאחריו סימן השווה (=), ומימיו לו, ערך
התכונה. שוב, אס אנו מוצאיס את הרכיב:
"1.0"= חסופזסע |וחא?>
6 וא למפתחי אתרים באינטרנט
זה יגרוס לכך שהמחרוזת "1.0"=ח5900ז8/ תיכתב לתוך זרס ה-|אז₪. כשהתכונות
נמצאות במקוס, מרווח זה מסתייס:
< /סַהַח-06סח:51א<> <"וק"=6!355 ח508> <ה846;?>/508<"וח"=0355 ח8ק5> :79
"5|:/8!6-01<א> "= < /סְהַַהַח-06סח:|5א<> <"*56|600="60 ח686-ז5|:10א> =-
<ההכ5/ >;8:0%?< "וח"=61355 ההק5> <ח508/ > < ה680-ז51:)0א/> =
ה-ח508 האחרון יוצר את הסְוגֶר הסוגר, כשלפניו משורשר סימן שאלה.
שוב, אס אנו מוצאיס את הרכיב:
"1.0"=חסו5ז6/ |וחא?>
ה- !דח שנפיק כתוצאה משורה 79 יחיה:
<"6]255="6 /01>
<"וח"=6|855 ח508>
?>
<ח508/>
<"וכ"=0|355 ח578>
"1.0"=חסופזסע |וחא
<ח508/>
<"וח"=6|855 ח508>
<ח508/>
<שו0/>
תוצאת ההצגה של ה- |אד בדפדפן, תהיה השורת:
"1.0"= חסופזסע |וחא?>
בדיוק כפי שקיווינו!
התאמה לרכיבים אחרים
בשורה 69 אנו עושיס ל-06ץ₪061 את מה שזה עתה עשינו להוראת העיבוד. כאן
ההתאמה היא גם כן מעניינת. במקוס לבצע התאמה לכל רכיב שיש לו צומת בן,
מבוצעת התאמה לכל רכיב שיש לו צומת בן מטיפוס 10: כלומר, 6ץ61סם.
6 סא, הוא ה-06ץ861סא שב-ואספ וואא, המוגדר על ידי מניית ה-6מץ דס6ססאווסס.
והי פשוט קבוצה של שמות וערכיס (קבועים) המוצביס כחלק מסטנדרט ה- וואא. ערך
המנייה (6טו3/ 8:60וסוחטחס) עבור הצהרת ה-6קץד זחסוחטססכ הוא 10.
בשורה 61 מתבצעת התאמה להערות !א ובשורות 63-66 הן נכתבות החוצה כהערות וואדו.
בשורות 51-58 אנו מבצעיס התאמה ומציגים קטעי 60414. נשים לב, כי כאן תחמנו
את ה-60414 הממשי בתגיות <6זק> ו- <6זם/>, כך שהדפדפן לא ינסה לשנות את
התצורה הקיימת.
בשורה 44 מתבצעת התאמה לכל רכיבי ה-6סאא6ס והס נכתביס החוצה. כאן אנו
פשוט תוחמיס את הטקסט בתגיות ח508 עס תכונת המחלקה "אס".
פרק 9: שימוש ב-ז606 51א ליצירה ותחזוקה של מסמכי |5א | 267
התאמה לתכונות
בשורה 42 מבוצעת התאמה לתכונות (כפי שהבטחנו שנעשה קודס לכן). הבה נפרק את
השורה הזו:
<"ז"=0!355 ח508> < "6עו650יו" = 50366:!וחא "*6"= ה6+הּוח 66בּ!כוח6+:|5א> :42
51:/8106-01א<> < ח508/>"= <"הח"=6!855 ה508> < ח508/> < /6הההח-06סח:|5א> =-
<6ז8|ק51:0000א/> < ח508/>"<"וח"=6|855 ח508> =-
אנו מתחיליס בהוראה האומרת למנתח תחביר ה-51א לשמר את הרווחיס בין תכונות:
<"%"=6!355 3 52> <"50806="0567/6:|החא "*63"= ה0הח 366|קותס::|5א> :42
51:/8]06-0א> < ח508/>"= <"הח"=6!355 חַהכ5> < הה 5 / > < / סוהְהּחה-06סח:[5א>-
<0|806 51:60 /> < ח508/>"<"הח"=6|855 ח508> =-
אנו יוצריס תגית ח8ק5 שתחזיק את שס התכונה. למשל, אס התכונה היא "זּפ"=100
תגית זו תכיל ססז:
<"%"=6|355 ח508> <"6/6פס "= 50806:|החא "*6₪"= 6ב 66ה|קותס::|5א> :42
16-00ו|51:/8א> < ה כ5/ >"= < "וח "=6!355 ההק5> < חה508/> < /סרההחה-06סח:51א> -
<36|קרח5|:00א/> < ה508/>"<"וח"=0!355 ח58> =-
אחר כך אנו יוצריס תגית ח508 נוספת שתחזיק רק את סימן השוויון ואת המרכאות
הפותחות:
<"%"=0|355 ח508> <"6/6פ0זק"=50806:|החא "*6₪"= 6ב 66ה|קותס::|5א> :42
< /31₪6-01/ע:51<> < חהה50/>"= <"הח"=6|855 ח508> < ח58/> < /6רההח-06סח:51<> -
<61]306+:51א / > < הה50 / >"< "וח"=6!355 ההק5>-
הרכיב )ס-6טו5|:/8א כותב החוצה את הערך (למשל, ז98) ואנו יוצריס תגית ח508
אחרונה שתחזיק את המרכאות הסוגרות.
ראש גיליון הסגנונות
בשורה 37 נמצאת ההתאמה שלנו לרכיבים לא מוכרים. אנו מאמיניס ומקוויס
שלעולסם לא נגיע לכאן (אנו מבצעיס כבר התאמה לכל הרכיבים, מאוחר יותר בקובצ)
אך שמנו את כאן, כדי להוכיח את ההנחה שלנו (כי מתכנתים טובים חוגרים חגורה
וגם גורביס ביריות).
בשורה 7 מותאם רכיב השורש, וכאן אנו יוצריס את הרכיבים , 500>,
<650/6, ומספקים את הסגנונות שישמשו במהלך מסמך ה- ואז₪ המתקבל.
8 וא למפתחי אתרים באינטרנט
בחינת התוצאות
אס נתייחס לתדפיס 9.2, נמצא כי למעשה אנו מסוגליס להציג את קוב ה-)א
במסגרת השמאלית העליונה, בתוך הדפדפן. ווהי התוצאה הנראית של הקריאה
ל-|פא. |1אצוסח5 על המסגרת הזו.
איך אנו יודעיס כיצד נראה ה-1אזח החבוי! מכיון שדפים אלו נטעניס דינמית, אנו לא
יכולים פשוט לבחון את המקור. אס נבחר באפשרות 66זטס5 שפו בדפדפן, נראה רק
את המקור של קבוצת המסגרות. אס נלחצ על הכפתור הימני של העכבר במסגרת
השמאלית העליונה ונבחר ב-"66זטס5 צוסוש", התוצאות הן אכן מאכזבות - ניתן לראות
רק את התגיות . נזכיר כי מסגרת זו מולאה באופןו דינמי, על ידי שימוש
ב- !דח ז6חחו.
ובכל ואת יש לנו פתרון. אנו יכוליס להזין את |א.60803 לתוך ז6קו 6 51א, ולבקש
ממנה לעבד את הקובף, לא עס |פא.!0ה2/ז0סז5, אלא עם |פא. |ואאאוסח5, כפי שמוצג
בתרשים 9.3.
[<51]-] זסזס!קא = 1 הזס)ח! ו/50סזסו - זסקוסו 51< 3
₪ ספ 1005 פפהסוםת אשש ש 6 |
4 ₪ 8 .98| ₪ ₪ 6 ו
4 .
סו | )6 חק | עוסופוה 85והסע8] ה0ז568 | תס הפשופה | קסופ ומוס 6%
|" | 0 [+ והז 6 651 5ס161] 15/%51טאוא/ סה סס1// :ווה [ 65| 431655 |
8 [56 [5א. 2071 /7ו560] :ופא | | 56005 חא 3 כ 3 חס8185> סספ] שטסח1 65אוא605(סזס:8] זום
> 6 < 2
"1.0"=חסו5ז6ץ |וחא?>
8165!םרח56- ץ|סקה :51 >
, . <200%>
<"ץ87רת7ת0!355="50 > <"4="3000) "56!="4| ח56000>
|| זרת 5 ה560%0 <006>
2 3 3
8
זהַה6]. ("ע56|600%0085)"//1. 5וח+ <"4="3001) "8/8|="8| ל
<|8ש%5|:6/> <006>
5חקפ פופ חס + +ססוק
7 <906/>
. 1 <|%5|:608> <"7ם"=0|855 /ו6>
תּהַח5|. ("00ס// 0 2 - שחואחוח+ חו זפת+וט? ץחב 60 6 6/0176 | ץז60ח+ ההַטסחם=
₪ 5 0
2 3 6 = <"8/6|="4]| "ח0!355="56000 ש6₪1>
ופנ <"01855="500000768067 >
טסט 101 יצ 3 ה
שסם 8גוסצ1 !1 ג וג קמה סש 6 262016 !1260 משגוסמ <"16/6!="8 "1355="560000 צוב>
6 1008 8 186 0+ 11660 6 6% +61 6קדס1סוחו 6 הז16סודנג [['6/טר <"8067 16 500000 6 5 5 -
מס 5061 261 ה זדם 160010 מ18110ת166קחג 0 ו
0 6 מס 6 ט'מנגות וז 06100 מ 17918 מה בג 1166ס ט 1 6[גבןקהד : <"01355="77 שו6>
וס הַחואחותץ חו ז6ה+וט+ ץח3 סט שאו 60076 | ץזספת+ תפַטסחם
: 6 כ רח6| רהו !"פא וספת תהַטסזת+
פ'1 [1ונטה ה1זסוו !1 קטפת 08 ,עסו קדו סוס 990 || ה 4% ו 6 5 0
₪ . 08 9 חואז סו הת 9% 50 8% חב צסס|סהת90ס 4
ב | | ספ [6
7:27 0 5+ 8 59 ₪ בו ₪ 4) ₪ פד ₪ ₪ ₪ 6 | הרת ]|
נש | ...4;01050 - זסק!116 פאן8]|.₪ וסופעפ 5 |
תרשים 9.2: קובץ ה- וואא.
פרק 9: שימוש ב-ז46|06! 5א ליצירה ותחזוקה של מסמכי |5א | 269
סקא 1 הזו! ]טסו - סקוו ו5< ב
קפ 1006 55הסשם" אשץ -א0ם 5 |
ו
6וחסו | 46/658] | קסו5 מס 0%
6 ₪ ₪
סופ = 3/0!65- 568100
₪ 3 -₪
סט 80 | כ תח | וגא
* !| | ₪06 [ד וו הק 51 קו046 015%51א/1סח1סס!// יקוה 45| 37055 |
"0 1"=חס650ץ |וחא?>
<200%>
<"4="3000) "6%6|="8! ח56000>
"0 1"=חס)65ש |וחא?>
חב חו 181 ץזביטופיזב3 015013 0ף 6% 0 51א --!|>
-- |5א. 061800055 , ח8ח* ז6!רחו5 חסטרח לוו , סל זוה !ור
- ז56אוסזם
> <066>
"51-ו ד/חַזס. 3או. ואוו : קת "=|5א :5ח|רח)< 6% 50/1656 :51 > 3 8
<""=5ח-:!65 "40|הטת- 0 /ח ד הַ3/0 ו /ויאוצו//: סי" =5 ח!רח< <006/>
<"/"=ח8%0 וח 8%5|קר9ף:[5א>. <"4="3001| "6/6|="8] ח56000>
<|חזת> <005>
<+06> %קפסחסס +0 +ססזוק
>/006<
<0!855="077 ש1>
|- הַחואחות חו זפח+וט? עח3 סף 6או 861016 | 77ז60חל תהַטסחם
,
<5%/6>
0%7ק5/26:8-%ח0+ ; חב 60ע"; ץ|ורח3+-%חס+) *
<-- 00068|087 6|60060% --|>
7;רח16- ח06ח!-%א6+ ;הח64:16|-חוחָזב3 + 6.
- [ח66זףַ:זס|סס+ וס. [6ט!פ:זס|סס+
<5%/]6/>
3 60891
<"0!355="6 /|6>
<"וח"=0!355 ח508>
?7
<5080/>
<"ום"=0!355 ח8ק5>
"0 1"=חסופיופש |החא
<5080/>
<"ח"=0!355 ח8ק5>
60% +0 +ססוק
חמַטסזת+ הַחואחורף חו ופהצ+וט+ צְחב סףָ שאו 61076 | ץזספת+ תהַטסחם
5% 00| 8 5866 0ז 860 6או ,6646% ץ0|םרח= %ח6 רת6!םרחו |['6+ אוסת
וסאי הוה 50 55 חב עְחַ0|0חח60+ ה 30לה6רח6|קרח! שח
+ 6|טז 6חס זפרחטח ערה , חַו₪65 חב 515+|8ח8 חו 6|:676ם 1 6!וח/ר
5 תורוחב סו
פחוא'יוסש א 2667 ח3 ,שבש3 10% פחואיזסעו 9חז0ח 50 6%
ש . 0006 85 ]וזח
-/ % 5 .
ו 108 ר-| [₪3] סוס [₪
ו | הק ₪5 (5: לם בו ש 4 פש 1 ₪ ו 5 6 | |ווופמ
ל | ]..וח| סוס - סוסה ופא . |. 8 0500/0500 ווספוחפוטעפ 5 |
תרשים 9.3: שימוש ב-ןפא. וואשוסח5.
ניתן לראות, כי |חא.60803 עדיין מוצג בחלון השמאלי העליון. החלון הימני העליון
מציג עכשיו את |פא. ]1אששסח5 כפי שהיינו מצפים. אבל, עיקר העניין הוא בחלון
השמאלי התחתון. זהו ה- |ואד₪ שנוצר על ידי |פא.|!וחאאוסח5 - אותו ואדה שנוצר על
מנת ליצור את התצוגה בחלון השמאלי העליון!
אס תביט מקרוב תבחין שאחרי תגית ה-5/6, ממוקס ה-טו6 החיצוני ("6|855="6),
ה-צו0 הפנימי ("הח"=0855), ואחר כך ישנה תגית ח08ף ("חח"=0|855) עס התוויס ?>. אחר
כך תמצא תגית ח508 נוספת ("וק"=6!355) עס האותיות "1.0"=חסופזסע |וחא.
התוצאה הינה בדיוק כפי שחזינו מקריאת ה-51א!
200
הערה |
העליונה.
אם כך, כיצד משיגים את ה"קסם" הזה? בקלות. ה- ואד שהפקנו הוא
אא חוקי, כך שאנו מוסרים את התוכן (המופק על ידי |פא. וואאאוסח5) מיד
בחזרה ל-|פא. ואאוסח5. זה יוצר את ה- !ואזח שיציג את הדף הזה בתצוגה
כפי שאנו רואים אותו!
]אא למפתחי אתרים באינטרנט
כעת משסיימנו עם כל הרקורסיה הזו, ננסה להתמודד עם הבעיה הבאה:
כיצד אנו מביאים לתצוגה את ה-|אזה המוצג במסגרת השמאלית
6 התחתונה בתרשים 79.2 ככלות הכל, אם נציג רק את הקובץ כפי שהוא
כתוב, לא נראה את התגיות. למעשה, זה מה שמוצג במסגרת הימנית
עריכה ושמירה של שינויים
רצינו ש- 6!061 51א תתמוך בעריכה גם של גיליון ה-51א וגס של מסמך אא הקלט.
כדי לראות כיצד יישמנו זאת, נחזור לשורות 71-92 של תדפיס 9.2, שם הוגדרה
הפונקציה זו0ם, ומוצגת כאן שוב כתדפיס 9.4.
תדפיס 9.4
86 50601860 06 01 05חה 60 6 60/6 0 זפ 06 צוסווה // / :71
(ח0= הסטסחנף :72
+ :73
186 5060160 06 0+ 06ח0ז000ז 8 6% // 1
טס 0 )865 חס הכ = 6 "הפש 51
1
0ח5 8 35 6|ו 6+ )0 05ח%0ח60 66 680 // 1
(8!6ע. (ח)||8. 6% 6)006ו ₪680 = 5 זפצ 1
1
<009708)> סַחָזב! 6חס 06 60 6חבז) 6+ +0 %5חה60חה60 66 56% שוסח // 01
(0=חו0ז3ח.50/!6. 0.000 :11
61000:98%; 100% : רו =50/16 6% 00 = 68זב)אסס>" = | דההסהחו. ץ0סט. 1
;"<00009708/>" + "< ;5126:806-ה10; :עו 8-ה סו 0: וסט =
1
6 6 )0 6005 6 60 68זה 6% 6 )0 600605 66 56% ]/ :4
5 = 6טו8ץ. ("0א6 00ם")ו|0.8 :51
1
הסיא טס 016 ₪6 6וח ה 5חסטפ |066ח68 חהּ 6צ53 06 שהוספוט // :7
;(50050)0,2.ח = א6זק זפ 1
;""= ץ50/!6.0150!3. ("58/6" + א6זכ)!|3. +06 :5%
;""= ץ50/!6.0150|3. ("]066ח8" + א6זכ)||3. הסרה טס :0
;"6חסח"= ש50/!6.01503. ("016ם" + א6זכ)||3.%הס וטס :1
] :92
הפרמטר מועבר כשהלחצן נלחצ, כפ שהוצג בשורות 168 ו- 173 בתדפיס 9.2:
<"(טסח0)'1ם"=>6סו!סחס 6=016טןפע 6ו0םח1=סו הסטפ=6ק זטקחו> :168
<"( 0)'50/!65066%ם"=>6ו|סחס 06 =6ט|פע 0=50-06ו חסטפ=6ק/; 6טקחו> :173
כך, הערך של ח יהיה א+טסח1 או 66%ח50/65. אנו משתמשיסם בזה כדי לאחזר את המסמך
במסגרת המתאימה, ומאחסניס ואת במשתנה המקומי 0, בשורה 75:
וו 00 (ח)65רחה.%חסזהק = 0 זפ 51
פרק 9: שימוש ב-ז6ק|36! 5א ליצירה ותחזוקה של מסמכי |5א | 271
אחר כך אנו קוראיס את התוכן של הקובצ כמחרוות, תוך שימוש בשיטה 66ו6807,
המוצגת בתדפיס 9.2. בשורות 81-82 אנו הופכיס את התוכן של המסגרת לאזור טקסט
יחיד:
(0=חו0ז3ח.50/!6. 0.000 :11
; 0:98% ;100% : רםו'=50/16 6% 00 = 68זב)אסס>" = .| דהוהסהחו. ץ00סט. 1
;"<9708)א0ל/>" + "< ;5126:80%-100%; ה 0ז6/: ץורח3-+הסו;0: זט זסס -
ובשורה 85 אנו משתמשים ב- וואזחפ כדי לקבוע את הערך (התוכן) של אזור הטקסט
למחרוזת שקראנו מהקובצ:
5 = 6ט[8ץ. ("0א6 00ם")ו|0.8 :51
כל מה שנותר לעשות הוא להחביא את הכפתור 5018 ולהציג את הכפתורים 58/6
ו-|68066; אה מבוצע בשורות 89-91.
כאשר המשתמש שומר את הקובצ, הוא נכתב לדיסק, ובין אם הוא נשמר או מבוטל,
אנו מחביאיס את הכפתוריס 58/6 ו-|66ח68, ומציגיס את הכפתור +ו0ם.
הצעדים הבאים
בזאת מסתיים מסענו בנושא ]א ו-51א. בפרק הבא נערוך סיכוס קצר של הטכניקות
בהן השתמשנו במהלך הלימוד, ונציג מקורות להמשך הלימוד. תודה על שהצטרפתס
למסע, ואנא זכרו להישאר ישוביס עד שהספר מגיע לסיומו המוחלט.
12 וא למפתחי אתרים באינטרנט
פרק 10
סקירת טכנולוגיות וטכניקות
בפרק זה:
% מבס לאחור
% עריי לא ראינו דבר
% הצעדים הבאים
בפרק קצר וה, נסקור את הטכנולוגיות והטכניקות ששימשו ליצירת ה60דסווסו8
ו-ז06| .51א, ונספק לכס הפניות והמלצות של מקורות להמשך הלמידה. ]א היא
סטנדרט מרגש, המתפתח במהירות, ובעוד שלא קייס ספר היכול להישאר עדכני
במאה אחוזים, לאורך זמן, אנו משוכנעיס שהחומר המסופק לכם בספר זה יהיה
רלוונטי, ואנו מקוויס, שגם מועיל במשך שניס רבות נוספות.
מבט לאחור על מה שעשינו
למרות ש-|א היא שיטה לבניית מידע לאחסון והחלפה, עבודה עם !א, בעצס
עוסקת בטרנספורמציות. אס ניקח בחשבון את העבודה שהושקעה ביצירת ח66דסוופום,
הרי כמעט כל מה שעשינו היה כרוך בהעברת המידע מתצורה אחת לאחרת. כוחן של
]אא ו-51א הוא בכך שהן הופכות את הביצוע לקל מאוד.
במהלך בניית האפליקציות שלנו, השתמשנו בטכניקות רבות ושונות כדי לבצע את
הטרנספורמציות הללו. זה כמובן היה מכוון. רצינו להראות את גמישותס של הכליס
האלו, על ידי ביצוע הדבריס בדרכיס שונות ומגוונות. באפליקציה מסחרית ייתכן
והיינו מנסיס להיות יותר עקבייםס ביישוס הטכניקה, אך מטרת הספר היא להדגים
שיטות רבות ושונות, בתקווה שזה ייתן בידי הקורא את הכליס לבחור בטכניקה
הטבעית וההולמת ביותר, ברגע האמת.
פרק 10: סקירת טכנולוגיות וטכניקות 273
מעבר מ- !וידרו ל- וו דו]א
את הטרנספורמציה הראשונה שלנו, לא אנחנו כתבנו, ואנחנו לא יכוליס אפילו לסקור
אותה, אלא בעקיפין. כזכור, התחלנו כשבידינו מסמכי זס/. רצינו לשמור את המידע
שבמסמכי ה-6זס/ באופן כזה שיאפשר לנו גמישות עם אותס הנתוניסם, כשנרצה
להציגו במדיות שונות, ובפרט על גבי הדפדפו. ניצלנו את היכולות החדשות של סזסו
0 בשמירת קוב סזס/ כקוב ||אדא. כפי שגילינו, מסמך !אדא זה, אומנס מסוג
ואדה, והוא אכן 1אא - אך אינו ייבנוי היטב'י (60חזסת וו₪\) ואינו תואס את צרכינו.
תצורה זו הסתכמה ל- ואדה עס קצת אא מעורב. בעוד שה לא הוביל אותנו לאן
שרצינו להגיע, זה היה צעד ראשון הכרתי, וחסך לנו כמות נכבדת של תכנות.
מאותה נקודה המשכנו לקראת יצירת מסמך !א חוקי ובנוי היטב אשר יתאיס
לצרכינו, ויתאים ל-סדס משלנו. ראשית הפכנו את קובצ הפלט שקיבלנו מ-סזסו
ל- |ואדחא כדי שנוכל להשתמש בכלים של ה-ואא. כתבנו קוד 8 מותאם אישית, כדי
להפוך את הקובצ לתצורת |אזחא - עדיין כמסמך 1א1ו חוקי, אך גם כמסמך הבנוי
היטב בתצורה של |ואא.
7 אם נסתכל רמה אחת מטה, בתהליך הטרנספורמציה מ- ואדה ל-ווזדוא,
הר
נראה כי הוא למעשה מורכב משני טרנספורמציות.
ראשית, השתמשנו במנתח התחביר |אדפו של 15 כדי להמיר אדו
לייצוג אובייקטים בזיכרון. אחר כך, רכיב ה-8 המותאם אישית שלנו סרק
את עץ האובייקטים שבזיכרון זה, והמיר דברים חזרה לייצוג ה-ווזדו]א.
אנו רואים את התבנית הזו לעתים קרובות. אחד היתרונות של וואא (ושל
ואזה) הוא בכך שהייצוג שלה על הדיסק, מופיע בתצורה הקריאה לבני
אדם, אך הרבה יותר נוח ויעיל, לטפל במבנה שבזיכרון באמצעות עץ
האובייקטים.
מעבר מ- וו דא ל- וואא
משביצענו ואת, היה בידינו !אא (אדא) מתוקן - בנוי היטב. אך המסמך היה עדיין
ד בבסיסו: מכוון לתצוגה על גבי הדפדפן, ועסם מבנה פנימי מרומז ברובו, בעוד
שאנו וקוקיס למסמך שאינו מכיל נתוניס לגבי תצוגה, אלא רק נתוניס לגבי תוכן.
בנקודה זו רצינו להפוך את המסמך לתצורת ה-|1א |00688ח68 שלנו, שהיא הדרך בה
אחסנו את התוכן, וממנה נבעו כל הגרסאות האחרות שלנו.
טרנספורמציה וו הושגה למעשה באמצעות שימוש בשלוש טכניקות.
ראשית, ניצלנו כלי נפוצ מאוד: גיליון סגנונות 51א, בעזרתו הפכנו גירסה אחת של וויא
לגירסה אחרת. זה איפשר לנו להיפטר מחלקים ב- |אז שלא היינו צריכיס יותר,
ולשנות את התגיות והמבנה הייחודיים ל- 11 - לתצורה שאליה שאפנו.
4 וויא למפתחי אתרים באינטרנט
אחר כך החלנו שתי טרנספורמציות אחרות, על ידי שימוש בקוד 8/ שיצרנו, בעבודה
עם וספ אא טעון בויכרון. אחת מהן העתיקה כל רכיב מעץ המקור אל מסמך |%סס
חדש, מיקמה אותו במבנה הנדרש, ואחר כך, נפטרה ממסמך ה-0% המקורי. האחרת
ארגנה מחדש את המבנה תוך העברת רכיביס בתוך מסמך ה-וזסס עצמו.
משימתנו הבאה, היתה לפצל את המסמכים, מגודל של פרקים, לייסיפוריס'יי שהס
היחידות האטומיות, אותס נאחסן במסד הנתונים. כאן קראנו שוב את ייצוג המחרוזגת
ב- |ואא לתוך מסמך ספ טעון בזיכרון. הפעם לא שינינו את המקור, אלא רק יצרנו
מספר מסמכי |אספ - אחד לכל סיפור - שניבנו על ידי העתקת רכיבים מהמקור.
כשבנינו כל אחד, השתמשנו בשיטה |חא. כדי להוציא גרסת מחרוזת של ה-|א
לשמירה במסד הנתוניס.
שימוש ב- וואא ו- ו5א להצגת הסיפורים
לאחר שיצרנו את הסיפורים, ושמרנו אותס על פי היררכיית הרכיביס שלהס במסד
הנתונים. רצינו להציגס ויוואלית על גבי הדפדפן. לכן יצרנו גיליון סגנונות 51א חדש,
שהמיר את ה-1אא של הסיפור ל- וואד הניתן לתצוגה באמצעות הדפדפן. מחרוזת
ה- !אא אוחזרה ממסד הנתוניס ונטענה באמצעות () |080%! לתוך מסמך |אספ חדש
מתאים. ה-51א נטען ישירות מהקוב> שלו באמצעות ()080!. כתוצאה מכך, קיבלנו
]ואד שהותזר כמחרוזת ל-ק85, אשר כתב אותו באמצעות 56ח6500ח. שוב, ווהי
תבנית נפוצה במקרה של הצגת |!א.
כדי לבנות את טבלת תוכן העניינים, נקטנו בקו פעולה אחר. במקום לעבוד מקוב או
אובייקט ואא קיימים, בנינו מסמך !אא על ידי שרשור מחרוזות בהתבסס על תוכן
מסד הנתונים. וכך שרשרנו רכיב אחר רכיב לתוך מחרוזת. בביצוע שלנו השתמשנו
בקוד 455; בהפקה של אתר מסחרי, ייתכן וחיינו משתמשיס בפרוצדורה המאוחסנת
במסד הנתונים עצמו, או באובייקט נפרד. ברגע שבנינו את מחרוזת ה- ו1יזא, השתמשנו
בתבנית המוכרת של הפיכתה ל- |ואדז באמצעות גיליון סגנונות 51א.
כדי להדגים עוד יותר את הגמישות של |אא, השתמשנו אחר כך בשתי טכניקות
אחרות כדי להפיק את אותה טבלת תוכן ענייניס. באפשרות הראשונה, שחזרנו בדיוק
את אותו מסמך !ואא, הפעם לא על ידי שרשור מחרוזות אלא בעזרת טרנספורמציית
על קובצ הפרק שב-|א. ה-|ואא שהתקבל היה והה ל-|אא שהופק ממסד
הנתונים, וכך היינו מסוגלים להשתמש באותו גיליון סגנונות ב-%51 כדי להפוך אותו
ל- |דו.
הטכניקה השנייה היתה לשלב את שני מעברי ה-51א לאחד. כאן יצרנו גיליון סגנונות
ב- 51א שעבר ישירות מקוב הפרק שב- וואא ל- |ואדח המבוקש.
אחר כך ביצענו שינוייס לגבי אופן הצגת הסיפורים - אחת עבור דפדפניס פשוטים,
ואחרת שהגדילה את היכולות של הפלט, כדי שהמשתמש יוכל לבצע פעולות של
העתק/גזור והדבק על טקסט. וה הראה כיצד, פשוט על ידי שינוי גיליון סגנונות .51א,
אנו מסוגליס להפיק פלטים שוניס שיתאימו לצרכיסם שונים. וזה הרי כל הרעיון!
פרק 10: סקירת טכנולוגיות וטכניקות | 275
1 בצד הלקוח
עד לנקודה גאו, כל העבודה שלנו התבצעה על השרת. בדפדפו השתמשנו רק כדי להציג
את התוצאות.
למעשה, קשה לראות זאת אס הכל רצ על מחשב אחד. המודל בכל אופן, אמור היה
לטפל בקבצים, במסגרת הענייניסם השוטפיס במשרד ו/או בשרת האינטרנט לפני
שליחת ה- | ד לדפדפן הלקות.
בעבודה שבצד השרת, לא ניצלנו את היכולות של הדפדפן לטיפול ישיר ב- |אא. אך
ב-ז 6!06 51א כן השתמשנו בחלק מן היכולות שבצד הלקוח. כאן השתמשנו באיי ]א
בתוך דף 1אז4, וניצלנו את התמיכה המובנית של הדפדפן בטעינת ]א וביצוע
טרנספורמציות ]5א%. כפי שראינו, רק 155 תומך ב|5א, וגם הוא תומך רק
בטרנספורמציות, מה שבמקרה שלנו, היה מצויןו.
היתרון של עיבוד בצד הלקות, מתבטא בכך שאנו לא צריכים זכויות
אדמיניסטרטיביות מיוחדות; למעשה, איננו צריכיס בכלל שרת! נשים לב, כי למרות
שאנו עובדיס עכשיו בצד הלקוח, אנו עדייו משתמשיס באותם אובייקטיס ושיטות של
]אא כפי שהיינו משתמשיס בהס בעבודה בצד השרת. הטיפול ב-|א אינו תלוי
במיקומו.
החיסרון הברור, כאמור, (נכון להיוס), הוא ההגבלה לסוג דפדפן אחד, 6%חזססח1
5 זסזס|קאם, וצריך להתמודד עס מגבלות האבטחה השונות שהן חלק מדפדפן זה.
האפליקציה ז6ק! 6 51 היתה דוגמה טובה לחלק מן הדבריםס שניתן לבצע בצד
הלקוח, בסביבה מתאימה.
וזה עוד לא הכל!
אס הגעת לנקודה זו, ללא ספק הכרת את הכלים המרכזיים של |ואא. מזל טוב!
ובכל ואת, יש עוד!
למרות שזו טכנולוגיה חדשה יחסית, תוספות חדשות נכנסות לשוק מיוס ליוס בקצב
מסחרר. אף ספר לא יכול לתאר את כל הדרכיס האלו בפירוט, מכיון שהגלגל עדיין
מסתובב, עס זאת, נוכל להמליץ לך להתפתת בכיווניס שוניס בתחוס זה, בעיקר
לכיווניס הנכוניס והמבטיחים..
פיתוח המפרט
למרות ש-1א עצמה הגיעה לשלב המלצות ב-36), מתרחשת עדיין עבודה רבה
להרחבה ופיתוח של המפרט. ניב ה-51א שהבאנו בספר זה היה רק בשלב טיוטה
להמלצה בעת שיושם על ידי 670506 עבור 155, אך חלק הטרנספורמציות ב-51א
(הקרוי כעת ד51א) נדון לאחרונה כהמלצה. ישנה התקדמות גם בחלק העיצוב ב- |5א.
6 וא למפתחי אתרים באינטרנט
התאמה למפרט
בנוסף לעבודה על המפרט, ישנו מאמצ מתמשך מצד הספקים להתאמת המוצרים
שלהס למפרט, במקביל להוספת הרחבות ומאפיינים המוגנים בזכויות יוצריס. מומלצ
להתעדכן לעתיס תדירות ב-0:זס.36.אוצוצו וגס באתרי הספקיס השונים כדי לעקוב
אחרי הטכנולוגיה המתפתחת הזו.
מאפיינים בצד הלקוח
למרות שלא העמקנו רבות ב-ז6ק!6 .51 בטיפול בצד הלקוח, ישנס מאפיינים רביס
אחרים בצד הלקות המיושמים ב-155. ניתן לצפות ישירות ב-|אא באמצעות גיליון
סגנונות מובנה בברירת מחדל. ניתן לצפות ישירות ב- |וא גם על ידי שימוש בהתאמה
של 655 לעיצוב של מסמכים. דף ה- 1א יכול להתייחס לגיליון סגנונות מפורש ב-51א
או לטפל בתוכן שלו באמצעות תסריט בצד הלקוח. בסביבה שבה ברירת הדפדפן יכולה
להיות מצוינת, זה פותח אפשרויות רבות.
פזפ
ספר זה השתמש ב-סדפ לציון הסכימה של מסמכי ה- |אא. 5ספדס מוכרים לכל מי
שהשתמש ב-56%1, וישנס כליס שיש להס יכולת לעבוד אתם. אך עבודה עס פסזס
בסביבת ]יא עשויה להיות מוזרה: התחביר של השפה די שונה מ- |ואא, לא ניתן לגשת
או לשנות את המידע שב-סדס מה-ס, ל-51א אין כל דרך לגשת או לציין מידע
ב-סדפ, וחלק ניכר מהמגבלות של השפה עצמה נראה לא ברור ושרירותי. אפילו
בשימושיס הפשוטיס ביותר ב-5שדס בספר זה, היינו חייביס לבצע עבודה רבה כדי
להשיג את הפונקציונליות שרצינו. הקושי העיקרי בידי מפתחי וויא הוא שהמונח א
מכיל מספר שפות שונות שיש לשנן: תחביר נדרש ל- !אא בנוי היטב, 51א ו-סדס. בעוד
ש-51א דומה למפרט |אא ובנוי עליו, סםדם היא ממש שפה נפרדת.
החדשות הטובות הן, ששפות סכימה חדשות תופסות מקוס מרכזי בשוק. הטכניקה
המובילה כיוס, היא טכניקת הייסכימות'י של יימיקרוסופטיי, שהיא מסמך ווא בפני עצמו.
563 .|4!א
ישנן מספר הצעות וטיוטות להמלצה עבור שפת מפרט סכימטית (608ח56 |1י!א), שהיא
יותר טבעית ל- !ואא. 155 מיישס את 56688 |אא, שהיא מבוססת על 8זהַס- ואא ועל
060 (שניהס הערות של 36/)). 566008 1אא נותנת את ההזדמנות לבטא מידע סכימטי
באופן הרבה יותר גמיש ועקבי, אך עס הסיכון שהפרטים של המפרט ישתנו ככל
שתתפתח. כאמור, המובילה את השימוש בסכימות היא יימיקרוסופטיי, ויש הגורסים
כי טכניקה זו תתפוס יותר ויותר מקוס מרכצזי, כבר בעתיד הקרוב.
יכולות אחרות של שרתי .501
אחסנו את נתוני ה- |ואא במסד נתוניס שגרתי של 501, בייצוג מחרוות. לא ניצלנו ממש
את היכולות הבנויות של ז6אז 56 501. למעשה, היינו יכוליסם לאחסן את כל קבוצת
הנתוניס שלנו כמסמך !אא אחד גדול ולהשתמש ביכולות השאילתות של |5א (למשל,
פרק 10: סקירת טכנולוגיות וטכניקות 277
<ח680-ז5!:)0א>) או של סכ (למשל, ()56!66%0065) כדי לחלצ מהקובצ רכיביס
שרצינו. כמובן שאז חיינו מוותריס על היתרונות של מפתוח, גיבוי, כלי מסד נתוניסם,
וכן הלאה, אך עבור קבוצות נתוניס קטנות, זו עשויה להיות גישה סבירה ללא הוצאות
התקורה של מסד נתוניס מלא.
אינטגרציה של !וא עם מוצרים אחרים
ספקי מסדי נתונים רביס הודיעו על תוכניות לשלב יותר ]אא במוצריםס שלהם. למשל,
5 ז507/6 .501 המתקרב (מכונה "חסווח5") צפוי לתמוך לחלוטין ב- |אא. שפת +45
(שס ומני) תביא שיפוריס משמעותייס בעבודה עס עמודי שרת דינמיים, תתמוך
ישירות ב- |ואא, כמו גס הגירסה הבאה של 500600 [1508/ ₪65, אשר תכיל מספר רב של
שירותים תומכי |1א. ברור כי התפתחויות מרגשות עומדות להיות בתחוס זה.
1 ססג
1 0ג כוללת תכונות מובנות לשמירה ושחזור של קבוצות רשומות בתצורת !א.
ניתן להשתמש בכך, כמו בתצורה הבינארית הקודמת המוגנת בזכויות יוצריס,
לעקביות, אך מכיון שה-!אא נגיש, ווהי דרך ומינה להשגת מידע מתוך קבוצות
רשומות ולתוכן מאפליקציות או מערכות אחרות.
קדדה. וויא
ביישוס ה- ]אא שב-155 מצוי אובייקט הקרוי קדד ווא. אובייקט זה מאפשר לשלות
ולקבל הודעות בתצורת ]אא בין מחשביס באמצעות סדדה. שימוש ב-סדז להובלה
מסייע בהתמודדות עס הסוגיות הרבות של מערכות הגנה (8|15או6ז), נתבים, ותקשורת
בכלל. מכיון שההודעות הן ב- |ואא, אנו יכוליס להשתמש בכל אחת מהשיטות הרבות
והולכות שבידינו לעיצוב וטיפול בתוכן.
הצעדים הבאים
למרות שאנו מעוניניס להוסיף על מה שקראנו כאן ממקורות רביס אחרים, נראה כי
הכי טוב לצלול הישר לתוך אזסשמ6 זסקס|6ש6 606סזסווא. רשימת המידע רבת
העוצמה הזו זמינה ברשת האינטרנט או על גבי תקליטור. כאן ניתן למצוא מידע
הפניה נרחב כמו גם עדכוניס על היישוס הספציפי למיקרוסופט של המפרט.
משאב חשוב נוסף הוא כמובן האתר של הט הספהס6 60/ 6סו] סחס/
(0ז36.0או. אוצוצו). ישנס גס כן אתריס רביס המוקדשיס לטכניקות ודיונים לגבי ואא,
ובכללס /ט|וחא/וחסס. 80לוח6ז3//:קח ,/החסס.!והא.צווצו//:קאח, וקבוצות הדיון ורשימות
הדואר השונות.
בנוסף, לספר ה תמיכה מלאה, ובכלל זאת עדכונים, טעויות דפוס וקוד מקור, ב-
רה550613%65.60 טס 1 אצ /: כקסת
פשוט צריך ללחו על 800%58.865007065.
8 א למפתחי אתרים באינטרנט
פרק 11
53
| בפרק זת: ן
בהי 5606708 \אל
אזיר בוצבים 8ו6067 \אל
בדיסת חוסיות מסמך .\% מול 5006708 .\אאי
הפיבת' מסימר 0 01 ל-66061703. \ואל
הטכנולוגיה הנקראת 5668 !א הולכת ותופסת מקום מרכזי בעבודה עם .וואא.
פרק זה אינו קשור לרצף הפרקים שבספר, ואינו קשור לפרויקט ח66ד0ו!8106, אלא
מופיע כבפרק העשרה.
מה' ב3ּו6₪ח 56 וווא ?
568 ]א הינה טכנולוגיה חדשה להגדרת סוג מסמך |אא, אשר פותחה על ידי
על פי טיוטה של 36/צ.
שפת הגדרות נוספת? בשביל מה זה טוב?
הרי יש לנו כבר פדפ
סדס יובאה משפת ההגדרות של 56%1 ולכן אינה פשוטה להבנה והיא מעט מסובכת.
68 !]א באה לשנות זאת, על ידי שימוש במפרט הרגיל של |אא וכתיבה פשוטה,
קלה וברורה.
כמו כן, 5606008 |11א מביאה איתה מספר שינויים ותוספות שהיו חסריס ב-סדס.
להלן מספר יתרונות בולטיס בשימוש ב-608ח 56 |א<:
1. 6888ח56 1א% היא מסמך !א. אחת הבעיות אשר מלווה מפתחי |ויא, היא הצורך
ללמוד את המפרט (ה-א8זחץ5) של |ואא, ובנוסף, את מפרט ה-סדס. למעשה, כדי
לדעת !]א עליך לדעת גםס מ דכ. 688ח56 !אא מחדשת בכך שהיא בנויה מהמפרט
פרק 11: 560608 | 279
של וואא בנוי היטב (!ואא ס6חזס? |ופ/)), אותו אנחנו כבר מכיריס. כל שעליך לדעת
הוא אילו תגיות קיימות במסמך 560688 ו!!א.
2 השפה קריאה וברורה לקורא - גס התגיות נראות קלות והכתיבה מסודרת
וברורה יותר לעין. השפה י'מצלצלתיי ברור ומבנה הסכימה נראה הגיוני.
3 אפשרויות נוספות - 56068 !א מביאה אפשרויות נוספות בעת ההגדרה של
רכיבים ושל תכונות רכיביס, אשר היו חסרות ב-סדס. למשל, האפשרות ליצור
תכונות (65טטוז₪ה) לשימוש על ידי רכיביס שונים, וכן, האפשרות לקבוע ערכי
תכונות ייחודיים לרכיביס מסוימים.
4 הגדרת סוגי ערכים - יתרון משמעותי יש ל-8וח6ח56 |ואא על ספדס בכך, שניתן
להגדיר בה סוגיס רביס של ערכים לרכיביס ולתכונות - לא רק טקסט ו-ב דהסס6ס,
כי אם ערכים מקובליס מעולס התכנות, כמו : ז606ח1, זהח0, חה6!ססם, אבסו וכוי.
5 | תמיכה ביימודל פתוח'י |006ו %ח%6ח60 ח6ק0 - לעומת ה-פדס שלא איפשר להציג
רכיביס ותכונות שלא הוכרזו במדויק, ב-608ח56 ]א קיימת האפשרות של
יימודל פתוח'יי לכתיבת רכיביס ותכונות, המאפשר הוספת אלמנטים, מעבר לאילו
המוגדריס בסכימה.
6. שימוש ב-6508005ְחַ8ח - לעומת ה-פזכ, ב-608ה 56 !אא ניתן להשתמש
ב-806508665ח ועל ידי כך, ליצור קבוצת שמות, אשר ניתן לחזור ולהשתמש בהם.
5 מאפשר גס שימוש בהגדרות של סכימות חיצוניות, בומן שב-סדס לא
ניתן להשתמש בו ביותר ממסמך אחד. (את נושא ה-665הס65חח סקרנו בפרק 4).
מפרט 560608 יא עדיין בשלבי פיתוח, אם כי, ניתן כבר להשתמש בו בצד השרת וכן,
בצד הלקוח בדפדפן 5 זסזס|קאם 66חז6שח1 ומעלה. אני ממליץ לעקוב אחר ההתפתחות
בכיוון ּה, מכיון ששיטה וו מביאה איתה אפשרויות חדשות למפתחי |ואא, והיא
תתפוס מקוס מרכזי כבר בעתיד הקרוב.
לפרטים נוספיס על 688ח56 1אא היכנסו לאתר 16050 בכתובת :
כ857.ז0 0618 / רחאו 1.60 050ז6ורח. הפרח שא / : כת
או לאתר 36/ בכתובת :
508 ]וא זס. 3א. אא /: כקת
איך כותבים בּו5676 .וא
כפי שציינתי, 088ח6ח56 !אא היא מסמך יא לכל דבר. לכן, מסמך זה חייב להיות
תואס את הנדרש ממסמך ]אא הבנוי היטב. בנוסף, 568088 !אא מורכבת מתגיות
אשר מייצגות את מבנה הגדרת המסמך. תגיות אלו שייכות ל-6סספפחַַּח ייחודי, הן
תלויות רישיות וחייבות להיכתב בדיוק כפי שאציג כאן.
כמו כל מסמך ]יא יש להכריז בתחילת המסמך על ווא<:
"1.0"=חסו5ז6/ |החא?>
רכיב השורש של המסמך הוא 560808 והוא מכיל את כל יתר התגיות.
0 וא למפתחי אתרים באינטרנט
לרכיב גה תכונה בשס שוח המתארת את שס הסכימה ותכונה בשס פחווחא המתארת
את ה-870650806ח של הסכימה.
בדרך כלל יש לציין שני 08665פ8פוִהח. ה-6סהּספהַהח הראשון של הַחפח56 וואא, חייב
להיות מופנה ל-68%8-|וחא: 1670500-600וח-5606085:חזט, היא הכתובת עבור יישוס ה-
5668 |אאשל 6ספסזסוו!.
כמו כן, אס ברצונך להשתמש בשמות סוגי נתוניס, יש ליצור גס 6סּספחחאח עבור
ה-065ץד 038%8 56688 |1זא, באופן הבא:
"08680/005: 16070500-6070ח-50060085: הזטו"=5:0%ח|רחא
להלן המבנה הכללי של מסמך 8ַח6ח560 .]א :
"150" =6 חח 8וח6ה50>
"88 0-|החא: ה 167050-60רח-6085ה50: חוט"=פח|רחא
<"08%80/065: 1670500-607ח-85ח506: חזוו"=5:0%ח|רחא
>/560608<
קישור 5676703 !יוא למסמך וא
לאחר יצירת 688ח56 |ואא, נרצה לקשר את מסמכי ה- וא שלנו אל הסכימה. כדי
לעשות ואת, יש לשמור את מסמך ה-6808ח56 !אא ולתת לו שס בעל סיומת וואא (שהרי
זהו מסמך |1א).
לאחר מכן, יש ליצור קישור ל-8650866ח ברכיב השורש של מסמך ה-א שלנו,
כמוצג בדוגמה הבאה:
"1.0"=חסופזס/ |וחא?>
< ]156063 / הה516.60ץ ו / / :כ:3וה5606-א" = 5ח!וחא זהסוח6!ם%ססחץו]>
<%ח6ח6!םססחץ]/>
כלומר, בתגית השורש יש להוסיף תכונה בשס פח!|וחא אשר מייצגת 6סהּספחִַאַח, אשר
מקושר למסמך ה-ח6ח56 ]וזא שלנו.
התוספת 88 8ח50-א לכתובת מסמך ה-8708ח560 !וא תפקידה לציין למתרגם (ה-זספזהּק)
כי מדובר במסמך 560608 על מנת שידע מה עליו לבדוק.
פרק 11: 560608 281
רכיב' 3ו6₪ו56 וא
הטבלה הבאה מרכות את הרכיבים (התגיות) של 6088ח56 |וא:
שם רכיב
<560608>
<6מץ 1ח6ח6!= >
<6קץ ד6זטסו) >
<%ח6|66>
<קטסז>
<%6ט800>
>08%80/06<
<חסו0ק06561>
רכיב השורש של כל מסמך 8ַַ6ח 56 !]אא הוא 68ח56. רכיב זה מייצג את המבנה
הסכימתי של מסמך ה- |אא. רכיב זה יכול להכיל רכיביס בניס מסוג 6סץד6זטסחוה,
תיאור
רכיב השורש של מסמך 8ח6ח56 !א
מגדיר סוג של רכיב במסמך !זא
מגדיר סוג של תכונה במסמך !א
מופיע בתוך תחוס ההכלה של התגית
<06ץ %1ח6וח6!ם> כדי להגדיר רכיב בן לרכיב
המוגדר בה.
מופיע בתוך תחוס ההכלה של התגית
<06ץ07ה6ח5|6> כדי להגדיר כיצד רכיביס
בניס מקובציס בה.
מופיע בתוך תחוס ההכלה של התגית
<6מץז0סטפזה> כדי להגדיר תכונה לרכיב
המוגדר בה.
מופיע בתוך תחוס ההכלה של התגית
<6קץז6סטטו)/> או התגית <6קץ דח6וחס|= >
כדי להגדיר את סוג המידע המוכל בהן.
תגית אשר מספקת מידע עבור הרכיביס:
<5006708>, <6כץ 07ח6ח6!=> ו- <6קץ סוס >
חסוקוז0656 ובעיקר רכיבי 6מץ7ח6וח6ום.
כעת, משהכרת את כל התגיות אשר יכולות להופיע במסמך 567608 !וא נסקור אותן
אחת אחרי השניה, כדי ללמוד על התכונות הקיימות לכל תגית כצו.
2 וא למפתחי אתרים באינטרנט
התרשיס הבא מראה את יחסי ההיררכיה האפשריים בין רכיבי 03ח6ח56 |1]/<:
הב
6 ו
ג
6
6
0
בנוסף, כל רכיב יכול להכיל רכיב בן מסוג ח00ק0656.
תרשים 1
יצירת רכיבים בעזרת 6כץ07ח6וח6!=
רכיב ה-06ץ01ח6וח6!= של 8וח6ח56 |1א, מייצג את רכיבי מסמך ה- 1אא. זהו הרכיב בו
נאפיין את הרכיביס/התגיות של המסמך שלנו. למעשה, רכיב זה חופף לתגית ה-סדס
< דאםשוים |₪!>. רכיב זה יכול להכיל את הרכיביס הבניס הבאים: 6קץדססטסוזטה,
טוה ,ה וח6!6, 0800/26 ,הסטק 0656 ו-קטסזם.
המבנה הכללי של רכיב וה נראה כך:
6 ד ח6רח6|=>
"שם הרכיב" = סוחהח
"0סאווח" או "ץ|חכסוס" או "ץ|ח6ם" או "ששקוחם" = יי
"60560" או "חסקס" = 006
"הברח" או "560" או "סחס" = ויוי
< "סוג ערך" = 0:6
<6ס/ 1ח6ח6!/>
כפי שניתן לראות לרכיב ה-06ץ606001!ם תכונות ייחודיות אשר ערכיהן יכוליס להיות
שונים.
פרק 11: 560608 | 283
שוח - תכונה זו הכרחית, והיא מגדירה את שסם הרכיב (התגית) במסמך ה- |וא.
חח 60 - תכונה זו אופציונלית ותפקידה להגדיר את המידע המוכל ברכיב (בתוך
תחוס ההכלה של תגית הרכיב במסמך ה- |ואא).
+ "ץסוח6" - מציין שהרכיב אינויכול להכיל כל סוג של מידע - טקסט או רכיבים
בניס (תגית בודדת).
> "ץוח0א6)" - מציין שהרכיב אינו יכול להכיל טקסט חופשי בלבד, ואינו יכול
להכיל רכיבים בנים.
> "שוחסטו6" - מציין שהרכיב יכול להכיל רכיבים בנים, ואינו יכול להכיל טקסט
חופשי.
+ "0סאווח" - מציין שהרכיב יכול להכיל גס רכיביס בניס וגס טקסט חופשי. זוחי
ברירת המחדל.
0061 - תכונה זו אופציונלית והיא מביאה חידוש משמעותי לעומת סדס בכך
שתפקידה הוא לקבוע האס לרכיב המסויים ניתן להכיל מידע מעבר למידע המוגדר
בסכימה. מידע זה מתייחס הן לטקסט, הן לרכיביס בניס והן לתכונות של התגית,
אשר אינן מוגדרות בסכימה.
להזכירכם, ב-פדס אפשרות זו אינה קיימת, וניתן ליצור אך ורק תגיות אשר הוגדרו
כולן ב-סדס.
התכונה יכולה לקבל אחד מהערכיסם הבאים:
%
>* "חסקס" - ברירת המחדל המציינת כי הרכיב יכול להכיל מידע מעבר למוגדר
בסכימה (טקסט, רכיבים בניס ותכונות נוספות).
+ "60560" - הרכיב יכול לחכיל מידע אך ורק לפי המוגדר בסכימה.
ז6זס - תכונה וו אופציונלית והיא מגדירה כמה רכיביס בניס יכול הרכיב המוגדר
להכיל.
התכונה יכולה לקבל אחד מהערכיס הבאים:
+ "חס" - הרכיב יכול להכיל רק רכיב אחד בן אחד מתוך רשימת הרכיבים
האפשריים עבורו ולא יותר.
+ "560" - הרכיב חייב להכיל את כל הרכיבים הבניס המוגדריס עבורו, על פי סדר
הגדרתם.
+ "שְחהוח" - ברירת המחדל המגדירה כי הרכיב יכול שלא להכיל רכיבים בנים,
להכיל רכיב אחד, כמה רכיבים, או את כל הרכיבים על פי סדר כלשהו.
6 - תכונה זו מגדירה את סוג המידע של הטקסט המוכל ברכיב. אחד ההבדליס
המשמעותיים בין 560608 |אא ו-סדס, הוא השימוש בסוגי מידע. עבור 638ח56 !אא
הוגדרו סוגי מידע ייחודיים, חלקם קיימיס בשפות תכנות מקובלות כמו 8/, ++6, 6,
אה וחלקס חדשיס.
4 וא למפתחי אתרים באינטרנט
להזכירכס, בראש קובצ הגדרות ה-560608 .]א אנו מפניס ל-6ַספוּח של הגדרות
סוג מידע אלו. ללא הפניה זו, לא תוכל להשתמש בהגדרות הסוגים.
את רשימת הערכיס האפשריים תמצא בטבלה שבסוף הפרק. בין הערכיס הקיימים,
תמצא את "סוחח", "6אה08", "זהח6", "ה68|ססס", "זססוהטח", "סחו", "+הס", "פַחו5" ועוד.
הגדרת רכיבים בנים בעזרת %ח6וחס|6
כדי להגדיר ב-6088ח56 !]א היררכיה של אב-בן, יש להשתמש ברכיב 6|6060%.
את תגיות %ח6!606 יש למקס בתוך תחוס ההכלה של 06ץ6060%1!ם או של קטסזם
(הסבר בהמשך). הרכיב %ח6וח6!6 מייצג מופע של אחד הרכיביס שהגדרנו במקוס אחר
במסמך על ידי רכיב 6סץ 1ח6וח6!ם.
התגית %ח6!6006 הינה תגית בודדת. והמבנה הכללי שלה נראה כך:
6% >
"שם הרכיב" = 6
"0" או "1" = 5ז2600)חורח
<] "*" אן "1" = 80200075
₪ 7 = שים לב! קיים הבדל משמעותי בין: 6קץ7ח606!ם !- 6ק %חה6|606.
הערה 6 6 - היא תגית ליצירת רכיב חדש.
ארי 6 %ח6ח6!6 - הוא רכיב +ח6ח6!6 ויש לו תכונה בשם 6פץ.
כפי שניתן לראות, לרכיב +ח6וח6!6 שלוש תכונות ומשמעותן:
8 - תכונה זו היא הכרחית, והיא מגדירה את שם הרכיב הבן, כפי שהוגדר קודם לכן.
5 ווח - תכונה זו אופציונלית, והיא מגדירה את מספר המופעים המינימלי של
רכיב וה, בתוך רכיב האב.
התכונה יכולה לקבל אחד מהערכיסם הבאים:
%
> "1" - ברירת המחדל המגדירה כי הרכיב חייב להופיע לפחות פעס אחת בתחוס
ההכלה של רכיב האב.
+ "0" - הרכיב אופציונלי ויכול גס שלא להופיע בתחוס ההכלה של רכיב האב.
305 - תכונה זו היא אופציונלית, והיא מגדירה את מספר המופעים
המקסימלי של רכיב וּה, בתוך רכיב האב.
%
> "1" - ברירת המחדל המגדירה כי הרכיב חייב להופיע לכל היותר פעס אחת
בתחוס ההכלה של רכיב האב.
> "*" - אין הגבלה למספר המופעים של הרכיב בתחום ההכלה של רכיב האב.
אופן השימוש ברכיבים נעשה בשלבים הבאים:
1. | אנחנו מגדיריס את כל סוגי הרכיבים הקיימיס באמצעות 6סץדח6וח6ום, באופן
מרוכו, על פי סדר ההיררכיה, בתחילת מסמך ה-8ח6ח56 וואא.
פרק 11: 560608 | 285
2 בתוך תחוס ההכלה של רכיבים אבות, או קבוצות רכיבים, אנחנו מציבים רכיבי
666% עבור כל רכיב בן. ייתכן כמובן שרכיב יופיע מספר פעמים כרכיב בן של
רכיבים שונים, לכן את הגדרתו נעשה על ידי 6קץ ז0ח6וח16ם, ואת סידורו ההיררכי
כרכיב בן של רכיב אחר, נגדיר על ידי 666% בתוך תחוס ההכלה של הגדרת
רכיב האב, על ידי 6סץ החסוחסום.
לדוגמה, הבה נאמר כי מעונייניס להגדיר ארבעה רכיביס : רכיב 6וחאח, רכיב ז06ח96,
רכיב זְסְפַהַחוח, ורכיב זסאזסצו. ארבעת הרכיבים מייצגיס שם, מין, מנהל ועובד
בהתאמה. רכיב שוח ורכיב 960067 הינס רכיביס בניס הן של חח ושל זסאזסאו,
ולכן יש להכילס בשניהסם.
נגדיר את הרכיביס הקיימיס. ראשית, רכיבי סח ו-ז006ח46, מכיוון שאלו רכיביס
אשר מכילים אך ורק טקסט, ואינס אבות לרכיבים נוספים, נשתמש בכתיבה של תגית
בודדת ב- |וא (סימן לוכסן בסוף תגית):
"0חו0:0/06="50 "ץןה0א6"= חח 60 "שרה ח"=6וחבח 6קץ דזהסוחסום >
"ח00:06="50 "ץ|ה0א66"=+ח 60 "0 ח6="06וחהה סכץ דזהסוחס!ם >
כעת נגדיר את שני הרכיביס הנותרים, אשר מכילים רכיב שוח ורכיב 960067 כל
אחד. שיס לב שמבנה התגית 06ץ01ח6וח6!ם כאן הוא כמו תגית הכלה, ואילו תגיות
ה-060%ח6!6 הינן תגיות בודדות :
< 560"= 0007 "ץה610"= 0 הזחה "= 6רחהח שק ההסותסום >
<] "26015="1)אהח "20605="1)חורח "שרחה חה"=6כ/ס %ה6וחס|>
<] "8)2005="1 "1 "=5 20 "60 6="0כ/ס %ה6וח0ס|ס>
<6כץ דח רחסו />
< 560"=זס0זס "ץ|ה6|00"=+ח6חהס6 "זסאזסעע"= שרח 6 ההסותס|ם >
"26015="1)א8ח "0605="1)חורח "שרחה ח"=6כ/ס %ה6וחס|>
"5="1ו200)אה "1 "=2065 חור "60 6="0כ/ס %ה6וח0|ס>
<6כץ דח רחסו />
כמובן שכל תגית יכולה להכיל תגית אחרת, כך שאס היה לנו רכיב נוסף בשס
"66ץס|מוח6" אשר מייצג עובד, וחייב להכיל רכיב בן אחד, מסוג 88067 או זסאזסצו
אזי ההכרזה עליו היתה נראית כך:
<"6חס"= 6 0זס "ץ|ח6|00"= חח 60 "66 ץס|סרח6"= שרח שק ההסותס|ם >
"15="1ו260)אה "1 "=5זו206 חור "זה חההרה"=6כ/ס %ה6וחס|>
"00605="1א8ח "5="1ז200)חורח "זסאזסעע"=6כ/ס %ה6וחס|>
<6כץ דח רחסו />
הגדרת הרכיב האחרון בסכימה תהיה הגדרת 6ִכִץְדַח6וח6ו= של רכיב השורש של מסמך
ה- ]א. הדוגמה הבאה יוצרת רכיב שורש בשס |5008ז6ק אשר יכול להכיל מספר
רכיביס בניס מסוג 66ץס|קוחס :
< 560"= 006 "ץ|ח6|00"= חח 60 "8 ח50זסכ"= 6רחהח שק ההסותסום >
"*"=006015א8ח "5="0זו060חורח "66 ץס|קר6="6כ/ס %ה6וחס|>
<6כץ דח רחסו />
6 וא למפתחי אתרים באינטרנט
יצירת קבוצות רכיבים בעזרת קטסיו
הרכיב קטסזף מאפשר יצירה של קבוצות רכיביס. הרעיון הוא ליצור קבוצה המורכבת
ממספר רכיביס לפי סדר, וכפופה לרכיב אב אשר מוגדר בעזרת 6סץ %7ח6ח6!ם. רכיב
הקבוצה הינו רכיב בן של 01/06ח6ח6!= ולכן התגית עצמה תיכתב בתוך תחוס ההכלה
של 6כץ דח6וחסום.
המבנה הכללי של תגית ה-קטסזף נראה כך:
קטסו)>
"1" או "0" = 065 תורח
"*י א 17" = 5זו200)אהרח
<"ץחהוח" או "560" או "סחס" = ויוי
<קטסזם/>
התגית תיכתב בתוך ה-06ץ01ח66ום של רכיב האב של הקבוצה, ובתוך תחוס ההכלה
שלה יסודרו רכיבי הקבוצה בזה אחר זה על ידי הכרזות %ח6|606.
את שמות התכונות של רכיב קטסזף כבר הכרת קודס, הבה נבין את משמעותן עבור
הקבוצת:
5 ווח - תכונה זו אופציונלית, והיא מגדירה את מספר המופעים המינימלי של
רכיב ּה, בתוך רכיב האב.
התכונה יכולה לקבל אחד מהערכיסם הבאים:
%
> "1" - ברירת המחדל המגדירה כי הקבוצה חייבת להופיע לפחות פעס אחת בתחוס
ההכלה של רכיב האב.
%
> "0" - הקבוצה אופציונלית ויכולה גם לא להופיע בתחוס ההכלה של רכיב האב.
5 - תכונה זו אופציונלית, והיא מגדירה את מספר המופעים המקסימלי של
רכיב וה, בתוך רכיב האב.
%
> "1" - ברירת המחדל המגדירה כי הקבוצה חייבת להופיע לכל היותר פעס אחת
בתחוס ההכלה של רכיב האב.
> "*" - אין הגבלה למספר המופעים של הקבוצה בתחוס ההכלה של רכיב האב.
ז66ז0 - תכונה זו אופציונלית והיא מגדירה כמה רכיבים בנים יכולה הקבוצה
המוגדרת להכיל.
התכונה יכולה לקבל אחד מהערכיסם הבאים:
+ "סחס" - הקבוצה יכולה להכיל רק רכיב אחד בן אחד מתוך רשימת הרכיבים
האפשריים עבורה ולא יותר.
פרק 11: 560608 | 287
* "560" - הקבוצה חייבת להכיל את כל הרכיבים הבניס המוגדריס עבורה, לפי סדר
הגדרתס.
+ "שְחאוח" - ברירת המחדל המגדירה כי הקבוצה יכולה שלא להכיל רכיבים בנים,
להכיל רכיב אחד, כמה רכיבים, או את כל הרכיבים לפי סדר כלשהו.
בדוגמה הבאה הגדרתי רכיב 0ַפסוחאוס₪0 המייצג, לצורך העניין, פרטי היפר-קישור
להורדת קוב מאתר ברשת. הרכיב מכיל רכיב בן בשס 6 המייצג את שס הקוב,
רכיב 8050860 למלל חופשי, ואחר כך קבוצה המתארת את פרטי הקוב ומכילה את
הרכיביס 56ח66], 08%6, 8%ז0ס1, 5126 בזה אחר זה:
< 560"= ז0זס "ץ|ה6|00"=+ח6חס6 " 80ס|הצוס"=6רחהח 6קץ ההסותס|ם >
"6="06כ/ס %ח6וחס|>
<] "6="3050860כ/ס %ח6וח0|>
<"6ח067="0ז0 קטסז>
"26ן0/06="5 60060%!>
"זו'זס?"=6/ %ח6רח6!>
<] "0/06="0806 60060%|>
<] "56ח06ו|"=0/06 %ח6ח6!>
<קטסזם/>
<6כץ דח רחסו />
כמובן, שכל רכיב +ח6וח6!6 שצוין כאן, הוגדר כבר קודס לכן בעזרת 6כץ החסוחסום משלו.
יצירת תכונות על ידי 6קץז6)טפוז
תפקידו של הרכיב 6קץדסוטפוז6ה הוא ליצור תכונות, אשר ניתן יהיה להשתמש בהן,
במסמך ואא.
רכיב זה רק יוצר את התכונות האפשריות, הוא אינו משייך אותן לרכיבי ]1אא. את
השיוך נעשה מאוחר יותר בסכימה, על ידי הרכיב סוטטו8.
זה דומה לאופן השימוש ב-06ץ 07ח6וח6!= ו-+ח6ח6|6. כפי שאנו מגדיריס רכיבים על ידי
6 66 ומשייכים אותס לרכיבי אב בעזרת 667060 כך, אנו ראשית מגדיריס
את התכונות האפשריות על ידי הגדרת כל תכונה בנפרד בעזרת 6מץזסזטטוז) ואחר כך
משייכים לכל רכיב |אא שהגדרנו, את התכונות שלו, על ידי רכיבי +ח6וח6!6.
הרעיון הוא לאפשר ליצור תכונות, אשר ניתן להשתמש בהן ברכיבים שוניס. הדבר
דומה לתכונות 90%ו6ח ו-חססוו של |ואדה, אשר יכולות לשמש גם את התגיות 1866,
= ופ ד, ₪850 ותגיות נוספות אחרות.
תגית הרכיב הינה תגית בודדת והמבנה הכללי שלה נראה כך:
6 סטוה >
"שם התכונה" = 6וחהח
"סח" או "פסץ" = 0
"סוג מידע" = 0:6
"רשימת ערכים מוגדרים מראש" = 5
"ערך ברירת מחדל" / ו
8 וא למפתחי אתרים באינטרנט
תגית הרכיב יכולה לקבל את התכונות הבאות :
6 - תכונה זו היא הכרחית, והיא קובעת את שס התכונה המוגדרת.
4 - תכונה זו קובעת האס חובה לתת ערך לתכונה המוגדרת. לתכונה שני
ערכים אפשרייס :
"65ץ" -- חובה לתת ערך לתכונה.
"סח" - אין חובה לתת ערך לתכונה.
6 - תכונה זו מגדירה את סוג המידע של ערכי התכונה. הסוגיס המותריס הס
הסוגיס שהוגדרו ל-8ח6ח 56 !אא (ראה בטבלאות שבסוף הספר). כמו כן, תכונה זו
יכולה לקבל את הערך "חספזסוחטח6".
5 - כאשר ערך התכונה 006 הוא "חסספזסוחטחס6", ניתן ליצור ערכיס
מוגדריס מראש, ולהגדיר אותס ברשימה בתכונה זו. על הערכיס להיות מופרדים זה
מזה על ידי תו רווח.
3 - תכונה זו קובעת את ערך ברירת המחדל של התכונה המוגדרת.
למשל, בדוגמה הבאה יצרתי תכונה בשס 08 אשר יכולה לקבל אך ורק את הערכיס
,חת ,טחד ,60 ,סטד ,חסוא ,חט5 . קבעתי שזוהי תכונה הכרחית, וערך ברירת
המחדל שלה הינו "חטפ" :
סכ סטוה >
"לה" = 6וחהח
"5סץ" = | 60)1]60]
"680 רטחש" = 6
"580 1 גוח ד 60ש סד חסוא הטפ" = 00:/8|065
<] | "חט5" / ו
שיוך תכונות לרכיבים בעזרת שזטפווטבּ
הרכיב 6סטפחש8 הינו רכיב בן של 6פץדחסוח6!ם ותפקידו להגדיר מהן התכונות
האפשריות, (אשר הוגדרו קודס לכן על ידי 6שץ דססטטוז4), עבור הרכיב המוגדר.
התגית של רכיב זה היא תגית בודדת, ובתוכה, בעזרת תכונות משלה, מוגדרת תכונת
רכיב ה- ]אא הנדרש.
תגית הרכיב 6וטטוז3 הינה תגית בודדת והמבנה הכללי שלה נראה כך:
ופוח ה>
"סוג מידע" = 6
"סח" או "פסץ" = | 60000]
"ערך ברירת מחדל" 5 וי
התגית יכולה לקבל את התכונות הבאות:
6+ - תכונה זו הכרחית והיא מציינת את שס התכונה, כפי שהוגדרה קודס לכן על
ידי 6סץד6סטסו6ה.
פרק 11: 560608 | 289
406 - מציין האס התכונה המוגדרת חייבת לקבל ערך על ידי הרכיב המוגדר.
לתכונה זו שני ערכיס אפשריים :
"פפץ" - התכונה המוגדרת חייבת לקבל ערך על ידי הרכיב המוגדר.
"סח" = התכונה אינה חייבת לקבל ערך על ידי הרכיב המוגדר.
+ - תכונה גו קובעת את ערך ברירת המחדל עבור התכונה המוגדרת, במסגרת
הרכיב המסוים המוגדר. ערך וה ידרוס את הערך שקיבלה התכונה קודס לכן, בהגדרת
ה-6קץ ז6זטפו6א שלה.
בדוגמה הבאה, יצרתי רכיב בשס 638 בעל התכונות: זס|60, אשר יכולה לקבל את
הערכיס. "ח66זס","6ט!","60ז" ו-"צוסוופץ", תכונה בשס 55060 אשר יכולה לקבל את
הערכים "סטטג" או "|הטחהו", תכונה בשם 690% אשר מקבלת ערך עשרוני ותכונה
בשס ז68ץ המקבלת תאריך. הרכיב ז69 שיצרתי כאן, אינו מכיל רכיבים בניס (תגית
בודדת):
"ץוס!!6ץ הש 106 60" =0:/81065 "חסו טר טה00:0/06="6 "זס|ס6="6וחהח 6כץ דס6טוטחז) >
<]
<] "חר 0:/81065="8060 "חרט ה6="6כ/00:0 וח506/ץ6="5רחהח סכ דס6טוטחץ) >
"06:0/06="1080 "610 "=6רחהח 6כץ דס6טטחז) >
<] "00:0/06="0806 "זה6/ץ"=6רחהח שק ז ססטסום>
< "כו ח6"=ח0 600 "זה6="6רחהח 6 דהסותס|ם >
"60="/65זן60 "סט|ס"=068|6 "זסו|ס6="6כ/ ססטטוה>
<] "65"= 60160 "ססטב"=06130|6 "ו500ץ6="5כ/ס ססטטוה>
<] "65ץ"= 660 "ח0ו6ח"=6כ/ ססטטוה>
"60160="/65 "זה6ץ"=6כ/ס ססטטוה>
<6כץ דח רחשו />
כאמור, יצרתי כאן רכיב ז63 אשר אין לו רכיביס בניס. אס בכל ואת הייתי בוחר
להוסיף גם רכיבים בנים, הייתי מכריז עליהס לפני כן בעזרת 06ץ01ח06ח6!ם מתאים,
ומוסיף מופעיס שלהס אל תוך תחוס ההכלה של תגית הרכיב ז63 בעזרת 6|60606.
שים לב! בחרתי לקבוע את ערך 66זט60ז של התכונות בתוך תגיות
ה-שטפחשגּ ולא בתגית ההגדרה של התכונות 6סץדסוטפחשה. אפשרות זו
2 היא דוגמה מצוינת לניידות של 560808 |אא. היא מאפשרת לקבוע עבור
אילו רכיבים תכונה מסוימת היא הכרחית, ומותירה את האפשרות ליצור
רכיבים נוספים עם התכונה הזו, שעבורם היא אינה הכרחית.
הערה |
כך, למשל, עבור הרכיב 697 התכונה 6/40% הוגדרה כתכונה לא הכרתית. בהמשך
הסכימה יהיה ניתן ליצור רכיב אחר, שעבורו תכונה זו כן הכרחית.
0 וא למפתחי אתרים באינטרנט
קביעת סוג מידע בעזרת סִִץְבּז03
רכיב 680806 של 608ה56 |6א, יכול להיות רכיב בן של 6ק7ץ08ח6ח6ם או
6 טסו ה.
תפקידו להגדיר את סוג המידע המוכל ברכיב או התכונה. לרכיב וה קיימת רק
התכונה 06:06 אשר ערכה מציין את סוג המידע.
ניתן להשתמש בתגית הרכיב כתגית בודדת בתוך תחוס ההכלה של תגיות הרכיביס
6 זח6וח6!ם או 6קץ דססטטוזאה, באופן הבא:
"ז8ח01:0/06="6 08180/06>
למרות זאת, ראינו כבר כי הן ל-06ץ07ח1606ם והן ל-6קץזפלטפוושא קיימת התכונה
6 אשר מגדירה את סוג המידע. לכן, השימוש בתגית הרכיב 080806 אינו נהוג.
רכיב התיאור חסו%כק1ז0656
רכיב ה-6₪88ח56 !אא האחרון שנותר להכיר נקרא חסטכ0650.
רכיב ה משמש לתיאור של רכיבים, ואינו עובר עיבוד. ניתן להשתמש בתגית הרכיב
בכל מקוס בו תרצו להוסיף הערות, הסבריס או תיאור של אלמנטיס שהגדרתס.
תגית הרכיב הינה תגית מכולה, ובתחוס הכלתה יהיה טקסט חופשל :
<חסםק650)>
...6 30 ד הסק 0650 פוז 30060 1 ץחצצ אוסחא %'חסה 1
...500608 ער הסוצו 506% הח'1 0655 1
<חססק0650/>
בדיקת חוקיות מסמך !וזא מול הּ9ו6₪ה56 !וזא
לאחר שיצרנו מסמך 5606088 |ואא ומסמך |ואא, וקישרנו בין המסמכיס באמצעות
הקישור בתגית רכיב השורש של מסמך ה-!א, היינו רוצים לבדוק את חוקיות
המסמך.
ודאי תיארת לעצמך, כי די בטעינת מסמך ה-!1אא כפי שהוא לדפדפן כדי שזה יבדוק
את חוקיותו.
אך לצערנו, לא כך הדבר. כל שעושה הדפדפן במקרה זה, הוא רק בדיקה האס המסמך
והסכימה בנויים היטב ותו לא. כדי לבדוק חוקיות של מסמך !אא אל מול הסכימה,
יש צורך בכתיבת סקריפט מתאים לכך.
ניתן גם, מצד שני, להשתמש בתוכנית עזר לבדיקת חוקיות. תוכנית כזו, בשס
ז080ו|/ |ו!א, מופצת באופן חופשי על ידי 6070504 וניתנת להורדה מאתר אספ!וו
בכתובת הבאה:
10 | הא רחא 65/6 58 /05 !חס / רו 050.60 ז6ורח. הר /: קת
פרק 11: 560608 291
| 5ססד 5סאזסטבת | אש א0ם ₪ |
* שו | > 3 - ₪ 3 יז | 9 5 הפף | 3 ₪9 - > - ₪ |
|ד הסח 95 3100806 315807 ||[ 0 הסח קוח 855 ס!חייוסט קסי/5זס/\:-) 45| פפסיזמה |
זסזהּ0ו!בּצ ווא
1 סל |ו 8 זסזח
פופ תוס טאו|
0 506 חו 08556 זס
בןן:- 2
:חחח 000 זטסץ 8|/0866/ 0 זח8או טסץ זו אס "חסו080ו|8/" 06 686%
ח0ו8|/080/ ₪
: זא 6ו|8/ 5| 61 זוסץ ?| 566 60 חססנס "6ז8|!08/" פר >6ו|6
=דאפו ואצ
| 55 01 הזוס 7 .סופ ₪015 41 הסוובזסקזסס 0506זסו 1338-2000 >
ו עו נש |[ | סחסס [ 8
א
תרשים 2
כפי שניתן לראות, זוהי תוכנית הבנויה מסקריפט ורבה על גבי הדפדפן.
התוכנית מגיעה בשתי גרסאות, גירסה הכתובה בשפת %קו3567 וגירסה הכתובה בשפת
5%
כמו כן, בתיקיה בה תתקין את התוכנה תמצא שני קבצי |א<:
1. |ותא.ז0ס₪6ז6ה68%/ - מסמך וא המתאר דיווח מזג אויר.
2 |וחא.08ח68%0675606/ - מסמך סכימה המתאים ל- |וא.
התוכנית בודקת שני דבריס:
1 האס המסמך בנוי היטב (האס הוא סס6חחסם ||6/)).
2 האס המסמך חוקי (מתאים להגדרות הסכימה).
כל שנדרש כדי לבדוק מסמך !אא הוא להכניס את מיקוס הקוב בתיבת הטקסט
"08| 50 |זגו 8 זס)חם" ולאחר מכן, ללחוץ על מקש "₪ דג |ג/" שבתחתית העמוד.
הבה ונביט בקבצי הדוגמה אשר מגיעיס עס התוכנית.
להלן תוכן הקוב |וחא.+וס0ק6 6806 :
"1.0"=חסופזטע |וחא?>
<"|וחא. 68560608 /: 8רח5006-א"=5חווחא< דמ סק החש ד =\>
<"הוחזס!ו|68"== וא = דה [5>
<"06!65ח 05 ]"=םוא צך6>
<]"צאא 5 הדח ק"==!( | 56155>
>]1[ 6="31" =="87"/<
>]0/ 6="18" =="65"/<
2 ווא למפתחי אתרים באינטרנט
ץסטסוס עובק
<צך/>
<"58078600"== וה >
"צאאפ"==!( |ה/ 155א5>
"97"== "6="36 [1]>
"64"== "6="17 / ]>
סח סחה שץחהחט5
<צד0/>
<"600ו ה58"=םוהא ץצח >
"צאא ופצ [דח ק"=ם! |ג 155א54>
"78"== "6="26 [1]>
"67"== "6="19 / ]>
<צך/>
<"78051500=] ה58"=םוה )>
<]"צס וס [ץ ודה ק"==ם! | 54155>
"79"== "6="26 [1]>
"58"== "6="14 / ]>
סוהחטח 0ח3 ץסטסוס עובק
<צך/>
<"6666ד"== ]הא צד)>
" ה "=ם! |ה/ 155א5>
"89"== "6="32 [1]>
"52"== "6="11 / ]>
55 חור 5680760
<צד0/>
<ם זה 51/>
< 20750 צוסא"== ]א = זה [5>
<"אזהשוס"= םוא ץד >
<]"צאא ופצ וד ק"==!( | 155א5>
"97"== "6="36 [1]>
"71"== "6="21 / ]>
סווחטח הסחה ץ62זפ ,שְהחטפ עובק
<צך/>
<"חססח6זד"== ]הא צד)>
<]"צס וס [ץ ודה ק"=ם! | 54155>
"90"== "6="32 [1]>
"65"== "6="18 / ]>
סוהחטח 0ח3 ץסטסוס עובק
<צך/>
<"חסס6ס6חוזק"=םוה צד)>
"1 "== !( |ה/ 155א5>
"92"== "6="33 [1]>
"68"== "6="20 / ]>
5 החד
<צך/>
פרק 11: 560608 | 293
<"6א3 ] צ16800/ ססוח/"=םוהא >
<]"ץאא 5"=ם! |ה/ 50155>
"85"== "6="24 [1]>
"70"== "6="21 /0 |>
.ההזה סחה /662ז0 ,56165 6687 ,ץְחחטפ
<צך/>
<ם זה 51/>
<"ח0ס0הוח5ה/"== ]א = דה [5>
<"5686"=ם וגא ץד)>
"1 "== |ה/ 155א5>
"68"== "6="20 [1]>
"59"== "6="15 / ]>
. ץ08 6 +טסחסטסזרם 0 חה חס סהוחובה
<צך/>
< הווא ץ"= םוה צך6>
<]"ץאא ופצ דה ק"=ם! |ה/ 155א5>
"73"== "6="23 [1]>
"57"== "6="14 /% |>
5 אשחוחזסוח 31007 שהחטפ עובק
<צך/>
<"חסרח 60 "= םוה >
<]") א5"=ם! |ה/ 50155>
"35"== "6="2 [1]>
"20"== "7-"=6 /0 |>
הססחז306 6 הו 5החזס6פ/טסח5
<צד0/>
<ם זה 51/>
< דמק= שה דה=//>
תוכן מסמך הסכימה המתאיס נראה כך:
"08%8-|החא: רה 67050-60 -5 6 ת56: חז"= 5ח| רחא 5668 >
<"08%80/065: 116705010-6071ח-085ה5606: תהו"=5:0%ח|וחא
"0חו00:0/06="50 "60="/65ו600 "-)"=6וחפח 6כץ דססטסו/ >
"0ח00:0/06="577 "65"= 660 "-]"=6רחּח 6כץ דססטטו >
<") ) |"=6חחפח 06 דה6וחס|= >
"06="6/ ססטטו8>
"-"=6ק ססטטו8>
<6כץ חס רחסו />
<"6="1חחהח 6 דה6רח6|= >
"06="6/ ססטטו8>
"-"=6ק/ ססטטו8>
<6כץ ח6וחס|ם/>
4 וא למפתחי אתרים באינטרנט
"הסו זר חה00:0/06="6 "65/ץ"=60זוטוסס "=( /"=6וחבּח 6כץ דססטסו/ >
<]")\5%0 אזמ₪ צסטס 6 צסטס וצ ודחההק צאאטפץ דח הק צאאפ"=65טן8ע:00
<"5ם6="51חחהח 06 דה6רח6|= >
"ם( |ה"=6ק/ס ססטטוזה>
<6קץ [0חס רחסו />
"0חו00:0/06="50 "65ץ"=60זווססז "=1]ה)]"=6וחפח 6כץ דססטסו/ >
< "= חח 60 "ץ "= 6רחהח 06 דה6רחס|= >
<]"=ן\"=6ק/ס ססטטוה>
"0/06="50155 60060%|>
"0/06="1 %ח06ח6!>
<]") |"=6כ/0 %ח6ח0|ס>
<6כ [0ח6 רחסו />
<60אווח"=%ח חס6 "= ד [6="5חחהח 6 הה6וחסו= >
<]"=ן\"=6ק/ס ססטטוה>
"ץ [6="61כ/ס %ח6ח6|>
<6כץ חס רח6!ם/>
<"ץ]חכ0ו6"=%ח60חס6 "דקשה ד /"=6חחהח 6 הה6וחסו >
<]"= ז [6="5כ/ס %ה6חס|>
<6קץ [0ח6רתחסו= />
<608ח56/>
קובצ ]א זה הינו חוקי ועומד בהגדרות הסכימה. בבדיקת חוקיות הקובצ בתוכנית
התקבלו התוצאות הבאות:
0 1005 פסאסומה אפ םה שם |
| 9% - 5 - 0 8 0 |
055 וס | תס ג 65| סוסה |
|* שחט|. 4 - 0 3 זב | 9 סו
| 05 81505 | 8170 חא
ז זסז3 ובע וזא
0 |זט 8 זסוחם
סו סו
:]אא 506 חן 085%6 זס
מדפאם
:הסח 000 זנוסץ 8|!866ץ 60 )הפצו טסץ ]| אסט "חסו8|!086/" 06 6%פחס
חסו8|080/ שא
| 8|!0/ 5! א זטוסץ ]| 506 60 חסספנוס "81!0856/" סח >סווס
= דאפו ואצ
8 חב 60חדוס] ||סעצ 18 !וא וטס
8 0
ו ו *
ה אש | |
תרשים 3
פרק 11: 560608 | 295
כעת, הבה נשתעשע עס התוכנית, ונשנה את שס תגית השורש הפותחת ל-ג1טח5 באופןו הבא:
"1.0"= חסופזסע |וחא?>
<"]|הא. 656068 /: 068ח56-א"=>חורתא 3|טח5>
נריצ ונקבל:
₪ קפ 5ססד פפאסאםה אפט 06 ₪6 |
* חן | > | - ₪ ₪ זר | 9 4 0 | 0 4 ₪9 ד > - 9 |
₪6 | חות.05/ 81516 | 8/0 || הזח 65 5551 סוחאוסם תוס > 5 ] 6655 |
זסזה0ו!הע וואא
6
0 |ז 8 זס)חם
4 7770000000 |מאאסמפה טסט
:]אא 506 חן 085%6 זס
שדפק
:הפוח 000 זנוסץ 8|!0856/ 0ם זחפאו טוסץ ]ו אסם "ח0ו81/080/" סח 80%תס
חסו080וו8/ שא
:ו 0ו[8ץ 15 6% זטוסץ ]| 508 60 חסספנוס "81/0866/" סח >סווס
=זגפו ואצ
.5668 כ ד 6 הו 60131760 זסח זוטם ₪560 18 'ה|טחפ' ל 5
[רהאזוס ורב סע "וסז3 !]הש |[וחא !וחא ז6 רוח 3165 35 ס| הצע סו קקס רוס /ץ :)/ / :16 1
1 :006וסידו= ,43 טופס
תרשים 4
קיבלנו הודעת שגיאה, אשר מציינת כי המסמך אינו חוקי. הרכיב 5018 אינו מופיע
בהגדרות הסכימה. באותו אופן נקבל הודעת שגיאה עבור כל הצגה בלתי חוקית של
המסמך.
ההודעה הבאה התקבלה אחרי שהתכונה +חסזחס6 של הרכיב 5096 שונתה מ-"ץחהוח"
ל-"ץ)סוח6" :
₪ פו | 5ססד פפאזסאםת אפ 06 ₪6 |
מו 2 - 9 2 זפ | פע וסנ יפ | 3 8 ₪9 |
₪6 |[ .05 81506 10 8/4 || הזח 65 סח מס וסנ תוס >( 5 ] 6655 |
זסזה3ווהע וואא
0
0 |ז 8 זס)חם
0004 |מאהסקשהוסתפטן
:]אא 506 חן 085%6 זס
|
:הפרח 000 זונוסץ 8|!0856/ 0ם זחפאו טוסץ ]ו אסם "ח0ו81/080/" 6 80%תס
8/0800 שא
:ו 810 5 6% זטוסץ ]| 506 50 הסספנוס "81!0866/" שר אסווס
=זגפו ואצ
06 רו 60 שרע 60 עטס!|ה סח 5 זה6רח6!6 !ור .' ההא 63656673 /צ' :₪16 זטוסחו ששו וב
כרח:
[ההא. 566-ו 6 "11030 [החא [וחא סח 3165 5 305 ס הס ןס >"וס /ש : 0 5
3 :0066וסידו= ,27 :החסטופסק ,7
. הדההדדההררהרה-------------ת 11%%/5"">פְעט סת.'
תרשים 5
6" וא למפתחי אתרים באינטרנט
הפיכת מסמך פדפ ל-בּו6₪ח56 וא
אחד הדברים שמשתמשי ספדס מבקשים לעשות כשהם מגליס את 68ח56 |ואא, הוא
להעביר את מסמכי ה-סדס שלהם לסכימה. ניתן לעשות ואת בשתי דרכים :
1. בעבודה קשה - רכיב, רכיב.
2 בעורת תוכנית מתרגמת.
המרת מסמך מ דפ ל-בּו5660 !וזא בדרך הקשה
אמנס, כשיש תוכניות עזר, אין צורך ייללכלך את הידייס'י. ובכל ואת, כדאי להבין את
המעבר בין ₪ ל-608ח 56 |!אא, מכיוון שהבנה זו תעזור לך להבין את אופייס של
רכיבי 8וח6ח56 41]א טוב יותר.
להלן הצעדיס לתרגוס מסמך כ דכ ל-וח6ח56 ווא.
1. ראשית, יש ליצור את כותרת מסמך 88ח6ח56 ווא.
2 אחר כך נעבור על מסמך פדס מלמעלה למטה. כלומר, מהרכיב העליון לתחתון.
שיס לב שאחד ההבדלים בין פזכ ו-608ח56 !אא הוא אופן סידור הרכיביס
במסמך. ב-סזסם הרכיבים מסודריס מלמעלה למטה לפי סדר חשיבותם,
וב-5606₪088 ]וא תמצא קודס את ההצהרות של כל רכיב ותכונה ובסוף המסמך
ימוקמו הרכיבים לפי סדר היררכיה מהנמוכים ביותר אל רכיב השורש. לכן, עלינו
להעתיק את הרכיביס שבתחילת ה-ד לתחתית מסמך ה-8וחפח56 ואא.
אין די בהעתקת הרכיבים מתגיות ה- <זא 5ם ₪!> של פדס אל תוך רכיבי
6 טסוט של 8ח6ח56 = |!אא, מכיוון שקיימות גם הגדרות לגבי אופן הופעת
הרכיביס במסמך |11א, מספר המופעים המותר, סדר הרכיבים, קיבוצ וכוי לכן, יש
צורך גס לתרגס את אופי ההגדרות הנייל מצורת הכתיבה ב-כ דכ ל-8וחפח56 וא.
הטבלה הבאה מרכזת חלק חשוב מהכפילויות של הגדרות דכ עבור 8הח6ח560 |₪1א<:
צורת הכתיבה ב- פדם צורת הכתיבה ב- ב3וח6ה56 .וויא
סדר את הרכיביס על ידי רכיבי זח6וח6|6
בתוך תגית הרכיב 6סץ%07ח6ח6!ם או קטסום :
<"א6="00חחהח 6 הרוחס >
<] "ח6="56600כ/ס %ח6וח6|0>
<6סץ ] 0ח6רח6!=/>
שימוש בסוגריים לקיבוץצ רכיבים :
<(ח56000) 00%סם דאשום |ם!>
שימוש בפסיק לקביעת סדר הופעת
הרכיביס בואה אחר זה:
<(זסרשוה ,006) אססם דאשום |ם!>
קבע את ערך התכונה ז6זס של הרכיביס
6 טטוצ או קטסזם ל-"500":
<007="560 "א6="000חחח 6כ/ הה6וחס|ם >
<] "6="006כ/ט %ח6וח0ס|>
<] "זסחזטב"=6ק,/0 %ח6ח6!>
<6כץ הח6וחסו=/>
פרק 11: 560608 | 297
צורת הכתיבה ב- פדסם
שימוש ב-6סום לבתחירה של רכיבים:
<(6דפחס! | 06 דדוסת5) 6סט דאשום |ם!>
שימוש ב-6סוש לבחירה של ערכי תכונה:
זס|ס6 151 ודד !>
< 6ט|0 (הססזף | 60 | 6טום) 6כס
שס רכיב בן בתגית < דאםואם |ם!> ללא
אופרטור:
<(ח56000) 00%סם דאשום |ם!>
שס רכיב בן עס הסימן ? :
< (?ח56600) 00%סם דאשום |ם!>
שס רכיב בן עס הסימן + :
< (+ח566000) 0%סם דאםואם [ם!>
8 וא למפתחי אתרים באינטרנט
צורת הכתיבה ב-ה3ו5676₪ !א
קבע את ערך התכונה ז6זס של הרכיביס
6מץ דססטטוזשה או קטסזף ל-"ץחפוח" :
<"ץחהח "= 006 "06ו"=6רחפח סכ הה6רח6! >
"6 06="50041/ח +חסוחס|>
<] "06 דחַהס|"=6כ/ח +ח6רח6|>
<6כץ הח6וחסו=/>
שנה את ערך התכונה 0:06 של הרכיב
6 לטוה ל-"הסחהזסוהטחם" וקבע
רשימת ערכיס מוגדריס מראש ב-00:/8065 :
סכ וטו >
"זס|ס6="6וחהח
"סו זרת וחס"=6ק/0:0
"ח66ז 760 סט!ט"=01:/8|065
<] "סט|ס"=06]8]6
קבע את ערכי התכונה 5זטש6סחווח של
66 או קטסזף ל-"1", ואת ערכי התכונה
5ט006)אוח ל-"1" :
<00%כ 06 ח6וח6|= >
"26075="1)חוח 566000 %ח6רח6|>
<] "02605="1א8ח
<6כץ 6607 / >
קבע את ערכי התכונה פזטש6סחווח של
%ח6ח6!6 או קטסזף ל-"0", ואת ערכי התכונה
5ט006)אהוח ל-"1" :
<00%כ 06 ח6וח6|= >
"26015="0)ח1ח 560600 %ח6רח0|ס>
<] "026005="1)א8ח
<6כץ 660 / >
קבע את ערכי התכונה 5זט066סחוח של
66% או קטסזף ל-"1", ואת ערכי התכונה
0065)אוח ל-"*" :
<00%כ 06 ח6וח6|= >
"26075="1)ח1רח 56600 %ח6רח0|ס>
<] "*"=260175)א8וח
<6כץ 66| />
צורת הכתיבה ב- פדם צורת הכתיבה ב- ב3וח6ה56 .וויא
שס רכיב בן עס הסימן * :
< (*ח56000) אססם דאםואם |₪!>
קבע את ערכי התכונה 5זט066סחוח של
%ח6ח6!6 או קטסזף ל-"0", ואת ערכי התכונה
0065)אוח ל-"*" :
<00%כ 06 1ח6וח6|= >
"5="0זו260)ח1רח ה5660 +חה6רח6|>
<] "*"=260115)א8וח
<6כץ הח6וחסו=/>
ודאי הבנת את הרעיון הכללי. למעשה, ניתן לתרגם כל מסמך מ-כ דכ ל-688ח560 וא
די בקלות. עס ואת, הדרך ההפוכה יכולה להיות ארוכה הרבה יותר, מה גם שאנחנו
לא ממש רוציס לעשות את זה.
בדוגמה הבאה נציג מסמך סדס פשוט, ומיד לאחר מכן, נמיר אותו ל-68ח56 !וא :
<(35515000%2 ,*501060% , +ז568600 , 6וחהח) 6855 דאשוזם 1ם!>
דד !>
סש |קואז1 ב דה60 6וחהּח
<"ר 80" (הההבזכ | עסו | ה80וא) 6כט
<(ד60ק2) ז06ה%686 דאםום |ם!>
<( ד603קא) %ח50106 דאםום |ם!>
<( הק א) 3551503 דאםום 1ם!>
כעת ניגש למלאכת התרגוס ל-560688 |וא.
ראשית, נכתוב את הצהרת |11א ורכיב 500608 :
"1.0"=חסופז6/ |החא?>
"0185556608" = 86 56068 >
"088-| האר 670506-60ור -85 ח5006: חוט"= פח|ותא
< "80/0658 1670508-6070:0וח-85ו60ח56: הזט"=5ח!וחא
<608ח56/>
המלצה! ישנם כותבי |אזח ו- 1אא רביס אשר כותבים את תגיות המסמך לפי סדר
הופעתן במסמך, כך שכל כמה רגעיםס הס עוצריס לחפש האס ישנה איוושהי תגית
מכולה ששכחו לסגור. לעיתים קרובות, הס גם שוכחים לסגור אותן. ב- ואד
הסלחנית ''מחדלים'יי שכאלו עובריס מבלי לשיס לב. ב- |אא הקשיחה זה לא יעבור
בשקט. לכן, אני ממליץ לסגור כל תגית מכולה כבר כשאתם פותחים אותה. אחר כך
תמלאו את תחוס ההכלה שלה בהתאם. כך תחסכו לעצמכס הרבה כאב ראש מיותר.
אגב, באותה הדרך אני נוהג בתכנות - ב-6, או 388, למשל, אני מייד סוגר כל אזור
תחוס בסוגרייס מסולסלים, כמו פונקציות או משפטי =1. הקומפיילר שלי אף פעס לא
צועק עלי בעניין הזה.
פרק 11: 560608 | 299
לאחר יצירת רכיב ה-56768, ניצור את יתר הרכיביס.
כאמור, אנחנו עובריסם על מסמך פדס מלמעלה למטה. לכן, עלינו ליצור רכיב בשס
5. מכיוון שרכיב גה מכיל רכיבים אשר ב-688ח56 !א אמוריס להיות מוגדריס
קודס לכן, נכתוב את תגית הרכיב 06ץ07ח6ח6|₪ בסוף קוב ה-688ח56 !אא ואחר כך,
נמלא את האזור שלפניו בהגדרות שאר הרכיבים.
< 560"=ז00ז0 "ץ|חכ6|0"=%ח6 600 "6!855"= 6רחהח 6כ/ דח רחסו >
<] "*"=820075 "1 "=605)חווח "ה6="6036כ/ס %ה6וחס|ס>
<] "*"=115ו8)0206 "0605="0חרח "500060" =6כ/ס %ה6וחס|>
<] "000015="1א8ח "2605="0)חורח "זחל5ו6="355כ/ס %ח6וחס|>
<] "סוההח"=6ק/ס ססטטו >
"6="0/06ק/ס ססטטוז >
<6כץ דח רחשו />
בבניית הרכיב הנייל השתמשתי בטבלה שבעמוד הקודס.
כעת כל שנותר הוא ליצור את רכיבי 06ץ01ח6ח6!ם של כל יתר הרכיבים ואת רכיבי
6 טסוה של התכונות. להלן הסכימה המלאה:
10(0
"1.0"=חסופז6/ |החא?>
"0185556608" = 86 56068 >
"0808-| הא 670506-600רח-85ח6ת50: חזוו"=5ח|רחא
<"107050-6077:08+80/065רח-085ח5606: תוט"=5ה|רחא
< / "ץ|ח00א6)"=+חה606 "ז6ה686ל"=6חהח 06 דח רחסו >
< / "ץ|ח00א6)"=+ח 60 "60% 5000"= 6רחהח 6 דח רחסו >
< / "ץ]ה00א6ז"= +60 "זה3551568"= 6רחהח 6 ה רחסו >
6 סוס >
"06/ם"=6וחהח
"סרח חס"=010:0/06
"רהז 1159607 118" =010:/81065
< /"חַזה06/80|6="1
"0חו0:0/06="50 "6רהח"=6רחפּח 6קץ דססטסו/>
< 560"= 000 "ץח00ו6"=ח6 60 "6="6!855רח8ח 26 ההסרת6|ם >
<] "*"=00075)א8 "1 "=5ז 060 חור "6 6="0686כ/ם %ה6וחס!ס>
"*"=000075)א8ח "06015="0חורח "%ה06="50006/ם %חסוח6|>
<] "15="1ו0206א8ח "2065="0)חורח "זה6="85515%9כ/ %ח6רח6|6>
"סוההח"=6כ/0 6ססה>
"06/ם"=6כ/ס סזטטו80>
<6כץ 1ח6 6 />
>/5606708<
]אא למפתחי אתרים באינטרנט
המרת מסמך פ דכ ל-ב3וח566 1!א<
בעזרת תוכנית מתרגמת
אחרי שהבנו כיצד פועלת ההמרה מ-כ דכ ל-68ח56 /!ואא, אספר לך שקיימות תוכניות
המרה אשר פותרות אותך מעבודה זו. תוכנית מתרגמת היא פתרון מהיר ונוח, אס כי
לעיתיס רחוקות אתה עלול להיתקל ביינפילות'יי בלתי צפויות, אך זה אמור בעיקר לגבי
מסמכי סדס מסובכים למדי.
מכאן לאן?
על פי המגמות המסתמנות כיוס, 5606088 !אא תלך ותתפוס תפקיד מרכוי בהגדרת
מסמכי א.
את ההתפתחות של 56608 !א מובילה כיוס 1670506 אס כי הסכימה על פי
0% שונתה מאוד מאז פורסמה הטיוטה של 36ו בנושא. גס 36\ מפתחת
במקביל את 88ח6ח56 ]אא שלה. נכון לכתיבת שורות אלו, עדיין לא פורסמה המלצה
רשמית של האיגוד, ונראה כי הדרך עוד רבה לפרסוס ההמלצה הרשמית. בכל מקרה,
ברור הוא כי 670508 עושה הרבה לפיתוח הסכימה, והפיכתה לעובדה קיימת. כבר
היוס יש שימוש נרחב ב-560688 ]א ונראה כי הפשטות, הניידות, והיכולות החדשות
שהיא מביאה איתה, יגרמו לכותבי |אא רביס לאמר תודה ושלוס ל-פד, ולפנות את
הדרך ל-8הח6ח560 |ואא.
כדאי שתהיו שס כשזה יקרה.
פרק 11: 560608 | 301
נספח א'
מדריך מהיר ל-]4!א
לנוחיותכם הוספנו פרק זה, שמטרתו לרכז בקצרה, ולעשות סדר בנושאים העיקריים
של |אא, אשר סקרנו בספר.
החלקים המרכיבים את !א
כמתחיל ב- |אא, תצטרך ללמוד שלושה נושאיס חדשים:
1 !א בנוי היטב (%]א 60חחס+ |61/)
2 סדס ו- וא חוקי
3 |5א
ניתן לומר ששלושת הנושאיסם הנייל מרכיביס יחד את הנושא הנקרא: !וא
]אא בנוי היטב, הוא מסמך בסיסי המכיל את התגיות והנתוניס ברמת התוכנית, ואשר
נכתב על פי כללי המפרט של ||ואא, כפי שמופיעים בהמלצת 36\. סדס הס ראשי תיבות
של חסטוח6כ 6קץד %הסוחטססכ, שהוא מסמך המרכו את תנאי המפרט של מסמך
ה- |אא. ב-פדס נפרט את שמות התגיות המותרות, תכונותיהן וסדר ההיררכיה ביניהן,
על פי דרישותינו.
1 היא שפת גיליונות עיצוב, שרוב כוחה טמון, ביכולות הטרנספורמציה שלה. דרכה,
מעביריס מסמך ]א, על פי דרישות קלט שונות.
מתרגם (זס5זבּק) .וו]א
כדי שנוכל להשיג משהו מקובצ ה- וואא שלנו, יש להעבירו דרך תוכנת תרגוס (זספזפּק),
אשר תפקידה להפיק פלט מקוב ה- !אא על פי דרישתנו. מתרגמיס של !אא ניתן ליצור
לבד, על פי הנחוצ לנו מהתוכנית, או להשתמש במתרגמיס קיימים למשימות שונות.
הדפדפן, לדוגמה, הוא מתרגס לכל דבר. בטעינת קוב %51 אל הדפדפן, הוא יתרגס
אותו ויציג אותו למשתמש. נסה לטעון מסמך !א ב-5 זסזס|סא= ז6חזסזח1 ותיווכח כי
הדפדפן מציג אותו כייעצ מתקפליי, גו ברירת המחדל שלו כמתרגס עבור קבצי !אא
המועברים שלא דרך גיליון סגנון. למעשה, מה שעושה הדפדפן במקרה זּה, הוא הצגת
נתוני המסמך בצורת עצ, על פי הסדר ההיררכי של תגיותיו.
נספח א': מדריך מהיר ל-אא | 303
טרנספורמציית .!5א
גיליון הסגנון %51 הינו מפרט מקובל להצגת סגנונות ב- |אא, וכן ליצירת המרות עבור
מסמכי |]1אא. נכון לכתיבת שורות אלו, עדיין איו המלצה ברורה ל-51א בעל סגנונות
עיצוב, אלא רק עבור תכונות הטרנספורמציה (ההמרות) של 51א. מסיבה זו, הדפדפן
היחידי שתומך ב- ווא, 5 זפזס|קא= 6חז6שח1, תומך אך ורק בתכונת ההמרות של 5א.
להשגת סגנונות ויזּואליים (צבע גופן, צבע רקע, הוחת טקסט וכוי) ניתן להשתמש
בגיליונות סגנון מדורגיס (655). ב-%51 נשתמש בעיקר עבור המרות.
כדי להבין את המושג המרות, נדמיין שברשותנו מסמך !א המפרט שמות ומאפיינים
של כלי רכב. ה-סדס שלו, יפרט מה הן שמות התגיות בהן מותר להשתמש לייצוג תוכן
במסמך ה-1אא, אילו תכונות מותרות בכל תגית, ומה סדר ההיררכיה בין התגיות
(למשל, אפשר להחליט ש-ייחנות רכבים'י היא מרכיב השורש של המסמך, ומרכיב וה
מכיל רכיבים בשם יירכביי, המכיליס רכיביס נוספים). תפקידה של 51א הוא להמיר את
מסמך ה- !אא לפלט נדרש על פי בקשתנו. למשל, כדי להציג את נתוני המסמך לרשת
האינטרנט, יש ליצור מסמך %51 מתאים שידאג להמיר את נתוני ה- |ואא ל- |ואד. או,
כדי להציג את תוכן המסמך בטלפוניס סלולריים, או מכשירים נישאים, יש ליצור
מסמך 51 אחר שתפקידו ליצור המרה של הנתוניס לפרוטוקול קש וכו
התרשיס הבא מתאר את הקשר שבין המושגים הנייל:
עץ מתורגם של
רכיבי 01
מכשיר תצוגה
ו ל
גליונות סגנון
1 :המרות
5
תרשים 1
4 א למפתחי אתרים באינטרנט
וא בנוי היטב (וא נסוחזוס: ווס/צ)
1 בנוי היטב הינו מסמך !וא אשר עומד בתנאי התחביר הקשיחים של המלצת 36//.
ואילו התנאיס :
1
2
3
אסור שתגיות מקוננות יחפפו.
שמות התגיות חייביס להיות תלויי רישיות (6ש60856-560510).
כל התגיות חייבות להיסגר.
ערכי תכונות (%65ט710) חייביס להיות מסומניס בגרשייס.
המסמך חייב להכיל רכיב אחד בדיוק, שיהווה את רכיב השורש של המסמך.
כתיבת !א
בחלקו העליון של מסמך ]א מצויה ההכרזה על סוג המסמך:
< ?"1.0"=חסופזסע |וחא ?>
הכרזת ה-|%%1 אופציונלית, אם כי על פיי מפרט ויא בנוי היטב, יש להשתמש בה תמיד.
חלקו המרכזי של המסמך מורכב מתגיות בעלות שמות של רכיביס. רכיב השורש -
₪6 ₪00% (ידוע גם כרכיב המסמך 6060%!ם %חסותטססכ), מכיל את כל תגיות
הרכיבים:
<000%>
<ח56000>
<1>/006 זס6סק ובר <6>
<ח006>/0650000כ 6סוח ₪<הססקו0656>
<ח0ו5060/>
<ח56000>
<2>/006 ז000ק עבר <6>
<חססק0650/> 00% 06וח רסחה < הססקו0656>
<ח50600]/>
<ח56000>
<3>/006 זסזסק עובר <6>
<חסוסק00%>/0650כ 6סוח 6זסוח 6חכ)<הססקו0656>
ז800/0ום>
<ח50600/>
<000%/>
כפי שידוע ב- |ואדה, תגיות נכתבות בתוך סימני קטן מ- (>) וגדול מ- (<). תגית הסגירה
נכתבת כשלפני שס התגית, מצוי תו הלוכסן (0. הטקסט המוכל, הינו הטקסט שבין
תגית הפתיחה ותגית הסגירה. (תגיות אלו נקראות ייתגיות מכולה'י)
<3>/₪06 זסססק הר <6>
נספח א': מדריך מהיר ל-אא | 305
כלל שלישי במפרט הנכון עבור !אא לעיל, קובע כי כל התגיות חייבות להיסגר על ידי
תגית סוגרת. עם זאת, ייתכנו מקריס בהס נרצה להשתמש בתגיות בודדות, אשר אינן
מכילות טקסט פנימי. ב- |וואז התגית <זט> היא דוגמה לתגיות מסוג זה. תגיות אלו
חייבות להיות מיוצגות ב- ]וא בנוי היטב על ידי לוכסן אחרי שס התגית. לכן, התגית
<זט> ב- ]דחא צריכה להיראות כך: זט> (שים לב לרווח אחרי הלוכסן - אהו מנהג
מקובל, אך אינו חובה). כך, בדוגמה לעיל, התגית ז6ו1860> הינה תגית בודדת.
הוספת הערות
הערות בקוד ה- |ואא (וגם במסמך ה-פדס בהמשך) ניתן לרשוס כפי שנהוג לסמן הערות
ב- !₪1 בין שני הסימנים --!> ו- <--
כפי שאתה רואה, הצגתי את המסמך הנייל בעורת הזחות של טקסט. ווהי צורת הצגה,
שאינה חובה, אבל מומלצת ביותר, לשס הבנת סדר ההיררכיה של רכיבי המסמך.
הוספת סעיפי ה4דה8ספ6
ניתן להוסיף תגיות 60414 אשר יכולות להכיל טקסט, שאינו |אא, ואינו ניתן לעיבוד
על ידי מעבד ה-|א. הוספת הטקסט תיעשה בתוך תגית 60414 בין הכיתוב
]ה דה ס6!>לסגירה<[1 כמודגם :
]ה !>
0 הסוח סח...זא6ל לפ[ 165... 66פזהכ 06 %סח |וואו הסזבּ 0% 35001 פוחז
<ןן
סדפ ו- !וזא חוקי
הסוטוחו)6כ 6קץד +הסוחטססס - פדס הינו קובצ הגדרות אשר מתאר את המפרט
החוקי של מסמך וואא. בתוך הגדרת ה-פדע, יש לציין מהן שמות התגיות המותרות
בקובץ ה- |ואא, מהו סוג הנתוניס שכל תגית יכולה להכיל, מה סדר ההיררכיה שבין
הרכיביס במסמך וכוי
1 חוקי - הינו מסמך !אא אשר עומד במפרט ההגדרות של קוב הגדרת מסמך סדפ.
פדםס - ניתן לכתוב בשתי דרכים :
1 באותו קוב של מסמך ה- ]אא - 50560 פדפ |חזסשח1). במקרה גה הצהרות
ה-פדפ ימוקמו בתחילת קוב ה- |1א.
2 כקוב> נפרד - (0560ט5 דפ |9חז6)אם). במקרה וה יש ליצור קובץ נפרד, אשר יכיל
את הגדרות ה-סדס, ובראש מסמך ה- |ואא, יש ליצור הפניה לקוב ההגדרות.
6 ווא למפתחי אתרים באינטרנט
בניית דפ
כל מסמך סדפ מורכב מ-ייהגדרת סוג מסמךיי - אשר משמשת להגדרת שס המסמך.
יתר ההגדרות, מוכלות בתוך הגדרה זו, כמודגס בתרשיס:
"1.0"=חסופזם/ |!]< ?>
] 00065 םקץצך06כ!>
הגדרות לכל רכיב ורכיב
הגדרות לכל רכיב ורכיב
הגדרות לכל רכיב ורכיב
<ן
כפי שאתה רואה, שס המסמך מצוי בתוך הגדרת ה-םפקצז60סת, ולאחריו, סוגרייס
מרובעיס, אשר מכיליס את יתר ההגדרות הנדרשות עבור המסמך.
כפי שציינתי לעיל, ניתן לכתוב סזפ, כחלק ממסמך ה-!1אא, או כקובצ חיצוני. הדרך
המוצגת בסעיף וה, תואמת את הדרך הראשונה. כדי ליצור סד חיצוני, יש ליצור
הצהרת םקצז06כ בתוך מסמך ה- !אא אשר מובילה למסמך הגדרות ה-פדס.
להלן דוגמה להצהרה כזו:
<"סטס. כ דסץוז" א 551 5אססס =קץד6ספ!>
שורה זו מצהירה כי מסמך ה-\א בנוי על פי ההגדרות המצויות בקוב נפרד בשם:
"060 דסעוא"
במקרה זה, קובצ זה יכיל רק את יתר ההצהרות, ללא צורך בהצהרת 5ק/ד006 נוספת.
הוספת רכיבים להגדרת המסמך
לאחר שהצהרנו על שס המסמך, הגדרת רכיב במסמך נעשית על ידי הצהרת דאפואם ום,
המלווה בשס הרכיב, ובאפשרויות התכולה שלו:
<(+ח56000) אססם דאםואם 1ם!>
הצהרה זו, למשל, מייצרת רכיב מסמך חדש בשס 00%פ, אשר מכיל רכיב ח0ו5660, אחד
או יותר.
בתוך הסוגריים, הצמודות לשם הרכיב, יצוינו שמות הרכיבים, או סוג המידע אשר
רכיב ה (תגית זו) יכול לחכיל.
הגדרת תוכן הרכיב
ברשותנו מספר דרכיס להגדרת תוכנס של רכיבים :
1. הגדרת תוכן יריקי - ניתן להגדיר תוכן ריק על ידי השימוש במילה צדקוים,
באופן הבא :
<דקוים זט דאשוים |ם!>
2 בדוגמה הנייל יצרנו תגית בשס זט, אשר אינה יכולה להכיל תוכן.
נספח א': מדריך מהיר ל-אא | 307
3 הגדרת תוכן כללי - ניתן להגדיר רכיב, אשר יכול להכיל כל סוג של תוכן חוקי.
כלומר, רכיב זה יכול להכיל כל סוג של רכיבים בניס, כטקסט, ללא כל סוג של
הגבלה:
<צאה 0 דאשוי= =!>
בדוגמה זו יצרתי רכיב בשס טו4, אשר יכול יילהכיל הכליי.
4. הגדרת תוכן היררכי - ניתן להגדיר את הסידור ההיררכי של רכיבים בניס לרכיב,
בעזרת שימוש באופרטורים מתאימים. בדרך זו, נדון מייד.
שימוש באופרטורים
בהגדרת הרכיב שלעיל, מופיע סימן הפלוס (+) בצמוד לשס הרכיב המוכל. סימן זה
בא לציין כי הרכיב ח56600 הינו הכרתי ויכול להופיע לפחות פעס אחת, או יותר. סימן
הפלוס (+) קרוי אופרטור.
ישנס אופרטוריס נוספיס, בהם ניתן להשתמש בהגדרות ה-סדפ, נלמד עליהס מתוך
הדוגמאות הבאות:
<(*(עו0 | ח56600) , ?500006 , 006) ח56600 דאםואם |ם!>
דוגמה זו מכילה מספר אופרטורים. ראשית, סימן הפסיק (,) המפריד בין הרכיב 6שט
לרכיב 505006 והביטוי *(עו0 | ח56000). תפקידו של סימן הפסיק (,) הוא לתאר סדר
בין רכיבים, על פי סדר הגדרתם. בדוגמה זו, רכיב ₪6 יבוא לפני רכיב 509066 אשר
יבוא לפני הרכיב המורכב שלאחריו.
לאחר מכן, סימני הסוגריים (), אשר מכילים בתוכם את הביטוי: 0 | ח56000.
סימני הסוגריים (), כמו תפקידם בחשבון, מצייניס כי זהו ביטוי אחד. סימן ה-|
(106פ), מציין תנאי לוגי מסוג י'אויי. כלומר: הביטוי כולו אומר: רכיב מסוג ח56600
או רכיב מסוג עו0. לאחר מכן, מחוץ לסוגריים נמצאת הכוכבית (*), אשר באה לציין
כי הביטוי שבסוגריים כולו, הינו אופציונלי, ויכול להופיע פעס אחת או יותר.
סימן השאלה (?), הצמוד לשס הרכיב 086פ50, בא לומר כי התגית 006פט5 הינה
אופציונלית, ויכולה להופיע פעס אחת, לכל היותר.
לסיכוס, משמעו של כל הביטוי הנייל הינו: 'ירכיב ח56000 מכיל רכיב מסוג שש
ולאחריו, אפס או רכיב אחד מסוג 509006, ולאחריו יכול להופיע -רכיב מסוג ח0סו5000
או רכיב מסוג צו9,והוא יופיע פעס אחת או יותריי.
8 א למפתחי אתרים באינטרנט
אופרטורים לייצוג תוכן של רכיבים
תו | תפקיד
+ | רכיב הכרתי. יכול להופיע פעס אחת או יותר
* | רכיב אופציונלי. יכול להופיע פעס אחת או יותר
1
רכיב אופציונלי. יכול להופיע פעס אחת בלבד
| | רק רכיב אחד יכול להופיע
, | הרכיבים יופיעו על פי סדר הגדרתס
הגדרת תוכן מידע
כל ההגדרות הנייל טיפלו במבנה החיררכי של מסמך ה- ווא. כדי להגדיר רכיב (תגית)
אשר מכיל טקסט, יש להשתמש במילה השמורה בג דמסס6ס.
למשל, הדוגמה הבאה מכריזה על רכיב צו4, אשר יכול להכיל תגית נוספת מסוג צו4, או
טקסט:
< ( דקש | עוס) שו דאשואם 1ם!>
הגדרת תכונות (65פטטווזז4) לרכיבי המסמך
לאחר שיצרנו את רכיבי המסמך, נוכל להגדיר להס תכונות.
להגדרת תכונות לרכיבים, נשתמש בהגדרת ז115ד1א, כשלאחריה, שס הרכיב, שס
התכונה, סוג המידע אשר אותה תכונה יכולה להכיל בסוגריים, וערך ברירת המחדל
של אותה תכונה. הגדרת ה-151 ודד יכולה להכיל רשימה של כל התכונות האפשריות,
בזו אחר זו, כמודגס להלן:
ד15 |דדה!>
0+ ה דהס6 |סעסו
סם |קוא41 ג 60 6הההח
"6טום" ה 601 זסוסס
>
בדוגמה הנייל הגדרנו שלוש תכונות לרכיב ז69, וכן את סוג המידע של כל תכונה,
והצהרת ברירת המחדל.
נספח א': מדריך מהיר ל-אא 309
סוג המידע של תכונה
הגדרת סוג המידע של תכונה, מגדירה את סוג הערך אשר יכולה התגית לקבל במסמך
ה- ואא.
ישנן שלוש דרכיס שונות להגדרת סוג המידע של תכונה:
1 ערך מחרוזתי - ניתן לקבוע ערך ברירת מחדל מחרוזתי, לפי כל מחרוזת הנתונה
בין סימני גרשיים. (בדוגמה הקודמת, קבענו ערך "6טוט" לתכונה זוסוסס)
2 סוג קבוע 260וח6אסד - ניתן לקבוע ערך ברירת מחדל על פי סוגיסם קבועיס מראש.
את הסוגיס אפרט מיד.
3 סוג מוגדר 60פזסוחטחם - ניתן להגדיר סוגים במסמך ה-סדפ, ולאחר מכן,
להשתמש בהם. אדגים ואת בהמשך.
סוגים קבועים 260וח6)סד
ישנס מספר סוגיס קבועיס אשר ניתן להשתמש בהס להצהרות ברירת מחדל עבור
ערכי תכונות. הטבלה הבאה מרכזת את הסוגים הקיימיס:
מילה שמורה הסבר
פז | ערכה של התכונה עבור כל רכיב, חייב להיות ייחודי. לא יתכנו שני
רכיבים בעלי אותו ערך. (ניתן להשוות ואת לי'מפתח-ראשייי
המוכר מבסיסי נתוניס טבלאייס)
סז | ערכה של התכונה מתייחס לערך ה-12 של רכיב אחר.
5 | ערכה של התכונה מתייחס למספר רכיבים אחרים.
צחזאם | ערך התכונה חייב להיות שם של יישות קיימת. (על יישויות
אסביר בעמודיס הבאים)
5זאף | ערך התכונה יכול להיות מורכב משמות של יישויות שונות
קיימות.
אמאסדואא | זוהי מילה המורכבת ממספר אותיות, ספרות, נקודות (.), מקפיס
(-), קו-תחתי ( ), וכן, נקודותיים (:), כל עוד הן אינן בתחילת השס.
5וםאסדואא | מספר מילים אשר מכילות את התווים הנייל.
הדוגמה הבאה, מצהירה על תכונה בשם וחטא|78ז56 של הרכיב אססם, זוהי תכונה אשר
ערכה חייב להיות בלעדי לכל רכיב אססט. כלומר, לא ייתכנו שני רכיבי 0%ספ, אשר
לשניהס אותו ערך וחטא|56788.
<01850=₪+ כ1 הוטצ|5678 אססט 157 ודד !>
0 שא למפתחי אתרים באינטרנט
סוגים מוגדרים 6ַ6ז3ּוסוהשח=
ניתן לקבוע אילו ערכיס יכולה תכונה לקבל.
בדוגמה הבאה, אנו מגביליס את ערכי התכונה זס|וס6 של הרכיב ז63 למחרוצות "60ז",
"ח66ז" או "סטום". (נאמר שרכיב ז68 מייצג קו מכוניות, אשר משווקות רק בצבעיס
אלו), בנוסף, אס התכונה זס!|ס6 אינה נרשמת לצד התגית זסוסס, במסמך ה-וויא, יהיה
ערך ברירת המחדל שלה "68ז":
<"60ז" (6ט|ם | הססוף | 60ז) זסוס6 63 זד15 ודד !>
הצהרת ערך ברירת המחדל של תכונה
הצהרת ברירת המחדל היא החלק השלישי בהצהרת ה-ז15 ודדה.
כפי שהבחנת, בהצהרות ברירת המחדל, השתמשתי במילים שמורות, או בערכיס
אחריס. הערכיס האפשרייס הםס:
פאז - הערך הינו קבוע ואינו ניתן לשינוי. קביעת ערך השונה מהערך המוצהר,
אינה חוקית.
3 ז15 ודד !>
"185%" 100 א 60 50660
>
ספ=חזטס:אא - התכונה נדרשת. המסמך אינו חוקי אס התכונה אינה מופיעה.
]3 ד15 ודד !>
0+ כ1 הטאוג 5
>
ס=ז |קוא1 - התכונה היא אופציונלית. ללא ציון התכונה המסמך עדיין חוקי. למרות
זאת, אי הכנסת התכונה אמורה להוביל להודעת שגיאה של יחידת העיבוד.
3 ד15 ודד!>
סםן |קואז4 ה 6 526
הדוגמה הבאה משלבת מספר הצהרות על תכונות עבור התגית ז68:
3 ד15 ודד!>
0+ 1 הטאה 5
סש |קוז1 ג ד 60 5126
"185%" 100 א 60 50660
"סז" ( 6טום | חססזף | 60 ) זסוסס
נספח א': מדריך מהיר ל-ואא 311
הצהרה על יישויות 1165ח=
יישות היא שס המייצג מידע, אשר ניתן להשתמש בו בכל מקוס במסמך, על ידי
השימוש בשמו. הייישויות הס למעשה קיצורי דרך, או תחליפי טקסט אשר באיס
לייצג טקסט גדול יותר. כך תוכל להגדיר שס יישות למידע או טקסט החוזר על עצמו
מספר פעמיס במסמך, ולהשתמש בו כקיצור בכל פעס שתודקק לכך.
כפי שב- |ואז₪ נעשה שימוש ביישויות כמו ;50פח8 או ;ץק860 המייצגים רווח וסימן
זכויות שמורות (6), גם ב- !אא ניתן להשתמש ביישויות.
קיימיס שני סוגיס של יישויות:
1. ₪61070066 /שסחם - יישות לשימוש במסמך ה-|א - תחליף טקסט אשר ניתן
להשתמש בו בתוך מסמך ה- ]אא עצמו. במקרה זה, יש להשתמש בשם היישות
המוצמדת לסימן האמפרסנד (א) ובסופה סימן נקודה פסיק (;)
;6 הח
2 /06ח זסזסְהּזבק - יישות לשימוש במסמך ה-פדפ - תחליף טקסט אשר ניתן
להשתמש בו בתוך הגדרות ה-סזס. במקרה גה, יש להשתמש בשם היישות
המוצמדת לסימן האחוזים (%) ובסופה סימן נקודה פסיק ;6
;6 הסח %
את היישויות אנו יוצריס בתוך ה-פדס בעזרת ההצהרה צד1דא5, מלווה בשס הקיצור
הרצוי, והטקסט אותו הוא מחליף:
<".20] 15786 זס? ץח8ה0 6375 ₪60 החה 6טוום סחד" קוח0ס6 צדנדא=!>
בדוגמה זו, הכרזנו על יישות לשימוש במסמך ה- |אא. בכל פעס שבה ייעשה שימוש
בקיצור ;86000 - תוחלף מילת הקיצור באותו מיקוס במסמך במחרוזת הארוכה:
".10 (15786 זסז ץח8וח00 6375 60 0ח3 סטום סחד"
כדי להכריו על יישות, לשימוש חוזר בתוך מסמך ה-סזם, יש להוסיף את סימן האחוו
(%) לפני שס היישות בתוך הגדרת ה-עששחם, באופן הבא :
<"זה 6 | חטזססה5 | טפס | קט | סט | טש | 1 | פ | ב דהס6ק+" אס % צדנדאם=!>
דוגמה זו לקוחה מפרק 3 בספר, המדבר על פדפ. הדוגמה תיצור קיצור עבור כותב
ה-פדפ. מכיוון שלאורך מסמך סדפ קיים שימוש חוזר על הכתיבה:
זה | חטז50366 | טס | קט5 | פט5 | ט | | 5 | הדהס6ק
יצרנו יישות בתוך מסמך ה-סדס בשם ;א06, וכעת, בכל פעם שנשתמש בקיצור ;6%0ז%
יישתל באותו המקוס הטקסט החלופי הארוך יותר (בתוך ה-סדס).
לשס הבהרה, בהסתמך על הצהרת ה-צדדאם לעיל - מודגם המשפט הבא:
<*(%א6 %) 06 דאשוים |ם!>
המשפט זהה בדיוק למשפט הבא :
<*(זב3ח6 | חטזססבּכ5 | 30 | קט5 | טט5 | ט | ז | טפ | הדהס6פא) 6סט דאשוים |ם!>
2 א למפתחי אתרים באינטרנט
שימוש ביישויות 150
כמו ב- ואדה, גם ב- !אא ניתן להשתמש ביישויות 150 קיימות. כך, ניתן לייצג תוויס
נסתרים, כמו סימן זכויות שמורות (6), סימן גדול מ- (<) אשר נעשה בו שימוש בייצוג
תגיות.
נספת ג' - טבלאות נתוניס, מציג את הקיצוריס הקיימיס של 150.
שימוש בגיליונות סגנון
כאמור, כדי להציג את תוכן מסמך ה- ]אא כפלט, יש להעבירו דרך גיליון סגנוו, אשר
יקבע כיצד יוצגו תכני המסמך על גבי מכשיר התצוגה.
לצורך כך, קיימות שתי שפות סגנון:
1 56605 50/6 8חו685680 - 655 -- שפת גיליונות מסוגנניס
2 506665 50/16 5]0!6ח%6א6 - 51 - שפת גיליונות הניתניס להרחבה
עד היום, עדיין לא פורסמה המלצה לתקני סגנון של 51א לתצוגה. 51א משמש כיוס
לשינוי מסמך !אא למסמך !וא אחר, בעזרת תכונת הטרנספורמציה שלו.
לכן, כדי להציג מסמכי !אא באופן ויוואלי על גבי הדפדפן, משתמשים כיוס ב-655,
אשר קובע מה תהיה תצורתו הוויוואלית של המסמך.
כדי להפוך מסמך |ואא למסמך !אא שונה (למשל, למסמך | דחא שהוא מסמך ואדה
התואם לדרישות המפרט של |]ואא בנוי היטב) משתמשיס בטרנספורמציית |5א.
שימוש ב-655
לא אסביר כאן את השימוש ב-655, מכיוון שקצרה היריעה מלפרט זאת. תוכל לקרוא
על כך לעומק בספר יי4 |אז למפתחי אתריסם באינטרנטיי בהוצאת ייהוד עמייי.
עס ואת, אדגיס כיצד ניתן להשתמש בגיליון סגנון 655 כדי להציג נתוני מסמך ]וא על
גבי הדפדפן, בהנחה שיש בידיך הידע בהגדרת סגנונות 655.
ראשית, יש ליצור מסמך 655, ולאחר מכן, לקשר בין קובצ ה-1אא לקובצ הגדרות
ה-655, על ידי ההצהרה הבאה, במסמך ה- ו1א<:
"6080||-"= )6 "655 /+א6=")6כ/ 50/1657661-|רחא? >
הצהרה וו תבוא, לרוב, אחרי הצהרת ה-!א. כאשר במקוס המילה ח698!ו יש
להכניס את המיקוס היחסי, ה- 081 בו שמור קובץ הגדרות ה-655.
מבנה קוב ה-655 יהיה מורכב מהגדרות שונות, המורות לדפדפן כיצד יש להציג כל
רכיב ורכיב בדפדפן.
נספח א': מדריך מהיר ל-אא | 313
לדוגמה, הגדרות ה-655 הבאות, מתאימות למסמך ה- ]א הבא אחריהן:
<"1/655א6="60כ/ם 50/|6>
--!>
6
(526:220%-100%
;68:200%!-חוחזהוח
10-36
/
= הא
.
/
הפא/ס
/
--<
>/50/6<
(50/16:09|6-%ח10
1-0;
מסמך ה- !א הבא מקושר לקובצ ה-655 הנייל (נניח ששמו 56/!65.055)
"1.0"=חסופוטע |וחא?>
"50/!65.055"= ]6 "6="66/055כ/ס 50/!65066%6-|החא? >
<6>
<=\/ > הח חח |אט2ט5<= ]>
<6>/60103טו5<חס 601>
<חם)]/ )>
<=] 1451 / > הח528<םו]ה ד5חז= >
<=ן א 5 1/ > חהחה חב <= ]ה 51 |>
<חםא/)0/>
<00%)/>
התוצאה על גבי הדפדפן תיראח כך:
6 1005 55>מסטב= | ו ₪68 6 |
5 חן <> + ₪ 4 5 | 4 וו 530 | 3 9 * יז ₪89 |
| 0 [+ [רתא. הא ירת כ 506:0 25 | 07 8 זס והזח 05/3ח50 טחב. 65חפחחנ סכ :14 5:, זה |
ב 5 וו 2 50770
1
תרשים 2
כלומר, הדפדפן מציג את תוכנה של כל תגית במסמך וא על פי הגדרות הסגנון של
מסמך ה-655.
4 א למפתחי אתרים באינטרנט
שימוש ב-.%51
5 מאפשרת לנו לקבוע עיצובים ויזואליים וסגנונייס עבור כל רכיב ורכיב במסמך
ה-1א. עס זאת, 655 מוגבלת בכך, שאינה מאפשרת קביעת מבנה המסמך מחדש על
פי דרישותינו. כך, לא ניתן להציג סדר על פי רצוננו, השמטת תגיות, הכפלת תגיות,
מיון התגיות וכו
למזלנו, למטרות אלו קיימת 5%א. והתכונה החשובה ביותר שלה היא
ייטרנספורמציהיי. תכונה זו מאפשרת להמיר מסמך וא למסמך וא חדש, הבנוי על
פי רצוננו.
בדומה לעבודה עס 655, כדי להעביר את מסמך ה- |א דרך גיליון סגנון 5א, יש ליצור
ראשית את מסמך ה-51א, ולאחר מכן, לקשר בין הקבצים, על ידי ההצהרה הבאה,
במסמך ה- וויא :
"8ק6!ן="=]6זח "[5א/+א6=")6/ 50/1657066%-|החא? >
הצהרה וו תבוא, לרוב, אחרי הצהרת ה-!א. כאשר במקוס המילה 698₪!ו יש
להכניס את המיקוס היחסי, ה- | בו שמור קוב ה-51א.
כתיבת .51
בנוי כך, שהוא מכיל תבניות. כל תבנית מכילה מידע להצגה על רכיב עץ אחר
במסמך ה- וואא.
כפי שציינתי קודם, אחד השימושים של 51א הוא המרת מסמך |ואא למסמך |!יודוא,
שהוא מסמך !ויז תקני, ויחד עם ואת הוא גם מסמך יא בנוי היטב. כך, למעשה,
ניתן ליצור מסמך !אדא מתוך נתוני !ואא, אשר ניתן להציגן על גבי הדפדפן.
לדוגמה, המסמך הבא, הינו מסמך !אא אשר מועבר דרך מסמך ה-51א שבהמשך.
ה-51א מבצע טרנספורמציה על איברי ה- |א, ועל ידי ייתבניות התאמהיי (מיד אסביר)
הוא יוצר מסמך | דחא הניתן לצפייה על גבי הדפדפן:
"1.0"=חסופזטע |וחא?>
"|5א.206 51א%"=61זח "|5א/%א6="%6כ/ם 50/!65066%-|וחא?>
<60>
<=\/ > הח חח 1=<526]ה]>
<6>/00108טו5<ח0 001>
<חם/ >
<=\ 1851 / > 8חח528<= ]ה 155 >
<=ו א 5 1/ > חהחה חב <= ה 5 ]>
<חםא/)0ס/>
<00/>
נספח א': מדריך מהיר ל-אא | 315
הקוד הבא הינו מסמך 51 בשס קוב "|5א.06כ .51א":
"1.0"=חסופזטע |וחא?>
<"|5א-// ד זס. 3עע. אוצע/ /: כ חה"=|5א:5ח!וחא 5|:50/!6570661א>
<"/"= 806 306|קרח6ס:|5א>
<1ח/>26085 ז1<68>
<%ח0)/> :6רח8] 2"<687'5+"=5226 %חס]>
<] "1₪%/56!600="08 ]6-0טןה%5|:/8>
<] זם>
<ח00]07:>/)0 2"<687'5+"=526 %חס]>
<] "08 ]08/00"=-56|60 ]0-סטןה5|:/8>
<] זם>
<%ח6:>/?0רח3ּ || 5'וסהצו2"<0+"=526 זחס)>
<] "8/0 /56|60="0 )0-סטןה5|:/8>
<] זם>
<06ה|רח51:06א/>
<51:50/!650060א/>
תוצאות טעינת מסמך ה-1א בדפדפן 5 זסזסוקאם ייראו כפי המודגס בתרשיס הבא:
ו 7005 865סעב] | אס 8בם 6 |
* | | <> + ₪ 4 זרב | 4 שוויון) | אפפף | 4 [) (₪ - + - 86 |
0 ₪ תו יחת | קו0מ851י2] 0ס 3 5ההוהחם05/5ה5501 חב 65הטתזטססכן:13 | בויח
5 יזגי)
מ ונמוס :81110 1% 8178 )
6 :020101 7'8ה)
הת התמהגו5 :3110 א[ 11111 10'8יכ)
₪
/ 6 אנט | | ₪
תרשים 3
הסבר
כל מסמך 851 הינו גם מסמך אא בנוי היטב וחוקי. כך ש- 51א מורכבת מתגיות כמו כל
מסמך |ואא. מכיוון ש- 51א הינה מסמך וואא, יש להצהיר בראש המסמך על הצהרת ה- |<:
"1.0"= חסופזסע |החא?>
התגית הראשונה אשר מציינת כי אהו מסמך 51א הינה תגית השורש של המסמך:
<"|5א-// ד זס. 3ע. אוצע/ /: כ ה"=|5א:5ח!וחא 5|:50/!6570661א>
תגית וו מציינת, כי אהו מסמך 51 והיא מפנה ל-650806ח8ח של %51 באתר 36/ש.
(ראה פרק 4 בספר בו מוסבר נושא ה-6סהַּסַפחתִַהּח).
6 א למפתחי אתרים באינטרנט
לאחר מכן, ניתן להשתמש ברכיבי %51 לשסם יצירת טרנספורמציה של מסמך ה- וויא
למסמך !יא חדש. בדוגמה שלעיל, יצרתי שינוי של מסמך ה-1אא למסמך דחא חדש
זמני (בוּיכרון), אשר ניתן להצגה על גבי הדפדפן.
התגית 3+6!כןוח5|:56א
התגית הראשונה בה נעשה שימוש רב בגיליונות 51א, היא תגית התבנית (8%6|סוח6ד) :
<"/"=ח860ח 306|קוח51:%6א>
תגית זו מכילה איזור אשר מכיל התאמות (65ח86!!]) לרכיבי מסמך ה- !אא השוניס.
סימן ה-"/" מציין כי ההתאמה המבוצעת בתחוס התגית הינה למסמך ה-₪ואא כולו.
במקרה זה, תתבצע ההתאמה רק לתגית הראשונה במסמך ה-א. כדי להכיל את
ההתאמה על כל התגיות יש להשתמש בתגית ה5|:0-680א או בתגית
5 ת6ל-ץ!סְק51:3א בהן אדון בסעיפיס הבאיס.
בתוך תגית וו הכנסתי תגיות !אדא על פי הסדר בו רציתי שיעוצב המסמך. שים לב,
שמבנה התגיות שונה מעט מהמבנה אליו התרגלת בכתיבת ואדוח. מהסיבה שזהו אינו
מסמך !ואד כי אם |ואדחא, והוא אא בנוי חיטב (לכן, כל התגיות סגורות, ותגיות
בודדות כמו זפ נראות כך: זט>).
התגית )ס-6ט!ב3ּע:|5א
בין התגיות המוכרות, ודאי ויהית תגיות חדשות בשס שַס-6טו8צ:!5א, תגיות אלו
יישותלות'י את התוכן של הרכיב המצוין בערך של תכונת ה-56!60 שלהן, לדוגמה :
>%5|:/8]06-06 56!60="0/001 0" /<
התגית הנייל מביאה להכנסת הערך של הרכיב זסוס6, אשר הינו רכיב בן של ז68,
באיוור בו מופיעה התגית.
שיס לב לשימוש בסימני הקו הנטוי () אשר מייצגות שיוך היררכי של הורה-בן בין
התגיות.
ניתן גם לגשת לערכים של תכונות של רכיבים. כדי לעשות כן, יש לצרף סימן קו נטוי
(/) ולהצמיד לשס התכונה את סימן השטרודל ((6). לדוגמה, התגית הבאה יישותלתיי
את ערכה של התכונה 600% של תגית בשס 196 :
"56!60="1110=/606100% )6-0ט]%5|:/8>
התרשיס הבא מתאר את הטרנספורמציה המתבצעת כאשר מועבר מסמך ה- !אא מן
הדוגמה הקודמת, דרך מסמך ה-51א ונפלט כ- |ואזא. האיזוריס המודגשים, מציגיס
את האיזוריס במסמך ה-51א לאחר שהוחלפו בטקסט שבמסמך ה- |אא.
נספח א': מדריך מהיר ל-אא | 317
קובץ זוא :
"0. ["=תסנפעסש [הוא?
"]88א.200], ]51 "=1161 "[8א/)א6=")6כ/) 501051066-[נוא?
<60%
<1/15 צ[/>8ת8 33 1אגו1><502/ >
<0<3106>/00108 001)>
<תתא >
<15/ צ7 5 50288>/1-18<:חג צר >
<-/\ א51/ 1/>התתהת<:האה אדד5 .]>
<תםאו/ />
<0%/
קובץ 281
"0. ["=תסנפעסש [הוא?
א
<"[פא-כ1/\/ א ך/שזס. 3 עאעט//:כ51="1א:5ח[רראן
<"/"=810בו 11810ת%81:%0>
<12018115>/21 1<)287 >
<ת10/>:סבנ8צן 2"<)02817'8+"=5120 +מס)>
< "48/1 50160="60 8106-01ץ:91א>
< 1ס>
<מס00107:>/1 2"<)0281'8+"=5120 1מס)>
< "001% 48/0/01 2)"=+56160 - 81:/81₪6-01א>
< זט >
<םס6:>/1בתגצן [[ט 6'8מטכ)<"2+"=5120 זמס)>
<< "8 א 4/0 "56166 1:/31₪6-01צ>
< זט >
<101866ת51:)0א/>
<81:50/108100א/
פלט, ]ואד א
<12619115>/11 287)< 1
<)מס0:>/1בת18 2"<)281'8+"=5120 מס
גהמהתת 3 1[טקנוכן
< זט
םס600107:>/1 2"<6281'8+"=5120 מס
<ת10/>:סבנ8צ 11ט 6'5מ/טכ)<"2+"=5120 1מס1
התג המתגקנוכן
< זט
8 א למפתחי אתרים באינטרנט
תרשים 4
| | *
<> + ₪ 9 ב | 26 פוסון) 0550 | 8 3 ₪0 - + - %₪> |
| ו 25/0 507 503חוחח ה 5003005 חפ תפוח ססס וז( 65] 55ז6ט |
/
6 1005 5מזסצמת | אסוט 46ם ₪6 |
₪
6 יזה)
המפתם3 ל בענמגו5 :31110 1% 818 )
6 :020101 6818
המה 1 הממהקגו5 :10ה א[ 171111 01'8 רנכ )
₪ |
שימוש בתגית ו636-וס):|5א
להכלת תבנית על מספר רכיבים
בשיטה בה השתמשנו עד כה, הציג הדפדפן רק את נתוני הרכיב הראשון במסמך ה- וואא.
כך, למשל, אם היינו מעביריס את הקוב הבא דרך גיליון הסגנון שבעמודיס קודמים,
היינו מקבליס את נתוני רכיב ה-ז63 הראשון בלבד:
"1.0"=חסופזסע |וחא?>
"|5א.51006א"=)6ז]ח "[5א/+6+"=6כ/0 50/!650666-|החא? >
<6₪5007>
<>
<=]/ > חה חח |או2ט5<=ו]ה ]>
<6>/60108ט|₪<ח0 6001>
<חם)/\()>
<=] 1457 / > הח 28ט5<םו]ה 15 >
<=ן א 5 1/ > חהחה חב <= ]ה 51 |>
<חם)]/\0/>
<60/>
<%)>
<=\ה1/>וחס|88 ס|סקה<םוזה>
<0010₪/>ח0<0766 001>
<חם)]/ )>
<=ו\ 155 / > טושה <= א ד5ז= >
<=ן ד 1/ > הומטטז8כ <= ]ה ד |>
<חם)\0/>
<