السلام عليكم,,,,
الهدف الحقيقي لطرحي هذا الموضوع هو مقالة أضفتها مؤخرا
تتحدث عن XQuery وقد \كرت ضمنها الXPath من دون أن أتطرق لها ولو بشكل موجز ,,,
بعد اغفالي هذا أحببت أن اعوض هذا الاغفال بمقاصلة قصيرة منفردة,,,
وقبل البدء بها سوف اضع لكم اخواني رابط موضوع ال XQuery ورابط موضوع ال Xml لتكون في نهاية مقالي هذا السلسلة اكتملت,,,
والترتيب كالتالي :
XML
XPATH
XQUERY
لنبدأ على بركة الله ,,,,
XPath
هي لغة لإيجاد المعلومات في مستندات الـ XML
XPath Syntax
الـ XPath تستخدم Path Expression للوصول إلى عقد في مستند الـ XML .
لشرح قواعد الـ XPath سنستخدم مستند الـ XML التالي :
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore>
من أهم الـPath Expression المستخدمة للوصول إلى عقد معينة:
Expression Description
nodename اختيار كل العقد الأبناء للعقدة المسماة
/ الاختيار يبدأ من عقدة الجذر
// اختيار العقد بدءاً من العقدة المطابقة الحالية بغض النظر عن مكان وجودها في
المستند
. اختيار العقدة الحالية (نقطة)
.. اختيار العقدة الأب للعقدة الحالية (نقطتين)
@ اختيار خاصيةلنطبق هذه التعابير على المستند السابق :
Path Expression Result bookstore كل العقد الأبناء للعنصر bookstore /bookstore العنصر الجذر bookstore Note: If the path starts with a slash ( / ) it always represents an absolute path to an element! bookstore/book كل العناصر book والتي تمثل أبناء الـ bookstore //book كل العناصر book بغض النظر عن أماكن وجودها في المستند bookstore//book كل العناصر book والتي تمثل descendant للعنصر bookstore بغض النظر عن المستوى الموجودة فيه العناصر //@lang كل الخصائص lang
لتحديد عقدة محددة نريد الوصول إليها نستخدم الـ Predicates , في الجدول التالي نعرض أهم التعابير التي نستخدم فيها الـ predicates :
Path Expression Result /bookstore/book[1] أول عنصر book والذي يمثل ابن للعنصر bookstore Note: IE5 and later has implemented that [0] should be the first node, but according to the W3C standard it should have been [1]!! /bookstore/book[last()] اّخر عنصر book والذي يمثل ابن للعنصر bookstore /bookstore/book[last()-1] العنصر book قبل الأخير والذي يمثل ابن للعنصر bookstore /bookstore/book[position()<3] أول عنصرين book واللذين يمثلان أبناء للعنصر bookstore //title[@lang] كل العناصر title والتي تملك الخاصية lang //title[@lang='eng'] كل العناصر title والتي تملك الخاصية lang بحيث هذه الخاصية لها القيمة 'eng' /bookstore/book[price>35.00] كل العناصر book للعنصر bookstore والتي تملك عنصر Price وقيمته أكبر من 35.00 /bookstore/book[price>35.00]/title كل العناصرtitle للعنصر book للعنصر bookstore والتي تملك عنصر Priceوقيمته أكبر من 35.00
الجدول التالي يبين كيف يمكن استخدام الـ wildcard في الاستعلام من مستند الـ XML
Wildcard Description * يطابق أي عقدة @* يطابق أي عقدة من نوع خاصية node() يطابق أي عقدة من أي نوع
ولتطبيق ما سبق على المثال :
Path Expression Result /bookstore/* كل العقد الأبناء للعنصر bookstore //* كل العناصر في المستند //title[@*] كل العناصر title والتي تملك أي خاصية
كما استخدام | للوصول إلى مسارات متعددة :
Path Expression Result //book/title | //book/price كل العناصر title و price للعنصر book //title | //price كل العناصر title و price في المستند /bookstore/book/title | //price كل العناصر title للعنصر book للعنصر bookstore وكل العناصر price في المستند [/ code] XPath Axes تعرف مجموعة من العقد بالنسبة إلى العقدة الحالية [code]AxisName Result ancestor كل العقد التي تمثل سلف للعقدة الحالية (أب , جد ...) ancestor-or-self كل العقد التي تمثل سلف للعقدة الحالية (أب , جد ...) بالإضافة للعقدة الحالية attribute كل الخصائص للعقدة الحالية child كل أبناء العقدة الحالية descendant كل العقدة المنحدرة من العقدة الحالية (ابن ,حفيد ...) descendant-or-self كل العقدة المنحدرة من العقدة الحالية (ابن ,حفيد ...) بالإضافة للعقدة الحالية following كل شيء يلي وسم الإغلاق للعقدة الحالية في المستند following-sibling كل العقد الأخوة والتي تأتي بعد العقدة الحالية namespace كل العقد namespace للعقدة الحالية parent العقدة الأب للعقدة الحالية preceding كل شيء قبل وسم الفتح للعقدة الحالية في المستند preceding-sibling كل العقد الأخوة والتي تأتي قبل العقدة الحالية self العقدة الحالية
السلام عليكم,,,