VTD-XML

VTD-XML‏ (Virtual Token Descriptor for eXtensible Markup Language - ספרייה לפענוח תגיות בקובצי XML) מתייחסת לאוסף של טכנולוגיות עיבוד XML בין פלטפורמות המתמקדות בטכניקת XML לא ניתוחית, "מתמקדת במסמך" הנקראת Virtual Token Descriptor (VTD). בהתאם לפרספקטיבה, VTD-XML ניתן לראות אחת מהפעולות הבאות: "Document-Centric" מנתח XML אינדקס XML מקומי או קובץ בינארי כדי לשפר את הטקסט XML הוספת תוכן ל-XML שינוי תוכן XML על ידי חיתוך, פיצול, הרכבה, עריכה ומחיקה דרך לעיבוד XML על שבב תמיכה מלאה ב-XPath VTD-XML פותחה על ידי XimpleWare תחת רישיון GPL. הוא נכתב במקור JAVA, אבל הוא זמין כעת ב-C‏, C++ וסי שארפ . באופן מסורתי, מנתח מילולי מייצג Tokens (יחידות קטנות של תווים בלתי ניתנים לחלוקה) כאובייקטים של מחרוזות נפרדות. גישה זו מיועדת בחילוץ המידע לאובייקטים. לעומת זאת, שיטת האינדקסים לא מחייבת לשמור על טקסט המקור שלם, ומשתמשת במיקום ואורך המידע לתיאור התווים (Tokens). 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 נשמר שלם בזיכרון ללא פענוח. הייצוג הפנימי של VTD-XML הוא Persistence מטבעו. מונע מודלים מונחה עצמים של הייצוג ההיררכי כפי שהוא מסתמך כולו על סוגי נתונים פרימיטיביים (למשל, מספרים שלמים של 64 סיביות) כדי לייצג את היררכית ה- XML, ובכך להפחית את עלות יצירת האובייקטים כמעט לאפס. שילוב המאפיינים האלה מאפשר לחשוב על XML באופן טהור כמערך במקום סריאליזציה והמרה של אובייקטים שונים. זוהי דרך רבת עוצמה לחשוב על יישומי XML / SOA . VTD-XML תואם רק לגרסאות XML 1.0 (למעט החלק DTD) ו- XML Name 1.0. יש תאימות ל-XPath 1.0 (עם כמה הבדלים מתוחכמים במונחים של מודל הנתונים) עם הרחבה של XPath 2.0. כאשר נעשה שימוש במצב ניתוח, מטרתו של VTD-XML היא ביצועים גבוהים מאוד. VTD-XML בהשוואה לאחרים כמנתח: VTD-XML בדרך כלל עולה על ה-SAX (עם מטפל תוכן Null) ועדיין מספק גישה אקראית מלאה ותמיכה מובנית ב-XPath. VTD-XML בדרך כלל שומרת בזיכרון 130%-150% מגודל מסמך XML בזיכרון, המהווה בערך 20% מהשימוש בזיכרון של DOM. יישומים שנכתב ב-VTD-XML הם בדרך כלל הרבה יותר קצרים ונקיים יותר מאשר גרסאות ה-DOM / SAX שלהם. בזכות מיפוי האינדקסים שעושה VTD-XML, מפתחים יכולים לכתוב את הייצוג הפנימי של מסמך XML מנותח לדיסק ולאחר מכן לטעון אותו מחדש כדי למנוע ניתוח חוזר. לשם כך, XimpleWare הציגה פורמט אריזה בינארי המשלב VTD, LC ו-XML (טקסט). ניתן להציג אותה באחת משתי הדרכים הבאות: אינדקס XML מקומי שמבטל לחלוטין את עלות הניתוח וגם שומר על כל היתרונות של XML. זהו פורמט קובץ קריא לבני אדם עם תאימות לאחור. תבנית XML בינארית המשתמשת בנתונים בינאריים כדי לשפר את העיבוד של טקסט ה- XML. בגלל ש-VTD-XML שומר על טקסט שלם ללא פענוח, כאשר יישום מתכוון לשנות את התוכן של XML הוא רק צריך לשנות את החלקים הרלוונטיים. זה בניגוד מוחלט עם DOM, SAX, או ניתוח StAx, אשר כרוכות בעלות ניתוח מחדש, לא משנה כמה קטנים השינויים. מאחר ש-VTD מתייחס לרכיבי מסמך על ידי מיקום התו, שינויים באורך האלמנטים המתרחשים קודם לכן במסמך מחייבים התאמות אינדקסים המתייחסות לכל האלמנטים המאוחרים. עם זאת, התאמות אלה הן של מספור אינדקסים מחדש, אם כי השינויים הם רבים בטבלאות מרובות, אז הם מהירים. יישום המבוסס על VTD-XML יכול גם להשתמש במיקומים ואורכים לכתובת Token, או חלקי אלמנטים. זה מאפשר לבצע פעולות על מסמכי XML כמו על מערכים של בתים. VTD-XML יכול לחתוך Token או קטע רכיב ממסמך XML, ולאחר מכן להחזירו בחזרה למיקום אחר באותו מסמך, או למסמך אחר. VTD-XML יכול לפצל תת-אלמנטים במסמך XML ולהטמיע את הקטע במסמכי XML אחרים. VTD-XML יכול לחתוך מקטעים מתוך מסמכי XML מרובים להרכיב אותם לתוך מסמך XML חדש. VTD-XML יכול לערוך / למחוק ישירות את התוכן ברמת ה-Byte של טקסט XML, ובלבד שאורך ה-Token ארוך יותר מאשר התוכן החדש המיועד. היתרון של גישה זו היא שיישום יכול לעשות שימוש חוזר ומיידי ב-VTD וה- LC המקורי. לעומת זאת, בעת שימוש ב- VTD-XML לצורך עדכון שותף של מסמך XML, היישום צריך לעבד את המסמך המעודכן לפני שהיישום יוכל לעבד אותו. עורך יכול להיות חכם מספיק כדי לעקוב אחר המיקום של כל Token, המאפשרים חדשים, אסימונים ארוכים יותר להחליף קיימים, קצרים אסימונים רק על ידי התייחסות לאסימון החדש בזיכרון נפרד מחוץ המשמש לאחסון המסמך המקורי. כמו כן, כאשר reordering את המסמך, טקסט אלמנט לא צריך להעתיק; רק את LCs צריך להיות מעודכן. כאשר נדרש מסמך XML מלא, רציף, כגון בעת שמירתו, ניתן לחלק את החלקים השונים למסמך חדש רציף. VTD-XML גם חלוצים את בגישת non-blocking, והתפתחות של XPath. VTD-XML גם מציג כמה חסרונות בולטים: כמנתח XML, הוא אינו תומך בגופים חיצוניים המוצהרים ב- DTD. כפורמט קובץ, הוא מגדיל את גודל המסמך בכ -30% עד 50%. כמו API, זה לא תואם DOM, SAX או STAX. קשה לתמוך בטכניקות אימות מסוימות, המועלות על ידי DTD ו- XML Schema (למשל, attributes ברירת מחדל ו-elements), המחייבות שינויים במודלי XML המנותחים. בגלל הביצועים של VTD-XML וזיכרון היתרונות, הוא מכסה חלק גדול יותר של מקרים להשתמש ב- XML או DOM או SAX. לעומת DOM, VTD-XML תהליכים גדולים יותר (3x ~ 5x) מסמכי XML עבור אותה כמות של זיכרון פיזי בסביבות 3 עד 10 פעמים את הביצועים. לעומת SAX, VTD-XML מספק גישה אקראית תמיכה XPath ו outperforms SAX על ידי לפחות 2x. המהדורה המורחבת של VTD-XML באיחוד עם JVM 64-bit מאפשרת עיבוד XML מבוסס XPath על גבי מסמכי XML ענקיים (עד גודל של 256 GB). השילוב של ביצועים גבוהים של VTD-XML ויכולת עדכון מצטבר הופך את הכרחי כדי להשיג את הרמה הרצויה של איכות השירות עבור יישומי אבטחה של SOA / WS / XML. VTD-XML מתאים במיוחד ליישומי ביניים של SOA כגון נתבי XML / מתגים / שערים, Enterprise Service Buses ונקודות צבירה של שירותים. כל היישומים הללו מבצעים את פעולות "החנות והפנים" הבסיסיות, אשר לשמירתן של XML המקורי הן קריטיות לצמצום זמן האחזור. יכולת העדכון התוספתית של VTD-XML תורמת באופן משמעותי לביצועי ההעברה. יכולת הגישה האקראית של VTD-XML משפיעה היטב על ניתוב XML / מיתוג / סינון ב- XPath המבוססת על פריסת AJAX ו- SOA. כאשר מסמך XML נוסע דרך מספר רכיבים באמצע SOA באמצע, לעצור את ההודעה הראשונה, לאחר שסיים את הבדיקה של מסמך XML, יכול לבחור לשלוח את פורמט קובץ VTD + XML לרכיבים במורד כדי למנוע ניתוח חוזר, ובכך לשפר את התפוקה. באותו אופן, איזון עומס אינטליגנטי SOA יכול לבחור ליצור VTD + XML עבור הודעות SOAP נכנסות / יוצאות לפרוק ניתוח XML משרתי היישומים שמקבלים הודעות אלה. כאשר מסתכלים מנקודת המבט של התמדה XML יליד, VTD-XML יכול לשמש אינדקס XML קריא אנושי, קל לשימוש, למטרות כלליות. מסמכי XML המאוחסנים בדרך זו ניתנים לטעינה לזיכרון, לשאילתה, לעדכון או לעריכה ללא תקורה של ניתוח / עריכה בסדרה חוזרת. שילוב VTD-XML של ביצועים גבוהים, שימוש בזיכרון נמוך, והערכת XPath יעילה מאפשרת גישה חדשה לנתוני XML, המבוססים לחלוטין על XPath. היתרון הגדול ביותר של גישה זו הוא כבר לא דורש סכימת XML, נמנע יצירת אובייקטים מיותרים, ולוקח את היתרון של קידוד משוחרר של XML. ראוי לציין כי מחייב נתונים שנדונו במאמר המוזכר לעיל צריך להיות מיושם על ידי היישום: VTD-XML עצמה מציעה רק accessors. בהקשר זה VTD-XML הוא לא פתרון מחייב נתונים עצמו (בניגוד JiBX, JAXB, XMLBeans), למרות שהוא מציע פונקציונליות החילוץ עבור חבילות מחייב נתונים, הרבה כמו מנתחי XML אחרים ( DOM, SAX, Stax ). החל בגרסה 2.11, Java ו- C # גרסאות של VTD-XML מורכבות מהשיעורים הבאים: VTDGen (VTD גנרטור) הוא המעמד כי encapsulates הראשי ניתוח, אינדקס טוען פונקציות אינדקס כתיבה. VTDNav ( VTDNigator ) הוא המעמד (1) כולל XML, VTD ומידע היררכי, (2) מכיל שיטות ניווט שונות, (3) מבצע השוואות שונות בין רשומות VTD לבין מחרוזות, ו (4) ממיר רשומות VTD לפרימיטיבי סוגי מידע. AutoPilot הוא מחלקה המכילה פונקציות המבצעות איטרציה ברמת הצומת ו- XPath. XMLModifier הוא מחלקה המציעה יכולת עדכון מצטבר, כגון מחיקה, הוספה ועדכון. ה- VTD-XML המורחב מורכב מהשיעורים הבאים: VTDGenHuge (מחולל VTD מורחב) מתמצת את הניתוח הראשי. XMLBuffer מבצע טעינה בזיכרון של מסמכי XML. XMLMemMappedBuffer מבצע זיכרון ממופה זיכרון של מסמכי XML. VTDNavHuge (Extended VTD Navigator) 1) מתמצת XML, VTD מורחב, ומידע היררכי, (2) מכיל שיטות ניווט שונות, (3) מבצע השוואות שונות בין רשומות VTD לבין מחרוזות, ו (4) ממיר רשומות VTD לסוגי נתונים פרימיטיביים. AutoPilotHuge מבצע איטרציה ברמת הצומת ו- XPath. /* 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"); } } } אתר האינטרנט הרשמי של VTD-XML Non-Extractive Parsing for XML, www.xml.com מניפולציות תוכן XML הדרך Ximple להציג את הרעיון של מסמך centric עיבוד XML ומדוע הוא שם את העתיד שקרים VTD-XML: עיבוד XML לעתיד (חלק II) פשט עיבוד XML באמצעות VTD-XML עיבוד XML מהיר יותר עם VTD-XML VTD-XML: עיבוד XML לעתיד (חלק I) מסמכי XML אינדקס עם VTD-XML Jimmy Zhang, Cut, paste, split, and assemble XML documents with VTD-XML, JavaWorld, ‏2006-07-24 (באנגלית) XML על שבב? XML על שבב X3 של W3C בינארי XML סדנת נייר עמדה VTD-XML: חזון חדש של XML באדיבות ויקטור ר. וולקמן Virtual Token מבוא מתאר ב SourceForge i-Technology נקודת מבט: אווה הביצועים של בינארי XML @ SOA WORLD מגזין VTD-XML ניתוח / דוח ביצועים ניווט Ximpleware, www.ximpleware.com http://www.devx.com/xml/Article/30484 לעבד מסמכי XML גדולים עם VTD-XML להאיץ יישומים WSS עם VTD-XML מצגת סדנת W3C על אבטחת XML http://www.w3.org/2007/xmlsec/ws/papers/06-zhang-ximpleware/ Schemaless Java-XML מחייב נתונים עם VTD-XML