XSL

XSL (ראשי תיבות של eXtensible Stylesheet Language - שפת עיצוב בת הרחבה) היא משפחה של שפות הַתְמָרָה ועיצוב המאפשרות להמיר קובצי XML לפורמט אחר או להציגם באופן מסוגנן.

ישנן שלוש שפות תחת משפחה זו :
 XSL Transformation : שפה המשמשת להתמרת קובצי XML, מוכרת גם כ-XSLT.
 XPath : שפה לתיאור שאילתות המבוצעות על קובץ XML לצורך ניווט ושליפת מידע.
 XSL Formatting Objects : שפה המשמשת להצגה מעוצבת של קובצי XML ,מוכרת גם כ XSL-FO.

בסביבות הפיתוח של מיקרוסופט משתמשים לעיתים קרובות במינוח XSL על מנת לתאר את כלי הפיתוח XSLT שמומש לפי עקרונות מוקדמים של השפה כפי שהוגדרו לפי W3C.

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

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

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

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

XSL Transformations

מוכר גם בשם XSLT, ראשי תיבות של eXtensible Stylesheet Language Transformations.
זהו למעשה קובץ טקסט מבוסס XML המיועד לביצוע התמרות על קובצי XML כלומר, להפוך קובצי XML ל"נוחים לקריאה".
המסמך המקורי נותר כפי שהוא; אבל, נוצר מסמך חדש המבוסס על הנתונים הקיימים בקובץ ה-XML.
הפלט יכול להגיע במגוון אפשרויות כגון : קובץ XML חדש, קובץ HTML, קובץ טקסט ועוד.
השימוש העיקרי בכלי זה הוא לרוב יצירת קובצי XHTML לאתר אינטרנט ו/או יצירת קובצי PDF באופן מקוון.

כמו כל שפת תכנות גם XSLT מושפעת משפות תכנות פונקציונליות ומבוססות טקסט כגון : SNOBOL או AWK.
ניתן להשוות שפה זו לשפת DSSSL שביצעה על קובצי SGML מה ש-XSLT מבצעת על קובצי XML.

הגרסה העדכנית ביותר כיום (שוחררה בתאריך 23 בינואר 2007) היא XSLT 2.0.
הגרסה הקודמת של XSLT  (1.1) שוחררה בשנת 2001.
XSLT 2.0 פותח בין השנים 2002 ו-2006.

כיום ישנם מספר לא מועט של מנועים גרפיים שתומכים ב-XSLT כגון :

 דפדפן אינטרנט אקספלורר (המשתמש במנוע MSXML).
 דפדפן Firefox (המשתמש במנוע TransforMiiX).
 דפדפן Netscape (המשתמש במנוע TransforMiiX גם כן).
 דפדפן Opera.

כל אלו תומכים בהתמרה מ-XML ל-HTML.
ובנוסף ישנן גם השפות Saxon  ו- Xalan.

XPath
XPath, קיצור של XML Path Language, שפה שיועדה לשמש את השפות XSL Transformations ו- XPointer.
המטרה העיקרית מאחורי פיתוח השפה הייתה לספק אפשרות גישה לחלקים ספציפיים במסמך XML.
XPath היא שפת ביטויים מינימלית ועל אף היותה מוכוונת XML היא בעלת אופי כתיבה עצמאי עם חוקי כתיבה שונים, ניתן לומר שהשפה "עובדת" למעשה על מבנה קובץ ה-XML ללא צורך בידיעת השפה ותיקנונה.
השפה מספקת כלים עשירים בנושא שוטטות בעץ (Tree traversal) ומציאת ענף ספציפי על פי דפוס מסוים.

ביטויים בשפה מורכבים משלושה חלקים עיקריים:
 נתיב (או ציר) המאפשר לציין את החלקים הרצויים בהיררכיית XML נתונה;
 מבחן צומת המאפשר להציב תנאים על האלמנטים שיש לבחור;
 תחשיב המאפשר לציין ביטויי בחינה מורכבים יותר.
XPath משולבת בשפת XSL Transformations ומשמשת גם כשפת השאילתות במסדי נתונים יחסיים-XML-ים.

ישנו פרויקט נוסף ל W3C בשם XQuery שעתיד לספק יכולות הדומות ליכולות XPath.
צוות הפיתוח של XSL חבר לצוות הפיתוח של XQuery ויחד יצרו את XPath 2.0,
שסיפקה כלים עשירים יותר בהתמודדות מול שליפת מידע מקובץ XML.

מימושים
 ב-Java החבילה מגיעה כחלק מה-JDK.
 ב-‎.NET‎ כל השירותים מגיעים חלק מה-FCL.

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

שימושים
באמצעות כלים המספקת שפה זו ניתן לעצב קובץ XML בכל אופן שנרצה.
ניתן להשתמש בכלים נוספים יחד עם שפת זו כגון :
 HTML - שימוש בכל התגיות המוכרות לדפדפנים על מנת לאפשר עיצוב מהיר יחסית (אין צורך להמציא את הגלגל מחדש).
 CSS - סגנונות עיצוב מוגדרים מראש עבור דפי HTML.
 JavaScript - הוספת פונקציונליות לטופס המסוגנן ומתן אפשרות לאינטראקציה עם המשתמש.

עקרונות מנחים
שפת 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:import
xsl:include
xsl:strip-space
xsl:preserve-space
xsl:output
xsl:key
xsl:decimal-format
xsl:namespace-alias
xsl:attribute-set
xsl:variable
xsl:param
xsl: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>

ראו גם
 XML
 HTML

קישורים חיצוניים
 
 XML Path Language (מאתר W3)
  System.Xml.XPath (מאתר MSDN)
 הדרכה בגרמנית
 XPath tutorial in English

XML
תכנות
תקנים בתקשורת מחשבים
שפות תכנות