25
1 236363 םםםםםם םםםם םםםםםם8 . םםם םםםםםםXPath םםםםם: םםםם םםםם

1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

  • View
    235

  • Download
    8

Embed Size (px)

Citation preview

Page 1: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

1

236363מערכות מסדי נתונים

XPath. שפת החיפוש 8

אלדר פישרשקפים:

Page 2: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

2

XPathמהי

XPath היא שפת שאילתות המאפשרות לבחור קבוצה של

. זוהי שפה פשוטה יחסית )אולם XMLצמתים מתוך מסמך

רחוקה מטריוויאלית( לניווט במבנה העץ של המסמך ובחירה

מתוכו.

בד"כ שפה זו משמשת כרכיב בשפות מורכבות יותר, כגון שפת

, כשם XSLT ושפת תרגום המסמכים XQueryהשאילתות

.DTDששפת הביטויים הרגולרים משמשת כרכיב ב-

Page 3: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

3

לדוגמאDTDמקטע DTD, נניח שהמסמך שלנו מציית ל-XPathעבור הדוגמאות ב-

המכיל )בין השאר( את ההכרזות הבאות:

<!ELEMENT book )title, chapter∗( >

<!ELEMENT chapter )title, paragraph∗, section∗( >

<!ELEMENT section )title?, paragraph∗( >

<!ELEMENT paragraph )#PCDATA | emph | image(∗ >

<!ELEMENT emph )#PCDATA( >

<!ELEMENT image EMPTY >

<!ATTLIST image file CDATA #REQUIRED

height CDATA #IMPLIED

width CDATA #IMPLIED >

כאשר לא מצויין אחרת, אנו נניח שהבן היחידי של שורש המסמך .bookהוא צומת אלמנט עם תווית

Page 4: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

4

Xpath תחביר בסיסי מזכיר את זה של בחירת XPathהתחביר הבסיסי של ביטויי

קבצים במערכות הפעלה.

דוגמא: עבור מסמך המכיל תיאור של ספר יחיד )תחום בתגים >book>…</book< הביטוי הבא יתאר את כל תתי הפרקים )

.book/chapter/section/בספר:

" פירושו שתת-הביטוי מימין לסימן /באופן פורמלי: סימן " מתאר חיפוש, שיש לבצעו בתתי העץ הנקבעים ע"י הצמתים

המתוארים בתת-הביטוי שמשמאל לסימן ה-" / ". סימן ה-" / " השמאלי ביותר פירושו שהחיפוש הכולל מתחיל מצומת

השורש.

Page 5: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

5

מוגבל(Kleeneחיפוש צאצאים )סגור שני סימני " / " רצופים פירושם שאת הצמתים המתוארים

של צאצאיםבתת-הביטוי מימין לסימן יש לחפש החל מההצמתים המתוארים משמאל לסימן, ולא רק מהבנים.

דוגמאות:חיפוש של כל צמתי התמונה במסמך : –

//imageבהנחה שהמסמך כולו מכיל תיאור של ספר יחיד, איך –

נחפש כותרים של פרקים ותתי-פרקים בלבד ?

/book/chapter//titleעבור מסמכים שיכולים להכיל מספר ספרים במספר רמות, –

איך נחפש את כל התמונות המופיעות בהם ?

//book//image

Page 6: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

6

בחירת צמתים שאינם אלמנטיםהתחביר הבסיסי מתאים לבחירת צמתי אלמנט בלבד. אם נרצה

":@להתייחס לצמתי תכונות, נשתמש בסימן "

ייתן את שמות כל book//image/@file/לדוגמא, הביטוי הקבצים המשמשים עבור תמונות בספר.

על מנת להתייחס לצמתי טקסט, נשתמש במילה השמורה “text)(”.זכרו שלצמתים אלו אין תוויות .

של כותרת הספר )ללא טקסטדוגמא: לבחירת ה מסביב לטקסט( ניתן להשתמש >”title>…</title“<ה-

.)(book/title/text/בביטוי

Page 7: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

7

(wildcard)בחירת צומת כל שהוא " מתאימה לכל צומת של המסמך הממוקמת )(nodeהמילה השמורה "

במקום המתאים במסלול החיפוש, פרט לתכונות. " פירושו כל צומת אלמנט הממוקם במסלול החיפוש הסימן "

)ליתר דיוק, הפירוש הוא "כל הצמתים מטיפוס ציר החיפוש הנוכחי", אולם ברב המקרים טיפוס זה הוא של צמתי האלמנט(.

דוגמא:

/book//paragraph/node)( ייתן את התוכן של כל הפסקאות בספר )קטעי טקסט, צמתי הדגשה ותמונות(.

/book//paragraph/ ייתן את ההדגשות והתמונות בכל הפסקאות בספר.

" פירושו כל צמתי התכונות במסלול החיפוש. @הצירוף " ייתן את כל התכונות של כל התמונות book//image/@ /לדוגמא:

בספר.

Page 8: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

8

בחירה של צומת לפי מספר

יבחר את צומת הפרק השלישי בספר. book/chapter[3]/הביטוי

)או kבאופן כללי: אם נצמיד לתווית של צומת בחיפוש מספר

(, אז התשובה תהיה kביטוי אריתמטי שתוצאתו היא מספר

בעל תווית זו. הסדר נקבע לפי סדר הצמתים kהצומת ה-

במסמך.

הבחירה נעשית מחדש עבור כל אפשרות של מסלול חיפוש

חלקי עד הצומת הלפני אחרונה. לדוגמא, אילו באותו מסמך

היה מחזיר book/chapter[3]/היו מאוחסנים מספר ספרים, אז

את הפרק השלישי מכל ספר במסמך שיש לו פרק כזה.

Page 9: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

9

XPathביטויים נוספים ב-

ניתן גם לכתוב ביטויים המחזירים ערך מספרי, או ערך XPathב-

בוליאני, או מחרוזת, ולא רק קבוצה של צמתים.

ביטויים כאלה יכולים להיות שימושיים בשפה המארחת,

ולעיתים משתמשים בהם כתתי-ביטוי של ביטויי חיפוש, לצורך

בחירת צומת לפי מספר, או )כפי שנראה בהמשך( לפי תנאי

בוליאני.

Page 10: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

10

XPathאופרטורים ב- באופרטורים הבאים:XPathניתן להשתמש בביטויי

)לחילוק, במקום הסימן " / , div, -, +אופרטורים אריתמטים: • ,)"mod.)שארית בחלוקה של שלמים(

.=!, =, =>, =<, >, <השוואות: •

.and, orמחברים בוליאנים: •

"|איחוד בין שתי קבוצות צמתים מתבצע ע"י האופרטור " •

", // " או " /ניתן להשתמש בביטויי חיפוש המתחילים ב-" • " אשר נראה בהמשך, [ ... ]ובביטויי בחירה בתוך "

כאופרטורים על קבוצת צמתים המתוארת בביטוי משמאלם.

•XPath.מגדירה גם מספר פונקציות. חלק מהן נראה בהמשך

Page 11: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

11

בחירה לפי ביטוי בוליאני " על מנת לבחור [ ... ]ניתן להשתמש בביטוי בוליאני בתוך "

מקבוצת הצמתים רק את אלו המקיימים את התנאי.

יבחר רק את book/chapter[title=“Introduction”]/הביטוי המכיל את הטקסט ”title“הפרקים שבהם יש צומת

“Introduction”.

?”)(title/text“ ולא ב-”title“מדוע השתמשנו ב- צמתים מתורגמים למחרוזות לפי הצורך, ובתרגום זה XPathב-

סימני התיוג מוסרים.

Page 12: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

12

מסלולי חיפוש יחסיים שאינם מתחילים ב-" / " מתארים חיפוש XPathביטויי חיפוש ב-

שאינו מתחיל בשורש המסמך.

מהיכן החיפוש יתחיל ? של הביטוי. בעת ביצוע ביטוי (contextבהקשר )הדבר תלוי

XPath ,תוכנת העיבוד מקבלת יחד עם הביטוי נתונים נוספים ,ובהם את צומת ההקשר. נתונים אלו מסופקים ע"י השפה

XPathהמארחת, ובמקרה שבו מדובר בתת-ביטוי של ביטוי עצמו.XPathמורכב יותר, ההקשר ניתן ע"י

. book/chapter[title=“Introduction”]/דוגמא: ניזכר בביטוי יהיה ”title=“Introductionצומת ההקשר עבור תת-הביטוי

צומת הפרק המתאים שעבורו התנאי נבדק.

Page 13: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

13

פונקציות מיקום )ללא פרמטרים( נותנת את המיקום היחסי )(positionהפונקציה

של צומת ההקשר בתוך קבוצת הייחוס שלו.

שקול לביטוי book/chapter[position)(=3]/לדוגמא, הביטוי /book/chapter[3].

מחזירה את מיקום הצומת האחרון בקבוצת )(lastהפונקציה הייחוס של צומת ההקשר.

יחזיר את book/chapter/section[last)(]/לדוגמא, הביטוי תת-הפרק האחרון בכל פרק של הספר.

Page 14: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

14

פונקציות נוספות עבור קבוצות צמתים תחזיר את מספר הצמתים בקבוצה )count)argהפונקציה

.argהמתוארת ע"י ביטוי החיפוש

יחזיר את book/chapter[count)section(>2]/דוגמא: הביטוי תתי-פרקים.2כל פרקי הספר עם יותר מ-

הזהה ID תחזיר את הצומת בעל תכונת ה-)id)argהפונקציה .argלביטוי

הוא מחרוזת עם רווחים, יבוצע חיפוש עבור כל argאם –"מילה" במחרוזת.

הוא קבוצת צמתים, הם יתורגמו למחרוזות שיפורקו argאם –ל-"מילים", ועבור כל אלו יבוצע חיפוש.

דוגמא: עבור העץ הגנאולוגי שתואר בהרצאה הקודמת, כך נוכל לדעת לאלו אנשים יש בנות:

//person[id)@children(/@gender=“female”]

Page 15: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

15

פונקציות אחרות מוגדרות גם מספר פונקציות שימושיות נוספות.XPathב-

למשל: ,)…number)…(, boolean)פונקציות תרגום הערכים –

string)…(. ,)…(containsפונקציות להרכבת ובדיקת מחרוזות, כגון –

concat)…(. ,)…floor)…(, sum)פונקציות בוליאניות ומספריות כגון –

not)…(.

משמעות הפונקציות תינתן בתרגילים ובדפי קריאה.

Page 16: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

16

XPathעוד על השוואות ב-במקרים שבהם אנו משווים בין שני ערכים מסוגים שונים, יתבצע

תרגום אוטומטי של הערכים לפי הקריטריונים הבאים:

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

מייצגות מספרים יגרמו כאן לתוצאה לא צפויה.

: התרגום יתבצע לפי סדר העדיפויות הבא.ההשוואות =, =! אם לפחות אחד הערכים הוא בוליאני )למשל תוצאה של –

(, )false)(, true)השוואה אחרת, או של אחת הפונקציות אז גם הערך השני יתורגם לערך בוליאני.

אם אחד הערכים הוא מספר והשני הוא מחרוזת, אז –המחרוזת תתורגם גם היא למספר.

אם שני הערכים מחרוזות, תתבצע ביניהם השוואה.–

Page 17: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

17

השוואות וקבוצות צמתיםבהשוואה כל שהיא בין ערך לקבוצה של צמתים )הנתונה ע"י

אם ורק אם )(”true“ביטוי חיפוש(, ההשוואה תקבל ערך אמת קיים צומת כל שהוא בקבוצה, שלאחר תרגומו לערך מהסוג

המתאים ההשוואה המתאימה תתקיים.

אם קיימת )(”true“ יחזיר image/@width>32//דוגמא: הביטוי .32במסמך תמונה אחת לפחות עם רוחב מוצהר הגדול מ-

אם )(”true“בהשוואה בין שתי קבוצות צמתים, זו תקבל ערך אחד מכל קבוצה, כך שבתרגומם ורק אם קיים זוג צמתים

לערכים ההשוואה המתאימה תתקיים.

book/chapter[1]//image/@file=/book/chapter[2]//image/@file/הביטוי אם קיים לפחות קובץ תמונה אחד משותף )(”true“יחזיר ערך

בין שני הפרקים.

Page 18: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

18

XPathניווט מתקדם ב-כל הביטויים שלמדנו עד עתה תיארו חיפושים בעץ המסמך

במסלול יורד מהשורש, מאב לבן )עם אפשרות ל"דילוג" כאשר משתמשים ב-"//"(.

ניתן גם לתאר מסלולי חיפוש הכוללים כיוונים XPathב-אחרים. הדבר נעשה באמצעות ציון "כיוון" הצומת המבוקש

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

book

chapter chapter

sectionsection

book

chapter chapter

sectionsection

Page 19: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

19

(axis)ציון כיוון מפורש ציון הכיוון ניתן בין סימן ה-"/" לבין תווית הצומת הבא. כאשר אין

ציון כזה, ברירת המחדל היא מעבר לבן. במפורש כותבים .”::child“זאת

שקול book/chapter/ הביטוי דוגמא .child::book/child::chapter/לביטוי

הפניה לצומת תכונה נחשבת גם היא לציון כיוון. לדוגמא, , image/attribute::file// שקול לביטוי image/@file//הביטוי הוא ציון הכיוון המפורש של תכונה.”::attribute“כאשר

. axisציר ציון כיוון החיפוש נקרא

Page 20: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

20

ציוני כיוון של צאצאיםdescendant:: .מציין כל צאצא אפשרי של הצומת הנוכחי

descendant-or-self:: מציין כל צאצא אפשרי וכן את הצומת עצמו.

" שקול בעצם לשימוש ב-//השימוש ב-"“/descendant-or-self::node/)(”

. ::”descendant“השימוש ב-"//" לא תמיד שקול אולם לציר

ניתן לראות את ההבדל בדוגמא הבאה:•/book/descendant::image[1] ייתן את התמונה הראשונה

בספר.•/book//image[1] ייתן את התמונה הראשונה בכל פסקה

]" יהיה ביחס לצומת האב של 1בספר המכילה תמונה )ה-"[(.imageצומת ה-

Page 21: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

21

בחירה עצמית ובחירת הורה מציין את הצומת עצמו. ::self הציר

לדוגמא, לבחירת כל צמתי הכותרת שאינם הקדמה נוכל book//title[self::title!=“Introduction”]/לכתוב

מציין את אבי הצומת.::parent הציר יבחר את הספר עצמו, book/chapter/parent::book/הביטוי

אבל רק אם יש בו פרקים.

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

”)(/self::node“ הוא סימון מקוצר ל-”./“”)(/parent::node“ הוא סימון מקוצר ל-”../“

Page 22: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

22

חיפוש לפי אחים מציין את האחים של הצומת הנמצאים ::following-sibling הציר

אחריו במסמך. לצורך זה, צמתי תכונות נחשבים כחסרי אחים.

דוגמא: הביטוי /book/chapter[title=“Introduction”]/following-sibling::chapter

ייתן את כל צמתי הפרקים לאחר פרק ההקדמה.

מציין את האחים של הצומת )לא כולל ::preceding-sibling הצירתכונות( הנמצאים לפניו במסמך.

דוגמא: הביטוי הבא ייתן את כל הפרקים לפני האפנדיקס: /book/chapter[title=“Appendix”]/preceding-sibling::chapter

Page 23: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

צירים הפוכים: בניגוד לצירים האחרים, לכל הפוך הוא ציר ::preceding-sibling הציר

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

לפני האפנדיקס:האחרוןדוגמא: הביטוי הבא ייתן את הפרק /book/chapter[title=“Appendix”]/preceding-sibling::chapter[1]

שינוי הסדר לעומת זאת, הביטוי הבא כבר ייתן את הפרק הראשון כבר אינו בתוקף בעקבות השימוש באופרטור על קבוצת הצמתים

הכוללת./(book/chapter[title=“Appendix”]/preceding-sibling::chapter])1[

אין הדבר XPath 1.0 הוא הפוך. ב-::parent גם הציר XPath 2.0ב-משנה כי תתי הקבוצות שהציר אמור להפוך יכולות להיות בנות צומת

אחד לכל היותר.

Page 24: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

24

מצייני כיוון נוספיםלמציאת האבות הקדמונים של צומת, עם או בלי הצומת עצמו

::ancestor-or-self(הפוכים)צירים ancestor ::

פרטלמציאת כל הצמתים במסמך לאחר הצומת הנוכחי, ::followingלצאצאים ותכונות

לאבות פרטלמציאת כל הצמתים לפני הצומת הנוכחי, (הפוךהקדמונים ותכונות )ציר

preceding ::

)לא נלמד(namespacesלמציאת הכרזות על "מרחבי שמות", namespace::

Page 25: 1 236363 מערכות מסדי נתונים 8. שפת החיפוש XPath שקפים:אלדר פישר

25

XPath מילות סיכום

מאפשרת גמישות רבה בהגדרת מסלולי XPathשפת החיפוש

נתון.XMLחיפוש לבחירת קבוצות של הצמתים במסמך

, XQuery, ובאופן הדוק אף יותר ב-XSLTשפה זו משתלבת ב-

בעת ביצוע הפעולות המוגדרות בהן על קבוצות.