1 / 22

חלק 3: מבוא ל- XPath

חלק 3: מבוא ל- XPath. XML Path Language. מסמך דוגמא. < bib > < book price =“55”> < publisher >Addison-Wesley</ publisher > < author >Serge Abiteboul</ author > < author > < first-name >Rick</ first-name >

leo-murphy
Download Presentation

חלק 3: מבוא ל- XPath

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. חלק 3:מבוא ל- XPath XML Path Language

  2. מסמך דוגמא <bib> <bookprice=“55”> <publisher>Addison-Wesley</publisher> <author>Serge Abiteboul</author> <author> <first-name>Rick</first-name> <last-name>Hull</last-name> </author> <author>Victor Vianu</author> <title>Foundations of Databases</title> <year>1995</year> </book> <book> <publisher>Freeman</publisher> <author>Jeffrey D. Ullman</author> <title>Principles of Database and Knowledge Base Systems</title> <year>1998</year> </book> </bib>

  3. מסמך XML כעץ צומת השורש bib צומת המסמך book book price=55 publisher author . . . . Addison-Wesley Serge Abiteboul

  4. ביטויי XPath – דוגמאות פשוטות • /bib/book/year התוצאה: <year>1995</year> <year>1998</year> • /bib/paper/year התוצאה: קבוצה ריקה של צמתים (אין אלמנטים בעלי שם paper)

  5. חיפוש צאצאים (סגור Kleene מוגבל) • //author התוצאה: <author>Serge Abiteboul</author> <author> <first-name>Rick</first-name> <last-name>Hull</last-name> </author> <author>Victor Vianu</author> <author>Jeffrey D. Ullman</author> • /bib//first-name התוצאה: <first-name>Rick</first-name> קבוצה של 4 צמתים

  6. בחירת צמתים שאינם אלמנטים • text()מחזיר צמתים מסוג טקסט • node()מחזיר כל צמת ללא חשיבות לסוגו • הביטוי הבא /bib/book/author/text() מחזיר את שמות הסופרים ששמם נמצא בצומת טקסט אחד. Serge Abiteboul Victor Vianu Jeffrey D. Ullman • הסופר Rick Hull אינו מופיע משום ששמו מופרד לשני אלמנטים, כלומר לאלמנט author לא קיים צומת בן מסוג טקסט.

  7. בחירת אלמנט כלשהו - wildcard • //author/* התוצאה: <first-name>Rick</first-name> <last-name>Hull</last-name> ה-wildcard * במקרה זה בוחר כל צומת אלמנט ללא חשיבות לשמו.

  8. גישה לתכונות • /bib/book/@price התוצאה: “55” ה-@ מתייחס לתכונות ה-@price מתייחס לתכונה price @*מתייחס לתכונה כל שהיא

  9. בחירה לפי ביטויים בוליאניים • /bib/book/author[first-name = “Rick”] התוצאה: <author> <first-name>Rick</first-name> <last-name>Hull</last-name> </author> הביטוי בתוך [ ] דורש כי שמו הפרטי של הסופר הוא Rick. שאלה: כתבו ביטוי המחזיר את כל הספרים מהמילניום הנוכחי? • /bib/book[ year >= 2000] על מנת לבצע את השוואה, הערך הטקסטואלי של צומת year מומר לערך מספרי.

  10. בחירה לפי ביטויים בוליאניים • //book[@price<60][publisher = "Addison-Wesley"] המשמעות של[…][…]היא קיום הביטוי הראשון.מהרשומות שקיבלנו לאחר קיום הביטוי הראשון נדרוש גם קיום הביטוי השני. • התוצאה ? • הביטוי הנ"ל שקול ל- //book[@price<60 and publisher = "Addison-Wesley"] (כפי שנראה בהמשך השקילות לא קיימת כאשר התנאי תלוי בקבוצת הייחוס)

  11. ביטויים בוליאניים קיומיים (existential) • /bib/book/author[first-name][address[zip][city]]/last-name • התוצאה: מוחזרים שמות משפחה (last-name) של סופרים בעלי שם פרטי המופיע בתוך צומת נפרד ובעלי כתובת הכוללת מיקוד (zip) ושם עיר (city). • המשמעות של [first-name] היא הדרישה כי לכל צומת author יש לפחות צומת בן first-name אחד. • שאלה: החזירו סופרים בעלי שם פרטי בלבד (ללא שם משפחה). • /bib/book/author[first-name][not(last-name)]

  12. פונקציות • /bib/book[2] • שקול ל- /bib/book[position() = 2] • פונקציה position() מחזירה את המספר הסידורי של צומת ההקשר בקבוצת הייחוס שלו. • //author[last()] • פונקציה last() מחזירה את מיקום הצומת האחרון בקבוצת הייחוס. • האם שני הביטויים הבאים שקולים? • //author[1][2] • //author[2][1]

  13. פונקציות – דוגמא לשאלת שקילות • נסתכל על הערכים שיוחזרו בדוגמא עבור מסמך הדוגמא • הערכים שיוחזרו עבור //author[1]– הסופר הראשון בכל ספר <author>Serge Abiteboul</author> <author>Jeffery D. Ullman</author> • //author[1][2]לא יחזיר ערכים, מכיוון שבכל צומת בקבוצת הצמתים שהוחזרו ישנו רק סופר אחד • //author[2]שקול ל- //author[2][1] <author> <first-name>Rick</first-name> <last-name>Hull</last-name> </author> מכאן שהביטויים אינם שקולים

  14. פונקציות - המשך • /bib//*[name()=”book”] • שקול ל- /bib//book • name() הינה פונקציה המחזירה את שם הצומת. • /bib/book[count(author)>1] • count() מחזירה את מספר הצמתים בקבוצת הקלט. • id(“a0130353000”) • id() מחזירה את הצמתים בעלי תכונות ID כפי שנתון ע"י הקלט.

  15. XPath – כיווני ניווט (צירים – axes) • ניתן לנוע על פני 13 הכיוונים הבאים: • ancestor::- מכיל אבות קדמונים של צומת ההקשר • ancestor-or-self::- מכיל אבות קדמונים של צומת ההקשר ואת הצומת עצמו • attribute::- מכיל אטריביוטים (תכונות) של צומת ההקשר • child::- מכיל בנים של צומת ההקשר • descendant::- מכיל צאצאים של צומת ההקשר • descendant-or-self::-מכיל צאצאים של צומת ההקשר ואת הצומת עצמו • following::- מכיל צמתים המופיעים אחרי צומת ההקשר במסמך למעט צמתים צאצאים

  16. כיווני ניווט - המשך • following-sibling::- מכיל אחים של צומת ההקשר המופיעים אחריו במסמך • namespace::- מכיל צמתים מסוג namespace של צומת ההקשר • parent::- מכיל את צומת האב (אם קיים) של צומת ההקשר • preceding::- מכיל צמתים המופיעים לפני צומת ההקשר במסמך למעט צמתים שהם אבות קדמונים • preceding-sibling::-מכיל אחים של צומת ההקשר המופיעים לפניו במסמך • self::- מכיל את צומת ההקשר עצמו

  17. קיצורים

  18. קיצורים- דוגמאות

  19. דוגמאות //author/descendant-or-self::node()/child::zip ⇔//author//zip ⇔//author/descendant::zip • מה מחזירים הביטויים הבאים? • //book/publisher/parent::*/author • //book[author[position()<last()]] • //book[count(author[1]) = count(author[1] | author[last()] ) ] שני הביטויים עלולים להחזיר תוצאות שונות אם מוסיפים בסוף בחירת מיקום

  20. דוגמאות - המשך • מהם הספרים ששנת ההוצאה שלהם היא המאוחרת ביותר? • //book[ not(year < //book/year) ] • מי הם המחברים אשר כתבו יותר מספר אחד? יש להחזיר כל מחבר כזה פעם אחת בדיוק. • /bib/book/author[.=../following-sibling::*/author and not(.=../preceding-sibling::*/author)]

  21. שאלה ממבחן <!ELEMENT tournament (game*)> <!ELEMENT game (GID, date, player, player, move*)> <!ELEMENT player (name, country, color)> <!ELEMENT move(no, status, piece, from, to)> <!ELEMENT piece(type, color)> • כדי לפשט את הצגת ה-DTD, הניחו כי האלמנטים GID, date, name, country, color, no, status, from, to, type הם מסוג PCDATA. • כתבו שאילתת XPath המוצאת את שם השחקן שביצע הזזת כלי במהלך מספר 7 של משחק מספר 99. על השאילתה למצוא את השחקן על ידי השוואת הצבע שבו הוא משחק לצבע הכלי שהוזז במהלך הנדון.

  22. שאלה ממבחן - פתרון • משחק מספר 99 • //game[GID=99] • הצבע של מהלך מספר 7 במשחק 99 • //game[GID=99]/move[no=7]/piece/color • שם השחקן שביצע את הזזת הכלי במהלך מספר 7 במשחק 99 • //game[GID=99]/player[color = ../move[no=7]/piece/color]/name

More Related