1 / 62

צורה נורמלית למסמכי XML

צורה נורמלית למסמכי XML. עפ"י:. A Normal Form for XML Documents. Arenas & Libkin - PODS 02’ An Information-Theoretic Approach to Normal Forms for Relational and XML Data Arenas & Libkin - PODS 03’. טל הרמתי tal128@cs. סדר יום. 1. הצגת הנושא. 2. הגדרות: DTD ועצי XML , רשומות,

Download Presentation

צורה נורמלית למסמכי XML

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. צורה נורמלית למסמכי XML עפ"י: A Normal Form for XML Documents.Arenas & Libkin - PODS 02’ An Information-Theoretic Approach to Normal Forms for Relational and XML DataArenas & Libkin - PODS 03’ טל הרמתי tal128@cs

  2. סדר יום 1. הצגת הנושא 2. הגדרות: DTD ועצי XML, רשומות, תלויות פונקציונליות 3. הצגת צורה נורמלית ל-XML 4. אלגוריתם נרמול 5. עוד על איכות תכנון מסדי נתונים ו-XML

  3. סדר יום 1. הצגת הנושא 2. הגדרות: DTD ועצי XML, רשומות, תלויות פונקציונליות 3. הצגת צורה נורמלית ל-XML 4. אלגוריתם נרמול 5. עוד על איכות תכנון מסדי נתונים ו-XML

  4. 1. הצגת הנושא • עקרונות תכנון מסדי נתונים מבוססי XML • התיאוריה הנוגעת לתכנון מסדי נתונים יחסיים וצורות נורמליות הינה מתקדמת ביותר. • מטרת המסמכים:להציג בסיס תיאורטי מקביל לנושא תכנון טוב של מסמכי XML.

  5. 1. הצגת הנושא • כמו במסד יחסי, מסמכי XML יכולים להכיל מידע מיותר (redundant) ומצבים אנומליים של עדכון. • במסד יחסי – נמנע ע"י סכמה מתוכננת היטב. • במסמך XML – אפשר להתייחס ל-DTD כסכמה. אנחנו נתמקד ב-DTD כמנגנון להגדרה של מבנה מסמכי XML. • המטרה:למצוא מנגנון שיבחן מסמכי DTD ויאפשר להמיר אותם למסמכים בנויים היטב

  6. יתירות ואנומליות עדכון – ב-DB יחסי Course S. No S. No S. Name Grade DB St1 St1 Smith 9 SDBI St2 St2 Jones 8 יתירות SDBI St1 St1 Smith 7.5 1. הצגת הנושא הפתרון: BCNF Course S. No S. Name Grade DB St1 Smith 9 SDBI St2 Jones 8 St1 Smith SDBI 7.5 S.No  S.Name תלויות פונקציונליות: Course + S.No  Grade

  7. יתירות ואנומליות עדכון – במסמכי DTD 1. הצגת הנושא <!ELEMENT courses (course*)> <!ELEMENT course (title, taken_by)> <!ATTLIST course cno CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT taken_by (student*)> <!ELEMENT student (name, grade)> <!ATTLIST student sno CDATA #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT grade (#PCDATA)>

  8. יתירות ואנומליות עדכון – במסמכי DTD יתירות courses course מקרא אלמנט ושמו אטריביוט ושמו בן יחיד ריבוי בנים קשר הכרחי title title taken_by cno cno student name grade sno 1. הצגת הנושא

  9. חזרה למסמך ה-DTD יתירות 1. הצגת הנושא <!ELEMENT courses (course*)> <!ELEMENT course (title, taken_by)> <!ATTLIST course cno CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT taken_by (student*)> <!ELEMENT student (name, grade)> <!ATTLIST student sno CDATA #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT grade (#PCDATA)>

  10. הפתרון- הוספת אלמנט חדש 1. הצגת הנושא <!ELEMENT courses (course*, info*)> <!ELEMENT course (title, taken_by)> <!ATTLIST course cno CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT taken_by (student*)> <!ELEMENT student (grade)> <!ATTLIST student sno CDATA #REQUIRED> <!ELEMENT grade (#PCDATA)> <!ELEMENT info number*, name)> <!ELEMENT number EMPTY> <!ATTLIST number sno CDATA #REQUIRED> <!ELEMENT name (#PCDATA)>

  11. ה-DTD אחרי השינוי 1. הצגת הנושא

  12. דוגמא נוספת – ספריית מאמרים בכנסים הבעיה: כל המאמרים באותו issue חייבים להיות באותה שנה (יתירות) הפתרון: הזזה 1. הצגת הנושא <!ELEMENT db (conf*)> <!ELEMENT conf (title, issue*)> <!ELEMENT title (#PCDATA)> <!ELEMENT issue (inproceedings*)> <!ELEMENT inproceedings (author+, title, booktitle)> <!ATTLIST inproceedings key ID #REQUIRED pages CDATA # REQUIRED year CDATA # REQUIRED > <!ELEMENT author (#PCDATA)> <!ELEMENT booktitle (#PCDATA)>

  13. פתרון של הזזת attribute 1. הצגת הנושא <!ELEMENT db (conf*)> <!ELEMENT conf (title, issue*)> <!ELEMENT title (#PCDATA)> <!ELEMENT issue (inproceedings*)> <!ATTLIST issue year CDATA # REQUIRED> <!ELEMENT inproceedings (author+, title, booktitle)> <!ATTLIST inproceedings key ID #REQUIRED pages CDATA # REQUIRED > <!ELEMENT author (#PCDATA)> <!ELEMENT booktitle (#PCDATA)>

  14. סדר יום 1. הצגת הנושא 2. הגדרות: DTD ועצי XML, רשומות, תלויות פונקציונליות 3. הצגת צורה נורמלית ל-XML 4. אלגוריתם נרמול 5. עוד על איכות תכנון מסדי נתונים ו-XML

  15. DTD (Document Type Definitions) S S S 2. הגדרות: DTD DTD = (E,A,P,R,r) E – אלמנטים A – אטריביוטים P – מיפוי אלמנטים (לביטוי רגולרי) R – מיפוי חלקי לאטריביוטים r – השורש {(coursescourse) , (coursetitle) , (coursetaken_by) , (titleS) , (taken_bystudent) , (studentname) , (studentgrade) , (nameS) , (gradeS) } {courses , course , title , taken_by , student , name , grade } {cno , sno } {(coursecno) , (studentsno) } courses  E

  16. Path in DTD S 2. הגדרות: DTD • מסלול – w מילה (ביטוי רגולרי) שבה האות הראשונה היא השורש, כל אות wi נמצאת בשפה של P(wi-1) והאות האחרונה בשפה של הקודמת או אטריביוט של האות הקודמת • Length(w) – אורך מסלול = n • Last(w) – אות אחרונה = wn דוגמאות: courses courses.course.taken_by courses.course.taken_by.student.grade.S courses.course.@cno Length(w) = 1 Last(w) = courses Length(w) = 3 Last(w) = taken_by Length(w) = 3 Last(w) = @cno Length(w) = 6 Last(w) = S

  17. מסלולים 2. הגדרות: DTD • paths(D) – אוסף כל המסלולים ב-D. • EPaths(D) – אוסף כל המסלולים ב-D שמסתיימים באלמנט (ולא ב-S או באטריביוט)

  18. XML tree 2. הגדרות: עץ XML

  19. XML tree 2. הגדרות: עץ XML T = (V,lab,ele,att,root) V – קודקודים lab- (label) מיפוי קודקודים לשמות אלמנטים ele- צלעות בין 2 קודקודים או קודקוד וטקסט att- אטריביוטים של קודקודים (מיפוי חלקי) r – השורש {1, 1.1, 1.1.1, 1.1.@cno, …} {(1courses) , (1.1course) , …} {(11.1), (1.11.1.1), (1.1.1“DB")…} {((1.1 , cso)“DB") , ((1.1.2.1 , sno)"st1") }

  20. Paths in XML tree 2. הגדרות: עץ XML • מסלול – w מילה (ביטוי רגולרי) שבה האותיות הן אלמנטים והאות האחרונה היא אלמנט או אטריביוט או טקסט. • w היא מסלול אם קיימים קודקודים שמתאימים לאותיות. האות הראשונה מתאימה לשורש וכל אות wi מתאימה ל-vi וכן vi הוא בן של vi-1. • מסלול יכול להסתיים בקודקוד, באטריביוט או בטקסט של קודקוד. • Paths(T) – אוסף כל המסלולים בעץ T.

  21. קשר בין DTD ו-XML 2. הגדרות: עץ XML • עץ T מציית ל-DTDD – אם יש התאמה מלאה. כל הקודקודים מוגדרים ב-E ויש התאמה של כל קודקוד ובניו.(T conforms to D) • סימון:T ⊨ D. • עץ T תואם ל-DTDD – אם ורק אם paths(T)  paths(D). (T is compatible with D)סימון: T ⊳ D.

  22. יחסי הכלה בין עצים 2. הגדרות: עץ XML • מוטיבציה – מעבר ממצב של עץ XML "מסודר" (בנים של אותו קודקוד מסומנים לפי הסדר שלהם) לעץ לא מסודר – שבו אין חשיבות לסדר הקודקודים. • הכלה בין עצי XML – (subsumed) עץ יוגדר כמוכל בעץ אחר אם השורשים זהים, הקודקודים הם קבוצה חלקית של קודקודי העץ המכיל, יש התאמה בין ה-labels ובין האטריביוטים, והבנים של כל קודקוד הם פרמוטציה של הבנים מהעץ המכיל. סימון:T1⋞ T2. • עצים שווי ערך (equivalent) אם T1⋞ T2וגם T2⋞ T1. סימון: T1 ≡T2. עצים הם שווי ערך אם ורק אם הם אם שווים כעצים לא מסודרים.

  23. רשומות (tree tuples) 2. הגדרות: רשומות • רשומות מוגדרות ביחס ל-DTD. • רשומה t ב-DTD D היא פונקציה מ-paths(D)ל- קודקודים ∪ טקסט ∪ NULL המקיימת: • t(r) ≠ NULL • לכל pEPaths(D)t(p) הוא קודקוד או NULL. • לכל ppaths(D)-EPaths(D)t(p) הוא טקסט או NULL. • אם t(p1)=t(p2) והם קודקודים אז p1=p2. • אם t(p1)=NULL ו-p1 היא קידומת של p2 אז t(p2)=NULL. • סימונים: T(D) – אוסף כל הרשומות ב-DTD. • t.p – רשומה t המתאימה למסלול p.

  24. דוגמא לרשומה S S S 2. הגדרות: רשומות t(courses)=1 t(courses.course.@cno)=“67506” t(courses.course.title)=1.1.1 t(courses.course.taken_by. Student.name.s)=“Jones”   

  25. עוד דוגמא לרשומה 2. הגדרות: רשומות t1 t2 t1 t2 אם כשמוגדר t1.p מוגדר גם t2.p וכן t1.p≠NULLt1.p=t2.p. t2 מקסימלית ביחס ל-יחס ההכלה 

  26. עץ XML ורשומות מקסימליות 2. הגדרות: רשומות treeD(t)- עץ XML שנבנה מתוך רשומה t. למעשה בדוגמא בנינו עץ XML מרשומה. טענה: אם tT(D) אז treeD(t)⊳D (העץ תואם ל-DTD). הגדרה חשובה: tuplesD(T)בהינתן DTD D ועץ XMLT שתואם ל-D: אוסף של רשומות מכסימליות (במונחי ) המקיימות treeD(t)⋞T .

  27. דוגמא לעץ ורשומות 2. הגדרות: רשומות לא שייך כי אינו מקסימלי tuplesD(T)

  28. בניית עץ XML מאוסף של רשומות 2. הגדרות: רשומות תזכורת: tuplesD(T)בהינתן DTD D ועץ XMLT שתואם ל-D: אוסף של רשומות מכסימליות (במונחי ) המקיימות treeD(t)⋞T . אבחנה: tuplesD(T)תת קבוצה סופית של T(D). הגדרה: treesD(X)בהינתן DTD D ואוסף XT(D) של רשומות: העץ המינימלי T (במונחי ⋞) המקיים : - T⊳D (תואם ל-D). - כל רשומה ב-X מוכלת בו.

  29. treesD(X) - דוגמא 2. הגדרות: רשומות treeD(t1) treeD(t2) treesD(X) X={t1, t2}

  30. משפט 2. הגדרות: רשומות בהינתן DTD D ועץ XMLT – אם T⊳D אז treesD(tuplesD([T]) = [T]. ([T] – מחלקת שקילות של עצים לא מסודרים) משמעות:אפשר לבנות מחדש עץ XML מאוסף הרשומות המקסימליות שלו, עד כדי שקילות (במונחי עצים לא מסודרים). הערה: השוויון ההפוך לא מתקיים. מתקיים XtuplesDtreesD(X) . (כי X לא חייב להכיל רשומות מקסימליות ויכול לכלול רשומות המוכלות זו בזו).

  31. תלויות פונקציונליות 2. הגדרות: תלויות פונקציונליות • ההגדרה מתבססת על רשומות. • תלות פונקציונלית (functional dependency) (ת"פ) מעל D היא ביטוי מהצורה S1S2, כאשר S1 ו-S2 הם קבוצות חלקיות לא ריקות של paths(D). • סימון: אוסף כל הת"פ מעל D מסומן FD(D).

  32. תלויות פונקציונליות (המשך) 2. הגדרות: תלויות פונקציונליות • נתון: ת"פ S1S2; T עץ XML תואם D ; • S2paths(D)∪S1. • T מקיים את הת"פ (סימון: T⊨S1S2) אם • לכל שתי רשומות t1,t2tuplesD(T) • t1.S1=t2.S1 וגם t1.S1≠NULLt1.S2=t2.S2. • סימונים: T⊨Σ עבורΣFD(D) אם T⊨σעבור כל σΣ. • T⊨(D,Σ) אם T⊨D וגם T⊨Σ.

  33. תלויות פונקציונליות - דוגמא 2. הגדרות: תלויות פונקציונליות • courses.course.@cno→ courses.course.משמעות- @cno מפתח של קורס. • courses.course.taken_by.student.@sno→ courses.course.taken_by.studentמשמעות- שני סטודנטים שוניםבאותו קורס לא יכולים להיות עם אותו מספר סטודנט. • courses.course.taken_by.student.@sno→ courses.course.taken_by.student.Name.Sמשמעות- שני סטודנטים בעליאותו מספר סטודנט חייבים להיות בעליאותו שם. S

  34. גזירת תלויות פונקציונליות 2. הגדרות: תלויות פונקציונליות • נתון: DTD D ; קבוצת ת"פΣFD(D) ; ת"פ βFD(D). • נאמר ש-(D,Σ) גוזר את βאם כל עץ שתואם D ומקיים את Σ (T⊨(D,Σ)) מקיים גם את β. • סימון: (D,Σ)⊢β. • אוסף כל הת"פ הנגזרות מ- (D,Σ) נקראות הסגור של Σ ומסומנות (D,Σ)+. • חישוב הסגור של ת"פ ב-XML הוא בעיה קשה, והיא מחוץ לגבולות המאמר.

  35. תלויות פונקציונליות טריוויאליות 2. הגדרות: תלויות פונקציונליות • בבסיס נתונים רלציוני – תלות טריוויאלית אחת:אם YX אז XY. • ב-XML: ת"פ β טריוויאלית אם (D,∅)⊢β. • דוגמאות: • לכל pEPaths(D) ו-p’ שייך לקידומת של p: pp’. • לכל p,p.@lpaths(D): pp.@l.

  36. סדר יום 1. הצגת הנושא 2. הגדרות: DTD ועצי XML, רשומות, תלויות פונקציונליות 3. הצגת צורה נורמלית ל-XML 4. אלגוריתם נרמול 5. עוד על איכות תכנון מסדי נתונים ו-XML

  37. הגדרה – צורה נורמלית XNF 3. צורה נורמלית ל-XML XNF – XML Normal Form. בהינתן DTD D ו-ΣFD(D), נגדיר ש- (D,Σ) הוא ב-XNF אם ורק אם לכל ת"פ לא טריוויאלית β(D,Σ)+ מהצורה Sp.@l או Sp.S הת"פ Sp שייכת אף היא ל- (D,Σ)+. אינטואיציה: בכל העצים התואמים ל-D – לכל אוסף ערכי S נמצא ערך יחיד של p.@l (או p.S). במקרה כזה נוכל לשמור אותו רק פעם אחת, ו- p.S נקבע ע"י (D,Σ). (Spaths(D); S≠∅).

  38. XNF – דוגמא 1 3. צורה נורמלית ל-XML • FD1:courses.course.@cno→ courses.course.משמעות- @cno מפתח של קורס. • מתקיים באופן מובנה שקביעת • courses.course.@cno קובעת את • courses.course. ולכן ת"פ זו • עוברת את המבחן. • באופן דומה: • FD2:courses.course.taken_by.student.@sno→ courses.course.taken_by.student

  39. XNF – דוגמא 1 3. צורה נורמלית ל-XML אבל! FD3:courses.course.taken_by.student.@sno→ courses.course.taken_by.student.name.S ת"פ זו אינה גוזרת את התלות courses.course.taken_by.student.@sno→ courses.course.taken_by.student.name  הסכמה אינה ב-XNF. X S

  40. XNF – דוגמא 2 3. צורה נורמלית ל-XML FD1:db.conf.title.S→ db.conf. מתקיים db.conf.title.S→db.conf.title אבל: FD2:db.conf.issue→ db.conf.issue.inproceeding.@year לא מתקיימת התלות הבאה: db.conf.issue→ db.conf.issue.inproceeding  הסכמה אינה ב-XNF. S

  41. XNF – דוגמא 2 3. צורה נורמלית ל-XML קל לראות שהתיקון שהוצע – הזזת האטריביוט של שנה – פותר את הבעיה ומעביר את הסכימה ל-XNF.

  42. הקשר בין BCNF ו-XNF 3. צורה נורמלית ל-XML • אפשר להעביר כל בסיס נתונים יחסי ל-DTD בצורה פשוטה. • אפשר לייצג כל ת"פ מבסיס הנתונים היחסי כת"פ ב-DTD שיצרנו. • טענה: סכמה יחסית היא ב-BCNF אם ורק אם הייצוג שלה כ-DTD עם הת"פ שהועתקו הם ב-XNF. • כלומר – ניתן להוכיח שקילות בין הצורות הנורמליות.

  43. סדר יום 1. הצגת הנושא 2. הגדרות: DTD ועצי XML, רשומות, תלויות פונקציונליות 3. הצגת צורה נורמלית ל-XML 4. אלגוריתם נרמול 5. עוד על איכות תכנון מסדי נתונים ו-XML

  44. מוטיבציה 4. אלגוריתם נרמול • עד עכשיו ראינו דרכים לבדוק האם סכמת XML, המופיעה בצורת מסמך DTD, היא בצורה נורמלית. כלומר – מתוכננת היטב. • המטרה: כאשר זיהינו סכמה שאינה מתוכננת היטב, למצוא דרך (אוטומטית) להעביר אותה לצורה מתוכננת היטב. • הקושי: בהינתן אוסף ת"פ – למצוא את הסגור.

  45. שתי דרכים לטיפול בבעיות 4. אלגוריתם נרמול • הזזת אטריביוטכמו בדוגמא של המאמרים בכנסים. • יצירת סוג אלמנט חדשכמו הדוגמא של הציונים בקורסים.

  46. הזזת אטריביוט 4. אלגוריתם נרמול r p q Last(p) Last(q) @l @m בהינתן DTD המכיל מסלולים p,qEPaths(D) ו-p.@lpaths(D) – הזזת אטריביוט יוצרת DTD חדש שבו האטריביוט מועבר מ-last(p) ל-last(q) ושמו משונה ל- q.@m. ההזזה כוללת גם טיפול בתלויות הפונקציונליות המתייחסות לאטריביוט שהועבר.

  47. הזזת אטריביוט - דוגמא 4. אלגוריתם נרמול שינוי הת"פ: לפני השינוי: FD2:db.conf.issue→ db.conf.issue.inproceeding.@year אחרי השינוי: FD2:db.conf.issue→ db.conf.issue.@year (ת"פ טריוויאלית)

  48. יצירת סוג אלמנט חדש t tn t1 … @l @l1 @ln 4. אלגוריתם נרמול r p p1 q pn … Last(p1) Last(p) Last(q) Last(pn) @ln @l @l1 בהינתן DTD המכיל מסלולים p,p1…pn,qEPaths(D) ו-p.@l, pi.@lpaths(D) – אנו יוצרים DTD חדש שבו אלמנט חדש t מתחת ל-last(q), יוצרים לו ילדים tn...t1 עם אטריביוטים ln@...@l1 ומעבירים אליו את האטריביוט @l. ההזזה כוללת גם טיפול בתלויות הפונקציונליות המתייחסות לאטריביוט שהועבר.

  49. יצירת אלמנט חדש - דוגמא 4. אלגוריתם נרמול שינוי הת"פ: לפני השינוי: FD3:courses.course.taken_by.student.@sno→ courses.course.taken_by.student.name.S אחרי השינוי: FD3:courses.info.number.@sno→ courses.info.name.S ת"פ זו גוזרת את התלות courses.info.number.@sno → courses.info.name

  50. האם הפעלת השיטות הנ"ל מקדמת אותנו? 4. אלגוריתם נרמול טענה: בכל צעד באחת משתי השיטות (הזזת אטריביוטים או יצירת אלמנט חדש) מתקבל DTD שבו מספר האנומליות (חריגות מ-XNF) קטן יותר. מסקנה: אלגוריתם המפעיל את השיטות הנ"ל מסתיים ובסיומו מתקבל DTD ב-XNF.

More Related