إكس‌پاث

XPath
ParadigmQuery language
DeveloperW3C
First appeared1998
الإصدار المستقر
3.1 / 21 مارس 2017; منذ 7 سنين (2017-03-21
Influenced by
XSLT, XPointer
Influenced
XML Schema, XForms

إكس‌پاث XPath (لغة إكس إم إل پاث) هي لغة الاستعلام لتحديد العقد من مستند إكس إم إل. بالإضافة إلى ذلك، يمكن استخدام إكس‌پاث لحساب القيم (على سبيل المثال، سلاسل أو أرقام أو قيم منطقية من محتوى مستند إكس إم إل. وقد تم تعريف إكس‌پاث بواسطة جمعية شبكة الوب العالمية (W3C).[1]

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

نظرة عامة

تعتمد لغة إكس‌پاث على تمثيل الشجرة لمستند إكس إم إل، وتوفر القدرة على التنقل حول الشجرة، واختيار العقد من خلال مجموعة متنوعة من المعايير.[2][3] في الاستخدام الشائع (وإن لم يكن ذلك في المواصفات الرسمية)، غالباً ما يشار إلى تعبير XPath ببساطة باسم "إكس‌پاث".

بدافع الرغبة في تقديم صيغة مشتركة ونموذج سلوك بين إكس‌پوينتر و إكس إس إل تي، تُستخدم مجموعات فرعية من لغة الاستعلام إكس‌پاث في مواصفات W3C الأخرى مثل مخطط XML، إكس‌فورمز و Internationalization Tag Set (ITS).

تم اعتماد إكس‌پاث بواسطة عدد من مكتبات وأدوات معالجة إكس إم إل، ويقدم العديد منها أيضاً CSS Selectors، وهو معيار W3C آخر، كبديل أبسط لـ إكس‌پاث.


الإصدارات

هناك عدة إصدارات من إكس‌پاث قيد الاستخدام. تم نشر إكس‌پاث 1.0 في 1999، إكس‌پاث 2.0 في 2007 (مع الإصدار الثاني في 2010)، إكس‌پاث 3.0 في 2014، و إكس‌پاث 3.1 في 2017. ومع ذلك، إكس‌پاث 1.0 لا يزال الإصدار الأكثر انتشاراً.[1]

  • أصبح إكس‌پاث 1.0 توصية في 16 نوفمبر 1999 ويتم تنفيذه واستخدامه على نطاق واسع، إما من تلقاء نفسه (يسمى عبر API من لغات مثل جاڤا، سي شارپ، پايثون أو جاڤا سكرپت)، أو مضمنة في لغات مثل XSLT ، إكس‌پروك، مخطط XML أو إكس‌فورمز.
  • أصبحت إكس‌پاث 2.0 توصية في 23 يناير 2007، مع إصدار نسخة ثانية تم نشرها في 14 ديسمبر 2010. يوجد عدد من التطبيقات ولكنها لا تستخدم على نطاق واسع مثل إكس‌پاث 1.0. تعد مواصفات لغة إكس‌پاث 2.0 أكبر بكثير من إكس‌پاث 1.0 والتي غيرت بعض المفاهيم الأساسية للغة مثل نظام الكتابة.
    التغيير الأبرز هو أن إكس‌پاث 2.0 مبني حول نموذج بيانات إكس‌كويري و إكس‌پاث (XDM) الذي يحتوي على نظام كتابة أكثر ثراءً.[4]كل قيمة هي الآن سلسلة (تعتبر قيمة ذرية واحدة أو عقدة كسلسلة بطول واحد). يتم استبدال مجموعات عقدة إكس‌پاث 1.0 بتسلسلات العقد، والتي قد تكون بأي ترتيب.
    لدعم مجموعات الأنواع الأكثر ثراءً، توفر إكس‌پاث 2.0 مجموعة موسعة بشكل كبير من الوظائف والمشغلين.
    إكس‌پاث 2.0 هو في الواقع مجموعة فرعية من إكس‌كويري 1.0. يشتركون في نفس نموذج البيانات (XDM). يوفر for تعبيراً وهو إصدار مختزل من تعبيرات "FLWOR" في إكس‌كويري. من الممكن وصف اللغة عن طريق سرد أجزاء إكس‌كويري التي تم استبعادها: الأمثلة الرئيسية هي مقدمة الاستعلام، ومنشئات العناصر والسمات، وبقية بناء جملة "FLWOR"، وتعبير typeswitch.
  • أصبحت إكس‌پاث 3.0 توصية في 8 أبريل 2014.[5]أهم ميزة جديدة هي دعم الوظائف كقيم من الدرجة الأولى. للحصول على تفاصيل حول الميزات الجديدة في إكس‌پاث 3.0، راجع.[6]إكس‌پاث 3.0 هي مجموعة فرعية من إكس‌كويري 3.0، وتوجد معظم التطبيقات الحالية (أبريل 2014) كجزء من محرك إكس‌كويري 3.0.
  • أصبحj إكس‌پاث 3.1 توصية في 21 مارس 2017. يضيف هذا الإصدار أنواعاً جديدة من البيانات: الخرائط والمصفوفات، إلى حد كبير لتعزيز دعم JSON.
تم تطبيق تعبير إكس‌پاث على ملف إكس إم إل

بناء اللغة والدلالات (إكس‌پاث 1.0)

أهم أنواع التعبير في إكس‌پاث هو مسار الموقع. يتكون مسار الموقع من سلسلة من خطوات الموقع. لكل خطوة موقع ثلاثة مكونات:

يتم تقييم تعبير إكس‌پاث فيما يتعلق بـ عقدة السياق. يحدد محدد المحور مثل عقب أو تابع الاتجاه للعبور من عقدة السياق. يتم استخدام اختبار العقدة والافتراض لترشيح العقد المحددة بواسطة محدد المحور: على سبيل المثال، يتطلب اختبار العقدة A أن جميع العقد التي يتم التنقل فيها يجب أن تحمل التسمية A. يمكن استخدام الافتراض لتحديد أن العقد المحددة لها خصائص معينة، والتي يتم تحديدها بواسطة تعبيرات إكس‌پاث نفسها.

يأتي بناء جملة إكس‌پاث في نسختين: بناء الجملة المختصر، وهو أكثر إحكاما ويسمح لكتابة إكس‌پاث وقراءتها بسهولة باستخدام أحرف وتراكيب بديهية وفي كثير من الحالات. تعتبر الصيغة الكاملة أكثر تفصيلاً، ولكنها تسمح بتحديد المزيد من الخيارات، وتكون أكثر وصفية إذا تمت قراءتها بعناية.

بناء اللغة المختصر

يسمح الترميز المضغوط بالعديد من الافتراضات والاختصارات للحالات الشائعة. إعطاء مصدر إكس إم إل يحتوي على الأقل

<A>
  <B>
    <C/>
  </B>
</A>

يأخذ أبسط إكس‌پاث شكل مثل

  • /A/B/C

الذي يحدد عناصر C التي هي عناصر فرعية لعناصر B التي هي عناصر تابعة للعنصر A الذي يشكل العنصر الخارجي لمستند إكس إم إل. تم تصميم صيغة إكس‌پاث لتقليد URI (معرف الموارد الموحد) و مسار ملف بنمط يونكس.

يمكن إنشاء تعبيرات أكثر تعقيداً عن طريق تحديد محور غير المحور "الفرعي" الافتراضي، أو اختبار عقدة بخلاف الاسم البسيط، أو المسندات، والتي يمكن كتابتها بين قوسين مربعين بعد أي خطوة. على سبيل المثال، التعبير

  • A//B/*[1]

يختار التابع الأول ('*[1]')، أيا كان اسمه، من كل عنصر B يكون هو نفسه تابعاً أو سليلاً أعمق ('//') لعنصر يكون تابعاً لعقدة السياق الحالية (لا يبدأ التعبير بـ '/'). لاحظ أن الافتراض [1] يرتبط بإحكام أكثر من عامل التشغيل /. لتحديد العقدة الأولى المحددة بواسطة التعبير A//B/*، نكتب (A//B/*)[1]. لاحظ أيضاً أن قيم الفهرس في مسندات إكس‌پاث (تقنياً، تبدأ "مواقع التجاور" لمجموعات عقد إكس‌پاث) من 1، وليس 0 كما هو شائع في لغات مثل سي و جاڤا.

بناء التركيب الموسع

في الصيغة الكاملة غير المختصرة، سيتم كتابة المثالين أعلاه

  • /child::A/child::B/child::C
  • child::A/descendant-or-self::node()/child::B/child::node()[position()=1]

هنا، في كل خطوة من إكس‌پاث، يتم تحديد المحور (على سبيل المثالchild أو descendant-or-self) بشكل صريح، متبوعاً بـ :: ثم اختبار العقدة، مثل A أو node() في الأمثلة أعلاه.

هنا نفس الشيء، لكن أقصر:

A//B/*[position()=1]

محددات المحور

تشير محددات المحور إلى اتجاه التنقل داخل تمثيل الشجرة لمستند إكس إم إل. المحاور المتوفرة هي:

Axis specifiers in XPath
Full Syntax Abbreviated Syntax Notes
ancestor
ancestor-or-self
attribute @ @abc اختصار ل attribute::abc
child xyz اختصار ل child::xyz
descendant
descendant-or-self // // اختصار ل /descendant-or-self::node()/
following
following-sibling
namespace
parent .. .. اختصار ل parent::node()
preceding
preceding-sibling
self . . اختصار ل self::node()

كمثال على استخدام محور الخصائص في بناء الجملة المختصر، يحدد //a/@href السمة المسماة href في a العناصر في أي مكان في شجرة المستند.

التعبير . (اختصار لـ self::node()) هو الأكثر استخداماً داخل المسند للإشارة إلى العقدة المحددة حالياً. على سبيل المثال، يحدد h3[.='See also'] عنصراً يسمى h3 في السياق الحالي، ومحتوى نصه See also.

اختبارات العقد

قد تتكون اختبارات العقد من أسماء عقد محددة أو تعبيرات أكثر عمومية. في حالة مستند إكس إم إل الذي تم فيه تحديد بادئة مساحة الاسم gs، سيجد //gs:enquiry جميع عناصر enquiry في هذا النطاق، وسيجد //gs:* جميع العناصر، بغض النظر عن الاسم المحلي، في فضاء الاسم هذه.

صيغ اختبارات العقد الأخرى هي:

comment()
تجد عقدة تعليق إكس إم إل، على سبيل المثال <!-- Comment -->
text()
تجد عقدة من نوع النص، على سبيل المثال hello world في <k>hello<m> world</m></k>
processing-instruction()
تجد إكس إم إل تعليمات المعالجة مثل <?php echo $a; ?>. في هذه الحالة، ستتطابق processing-instruction('php') مع.
node()
تجد أي عقدة تقريباً.

الافتراضات

يمكن استخدام الافتراضات، المكتوبة كتعبيرات بين قوسين مربعين، في لترشيح مجموعة عقد وفقاً لبعض الشروط. على سبيل المثال، تعرض a مجموعة العقد (جميع عناصر a التي هي أتباع عقدة السياق، و تحتفظ a[@href='help.php'] فقط بالعناصر التي تحتوي على سمة href بالقيمة help.php.

لا يوجد حد لعدد الافتراضات في خطوة الواحدة، ولا يلزم حصرها في الخطوة الأخيرة في إكس‌پاث. يمكن أيضاً أن تتداخل مع أي عمق. تبدأ المسارات المحددة في المسندات في سياق الخطوة الحالية (أي سياق اختبار العقدة السابق مباشرة) ولا تغير هذا السياق. يجب أن تكون جميع المسندات راضية عن حدوث تطابق.

عندما تكون قيمة الافتراض رقمية، فهي عبارة عن بلورة-تركيبية للمقارنة مع موضع العقدة في مجموعة العقدة (على النحو المحدد بواسطة الدالةposition()). لذا فإن p[1] هو اختصار لـp[position()=1] ويحدد أول عنصر p ثانوي، بينما p[last()] هو اختصار لـ p[position()=last()] ويحدد آخر p تابع لعقدة السياق.

في حالات أخرى، يتم تحويل قيمة الافتراض تلقائياً إلى قيمة منطقية. عندما يتم تقييم الافترض لمجموعة عقد، تكون النتيجة صحيحة عندما تكون مجموعة العقد non-empty[clarify]. وبالتالي، يحدد p[@x] عناصر p التي لها سمة تسمى x.

مثال أكثر تعقيداً: يحدد التعبير a[/html/@lang='en'][@href='help.php'][1]/@target قيمة target لأول عنصر a بين أتباع عقدة السياق التي تم تعيين سمة href الخاصة بها على help.php، بشرط أن يحتوي عنصر المستوى الأعلى html الخاص بالمستند أيضاً على سمة lang معينة على en. لا تؤثر الإشارة إلى سمة لعنصر المستوى الأعلى في المسند الأول على سياق المسندات الأخرى ولا على سياق خطوة الموقع نفسها.

يعتبر ترتيب الافتراض هاماً إذا اختبرت الافتراضات موضع العقدة. يأخذ كل افتراض مجموعة عقد إرجاع مجموعة عقد أصغر (احتمالاً). لذا سيجد a[1][@href='help.php'] تطابقاً فقط إذا كان أول a فرعي من عقدة السياق يفي بالشرط @href='help.php'، بينما سيجد a[@href='help.php'][1] أول تابع a محققاً ذلك الشرط.


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

الدوال والعوامل

يعرّف إكس‌پاث 1.0 أربعة أنواع من البيانات: مجموعات العقد (مجموعات من العقد بدون ترتيب فعلي) والسلاسل والأرقام والوحدات المنطقية.

العوامل المتاحة هي:

  • العوامل "/", "//" and "[...]"، المستخدمة في تعبيرات المسار، كما هو موضح أعلاه.
  • العامل وحدوي، "|"، والذي يشكل اتحاد مجموعتين من العقد.
  • العوامل المنطقية "and" و "or"، والدالة "not ()"
  • العوامل الحسابية "+" و "-" و "*" و "div" (قسمة) و "mod"
  • عوامل المقارنة "="، "!="، "<"، ">"، "<="، ">="

تشمل مكتبة الدوال:

  • دوال لتعديل السلاسل: concat(), substring(), contains(), substring-before(), substring-after(), translate(), normalize-space(), string-length()
  • دوال لمعالجة الأرقام: sum(), round(), floor(), ceiling()
  • دوال للحصول على خصائص العقد: name(), local-name(), namespace-uri()
  • دوال للحصول على معلومات حول سياق المعالجة: position(), last()
  • كتابة دوال التحويل: string(), number(), boolean()

فيما يلي بعض الدوال المفيدة الأكثر شيوعاً.[7]

توابع مجموعة العقد

position()
إرجاع رقم يمثل موضع هذه العقدة في تسلسل العقد التي تتم معالجتها حالياً (على سبيل المثال، العقد المحددة بواسطة xsl: لكل تعليمات في XSLT).
count(node-set)
تُرجع عدد العقد في مجموعة العقدة الموفرة كوسيطة لها.

دوال السلاسل

string(object?)
تحول أياً من أنواع بيانات إكس‌پاث الأربعة إلى سلسلة وفقاً للقواعد المضمنة. إذا كانت قيمة الوسيطة عبارة عن مجموعة عقد، تقوم الدالة بإرجاع قيمة سلسلة العقدة الأولى بترتيب المستند، متجاهلة أي عقد أخرى.
concat(string, string, string*)
تربط بين سلسلتان أو أكثر
starts-with(s1, s2)
تعيد true إذا بدأت s1 ب s2
contains(s1, s2)
تعيد true إذا احتوت s1 على s2
substring(string, start, length?)
مثال: يعيد substring("ABCDEF",2,3) "BCD".
substring-before(s1, s2)
مثال: يعيد substring-before("1999/04/01","/") 1999
substring-after(s1, s2)
مثال: يعيد substring-after("1999/04/01","/") 04/01
string-length(string?)
تعيد عدد الأحرف في السلسلة
normalize-space(string?)
تتم إزالة جميع المسافات البيضاء البادئة واللاحقة ويتم استبدال أي تسلسلات من أحرف المسافات البيضاء بمسافة واحدة. هذا مفيد للغاية عندما يكون XML الأصلي قد تم تنسيقه prettyprint، مما قد يجعل معالجة السلاسل الإضافية غير موثوقة.

الدوال المنطقية

not(boolean)
تنفي أي تعبير منطقي.
true()
تقوم بالتقييم إلى true.
false()
تقوم بالتقييم إلى false.

الدوال العددية

sum(node-set)
يحول قيم السلسلة لجميع العقد التي تم العثور عليها بواسطة وسيط إكس‌پاث إلى أرقام، وفقاً لقواعد الدمج المضمنة، ثم إرجاع مجموع هذه الأرقام.

أمثلة الاستخدام

يمكن إنشاء التعبيرات داخل الافتراضات باستخدام عوامل التشغيل: =, !=, <=, <, >= و >. يمكن دمج التعبيرات المنطقية مع الأقواس () والعوامل المنطقية and و or بالإضافة إلى دالة not() الموضحة أعلاه. يمكن أن تستخدم الحسابات الرقمية *, +, -, div و mod. يمكن أن تتكون السلاسل من أي رموز من يونيكود

تحدد //item[@price > 2*@discount] العناصر التي تكون ميزة القيمة الخاصة بها أكبر من ضعف القيمة الرقمية لميزة التخفيض الخاصة بها.

يمكن دمج مجموعات العقد ( الموحدة) بأكملها باستخدام حرف الشريط العمودي |. يمكن العثور على مجموعات العقد التي تفي بشرط واحد أو أكثر من خلال دمج الشروط داخل الافتراض مع 'or'.

ستعيد v[x or y] | w[z] مجموعة عقد واحدة مكونة من جميع عناصر v التي تحتوي على العناصر الفرعية x أو y، بالإضافة إلى جميع عناصر w التي تحتوي على عناصر فرعية z، والتي تم العثور عليها في السياق الحالي.

بناء العبارات والدلالات (إكس‌پاث 2.0)

بناء العبارات والدلالات (إكس‌پاث 3)

أمثلة

إعطاء نموذج مستند إكس إم إل

<?xml version="1.0" encoding="utf-8"?>
<Wikimedia>
  <projects>
    <project name="Wikipedia" launch="2001-01-05">
      <editions>
        <edition language="English">en.wikipedia.org</edition>
        <edition language="German">de.wikipedia.org</edition>
        <edition language="French">fr.wikipedia.org</edition>
        <edition language="Polish">pl.wikipedia.org</edition>
        <edition language="Spanish">es.wikipedia.org</edition>
      </editions>
    </project>
    <project name="Wiktionary" launch="2002-12-12">
      <editions>
        <edition language="English">en.wiktionary.org</edition>
        <edition language="French">fr.wiktionary.org</edition>
        <edition language="Vietnamese">vi.wiktionary.org</edition>
        <edition language="Turkish">tr.wiktionary.org</edition>
        <edition language="Spanish">es.wiktionary.org</edition>
      </editions>
    </project>
  </projects>
</Wikimedia>

يختار تعبير إكس‌پاث

/Wikimedia/projects/project/@name

سمات الاسم لجميع المخططات، ويختار

/Wikimedia//editions

جميع إصدارات جميع المخططات، ويختار

/Wikimedia/projects/project/editions/edition[@language='English']/text()

عناوين جميع مشاريع ويكيميديا الإنگليزية (نص لجميع عناصر edition حيث تكون ميزة language معادلة للغة الانگليزية. وما يلي

/Wikimedia/projects/project[@name='Wikipedia']/editions/edition/text()

يختار جميع عناوين ويكيميديا (نصوص جميع عناصر edition الموجودة ضمن عنصر المخطط project مع ميزة اسم ويكيپيديا).

التطبيقات

أدوات سطر الأوامر


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

بيزك

  • Pavuk XML Processor for QM/BASIC[8]

سي/سي++

Free Pascal

  • The unit XPath is included in the default libraries

تطبيقات لمحركات قواعد البيانات

جاڤا

  • يدعم Saxon XSLT إكس‌پاث 1.0 و إكس‌پاث 2.0 و إكس‌پاث 3.0 (بالإضافة إلى XSLT 2.0 و إكس‌كويري 3.0 و إكس‌پاث 3.0)
  • يدعم BaseX (أيضاً إكس‌پاث 2.0 و إكس‌كويري)
  • VTD-XML
  • قاعدة بيانات سدنا إكس إم إل كلاهما XML: DB والخصائص.
  • QuiXPath تطبيق تدفق مفتوح المصدر إنوڤماكس
  • Xalan
  • Dom4j

حزمة جاڤا قالب:Javadoc:SEوهي جزء من إصدار جاڤا القياسي منذ جاڤا 5 [9] عبر واجهة برمجة تطبيقات جاڤا لمعالجة إكس إم إل. من الناحية الفنية، هذا هو إكس‌پاث API وليس تطبيق إكس‌پاث، ويسمح للمبرمج بالقدرة على تحديد تنفيذ معين يتوافق مع الواجهة.

جاڤا سكرپت

.NET Framework

  • في فضاءات الأسماء System.Xml و System.Xml.XPath[10]
  • قاعدة بيانات سدنا إكس إم إل

پرل

پي إتش پي

  • Sedna XML Database
  • DOMXPath via libxml extension

پايثون

روبي

المخطط

  • Sedna XML Database

إس كيو إل

  • تدعم MySQL مجموعة فرعية من إكس‌پاث من الإصدار 5.1.5 وما بعده[13]
  • تدعم PostgreSQL إكس‌پاث و إكس إس إل تي من الإصدار 8.4 وما بعده[14]

Tcl

  • يوفر The tdom package "تنفيذ كامل لإكس‌پاث ومتوافق وسريع في لغة C"

الاستخدام في اللغت التخطيطية

يُستخدم إكس‌پاث بشكل متزايد للتعبير عن القيود في اللغات التخطيطية لـ إكس إم إل.

  • كانت سكيماترون اللغة التخطيطية (التي أصبحت الآن معيار آيزو) الرائدة في هذا النهج.
  • يتم استخدام مجموعة دفق فرعية من إكس‌پاث في W3C XML Schema 1.0 للتعبير عن التفرد والشروط الرئيسية. في XSD 1.1، تم توسيع استخدام إكس‌پاث لدعم تخصيص النوع الشرطي بناءً على قيم السمات، وللسماح بتقييم التأكيدات المنطقية العشوائية مقابل محتوى العناصر.
  • يستخدم إكس‌فورمز إكس‌پاث لربط الأنواع بالقيم.
  • حتى أن الأسلوب وجد استخدامه في تطبيقات غير XML، مثل محلل كود المصدر لجاڤا المسمى پي إم دي: يتم تحويل جاڤا إلى DOM - مثل شجرة التحليل، ثم يتم تحديد قواعد إكس‌پاث على الشجرة.

انظر أيضاً

المراجع

  1. ^ أ ب "XML and Semantic Web W3C Standards Timeline" (PDF). 2012-02-04.
  2. ^ Bergeron, Randy (أكتوبر 31, 2000). "XPath—Retrieving Nodes from an XML Document". SQL Server Magazine. Archived from the original on يوليو 26, 2010. Retrieved فبراير 24, 2011.
  3. ^ Pierre Geneves (October 2012). "Course: The XPath Language" (PDF).
  4. ^ XPath 2.0 supports atomic types, defined as built-in types in XML Schema, and may also import user-defined types from a schema.
  5. ^ XPath 3.0 W3C Recommendation
  6. ^ What's new in 3.0 (XSLT/XPath/XQuery) (plus XML Schema 1.1) by Michael Kay, Saxonica
  7. ^ For a complete description, see the W3C Recommendation document
  8. ^ Crowell, William (2016). "Pavuk XML Processor" (PDF). www.pavuk.com.
  9. ^ https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/package-summary.html
  10. ^ System.Xml Namespace
  11. ^ Duke, Justin (29 September 2016). "How To Crawl A Web Page with Scrapy and Python 3". Digital Ocean. Archived from the original on 4 October 2017. Retrieved 24 November 2017. Selectors are patterns we can use to find one or more elements on a page so we can then work with the data within the element. scrapy supports either CSS selectors or XPath selectors.
  12. ^ http://xmlsoft.org/
  13. ^ http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html
  14. ^ Online docs at postgresql.org

وصلات خارجية

هناك كتاب ، [[b:{{{1}}}|{{{1}}}]]، في معرفة الكتب.


قالب:XSL