Click here to load reader
View
223
Download
5
Embed Size (px)
Citation preview
Spring 2005 1
:3חלק XPathמבוא ל-
XML Path Language
Spring 2005 2
מסמך דוגמא<bib> <book price=“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>
Spring 2005 3
כעץXMLמסמך
bib
book book
publisher author . . . .
Addison-Wesley Serge Abiteboul
צומת השורש
צומת המסמך
price=55
Spring 2005 4
– דוגמאות פשוטותXPathביטויי
/bib/book/year
התוצאה:
<year>1995</year>
<year>1998</year>
/bib/paper/year
התוצאה:
(paperקבוצה ריקה של צמתים )אין אלמנטים בעלי שם
Spring 2005 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של
צמתים
Spring 2005 6
בחירת צמתים שאינם אלמנטים
text)( מחזיר צמתים מסוג טקסטnode)( מחזיר כל צמת ללא חשיבות לסוגו
הביטוי הבא/bib/book/author/text)(
מחזיר את שמות הסופרים ששמם נמצא בצומת טקסט אחד.Serge Abiteboul Victor Vianu
Jeffrey D. Ullman
הסופרRick Hull ,אינו מופיע משום ששמו מופרד לשני אלמנטים לא קיים צומת בן מסוג טקסט. authorכלומר לאלמנט
Spring 2005 7
wildcard - בחירת אלמנט כלשהו
//author/*התוצאה:
<first-name>Rick</first-name>
<last-name>Hull</last-name>
* במקרה זה בוחר כל צומת אלמנט ללא wildcardה-חשיבות לשמו.
Spring 2005 8
גישה לתכונות
/bib/book/@price
”55“התוצאה:
מתייחס לתכונות @ה-
price מתייחס לתכונה price@ה-
מתייחס לתכונה כל שהיא @*
Spring 2005 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על מנת לבצע את השוואה, הערך הטקסטואלי של צומת
Spring 2005 10
בחירה לפי ביטויים בוליאניים
//book[@price<60][publisher = "Addison-Wesley"]
היא ששני הביטויים הבוליאניים […][…]המשמעות של חייבים להתקיים.
? התוצאה-הביטוי הנ"ל שקול ל
//book[@price<60 and publisher = "Addison-Wesley"]
Spring 2005 11
ביטויים בוליאניים קיומיים (existential)
/bib/book/author[first-name][address[zip][city]]/last-name:התוצאה
של סופרים בעלי (last-name)מוחזרים שמות משפחה שם פרטי המופיע בתוך צומת נפרד ובעלי כתובת
.(city) ושם עיר (zip)הכוללת מיקוד המשמעות של]first-name[ היא הדרישה כי לכל צומת
author יש לפחות צומת בן first-name.אחד שאלה: החזירו סופרים בעלי שם פרטי בלבד )ללא שם
משפחה(. /bib/book/author[first-name][not)last-name(]
Spring 2005 12
פונקציות /bib/book[2]
-שקול ל/bib/book[position)( = 2] פונקציהposition)( מחזירה את המספר הסידורי של
צומת ההקשר בקבוצת הייחוס שלו. //author[last)(]
פונקציהlast)( מחזירה את מיקום הצומת האחרון בקבוצת הייחוס.
?האם שני הביטויים הבאים שקולים //author[1][2] //author[2][1]
Spring 2005 13
פונקציות - המשך
/bib//*[name)(=”book”] -שקול ל/bib//bookname)(.הינה פונקציה המחזירה את שם הצומת
/bib/book[count)author(>1]count)(.מחזירה את מספר הצמתים בקבוצת הקלט
id)“a0130353000”(id)( מחזירה את הצמתים בעלי תכונות ID כפי שנתון
ע"י הקלט.
Spring 2005 14
XPath – כיווני ניווט )צירים – axes)
הכיוונים הבאים:13ניתן לנוע על פני ancestor:: מכיל אבות קדמונים של צומת ההקשר -ancestor-or-self:: מכיל אבות קדמונים של צומת ההקשר -
ואת הצומת עצמוattribute:: מכיל אטריביוטים )תכונות( של צומת ההקשר -child:: מכיל בנים של צומת ההקשר -descendant:: מכיל צאצאים של צומת ההקשר -descendant-or-self:: - מכיל צאצאים של צומת ההקשר
ואת הצומת עצמוfollowing:: מכיל צמתים המופיעים אחרי צומת ההקשר -
במסמך למעט צמתים צאצאים
Spring 2005 15
כיווני ניווט - המשך
following-sibling:: מכיל אחים של צומת ההקשר המופיעים -
אחריו במסמךnamespace:: מכיל צמתים מסוג -namespace של צומת
ההקשרparent:: מכיל את צומת האב )אם קיים( של צומת ההקשר -preceding:: מכיל צמתים המופיעים לפני צומת ההקשר -
במסמך למעט צמתים שהם אבות קדמוניםpreceding-sibling:: - מכיל אחים של צומת ההקשר המופיעים
לפניו במסמךself:: מכיל את צומת ההקשר עצמו -
Spring 2005 16
קיצורים
כתיב מלא כתיב מקוצר
child:: ברירת מחדל
attribute:: @
self::node)( .
parent::node)( ..
/descendant-or-self::node)(/ //
[position)( = number] ]number[
Spring 2005 17
קיצורים- דוגמאות
כתיב מלא כתיב מקוצר
/child::bib/child::book /bib/book
/child::bib/child::book/attribute::price
/bib/book/@price
/self::node)(/descendant-or-self::node)(/child::title
/.//title )equivalent to //title(
/descendant-or-self::node)(/child::author/parent::node)(
//author/..
Spring 2005 18
דוגמאות//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)(] ( ]
שני הביטויים עלולים להחזיר תוצאות שונות אם מוסיפים
בסוף בחירת מיקום
Spring 2005 19
דוגמאות - המשך
מהם הספרים ששנת ההוצאה שלהם היאהמאוחרת ביותר?
//book[ not)year < //book/year( ] מי הם המחברים אשר כתבו יותר מספר אחד? יש
להחזיר כל מחבר כזה פעם אחת בדיוק. /bib/book/author[.=../following-sibling::*/author
and not).=../preceding-sibling::*/author(]