VTD-XMLVTD-XML (Virtual Token Descriptor for eXtensible Markup Language - ספרייה לפענוח תגיות בקובצי XML) מתייחסת לאוסף של טכנולוגיות עיבוד XML בין פלטפורמות המתמקדות בטכניקת XML לא ניתוחית[1], "מתמקדת במסמך" הנקראת Virtual Token Descriptor (VTD). בהתאם לפרספקטיבה, VTD-XML ניתן לראות אחת מהפעולות הבאות:
VTD-XML פותחה על ידי XimpleWare תחת רישיון GPL. הוא נכתב במקור JAVA, אבל הוא זמין כעת ב-C[12], C++ וסי שארפ . רעיון בסיסיניתוח מסמך XML כאובייקט טקסט אחד בעזרת אינדקסיםבאופן מסורתי, מנתח מילולי מייצג Tokens (יחידות קטנות של תווים בלתי ניתנים לחלוקה) כאובייקטים של מחרוזות נפרדות. גישה זו מיועדת בחילוץ המידע לאובייקטים. לעומת זאת, שיטת האינדקסים לא מחייבת לשמור על טקסט המקור שלם, ומשתמשת במיקום ואורך המידע לתיאור התווים (Tokens). מתאר Token וירטואליVirtual Token Descriptor (VTD) מיישם את שיטת האינדקסים לעיבוד XML. השימוש ב-64 סיביות כדי לקודד את המיקום, אורך, סוג Token ועומק קינון של Token במסמך XML. מכיוון שכל רשומות ה- VTD הן באורך 64 סיביות, ניתן לאחסן אותן ביעילות ולנהל אותן כמערך.[13] מיקום מטמוןמטמוני מיקום (LC) מבוססים על רשומות VTD כדי לספק גישה אקראית יעילה. מאורגנים בטבלאות, עם טבלה אחת לכל רמת עומק קינון, LCs מכילים מודלים של היררכיה של האלמנט במסמך ה-XML. ערך LC הוא מספר שלם של 64 סיביות המקודד לזוג ערכים של 32 סיביות. ה-32 סיביות העליונות מזהות את רשומת ה- VTD עבור האלמנט המתאים. ה-32 סיביות התחתונות מזהים את הילד הראשון של האלמנט LC ברמת הקינון התחתון הבא. יתרונותסקירה כלליתכמעט כל יתרונות ליבה של VTD-XML הם בעקבות שיטת האינדקסים המספקת מאפיינים אלה:
שילוב המאפיינים האלה מאפשר לחשוב על XML באופן טהור כמערך במקום סריאליזציה והמרה של אובייקטים שונים. זוהי דרך רבת עוצמה לחשוב על יישומי XML / SOA . התאמהVTD-XML תואם רק לגרסאות XML 1.0 (למעט החלק DTD) ו- XML Name 1.0. יש תאימות ל-XPath 1.0 (עם כמה הבדלים מתוחכמים במונחים של מודל הנתונים) עם הרחבה של XPath 2.0. פשטותכמנתח (Parser)כאשר נעשה שימוש במצב ניתוח, מטרתו של VTD-XML היא ביצועים גבוהים מאוד[15]. VTD-XML בהשוואה לאחרים כמנתח:
כאינדקסבזכות מיפוי האינדקסים שעושה VTD-XML, מפתחים יכולים לכתוב את הייצוג הפנימי של מסמך XML מנותח לדיסק ולאחר מכן לטעון אותו מחדש כדי למנוע ניתוח חוזר. לשם כך, XimpleWare[16] הציגה פורמט אריזה בינארי המשלב VTD, LC ו-XML (טקסט). ניתן להציג אותה באחת משתי הדרכים הבאות:
שינוי תוכן XMLבגלל ש-VTD-XML שומר על טקסט שלם ללא פענוח, כאשר יישום מתכוון לשנות את התוכן של XML הוא רק צריך לשנות את החלקים הרלוונטיים. זה בניגוד מוחלט עם DOM, SAX, או ניתוח StAx, אשר כרוכות בעלות ניתוח מחדש, לא משנה כמה קטנים השינויים. מאחר ש-VTD מתייחס לרכיבי מסמך על ידי מיקום התו, שינויים באורך האלמנטים המתרחשים קודם לכן במסמך מחייבים התאמות אינדקסים המתייחסות לכל האלמנטים המאוחרים. עם זאת, התאמות אלה הן של מספור אינדקסים מחדש, אם כי השינויים הם רבים בטבלאות מרובות, אז הם מהירים. חיתוך, פיצול והרכבת מקטעי XMLיישום המבוסס על VTD-XML יכול גם להשתמש במיקומים ואורכים לכתובת Token, או חלקי אלמנטים. זה מאפשר לבצע פעולות על מסמכי XML כמו על מערכים של בתים.
עורך XMLVTD-XML יכול לערוך / למחוק ישירות את התוכן ברמת ה-Byte של טקסט XML, ובלבד שאורך ה-Token ארוך יותר מאשר התוכן החדש המיועד. היתרון של גישה זו היא שיישום יכול לעשות שימוש חוזר ומיידי ב-VTD וה- LC המקורי. לעומת זאת, בעת שימוש ב- VTD-XML לצורך עדכון שותף של מסמך XML, היישום צריך לעבד את המסמך המעודכן לפני שהיישום יוכל לעבד אותו. עורך יכול להיות חכם מספיק כדי לעקוב אחר המיקום של כל Token, המאפשרים חדשים, אסימונים ארוכים יותר להחליף קיימים, קצרים אסימונים רק על ידי התייחסות לאסימון החדש בזיכרון נפרד מחוץ המשמש לאחסון המסמך המקורי. כמו כן, כאשר reordering את המסמך, טקסט אלמנט לא צריך להעתיק; רק את LCs צריך להיות מעודכן. כאשר נדרש מסמך XML מלא, רציף, כגון בעת שמירתו, ניתן לחלק את החלקים השונים למסמך חדש רציף. יתרונות אחריםVTD-XML גם חלוצים את בגישת non-blocking, והתפתחות של XPath. חולשותVTD-XML גם מציג כמה חסרונות בולטים:
תחומי היישומיםתחליף כללי עבור DOM או SAXבגלל הביצועים של VTD-XML וזיכרון היתרונות, הוא מכסה חלק גדול יותר של מקרים להשתמש ב- XML או DOM או SAX.[17]
XPath על מסמכי XML ענקייםהמהדורה המורחבת של VTD-XML באיחוד עם JVM 64-bit מאפשרת עיבוד XML מבוסס XPath על גבי מסמכי XML ענקיים (עד גודל של 256 GB). עבור SOA / WS / XML אבטחההשילוב של ביצועים גבוהים של VTD-XML ויכולת עדכון מצטבר הופך את הכרחי[18][19][20] כדי להשיג את הרמה הרצויה של איכות השירות עבור יישומי אבטחה של SOA / WS / XML. עבור SOA / WS / XML מתווךVTD-XML מתאים במיוחד ליישומי ביניים של SOA כגון נתבי XML / מתגים / שערים, Enterprise Service Buses ונקודות צבירה של שירותים. כל היישומים הללו מבצעים את פעולות "החנות והפנים" הבסיסיות, אשר לשמירתן של XML המקורי הן קריטיות לצמצום זמן האחזור. יכולת העדכון התוספתית של VTD-XML תורמת באופן משמעותי לביצועי ההעברה. יכולת הגישה האקראית של VTD-XML משפיעה היטב על ניתוב XML / מיתוג / סינון ב- XPath המבוססת על פריסת AJAX ו- SOA. אינטליגנטי SOA / WS / XML עומס ופריקהכאשר מסמך XML נוסע דרך מספר רכיבים באמצע SOA באמצע, לעצור את ההודעה הראשונה, לאחר שסיים את הבדיקה של מסמך XML, יכול לבחור לשלוח את פורמט קובץ VTD + XML לרכיבים במורד כדי למנוע ניתוח חוזר, ובכך לשפר את התפוקה. באותו אופן, איזון עומס אינטליגנטי SOA יכול לבחור ליצור VTD + XML עבור הודעות SOAP נכנסות / יוצאות לפרוק ניתוח XML משרתי היישומים שמקבלים הודעות אלה. מאגר נתונים של התמדה ב- XMLכאשר מסתכלים מנקודת המבט של התמדה XML יליד, VTD-XML יכול לשמש אינדקס XML קריא אנושי, קל לשימוש, למטרות כלליות. מסמכי XML המאוחסנים בדרך זו ניתנים לטעינה לזיכרון, לשאילתה, לעדכון או לעריכה ללא תקורה של ניתוח / עריכה בסדרה חוזרת. נתונים XML מחייב נתוניםשילוב VTD-XML של ביצועים גבוהים, שימוש בזיכרון נמוך, והערכת XPath יעילה מאפשרת גישה חדשה לנתוני XML, המבוססים לחלוטין על XPath. היתרון הגדול ביותר של גישה זו הוא כבר לא דורש סכימת XML, נמנע יצירת אובייקטים מיותרים, ולוקח את היתרון של קידוד משוחרר של XML.[21] ראוי לציין כי מחייב נתונים שנדונו במאמר המוזכר לעיל צריך להיות מיושם על ידי היישום: VTD-XML עצמה מציעה רק accessors. בהקשר זה VTD-XML הוא לא פתרון מחייב נתונים עצמו (בניגוד JiBX, JAXB, XMLBeans), למרות שהוא מציע פונקציונליות החילוץ עבור חבילות מחייב נתונים, הרבה כמו מנתחי XML אחרים ( DOM, SAX, Stax ). כיתות חיוניותהחל בגרסה 2.11, Java ו- C # גרסאות של VTD-XML מורכבות מהשיעורים הבאים:
ה- VTD-XML המורחב מורכב מהשיעורים הבאים:
דוגמת קוד/* In this java program, we demonstrate how to use XMLModifier to incrementally
* update a simple XML purchase order.
* a particular name space. We also are going
* to use VTDGen's parseFile to simplify programming.
*/
import com.ximpleware.*;
public class Update {
public static void main(String argv[]) throws NavException, ModifyException, IOException{
// open a file and read the content into a byte array
VTDGen vg = new VTDGen();
if (vg.parseFile("oldpo.xml", true)){
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
XMLModifier xm = new XMLModifier(vn);
ap.selectXPath("/purchaseOrder/items/item[@partNum='872-AA']");
int i = -1;
while((i=ap.evalXPath())!=-1){
xm.remove();
xm.insertBeforeElement("<something/>\n");
}
ap.selectXPath("/purchaseOrder/items/item/USPrice[.<40]/text()");
while((i=ap.evalXPath())!=-1){
xm.updateToken(i,"200");
}
xm.output("newpo.xml");
}
}
}
קישורים חיצוניים
הערות שוליים
|