440 likes | 682 Views
XML שפות שאילתה ב-. Extensible Markup Language. עמנואל זנו שרה מר ג 'ן. עולם של נתונים. שפות שאילתה ב- XML. נתונים מובנים חלקית ) XML (. נתונים מובנים (Data Base). נתונים לא מובנים ) Text (. מה שאנחנו כבר יודעים על XML. שפות שאילתה ב- XML. XML : סטנדארד של קונצורציום ה- W3C.
E N D
XMLשפות שאילתה ב- Extensible Markup Language עמנואל זנו שרה מרג'ן
עולם של נתונים שפות שאילתה ב- XML נתוניםמובנים חלקית )XML( נתונים מובנים (Data Base) נתונים לא מובנים )Text(
מה שאנחנו כבר יודעים על XML שפות שאילתה ב- XML • XML : סטנדארד של קונצורציום ה-W3C • הוא הרחבה של ה- SGML (standard general markup language) • כלי לתיאור בסיס נתונים מבחינת התוכן • מאפשר ייצוג ואחסון מאוד גמיש של הנתונים • נוח להעברת נתונים בין אפליקציות שונות.
דוגמה של נתוניXML שפות שאילתה ב- XML <bibliography> <book> <title> Principles of Distributed Database Systems </title> <author> Ozsu </author> <author> Valduriez </author> <publisher> Prentice Hall </publisher> <year> 1999 </year> </book> <book> <title> Data on the Web </title> <author> Buneman </author> <author> Vianu </author> <publisher> Morgan Kaufmann </publisher> <year> 1999 </year> </book> </bibliography>
Data type definition (DTD) שפות שאילתה ב- XML • מתאר את המבנה הלוגי של המסמך: • - האלמנטים וסוגם • -תכונות אפשריות או הכרחיות לאלמנט • -הירכיה וקינון • מאפשר בדיקת תקנות הנתונים • ניתן לייצג אותו בצורה גרפית ע"י עץ • מורכב משני חלקים: הפתיחה ועץ אלמנטים
Syntax ה-DTD : פתיחה שפות שאילתה ב- XML • מורכבת מ: • - הצהרת XML: ללא חובה • <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"> • - הצהרת מסמך: ללא חובה • <!DOCTYPE document [...]> גירסת XML תו התקן קיום חלק חיצוני
Syntax ה-DTD : עץ אלמנטים שפות שאילתה ב- XML • הגדרת אלמנט: <!ELEMENT element (subelements-specification) > • ה Subelements מאופינים ע"י - שמותם • - #PCDATA (מחרוזת) • דרגת ריבוי ה-subelement: “|” -או • “+” - • “*” - • - "?" 1 או 0 • הגדרת תכונות:<!ATTLIST element (attributes) > • התכונה מאופיינת ע"י שמה, סוגה ( CDATA), אם היא חובה או רשות ( #IMPLIED, #REQUIRED)
דוגמה ל- DTD שפות שאילתה ב- XML <!DOCTYPE db [ <!ELEMENT db (book)*> <!ELEMENT book (title,author,year)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> ]> db Book Book year year Title Author Title Author
ומה עכשיו? שפות שאילתה ב- XML
עולם של נתונים שפות שאילתה ב- XML נתוניםמובנים חלקית )XML( נתונים מובנים (Data Base) נתונים לא מובנים )Text( XQuery, XPath, XSLT… Information Retrieval (Google, Yahoo…) SQL
שימושים בשאילתות XML שפות שאילתה ב- XML • בחירת מסמכים או אלמנטים לפי תוכנם או מבנם. • בחירת תתי אלמנטים של אלמנט. • שינויים מבניים : מיון, סכמות, שנוי בצורת הקינון... • קומבינציה של נתונים ממסמכים שונים
XPath שפות שאילתה ב- XML • שפת שאילתה פשוטה • גישה לנתונים על פי מיקומם בעץ המידע • ביטוי XPath מורכב מ: • - ציר: המתאר את הקשרים המבניים עם שאר הנתונים • - node test: סוג או שם האלמנט שרוצים להגיע אליו • - מסנן ( predicates) : מחדד את בחירת הנתונים על פי תנאי בוליאני. • מבנה בסיסי: • xpath: {step}/{step}/…/{step} • {step}: {axis}::{node test}[predicate]
הצירים:axis שפות שאילתה ב- XML הצומת הנוכחי: self העוקבים: child, decsendant המקדימים:ancestors parent , האחים: following/preceding sibling
שפות שאילתה ב- XML root ancestor parent sibling Self children descendant
XPath: פונקציות שפות שאילתה ב- XML • קיימים 4 סוגים של פונקיות המאפשרות לעבוד : • -על צמתים ( current(), position()( • -מחרוזות תווים ( contains(container,contained), • string- length(string)) - ערכים בוליאנים (true(),false()) : • -מספריים: (sum(node), ceiling(number))
דוגמאות כלליות: שפות שאילתה ב- XML /bib/book/title /bib/book[@year>1980]/(title | author[1]) /descendants::node()[position()=3]
אפשרויות נוספות ב-XPath שפות שאילתה ב- XML • תנאים לוגיים : for, if… • sum(for $x in /order/item return $x/price * $x/quantity) • existential qualifiers : every $x in /students/student/name satisfies $x = "Fred“ some $x in /students/student/name satisfies $x = "Fred" • אופרטורי קבוצות: except,intersect
XQuery שפות שאילתה ב- XML • שפת שאילתה ב XML מבוססת על סינטקס של SQL. • מורכב ב 80% מבטויי Xpath. • שפה קלה ומובנת למשתמש. • מפותחת על ידי קונסורציון W3C. • מורכב מביטויים מהסוג: - ביטויי FLWR • - ביטויי List • - ביטויי תנאי • - ועוד...
ביטויי FLWR שפות שאילתה ב- XML • FOR: מציין את המשתנה ומעביר אותו מערך לערך. • LET: הגדרת משתנה לוקאלי. • WHERE: מסנן את אוסף הנתונים לפי תנאי ספציפי. • RETURN: בונה את תוצאת ה XML המתאימה. • for $ <variable1> in <expression Xpath> • let $<variable2> := <expression Xpath> • where <condition> • return <result> • שקול למבנה SELECT-FROM-HAVING-WHERE ב SQL.
ה DTD להבנת דוגמאות שפות שאילתה ב- XML <!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 )>
שפות שאילתה ב- XML bib Book:year price publisher title Author/editor If editor last first affiliation
שפות שאילתה ב- XML <bib> <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> <book year="2000"> <title>Data on the Web</title> <author> <last>Buneman</last> <first>Peter</first> </author> <author> <last>Suciu</last> <first>Dan</first> </author> <publisher>Morgan Kaufmann Publishers</publisher> <price>39.95</price> </book> </bib>
דוגמה לביטויFLWR שפות שאילתה ב- XML • for $x in //bib/book /* like the FROM in SQL */ • let $y := $x/author /* no analog in SQL */ • where $x/title=“Data on the Web” • /* like the WHERE in SQL */ • return • >author_nb> • {$x/title} • <nb>{count($y)}</nb> /* like the SELECT in SQL */ • </author_nb> התוצאה הצפויה: >author_nb> <title>Data on the Web</title> <nb>2</nb> </author_nb>
טבלאות רלציוניות שפות שאילתה ב- XML טבלת Bib: טבלת Book: טבלת :Author/Editor טבלת Author-Book:
השאילתה ב SQL שפות שאילתה ב- XML SELECT Book_id, count(Author-Book.Author_id) FROM Book as B Author-Book as AB WHERE B.Book_id = AB.Book_id GROUP BY AB.Book_id
ביטויי List שפות שאילתה ב- XML • איחוד: Union : {…}|{…} • חיתוך: Intersection : {…} intersect {…} • הפרדה: Difference : {…} except{…} • מיון:Sorting : {…} sort by (field1,field2,…) • פונקציות סכמה: …avg, max, min, sum
ביטוי תנאי שפות שאילתה ב- XML • if ( condition) then (expression1) • else (expression2) • דוגמה: • if ( $book/@year <1980 ) • then “old book” • else “new book”
אפשרויות נוספות ב XQuery שפות שאילתה ב- XML • כמה שימושים המתוארים על ידי ה W3C: • שאילתה המתחשבת בסדר אלמנטים. • שאילתה המקשרת בין נתונים שונים. • שאילתת חיפוש קטעי טקסט. • שאילתה השומרת על מבנה העץ.
שאילתה המתחשבת בסדר אלמנטים שפות שאילתה ב- XML ניתן, בעזרת פונקציות על צמתים המוגדרות ב-Xpath , לשלוף נתונים לפי מיקומם במסד הנתונום XML. דוגמה : יש לנו מסד נתונים של דוחות רפויים המתארים רצף פעולות שונות המרכיבים טיפול רפאוי.
שפות שאילתה ב- XML ה-DTD : !>DOCTYPE report [ <!ELEMENT report (section*)> <!ELEMENT section (section.title, section.content)> <!ELEMENT section.title (#PCDATA )> <!ELEMENT section.content (#PCDATA | anesthesia | prep | incision | action | observation )*> <!ELEMENT anesthesia (#PCDATA)> <!ELEMENT prep ( (#PCDATA | action)* )> <!ELEMENT incision ( (#PCDATA | geography | instrument)* )> <!ELEMENT action ( (#PCDATA | instrument )* )> <!ELEMENT observation (#PCDATA)> <!ELEMENT geography (#PCDATA)> <!ELEMENT instrument (#PCDATA)>]>
שפות שאילתה ב- XML report section content Title anesthesia observation action prep incision action geography instrument instrument instrument
שפות שאילתה ב- XML הדוגמה: מהם הכלים משתמשים בחלק ה-procedure של הדו"ח: for $s in document("report1.xml")//section[section.title = "Procedure"] return ($s//instrument)[position()<=2] התוצאה הצפויה: <instrument>using electrocautery.</instrument> <instrument>electrocautery</instrument>
שאילתה המקשרת בין נתונים שונים שפות שאילתה ב- XML ניתן ליצור קומבינציה של נתונים המוכלים במסמכי XML שונים וליצור על בסיס זה מסמכים חדשים דוגמה: מסמכי XML המתארים מסד נתונים של מכירה פומבית online.המסמך users מתאר את הגולשים שהוזדהו באתר ומסמך items מתאר את הפריטים הנמצאים במכירה.
שפות שאילתה ב- XML DTD של מסמך ה-XML ל- users : <!DOCTYPE users [ <!ELEMENT users (user_tuple*)> <!ELEMENT user_tuple (userid, name, rating?)> <!ELEMENT userid (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT rating (#PCDATA)> ]> users User tuple rating User_id name
שפות שאילתה ב- XML DTD של מסמך ה-XML ל- items : <!DOCTYPE items [ <!ELEMENT items (item_tuple*)> <!ELEMENT item_tuple (itemno, description, offered_by, start_date?, end_date?, reserve_price? )> <!ELEMENT itemno (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT offered_by (#PCDATA)> <!ELEMENT start_date (#PCDATA)> <!ELEMENT end_date (#PCDATA)> <!ELEMENT reserve_price (#PCDATA)> ]> items Item tuple itemno description Start_date End_date Reserve_price Offered_by
שפות שאילתה ב- XML השאילתה: מחזירה את מספר ותיאור האופניים שהם כעת במכירה, ממוינים לפי מספר פריט <result> { for $i in document("items.xml")//item_tuple where $i/start_date <= current-date() and $i/end_date >= current-date() and contains($i/description, "Bicycle") return <item_tuple> { $i/itemno } { $i/description } </item_tuple> sort by (itemno) } </result>
שפות שאילתה ב- XML התוצאה : <result> <item_tuple> <itemno>1003</itemno> <description>Old Bicycle</description> </item_tuple> <item_tuple> <itemno>1007</itemno> <description>Racing Bicycle</description> </item_tuple> </result>
שאילתת חיפוש קטעי טקסט שפות שאילתה ב- XML מחפש ומחזיר במסמכי XML חדשים קטעי טקסט הנמצאים באלמנטים שונים דוגמה: ( מבוסס על ה-DTD הראשון)מחזיר את כל הכותרות המכילות את המילהweb input()//title[contains(text(), “‘web")] התוצאה: <title>Data on the Web</title>
שאילתה השומרת על מבנה העץ שפות שאילתה ב- XML השאילתה מחזירה פלט בהתאם למבנה המסמך ( קינון ואלמנטים). זה מאוד שימושי כאשר יש למבנה משמעות חשובה להבנת המסמך. שאילתות מהסוג הזה משתמשות לעתים די קרובות בקריאה רקורסיבית לפונקציות. דוגמה: בונה תוכן עיניינים של ספר.
שפות שאילתה ב- XML ה- DTD: <!DOCTYPE book [ <!ELEMENT book (title, author+, section+)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT section (title, (p | figure | section)* )> <!ATTLIST section id ID #IMPLIED difficulty CDATA #IMPLIED> <!ELEMENT p (#PCDATA)> <!ELEMENT figure (title, image)> <!ATTLIST figure width CDATA #REQUIRED height CDATA #REQUIRED > <!ELEMENT image EMPTY> <!ATTLIST image source CDATA #REQUIRED > ]>
שפות שאילתה ב- XML book title author Section:id,difficulty title Figure:width, heigth Section:id,difficulty p Image:source title
שפות שאילתה ב- XML הגדרת הפונקציה: define function toc( element $e ) returns element* { let $n := local-name( $e ) return if ($n = "section") then <section> { $e/@* } { toc($e/*) } </section> else if ($n = "title") then $e else () }
שפות שאילתה ב- XML השאילתה: <toc>{ toc( document("book1.xml")/book ) } </toc> התוצאה: <toc> <section id="intro" difficulty="easy"> <title>Introduction</title> <section> <title>Audience</title> </section> <section> <title>Web Data and the TwoCultures</title> </section> </section> <section id="syntax" difficulty="medium"> <title>A Syntax For Data</title> <section> <title>Base Types</title> </section> <section> <title>Representing Relational Databases</title> </section> </section> </toc>
לסיכום שפות שאילתה ב- XML שפות שאילתה ב-XML , Xquery ו Xpath מנצלות את יתרונות מסמכי XML על מנת להבטיח העברת מידע קלה ונכונה.