VTD-XML

ניתוח מסמך XML כאובייקט טקסט אחד בעזרת אינדקסים

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

מתאר Token וירטואלי

Virtual Token Descriptor (VTD) מיישם את שיטת האינדקסים לעיבוד XML. השימוש ב-64 סיביות כדי לקודד את המיקום, אורך, סוג Token ועומק קינון של Token במסמך XML. מכיוון שכל רשומות ה- VTD הן באורך 64 סיביות, ניתן לאחסן אותן ביעילות ולנהל אותן כמערך.

מיקום מטמון

מטמוני מיקום (LC) מבוססים על רשומות VTD כדי לספק גישה אקראית יעילה. מאורגנים בטבלאות, עם טבלה אחת לכל רמת עומק קינון, LCs מכילים מודלים של היררכיה של האלמנט במסמך ה-XML. ערך LC הוא מספר שלם של 64 סיביות המקודד לזוג ערכים של 32 סיביות. ה-32 סיביות העליונות מזהות את רשומת ה- VTD עבור האלמנט המתאים. ה-32 סיביות התחתונות מזהים את הילד הראשון של האלמנט LC ברמת הקינון התחתון הבא.

התאמה

VTD-XML תואם רק לגרסאות XML 1.0 (למעט החלק DTD) ו- XML Name 1.0. יש תאימות ל-XPath 1.0 (עם כמה הבדלים מתוחכמים במונחים של מודל הנתונים) עם הרחבה של XPath 2.0.

שינוי תוכן XML

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

עורך XML

VTD-XML יכול לערוך / למחוק ישירות את התוכן ברמת ה-Byte של טקסט XML, ובלבד שאורך ה-Token ארוך יותר מאשר התוכן החדש המיועד. היתרון של גישה זו היא שיישום יכול לעשות שימוש חוזר ומיידי ב-VTD וה- LC המקורי. לעומת זאת, בעת שימוש ב- VTD-XML לצורך עדכון שותף של מסמך XML, היישום צריך לעבד את המסמך המעודכן לפני שהיישום יוכל לעבד אותו. 
עורך יכול להיות חכם מספיק כדי לעקוב אחר המיקום של כל Token, המאפשרים חדשים, אסימונים ארוכים יותר להחליף קיימים, קצרים אסימונים רק על ידי התייחסות לאסימון החדש בזיכרון נפרד מחוץ המשמש לאחסון המסמך המקורי.  כמו כן, כאשר reordering את המסמך, טקסט אלמנט לא צריך להעתיק; רק את LCs צריך להיות מעודכן.  כאשר נדרש מסמך XML מלא, רציף, כגון בעת שמירתו, ניתן לחלק את החלקים השונים למסמך חדש רציף.

יתרונות אחרים

VTD-XML גם חלוצים את בגישת non-blocking, והתפתחות של XPath.  

XPath על מסמכי XML ענקיים

המהדורה המורחבת של VTD-XML באיחוד עם JVM 64-bit מאפשרת עיבוד XML מבוסס XPath על גבי מסמכי XML ענקיים (עד גודל של 256 GB).

עבור SOA / WS / XML אבטחה

השילוב של ביצועים גבוהים של VTD-XML ויכולת עדכון מצטבר הופך את הכרחי כדי להשיג את הרמה הרצויה של איכות השירות עבור יישומי אבטחה של 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. 
ראוי לציין כי מחייב נתונים שנדונו במאמר המוזכר לעיל צריך להיות מיושם על ידי היישום: VTD-XML עצמה מציעה רק accessors.  בהקשר זה VTD-XML הוא לא פתרון מחייב נתונים עצמו (בניגוד JiBX, JAXB, XMLBeans), למרות שהוא מציע פונקציונליות החילוץ עבור חבילות מחייב נתונים, הרבה כמו מנתחי XML אחרים ( DOM, SAX, Stax ).

דוגמת קוד

/* 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");
            }
      }}