מעבד תבניות

תרשים הממחיש את כל האלמנטים הבסיסיים וזרימת העיבוד של מנוע תבניות.
מעבד תבניות (הידוע גם כמנוע תבניות או מנתח תבניות) הוא תוכנה המיועדת לשלב תבניות עם מודל נתונים כדי לייצר מסמכי פלט.<ref name="Niemeyer000">
</ref><ref name="Manolescu000">
</ref><ref name="Fowler000">
</ref> השפה שבה כתובות התבניות ידועה כשפת תבניות (templating language). למטרות מאמר זה, מסמך פלט הוא כל סוג של פלט מעוצב, כולל מסמכים, דפי אינטרנט או קוד מקור (בהפקת קוד מקור), בשלמותם או בחלקים. מנוע תבניות כלול בדרך כלל כחלק ממערכת תבניות אינטרנט או שלד תוכנה, ועשוי לשמש גם כקדם-מעבד או מסנן. 

דוגמה פשוטה לתבנית היא אינטרפולציה של מחרוזת: 
<syntaxhighlight lang="python">
apples = 4
print("I have ${apples} apples.") # I have 4 apples.
</syntaxhighlight>

== תכונות אופייניות ==
מנועי תבניות כוללים בדרך כלל תכונות המשותפות לרוב שפות התכנות העיליות, עם דגש על תכונות לעיבוד טקסט פשוט.

תכונות כאלה כוללות:
* משתנים ופונקציות
* החלפת טקסט
* הכללת קובץ
* הערכה מותנית ולולאות

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

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

ניתוח מחרוזות משלים את המנגנון של עיבוד תבניות. דוגמה לכך היא הפקודה <code>s</code> (החלף) במעבד הטקסט sed, שמקורה בחיפוש והחלפה בעורך הטקסט ed. פקודות החלפה הן בצורה <code>s/regexp/replacement/</code>, כאשר <code>regexp</code> הוא ביטוי רגולרי, לניתוח מחרוזות, <code>replacement</code> היא תבנית פשוטה לפלט, בין אם זו מחרוזת טקסט, או מחרוזת פורמט המכילה את התווים <code>&#x26;</code> עבור "כל ההתאמה" או רצפי המילוט המיוחדים <code>\1</code> עד <code>\9</code> עבור תת-הביטוי ה-n-י. לדוגמה, <code>s/(cat|dog)/\1s/g</code> מחליף את כל המופעים של "cat" או "dog" ב-"cats" או "dogs": <code>(cat|dog)</code> הוא תת-הביטוי הראשון (והיחיד) ב-regexp, ו- <code>\1</code> במחרוזת הפורמט מחליף אותו בפלט.

== רכיבי מערכת ==
כל מערכות עיבוד התבניות מורכבות לפחות מהמרכיבים העיקריים הבאים:
* מודל נתונים משויך;
* תבנית מקור אחת או יותר;
* מנוע מעבד או מנוע תבניות;
* מסמכי פלט.

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

=== תבנית מקור ===
תבניות מקור מצוינות באופן מסורתי:
* על פי שפת תכנות קיימת;
* על פי שפת תבנית שהוגדרה במיוחד;
* בהתאם לתכונות של התוכנה המארחת; או
* כלאיים של חלק או כל האמור לעיל.

=== מנוע תבניות ===
מנוע התבניות אחראי על:
* התחברות למודל הנתונים;
* עיבוד הקוד שצוין בתבניות המקור; ו-
* הפניית הפלט לצינור עיבוד נתונים, קובץ טקסט או זרם נתונים ספציפיים.

בנוסף, מנועי תבניות מסוימים כוללים אפשרויות תצורה נוספות.

=== מסמכי פלט ===
אלה עשויים להיות מסמך שלם או מקטע של מסמך.

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

=== מנוע תבניות ===
מנוע תבניות הוא סוג מסוים של מודול עיבוד תבניות המציג את כל התכונות העיקריות של שפת תכנות מודרנית. המונח מנוע תבניות התפתח כתיאור כללי של שפות תכנות שמטרתן העיקרית או הבלעדית הייתה לעבד תבניות ונתונים לפלט טקסט. השימוש במונח זה מיושם בעיקר בפיתוח אתרים באמצעות מערכת תבניות אינטרנט, והוא מיושם גם בהקשרים אחרים.<ref name="TmpEngUses">(see e.g., Velocity, TemplateToolkit, Freemarker ).</ref>

=== הפקת מסמכים ===
שלדי תוכנה ליצירת מסמכים משתמשים בדרך כלל בעיבוד תבניות כמודל המרכזי להפקת מסמכים.

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

=== שימושים בתוכנה ===
מנוע תבניות לרשת מעבד נתונים לכדי דף אינטרנט, או חלקים ממנו. זה נפוץ במערכות תבניות לרשת ובשלדי תוכנה לרשת, כגון אנגולר, וריאקט.

=== דוגמאות ===
XSLT הוא מודל לעיבוד תבניות שתוכנן על ידי W3C. הוא מיועד בעיקר להמרה על נתוני XML (למסמכי אינטרנט או פלט אחר).

שפות תכנות כגון Perl, פייתון, PHP, Ruby, סי שארפ, ג'אווה וגו תומכות בעיבוד תבניות באופן מובנה או באמצעות ספריות. 

ASP ו-JavaServer Pages כוללים מעבדי תבניות שעוצבו ספציפית עבור רשת האינטרנט.

== ראו גם ==
* לוקליזציה
* מאקרו (מדעי המחשב)

==הערות שוליים==

קטגוריה:מחרוזת (מדעי המחשב)