ראשי >> עוד אודות XML >>אודות XPOINTER


5.1.1 תחביר
5.1.2 סדר בנים
5.1.3 הרחבות של Xpointer ל-Xpath
5.1.4 טווחים

על מנת להגיע למיקום ספציפי במסמך html משתמשת בתג a וב- name# . על מנת להגיע למיקומים ספציפיים ב-XML משתמשים ב Xpointer. שפה זו היא בעצם הרחבה של Xpath.

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


<artists>
   <artist>
      <name>Paulina</name>
      <genre>Pop</genre>
       <songs>
             <song>Lo hare por ti </song>
             <song>El ultimo adios</song>
       </songs>
    </artist>
    <artist>
      <name>Elvis</name>
      <genre>Rock</genre>
       <songs>
             <song>Heartbreak Hotel </song>
             <song>Hound Dog</song>
      </songs>
    </artist>
</artists>

מסמך זה מכיל אודות אמנים ושיריהם. ניתן לזהות מבנה במסמך זה בקלות.

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

<myElement
    xmlns:xlink=http://www.w3.org/1999/xlink
    xlink:type="simple"
    xlink:href="/artists.xml#xpointer(/artists/artist[name/text()='Paulina'])>
       Paulina Information
</myElement>

קישור זה יפנה אותנו לאלמנט artist אשר יש לו בן name עם ערך Paulina ע"י שימוש ב-Xpointer אנו משיגים גמישות גדולה יותר . המסמך יכול להשתנות ועדיין הקישור יהיה נכון.

ע"י Xpointer ו- Xlink ניתן לקשר לכל מיקום במסמך כמו כן למספר מיקומים .למשל ניתן לקשר לכל האמנים שהז'אנר שלהם הוא רוק.

5.1.1 תחביר

Full Xpointer

הצורה הגמישה ביותר . מציינים את xpointer ולאחר מכן את המיקום

דוגמאות :

(xpointer(child:html/child:body/child:h1 מצביע על אלמנטים h1 במסמך html

(xpointer (/html/body/h1 - כמו הראשון

([xpointer(paragraph[3 - מצביע על paragraph שהוא הבן השלישי

5.1.2 סדר בנים

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

אם אנו רוצים להגיע לאלמנט שהוא הבן השלישי של אלמנט שהוא הבן השני שהוא הבן הראשון של השורש נכתוב:
1/2/3/

5.1.3 הרחבות של Xpointer ל-Xpath

Xpointer היא הרחבה של Xpath. אפשר להשתמש רק באלמנטים של Xpath אך ההרחבות של Xpointer מוסיפות גמישות וכוח.

אנו נזכיר הרחבה אחת . שאר ההרחבות עדיין בהגדרה

5.1.4 טווחים

הגדרה : location-set הוא מעין מערך המכיל מיקומים(points) ו location-sets

טווחים משתמשים בנקודת התחלה ונקודת סיום . הפונקציות שעובדות עם טווחים הן כדלהלן:

range-to

תחביר :
location-set range-to(expression)

 

מחזיר טווח לכל location בהקשר הנוכחי .

דוגמה :
xpointer(id('Pauline')/range-to(id('Elvis')))

מחזיר את הטווח של האלמנטים בין אלמנט עם id Paulina לאלמנט עם id Elvis

()string-range

תחביר:

 
location-set string-range(location-set,string,number?,number?)

 

על פונקציה זו נרחיב לאחר מכן

()range

תחביר:
location-set range(location-set )

מחזיר טווח המכיל את המיקומים הנמצאים ב location-set הנמצא בתוך הסוגריים

()range-inside

תחביר:
(location-set range-inside (location-set

מחזיר טווח המכיל את התוכן של המיקומים של המיקומים בתוך location-set בסוגריים

()start-point

תחביר:
(point start-point(point

אם המיקום הראשון הוא נקודה הוא מחזיר אותה.אם היא בעצמה רשימת מיקומים אזי הוא מחזיר את br />, הנקודה הראשונה בה.אחרת מחזיר 0.

() end-point

תחביר :
(point end-point(point

כמו הקודם רק שהפעם זוהי הנקודה האחרונה.

()String range

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

בדוגמאות שלנו נשתמש במסמך הבא:
<poem>
   <title>How Much Wood</title>
   <line id="first">How much wood could a woodchuck chuck</line>
   <line id="second">if a woodchuck could chuck wood?</line>
   <line id="third">He would chuck as much as he could</line>
   <line id="fourth">if a woodchuck could chuck wood.</line>
</poem>

משתמשים בפונקציה זו כאשר רוצים לאתר חלקים מסויימים בתוך טקסט. דוגמה פשוטה היא למצוא את כל המופעים של wood בשורה השניה כך:
((" xpointer(string-range(/poem/line[id('second'()],"wood

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

צא רק את המופע הראשון של wood בשורה השניהעתה נ
((" xpointer(string-range(/poem/line[id('second'()],"wood

אנו רואים כי ניתן להוסיף פרידקט לפונקציה.

השורה הבאה תחזיר את כל ההופעות של wood
(" xpointer(string-range(/,"wood

על מנת להחזיר את האות הרביעית בשורה השניה
((xpointer(string-range(id('second'),"",4

על מנת להחזיר את סימן השאלה בסוף השורה השניה עוברים לסוף וחוזרים אחד אחורה
([xpointer(string-range(id('second'),,",",1[last()-1

ניתן גם לבחור תת מחרוזות:
( xpointer(string-range(/,,"could,",1,5

כאשר ישנה התאמה למילה זו מוחזרות 5 האותיות המתחילות באות הראשונה.

 

XSL
XML-CDF