1 / 20

חלק XQuery : IV

חלק XQuery : IV. XML Query. ביבליוגרפיה - 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 )> <!ELEMENT title (#PCDATA)>

Download Presentation

חלק XQuery : IV

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. חלק XQuery :IV XML Query

  2. ביבליוגרפיה - 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 )> <!ELEMENT title (#PCDATA)> <!ELEMENT last (#PCDATA)> <!ELEMENT first (#PCDATA)> <!ELEMENT affiliation (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT price (#PCDATA)>

  3. ביבליוגרפיה – books.xml <bib> <book year="1994"> <title>TCP/IP Illustrated</title> <author><last>Stevens</last><first>W.</first></author> <publisher>Addison-Wesley</publisher> <price>65.95</price> </book> <book year="1992"> <title>Advanced Programming in the UNIX Environment</title> <author><last>Stevens</last><first>W.</first> </author> <publisher>Addison-Wesley</publisher> <price>65.95</price> </book>

  4. ביבליוגרפיההמשך… <book year="2000"> <title>Data on the Web</title> <author><last>Abiteboul</last><first>Serge</first></author> <author><last>Buneman</last><first>Peter</first></author> <author><last>Suciu</last><first>Dan</first></author> <publisher>Morgan Kaufmann Publishers</publisher> <price>65.95</price> </book> <book year="1999"> <title>The Economics of Technology and Content for Digital TV</title> <editor><last>Gerbarg</last><first>Darcy</first> <affiliation>CITI</affiliation></editor> <publisher>Kluwer Academic Publishers</publisher> <price>129.95</price> </book> </bib>

  5. יוצרים – Constructors (1) • Constructorsמשמשים ליצירת צמתי ומסמכי XML. • דוגמאות: יצירה פשוטה של צמתי אלמנט:<book><title>Database systems</title></book> יצירת צמתים דינאמית:<booklist>{doc("books.xml")/bib/book/title}</booklist> תוצאה: <booklist> <title>TCP/IP Illustrated</title> <title>Advanced Programming in the UNIX Environment</title>... </booklist>

  6. יוצרים (2) • דרך אלטרנטיבית ליצירת צמתים: element book{ attribute year {1977}, element author {doc("books.xml")/bib/book/author[2]/*}, element {node_name(doc("books.xml")/bib/book[1]/price} {4.3*10} } תוצאה: <book year="1977"> <author><last>Buneman</last><first>Peter</first></author> <price>43</price> </book>

  7. FLWOR (For, Let, Where, Order by, Return) • For -for$bindoc("books.xml")/bib/book • קושר את המשתנה b$ לכל איבר שמוחזר ע"י ביטוי ה-in. • Let - let$authors := $b/author • מציב את תוצאת הביטוי $b/author למשתנה $authors. משמש בעיקר למניעת כפילויות בקוד. • Where - where$authors/first = "Peter” • מתאר תנאים עבור התוצאה. החישוב בחלק ה-returnיבוצע אם תנאים אלו מתקיימים. • Order by - orderby$b/titledescending • מתאר את סדר המיון עבור התוצאה. • Return - return$b/title • מתאר מה יוחזר ממבנה ה- FLWOR.

  8. דוגמא • מה מבצע הביטוי מהשקף הקודם? for$bindoc("books.xml")/bib/booklet$authors := $b/authorwhere$authors/first = "Peter”orderby$b/title descendingreturn$b/title • תוצאה: <title>Data on the Web</title> • תשובה: הביטוי מחזיר את כל כותרות הספרים עם מחבר כלשהו ששמו הפרטי הוא Peter, ממוינים בסדר יורד לפי הכותרת.

  9. דוגמא • החזר את כל הספרים שנכתבו ע"י סרג' סוסיו. • הצעה לפתרון: for$bindoc("books.xml")//book where$b/author/first = "Serge"and $b/author/last = "Suciu" return$b

  10. לא אותו סופר דוגמא: תוצאות מפתיעות <book year="2000"> <title>Data on the Web</title> <author> <last>Abiteboul</last> <first>Serge</first> </author> <author> <last>Buneman</last> <first>Peter</first> </author> <author> <last>Suciu</last> <first>Dan</first> </author> <publisher>Morgan Kaufmann Publishers</publisher> <price>65.95</price> </book>

  11. דוגמא: הדרך הנכונה for$bindoc("books.xml")//book where$b/author[first="Serge"and last="Suciu"] return$b מקבל ערך אמת אם תוצאת הביטוי לא ריקה

  12. נתון קובץ XML של ביקורות ספרים reviews.xml. דוגמא: ביצוע Outer Join <reviews> <entry> <title>Data on the Web</title> <price>34.95</price> <review> A very good discussion of semi-structured database systems and XML. </review> </entry> <entry> <title>Advanced Programming in the Unix environment</title> <price>65.95</price> <review> A clear and detailed discussion of UNIX programming. </review> </entry>

  13. המשך reviews.xml <entry> <title>TCP/IP Illustrated</title> <price>65.95</price> <review> One of the best books on TCP/IP. </review> </entry> <entry> <title>TCP/IP Illustrated</title> <price>66.95</price> <review> The book is a complete and detailed guide to the entire TCP/IP protocol suite with an important difference from other books on the subject. </review> </entry> </reviews>

  14. המשימה: • עבור כל הספרים שיש עבורם ביקורות במסמך reviews.xml החזר את פרטי הספרים (כותרת ושמות מחברים) ביחד עם הביקורות בתוך צומת book-with-review. • עבור כל הספרים ללא ביקורות החזר רק את פרטיהם בצומת book. • על התוצאה להיות בנוסח Outer Join, כלומר כל צומת book-with-review יכיל ביקורת אחת בלבד!

  15. התוצאה הצפויה: <result> <book-with-review> <title>TCP/IP Illustrated</title> <author><last>Stevens</last><first>W.</first></author> <review>One of the best books on TCP/IP.</review> </book-with-review> <book-with-review> <title>TCP/IP Illustrated</title> <author><last>Stevens</last><first>W.</first></author> <review>The book is a complete and detailed guide to the entire TCP/IP protocol suite-with an important difference from other books on the subject. </review> </book-with-review> <book-with-review> <title>Advanced Programming in the Unix environment</title> <author><last>Stevens</last><first>W.</first></author> <review>A clear and detailed discussion of UNIX programming. </review> </book-with-review>

  16. התוצאה הצפויה המשך... <book-with-review> <title>Data on the Web</title> <author><last>Abiteboul</last><first>Serge</first></author> <author><last>Buneman</last><first>Peter</first></author> <author><last>Suciu</last><first>Dan</first></author> <review>A very good discussion of semi-structured database systems and XML. </review> </book-with-review> <book> <title>The Economics of Technology and Content for Digital TV </title> </book> </result> לספר זה אין מחברים ואין ביקורת

  17. הפתרון: <result> { for$bindoc("books.xml")//book let$t := (for$aindoc("reviews.xml")//entry where ($b/title = $a/title) return$a/review) return if ($t) then for$cin$treturn<book-with-review>{$b/title, $b/author, $c}</book-with-review> else <book>{$b/title, $b/author}</book> } </result>

  18. דוגמא – הפיכת היררכית המסמך • ברצוננו ליצור "מסמך חדש" שבו היררכית הצמתים תהיה הפוכה לזו של המסמך books.xml. • בפרט, נרצה שצמתי publisher יהיו כעת בראש ההיררכיה ויכילו כותרות (צמתי title) של כל הספרים שהוצאו לאור על ידם. • שימו לב, שבמסמך books.xml צמתי publisher נמצאים בתחתית ההיררכיה עם צמתי books מעליהם.

  19. הפיכת היררכית המסמך – התוצאה הצפויה <listing> <publisher> <name>Addison-Wesley</name> <title>Advanced Programming in the UNIX Environment</title> <title>TCP/IP Illustrated</title> </publisher> <publisher> <name>Kluwer Academic Publishers</name> <title>The Economics of Technology and Content for Digital TV</title> </publisher> <publisher> <name>Morgan Kaufmann Publishers</name> <title>Data on the Web</title> </publisher> </listing>

  20. הפתרון: • <listing>{ for$pindistinct-values(doc("books.xml")//publisher) orderby$p return <publisher> <name> { $p } </name> { for$bindoc("books.xml")/bib/book where$b/publisher = $p orderby$b/title return$b/title } </publisher> }</listing> מחזיר את כל ערכי הטקסט השונים של הצמתים

More Related