+ All Categories
Home > Documents > 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

Date post: 20-Dec-2015
Category:
View: 231 times
Download: 1 times
Share this document with a friend
25
1 236363 םםםםםם םםםם םםםםםם9 - . םםםם םם םXQuery םםםםם: םםםם םםםם
Transcript
Page 1: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

1

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

XQuery. מבוא קל ל-9

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

Page 2: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

2

XQueryמקורות עבור ספר :

Howard Katt (editor), XQuery from the Experts, Addison-Wesley

בעיקר הפרק הראשון:Jonathan Robie, XQuery : A Guided Tour

אשר ניתן למצוא אותו גם ברשת:http://www.datadirect.com/techzone/xml/xquery/docs/katz_c01.pdf

שקפים עם מידע נוסף:Oded Shmueli, Introduction to XQuery

הכולל ממשק דרך הרשת:XQueryמימוש לדוגמא של http://www.galaxquery.org

Page 3: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

3

XPath-ו XQuery

, כך שכל XPath בנויה למעשה כהרחבה של XQueryהשפה

.XQuery הוא בפרט ביטוי חוקי ב-XPathביטוי חוקי ב-

, שהיא XPath 2.0 כוללת בתוכה את XQuery 1.0ליתר דיוק,

. חלק מהמבנים שנלמד XPathגירסא מתקדמת יותר של

.XQuery ולא רק ל-XPath 2.0שייכים למעשה ל-

Page 4: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

4

התייחסות למסמכים חיצוניים יש יכולת לעבוד עם מספר מסמכים במקביל. XQueryב-

איך נקבע לאיזה מהמסמכים מתייחס ביטוי חיפוש נתון ?

מחזירה את צומת השורש של המסמך doc(name)הפונקציה (כאשר ביטוי זה מפורש כמחרוזת nameהמתואר ע"י הביטוי

).URIהמכילה

יבצע חיפוש של doc(“xmpbib.xml”)/bib/bookדוגמא: הביטוי . ”xmpbib.xml“ספרים במסמך ביבליאוגרפיה ששמו הוא

הסכימה של קובץ זה תתואר בהמשך ותשמש אותנו בדוגמאות XQuery(הקובץ הנ"ל משמש חלק מדוגמת-שימוש של

).w3.orgהמתוארת בפירוט באתר הרשמי של

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

Page 5: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

5

xmpbib.xmlהמסמך לדוגמא xmpbib.xml נתייחס למסמך בשם XQueryבמהלך ההרצאות על

המכיל פרטים על מספר ספרים. אנו נניח שמסמך זה מציית הבא:DTDל-

<!ELEMENT bib (book) >

<!ELEMENT book (title, (author+|editor+),publisher,price) >

<!ATTLIST book year CDATA #REQUIRED >

<!ELEMENT author (last,first) >

<!ELEMENT editor (last,first,affiliation) >

title , last , first , affiliation , publisher , priceצמתים עם התוויות בלבד וללא תכונות.PCDATA#מוגדרים כמכילי

הוא בן יחיד של המסמך bibנניח גם שצומת המסמך xmpbib.xml.

Page 6: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

6

XPathאופרטורים ופונקציות נוספות ב- מתווספים אופרטורים XQuery המשמשת ב-XPathבגרסת ה-

נוספים. כמה מהחשובים בהם:

", שכאן ניתן ו לאופרטור האיחוד "טיפול בקבוצות של צמתים:, מתווספים גם האופרטורים של ”union“גם לכתוב אותו כ-

.”except“, וחיסור, ”intersect“חיתוך,

אם ורק אם ()”true“ ייתן ערך ”is“ האופרטור השוואות צמתים:הביטויים משני צדדיו יקבלו צומת זהה (ולא סידרה) בחישוב

גם עבור שני צמתים שונים ()”true“" שיתן =ערכם (בניגוד ל-"" יתנו ערך אמת עבור >>", "<<בעלי אותו תוכן). האופרטורים "

הצמתים המושווים בהתאם לסדר המסמך.

על האופרטורים האחרים, ועל הגידול המשמעותי בפונקציות, .w3.orgהנכם מוזמנים לקרוא באתר של

Page 7: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

7

XPath 2.0 וב-XQueryסדרות ב- של סדרות, יהיו לנו עתה XPath 1.0במקום קבוצות הצמתים של

עצמים.

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

אחרת "תשוטח" ע"פ הדוגמא הבאה:(1, (2, 3), 4) (1, 2, 3, 4)

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

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

באמצעות ביטויים מהצורה הבאה:XQueryניתן לבנות סדרות ב-

(arg1, arg2, … )

Page 8: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

8

עוד על סדר המסמך

, שכן אופרטורים המטפלים XQuery חשוב גם ב-סדר המסמך

, או חיפוש בתתי intersect, unionבקבוצות של צמתים (כגון

העצים) יתחשבו בסדר המסמך ולא בסדר הסדרה המקורי.

סדר המסמך ברור כאשר המדובר בצמתים מתוך אותו עץ. עם

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

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

הוא לא ישתנה יציבשרירותי, אולם מובטח שהוא יהיה

במהלך ביצוע השאילתה.

Page 9: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

9

בניה של צמתים חדשים Constructors

אשר אינם XML יש אפשרות "לייצר" עצי XQueryבשפת ה-נמצאים כחלק מקבצי הקלט. השיטה הפשוטה ביותר לעשות

מוקף בתגים (כגוןXMLזאת היא באמצעות כתיבת מקטע “>tag>some text</tag<” מקטע כזה הוא ביטוי .(XQuery

חוקי שתוצאתו היא צומת אלמנט חדש עם התווית, התכונות, והתוכן המצויינים.

בדרך כלל נרצה אבל לחשב את תוכן הצומת באמצעות ביטוי XPath או XQuery במקרה זה מקיפים את ביטוי החישוב .

.”}…{“בסוגריים מסולסלים

דוגמאות:<booklist>}doc(“xmpbib.xml”)/bib/book/title{</booklist><image height=“1024” width=“768” pixels=“}1024768{”/>

Page 10: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

10

המשךבניית צמתים שתוכנו הוא הביטוי tagניתן גם לבנות צומת אלמנט עם תווית

. }element tag }expr באמצעות הביטוי הבא: exprהמחושב , }...{ בביטוי מוקף ב-tagכאן גם אפשר להחליף את השם

. במקרה זה תווית הצומת }element }arg{ }exprע"פ הדוגמא .argתהיה ערך המחרוזת של הביטוי

לתוספת תכונות עבור צמתים אלו, יש לבנות אותן כצמתים , }arg{ }expr{ attribute או }attribute label }exprבאמצעות הביטוי

ולשרשר את אלו לביטוי התוכן של צומת האלמנט.

דוגמא: הביטוי

element title }attribute language }“en”{, “Gone with the wind”{

XMLיחזיר את מקטע ה-

<title language=“en”>Gone with the wind</title>

Page 11: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

11

ביטויים מותנים

XPath יכולה להסתייע בביטויי XQueryבניה של צמתים ב-

if (test) then expr1 else expr2מותנים. צורתם הכללית:

הוא ביטוי שערכו מתפרש כערך בוליאני.testכאשר:

expr1 הוא ביטוי לחישוב התוצאה אם test-מתפרש כ true().

expr2 הוא ביטוי לחישוב התוצאה אם test-מתפרש כ false().

תמיד חייב לקבל ערך כל שהוא, תמיד XQueryמכיוון שביטוי

.elseחובה לכתוב גם את חלק ה-

אם רוצים שבמקרים מסוימים תוחזר הסדרה הריקה, ניתן

".( )להשתמש עבור זו בסימון "

Page 12: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

12

דוגמא לביטוי מותנה של ”book“ הוא משתנה שערכו הוא אחד מצמתי ה-b$נניח ש-

(בהמשך נראה אפשרות לקביעת ערכים xmpbib.xmlהקובץ עבור משתנים). הביטוי הבא "יתרגם" את הצומת לצומת עם

אם זהו ספר עם מחברים, או צומת עם ”monograph“תווית אחרת (כזכור, סכימת הקובץ קובעת כי ”handbook“תווית

לספר יהיו או מחברים או עורכים):

if ($b/author) then <monograph>}$b/node(){</monograph>

else <handbook>}$b/node(){</handbook>

Page 13: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

13

בניית מסמכים שלמים תקני מלא XML הוא בבניית מסמך XQueryאחד השימושים של

כתשובה לשאילתה (הדבר שימושי למשל בתחום החדש ). לשם כך יש להשתמש XMLיחסית של מסדי נתונים מבוססי

על תוכנו:XMLבביטוי הבא לבניית צומת-שורש של מסמך

document }expr{

לדוגמא, אם נרצה להכניס את רשימת הספרים המקוצרת תקני שלם, נשתמש XMLמאחת הדוגמאות הקודמות למסמך

בביטוי הבא:

document }<booklist>}doc(“xmpbib.xml”)/bib/book/title{</booklist>

{

Page 14: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

14

FLWORמבנה FLWOR הוא מבנה לשאילתות XQuery בעל כושר הבעה חזק

במיוחד, אשר מזכיר במידה מסוימת את מבנה השאילתות של SQL.

משמעות ראשי התיבות היא

For… Let… Where… Order by… Return

בלבד) מצוי כבר for…returnהערה: חלק מצומצם ממבנה זה (

. כאן נראה סקירה של המבנה כפי שהוא מופיע XPath 2.0ב-.XQueryב-

Page 15: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

15

בסיסיforreturnביטוי בצורה הפשוטה ביותר, ביטוי זה משמש לביצוע פעולה

for $var in domainאיבר-איבר על סדרה. הצורה הכללית: return result

המשתנה שיקבל ערכים מהסדרה.var $כאשר: domain .ביטוי המחזיר סדרה

result -תוצאה, בד"כ תלויה ב $var.

תוצאת הביטוי תחושב כך: כל איבר (ערך או צומת) בסדרה , ומחשבים var$ מוצב במשתנה domainהמתוארת ע"י הביטוי

(התוצאה יכולה להיות איבר או סדרה). כל resultעבורו את התוצאות הנ"ל משורשרות לקבלת תוצאת הביטוי הסופית.

.domainסדר השרשור יהיה לפי סדר האיברים בסדרה

Page 16: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

16

דוגמאותהביטוי

for $i in (1, 2, 3) return <i>}$i{</i>יחזיר את התוצאה:

<i>1</i><i>2</i><i>3</i>(במושגים של סדרה, התוצאה תהיה שלושה צמתי אלמנט עם

ותוכן מתאים).iתווית

, הביטויxmpbib.xmlבהתייחסות לדוגמת הקובץ for $i in doc(“xmpbib.xml”)/bib/book/authorreturn <authorlast> } $i/last/text() { </authorlast>

יחזיר רשימה של שמות המשפחה של המחברים של הספרים בקובץ.

האם יתכנו כפילויות בתוצאת הביטוי ?

Page 17: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

17

forרב-מימדי אחד.forניתן לקשור מספר משתנים לסדרות בביטוי

דוגמא:

for $i in (1, 2), $j in (1, 2, 3)

return <tuple>}($i,$j){</tuple>

סדר החישוב יהיה כמו זה המוכר מ"לולאות מקוננות" בשפות תכנות. בדוגמא למעלה התוצאה תהיה:

<tuple>1 1</tuple><tuple>1 2</tuple><tuple>1 3</tuple>

<tuple>2 1</tuple><tuple>2 2</tuple><tuple>2 3</tuple>

Page 18: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

18

FLWOR בביטוי letשימוש ב- את הערך var$ מציב במשתנה let $var := exprחלק הביטוי

.exprהמתואר ע"י

הוא ביטוי המתאר סדרה, ערכו של exprבמקרה (הנפוץ) ש-$var.(ולא לאיבר מתוכה) יהיה שווה לסדרה כולה

וביטויי for לשלב מספר ביטויי FLWORניתן באותו ביטוי let.ובכל סדר ,

Page 19: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

19

let ו-forדוגמא לשימוש ב-הביטוי

for $i in (1, 2, 3)

let $j := ($i, $i$i, $i$i$i)

return <tuple>}$j{</tuple>

יחזיר את התוצאה

<tuple>1 1 1</tuple>

<tuple>2 4 8</tuple>

<tuple>3 9 27</tuple>

Page 20: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

20

קינון ביטויים בכל מקום שבו צריכים סדרה, FLWORניתן להשתמש בביטוי

אחר.FLWORובפרט ניתן להשתמש בו כחלק מביטוי

דוגמא: הביטוי הבא יבנה טבלא של לוח כפל:

for $r in (1 to 5)

let $t := (

for $c in (1 to 5)

return <cell pos=“}$c{”>}$r$c{</cell>

)

return <row pos=“}$r{”>}$t{</row>

Page 21: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

21

FLWOR בביטוי whereשימוש ב- יגרום לכך FLWOR בתוך ביטוי ”where cond“שימוש בחלק

יבוצע (ותוצאתו תשורשר returnשהחישוב המתואר בחלק ה- ()true מקבל ערך condלתוצאה הסופית) אם ורק אם הביטוי

(לאחר תרגום תוצאתו לערך בוליאני), עבור ערכי המשתנים .let וה-forהניתנים באיטרציה הנוכחית של חלקי ה-

דוגמא: הביטויfor $i in (1 to 4), $j in (1 to 4)where $i mod $j = 0return <tuple>}($i, $j){</tuple>

יחזיר את התוצאה:<tuple>1 1</tuple> <tuple>2 1</tuple> <tuple>2 2</tuple><tuple>3 1</tuple> <tuple>3 3</tuple><tuple>4 1</tuple> <tuple>4 2</tuple> <tuple>4 4</tuple>

Page 22: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

22

דוגמא לצירוףwhere שימוש ב- לביצוע פעולות צירוף where ו-forניתן להשתמש בשילוב של

)join( לדוגמא, נניח שבידנו קובץ נוסף .xmpreviews.xml המכיל ביקורות, ושנרצה עבור כל זוג של ספר וביקורת עליו

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

for $b in doc(“xmpbib.xml”)/bib/book,

$r in doc(“xmpreviews.xml”)/reviews/entry

where $b/title=$r/title

return <book>}$b/node(), $r/review{</book>

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

Page 23: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

23

FLWOR בביטוי order byשימוש ב- return מאפשר לציין את הסדר שבו ביטוי ה-order byשימוש ב-

whereיחושב עבור ערכי המשתנים שעברו את הקריטריון של , במידה ואין חלק let וה-for(או כל הערכים המסופקים ע"י ה-

where.(

הוא השיטה העיקרית לקבלת תוצאות order byשימוש ב-בסדר שונה מסדר המסמך. עם זאת, יש להיזהר לא "לאבד"

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

" אשר יחזיר אותן ו" ולא להשתמש באופרטור ",עם אופרטור "לסדר המסמך.

Page 24: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

24

order byדוגמאות לשימוש ב-כתיבת תוכן רשימת הספרים לפי שם המחבר הראשון (שם

משפחה קודם):for $b in doc(“xmpbib.xml”)/bib/bookorder by $b/author[1]/last, $b/author[1]/firstreturn $b

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

מימוש, אולם יש דרך לציינה במפורש בביטוי.

דוגמא למיון בסדר יורד:for $b in doc(“xmpbib.xml”)/bib/bookorder by $b/@year descendingreturn $b

Page 25: 1 236363 מערכות מסדי נתונים 9. מבוא קל ל-XQuery שקפים:אלדר פישר.

25

סוף דבר.XQueryבהרצאה זו נלמדו רק המבנים הבסיסיים בשפה

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

), יכולים היו לתפוס חלק XML-Schemaהגדרת הסכימות . נזכיר רק כי בתוספת המבנים XMLנכבד בקורס יעודי על

הנוספים שלא נלמדו כאן (כגון הגדרת שגרות), שפה זו היא שלמה במובן של טורינג.

(וכן מספר מלכודות XQueryמספר יישומים מתקדמים יותר של שיש להזהר מהן) ינתנו בתרגיל.


Recommended