XSL

היסטוריה

פרויקט XSL נוצר בתחילה כניסיון להוסיף (בדומה ל DSSSL) את כח סגנונות העיצוב וההדפסה ל-XML.
בין השנים 1998 ו-1999 בוצע עיקר פיתוח ועיצוב הפרויקט.
הנעת הפרויקט החלה בדצמבר 1997 כאשר קבוצת מחקר מ W3C בהרכב של שרון אדלר וסטיב זילס יושבי ראש, ג'יימס קלארק כמעצב ראשי וכריס לילי בתפקיד איש מטה.

ב-18 באוגוסט 1998 שוחררה לראשונה הגרסה הציבורית של השפה ובתאריך 15 באוקטובר 2001 הפכה לשפה המומלצת על ידי W3C.

XSL Formatting Objects

זו שפה המשמשת להגדרת סגנונות עיצוב לקובצי XML, כחלק ממשפחת השפות XSL.

נוצרה על מנת להתמודד עם בעיות הקשורות בתצוגה מסוגננת של קובצי XML.

יכולות שפה זו גבוהות במיוחד מאחר שניתן לשלב בין היתר תגיות הלקוחות משפת HTML, שאילתות ניווט וחיפוש בשפת XPath, JavaScript ועוד.

כללי

XSL Formatting Objects (מוכר גם בשם XSL-FO ) היא שפת עיצוב מסמכי XML.

XSL-FO באה כחלק ממשפחת XSL, שהיא למעשה אוסף שפות התמרה ועיצוב מסמכי XML.

משפחה זו כוללת בנוסף את השפות XSLT. ו- XPath.

נכון להיום (27.7.2007) הגרסה האחרונה ששוחררה לשפה זו היא 1.1.

רקע

כיום, אנשים מקבלים את ההדפסה כפעולה מובנת מאליה בעוד אין זה כך כלל.

על מנת שעמוד מודפס יראה בדיוק כפי שהוא מוצג על גבי המסך ישנם לא מעט תהליכים (חלקם מתוחכמים יותר וחלקם פחות).

ההדפסה המדויקת היוותה מאז ומתמיד אתגר.

דוגמה פשוטה לכך היא הדפסת דף אינטרנט מבוסס HTML מהדפדפן, לא פעם ניווכח כי גבולות הדף המוצג חורגים מגבולות העמוד המודפס ולכן חלק מהתוכן יודפס על עמוד נוסף.
בניגוד לשילוב שבין HTML ו-CSS,
ב-XSL-FO ישנה הפרדה בין הנתונים לפקודות העיצוב.
הרעיון מאחורי שפה זו הוא שמשתמש יוכל לכתוב מסמך, ללא הגדרות עיצוב, בשפת XML.

( XHTML ו- DocBook גם הן שפות אפשריות העיקר שהכתיבה תבוסס על פורמט XML ).

לאחר מכן, המשתמש יוכל להגדיר התמרה מסוג XSLT, התמרה זו ממירה את מסמך הXML ל-XSL-FO.
לאחר שמסמך ה-XSL-FO נוצר, הוא יכול לעבור למנוע פריסת תצוגה הנקרא מעבד אף-או (מכונה גם מעבד פוֹ) (FO-Processor). 

מעבד פו יכול להפוך את קובץ ה-XSL-FO למשהו שניתן לקריאה ו/או הדפסה.

לרוב, יתבצע שימוש נרחב בשפה זו על מנת ליצור קובצי PDF, אך ניתן גם ליצור קבצים אחרים כגון : פוסטסקריפט ו- RTF.
כמו כן, XSLT מאפשר ליצור באופן אוטומטי טבלאות, קישורים חיצוניים, תוכן עניינים ועוד.
בניגוד לקבצים אחרים כגון: PDF קובץ XSL-FO לא מגדיר באופן מלא את אופן עיצוב הטקסט ומיקומו בכל דף.

במקום זאת, XSL-FO מגדיר איך אמור להראות העמוד והיכן ימצא התוכן. ומשם, מעבד פוֹ "מחליט" היכן ימצא הטקסט בתוך הגבולות שניתנו לו על ידי קובץ ה-XSL-FO.
לפיכך, כל מעבד פוֹ יכול להציג את אותו הקובץ באופן מעט שונה, לדוגמה, מעבד פוֹ אחד יכול לקבוע שבמידה ומילה "נחתכת" בסוף שורה
היא תועבר לתחילת השורה שלאחריה בעוד שמעבד פוֹ אחר יכול לקבוע שהמילה תשאר חתוכה.

עניין האלגוריתמיקה המשתנה אמור לכאורה ליצור אי נוחות למשתמש המעוניין ליצור קובץ XSL-FO
מפני שכאמור, לעומת קובץ HTML המציג תוכן בתצורתו הסופית קובץ XSL-FO משמש כחוצץ בין התוכן לתוצר הסופי.

למרות זאת, על המשתמש המעוניין ליצור מסמך מסוגנן בר הדפסה רק לבחור במעבד פוֹ הממלא את רוב צרכיו, בעיקר איכות הפלט וסינון תווים ריקים בתוכן במקום לבדוק את הקובץ שיצר על אין-ספור מעבדי פוֹ שונים.

עקרונות מנחים

שפת XSL-FO מיועדת לתחום המסמכים המודפסים לעומת HTML ו- CSS נועדו לתחום המסמכים המוצגים.
בשל כך, הגדרת המושג עמוד הוא חלק בלתי נפרד מהמבנה של XSL-FO.
XSL-FO יכול להתאר כעיצוב "מונחה תוכן" שבא לידי ביטוי בספרים, מאמרים, מסמכים רשמיים ועוד שבו קיימת חשיבות לתוכן יותר מאשר לעיצוב.
עקרון זה מנוגד לעיצוב "מונחה סִדּוּר" כפי שניתן לפגוש בירחונים וכתבי עת שבמקרה ואורך המלל ארוך מהמקום שהוגדר לו, תתבצע עריכה ושינוי הטקסט עד אשר יתאים למרחב שהוקצה לו.
ובאמת לא בכל מקום ניתן להשתמש ב-XSL-FO.

מבנה עקרוני

מאחר ששפה זו מיועדת לעיצוב קובצי XML כל קובץ XSL מתחיל בהצהרה :
<?xml version="1.0" encoding="windows-2955"?>
כאשר המילה version מתארת את גרסת השפה עימה אנו עובדים. הגדרה זו באה למנוע התנגשויות בין גרסאות שונות מאחר שלא ניתן לדעת רק לפי סיומת הקובץ (XML) לפי איזו גרסה הקובץ נכתב.

בערך encoding ניתן להגדיר את קידוד המלל בגוף הקובץ שבדוגמה זו מוגדרת כעברית לפי חלונות של מיקרוסופט.
לאחר מכן, תבוא שורת הגדרות כלליות הנוגעות לקובץ עצמו :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
xsl:stylesheet - מגדיר את הקובץ כקובץ סגנונות ממשפחת XSL.
version - גם כאן קיים תיאור לגבי גרסת שפת העיצוב עימה אנו עובדים בקובץ זה.
xmlns:xsl - מגדיר את מרחב השמות ופרוטוקול הפקודות לפיו הקובץ מוגדר, לדוגמה בדוגמה זו, הקובץ בנוי בהתאם לתקן המוגדר לפי
W3C משנת 1999.
מרחב השמות בדוגמה יכול להכיל את ההגדרות הבאות :
xsl:importxsl:includexsl:strip-spacexsl:preserve-spacexsl:outputxsl:keyxsl:decimal-formatxsl:namespace-aliasxsl:attribute-setxsl:variablexsl:paramxsl:template
בעוד שמרחב שמות אחר יכול להכיל הגדרות שונות, לכן מאפיין זה חשוב למשתמש.
לאחר מכן, יכתב קוד המסוגל לבצע לשלוף נתונים מסוימים מהקובץ, לבצע לולאות ומאחר ששפה זו הולכת יד ביד עם HTML ניתן להוסיף את כל התגיות שמספקת האחרונה.

קובץ לדוגמה

<?xml version="1.0" encoding="UTF-8" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="NAME">
   <span style="font-size:17px; color: GREEN; margin-left:0.5in">
    *.<xsl:value-of select="." />
   </span>
  </xsl:template><xsl:template match="DESCRIPTION">
   <span style="font-size:15px; color: SILVER; margin-left:0.17in">
    <xsl:value-of select="." />
   </span>
  </xsl:template><xsl:template match="/"><HTML><HEAD></HEAD><BODY><span style="font-size:30px; color:BLUE;"><I><U><H1>כותרת ראשית</H1></U></I></span>
 <xsl:for-each select="EXTENTIONS/EXTENTION">
 
 <span style="font-size:13px; color: GREEN;">
  <xsl:value-of select="count(preceding::NAME)+1"/>) <BR/>
 </span>

 <span style="font-size:13px; color: OLIVE;">
 
   Name:          <xsl:apply-templates select="NAME"  /> <BR/>
  Description:   <xsl:apply-templates select="DESCRIPTION" />.<BR/>
 </span>
  <HR />
  <BR/>

   </xsl:for-each></BODY></HTML></xsl:template></xsl:stylesheet>