سؤال

هذا شيء أجد دائمًا صعوبة في شرحه للآخرين:لماذا توجد مساحات أسماء XML؟متى يجب أن نستخدمها ومتى لا؟ما هي الأخطاء الشائعة عند العمل مع مساحات الأسماء في XML؟

وأيضًا، كيف ترتبط بمخططات XML؟هل يجب أن ترتبط مخططات XSD دائمًا بمساحة الاسم؟

هل كانت مفيدة؟

المحلول

إنها تسمح بدمج لغات ترميزية متعددة، دون الحاجة إلى القلق بشأن تعارض أسماء العناصر والسمات.

على سبيل المثال، انظر إلى أي جزء من كود XSLT، ثم فكر فيما سيحدث إذا لم تستخدم مساحات الأسماء وكنت تحاول كتابة XSLT حيث يجب أن يحتوي الإخراج على عناصر "قالب"، و"لكل"، وما إلى ذلك. .أخطاء نحوية، ما.

سأترك النصائح والمزالق للآخرين الذين لديهم خبرة أكثر مني.

نصائح أخرى

لماذا توجد مساحات أسماء XML؟

لأنه في عام 1997، كان بعض الأشخاص ذوي النفوذ الشديد في W3C يريدونهم، ولم يقبلوا بالرفض كإجابة.حتى عندما تم إثبات ذلك، أجرؤ على القول بشكل قاطع، أن هناك طرقًا أفضل لحل "المشكلة" التي اعتقدوا أنهم يواجهونها، ما زالوا يمارسون نفوذهم لكتابة رغباتهم في توصية W3C.

إن أكبر الأساطير في الأساطير الواسعة النطاق المحيطة بمساحات أسماء XML هي أن هناك ميزة فنية لها.(هذا هو التأثير النهائي للتوصية الموجودة ببساطة وبالتالي تشغل مساحة ذهنية - "يا إلهي، لا بد أن يكون هناك سبب (جيد)!" - على عكس حاشية سفلية يمكن نسيانها في مكان ما.)

الكثير من الألم، لا ربح.

متى يجب أن نستخدمها ومتى لا؟

يجب ألا تستخدمها أبدًا إذا كان بإمكانك مساعدتها.لسوء الحظ، فإن الترويج المستمر لهذا الجهاز السيئ[*] من قبل الأطراف المهتمة قد عزز مجموعة من المواصفات اليوم التي تجعل من المستحيل عمليًا عدم الاضطرار إلى التعامل مع مساحات أسماء XML في مرحلة أو أخرى.لذلك، حتى إذا تجنبت مساحات أسماء XML بنفسك، فستجد أشياءً خامًا مغطاة بمساحة الأسماء تأتي إليك من جميع الاتجاهات، أو ما هو أسوأ من ذلك، مجموعات الأدوات التي ترفض ببساطة العمل ما لم تقم بإطعامها بمثل هذه الأشياء الخام.

ما هي الأخطاء الشائعة عند العمل مع مساحات الأسماء في XML؟

أحد الأخطاء الشائعة جدًا هو استخدام تعبيرات Xpath مع المستندات التي تم "افتراض" مساحة الاسم فيها:يجب أن تكون مساحة الاسم صريحة في التعبيرات.هناك مشكلة أخرى وهي استخدامها "بشكل صحيح" عند إنشاء المستندات: إنهم يخلقون مشاكل من لا شيء.

وأيضًا، كيف ترتبط بمخططات XML؟هل يجب أن ترتبط مخططات XSD دائمًا بمساحة الاسم؟

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

[*] BAD = مكسور حسب التصميم

تحديث: مقالة قديمة عن هذا عدم الحل لعدم مشكلة.

إنه تقريبًا نفس السؤال "لماذا نستخدم حزم Java/C#؟":

  • قابلية إعادة الاستخدام:يمكنك إعادة استخدام مجموعة من العلامات/السمات التي تحددها عبر أنواع مختلفة من مستندات XML.
  • نمطية:إذا كنت بحاجة إلى إضافة بعض "الجوانب" إلى ملف XML الخاص بك؛تعد إضافة مساحة اسم إلى مستند XML الخاص بك أسهل من تغيير تعريف مخطط XML بالكامل.
  • تجنب تلويث مساحة الاسم "الرئيسية".:لا يمكنك إجبار المحلل اللغوي الخاص بك على العمل باستخدام تعريف مخطط ضخم، فقط استخدم مساحة الاسم التي تحتاجها.

أكبر مأزق IMHO هو التفاعل البشري وتفسير المستندات على سبيل المثال.لتطوير التعليمات البرمجية لمعالجة مستند XML.من السهل جدًا التركيز على التعبير الحرفي للمستند بدلاً من التركيز على نتيجة تحليل المستند.

على سبيل المثالالعقد التالية

<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>

كلها متطابقة لغويًا، ولكنها مختلفة جدًا عن العين الساذجة.

يُظهر المثال الأول خطأً شائعًا جدًا في تطوير مسارات XPath - مع إغفال حقيقة وجود "a" في مساحة الاسم - وبالتالي لا يُنتج //a أي تطابقات.(أو ما هو أسوأ من ذلك مطابقة العقد في مساحة اسم مختلفة!)

يفتح المثال الثالث عيبًا آخر في الفهم - وهو أن نص البادئة له أهمية دلالية.عند تحليل المستندات باستخدام XPATH، يمكنني الإعلان عن أي بادئة أرغب في مطابقتها طالما أن معرف uri يطابق تلك الموجودة في المستند.

فكر فيها كأسقاب لأنواع العناصر.إذا كان لديك صديقان، كلاهما يدعى بوب، وكنت تتحدث عن أحدهما، فقد يسألك شخص ما عن بوب الذي تتحدث عنه.إن مجرد قول "Bob" ليس مفيدًا جدًا، لذا يمكنك قول "Bob Smith" أو "Bob Jones".

إنه نفس الشيء مع أنواع العناصر.في بعض الأحيان لا يكون الاسم المختصر كافيًا، لأنه يمكن لأشخاص مختلفين اختيار نفس الاسم.لذا، عليك تضمين عنوان URI باعتباره "اسم عائلة"، للتمييز بين أنواع البوب ​​المختلفة الموجودة هناك.

XML هي لغة فائقة، مما يعني أنها الأساس لأي لغة تعتمد على XML (هذا أمر منطقي، أليس كذلك؟).فكر في XML كقلم يمكنه كتابة أي جملة بأي لغة.كل هذا يتوقف على الكاتب، ويفضل أن تكون اللغة معروفة للقارئ.

ملف XML مساحة الاسم هو في الأساس اسم اللغة، يشبه إلى حد كبير "الإنجليزية" أو "العربية".أساعد مستلم مستند XML على تحليله واستخراج المعلومات الموجودة بداخله.

لنفترض أن لدي مصنع أثاث ولديك متجر أثاث.تطبيق التخزين الخاص بك وتطبيق التوريد الخاص بي ليسا مرتبطين تمامًا، ولكن عند التواصل من خلال رسائل XML، يجب أن تكون الرسائل مفهومة ويمكن تحليلها بسهولة من قبل كلا الجانبين

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

تتم تسمية كل مساحة اسم باسم URI، وهو في معظم الحالات موقع مستند المخطط الذي يحددها.

بالطبع، لا تحتاج كل وثيقة XML إلى مساحة اسم، خاصة عندما لا يتم استخدامها لنقل المعلومات إلى نظام بعيد.على سبيل المثال، عند إجراء تسلسل للكائنات في XML للاستمرار في قاعدة البيانات الخاصة بك.

نحن نستخدم مساحات الأسماء لأن الأشخاص يرغبون في استخدام نفس الكلمات ليعنيوا أشياء مختلفة في أيداهو الخاصة بهم.عادة، يمكنك تحديد من السياق ما يعنيه الشخص.في قاعدة بيانات الموظفين، يكون XML عبارة عن سجلات الموظفين.في قاعدة بيانات تسجيل المركبات، يكون XML عبارة عن سجلات تسجيل المركبات.

يحتفظ كلاهما بعلامة تسمى "الموقع"، ولكن العلامة تعني أشياء مختلفة لكل منهما وتحتوي على حقول مختلفة.

الآن، هذا رائع:ولكن ماذا لو كنت بحاجة أو تريد تخزين XML من كليهما في نفس قاعدة البيانات؟أو، الأمر الأكثر إثارة للاهتمام، ماذا لو كانت كلتا قاعدتي البيانات تريد تخزين أجزاء XML من قاعدة بيانات أخرى مشتركة (على سبيل المثال:قاعدة بيانات الحسابات).

ترتبط مساحات أسماء XML بكل علامة XML بمعرف URI، بحيث يحتوي اسم العلامة نفسه على عنوان url أمامه، وهو جزء من اسم العلامة (بالطبع، تستخدم مستندات XML الفعلية اختصارًا للقيام بذلك).من خلال اختيار معرف URI بعناية، من السهل التأكد من أن أسماء العلامات لن تتعارض - كما لو تم تسمية علامتي الموقع بشكل مختلف تمامًا، لذلك لا يوجد أي ارتباك.كمكافأة، يمكن أن تتضمن علامتا الموقع المختلفتان تمامًا أشياء من قاعدة بيانات الحسابات، وتنصان صراحةً على أنهما تتحدثان عن نفس الشيء.

الشيء الذي يجعل كل هذا مفيدًا هو XPATH.

باستخدام ما سبق، يمكنك البدء في كتابة تعبيرات XPATH التي تقول أشياء مثل:تجد لي أي accounts:account overdue الأقسام في أي مكان في ملف XML هذا.أو:تجد لي أي accounts:warning message العناصر في أي مكان في هذا الجزء المحدد من XML، حيث تكون رسالة التحذير عبارة عن عقدة فرعية (مهما كانت عميقة) لأي منهما personnel:payment العقدة أو أ vehicle:status العقدة.

قد يتم استخدام تعبير XPATH في مكان ما في مستند XSLT، وتتمثل مهمته في تحويل XML إلى XHTML أو XPDF، للعرض.

ما هو المردود؟لماذا افعل ذلك؟نظرًا لأنه يمكنك البحث في ملف سجل XML، قم بسحب جميع الرسائل المتأخرة الخاصة بالحسابات أينما ظهرت، دون الخلط بينها وبين علامات "الرسائل" التي تنتجها الأنظمة الأخرى, وقم بتحويلها إلى xhtml وعرضها باللون الأحمر الغامق عبر علامة CSS: كل ذلك دون كتابة قصاصة من التعليمات البرمجية الإجرائية.

على سبيل المثال: مساحات أسماء XML حسب المثال

في كلامي:إذا كان يجب عليك استخدام بعض تنسيقات XML لشركة خارجية (على سبيل المثال) وتحتاج إلى تقديم بعض المعلومات في مستند XML، الذي يحمل نفس الاسم، فأنت بحاجة إلى مساحة اسم.مثال:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="Blue"/>
      </items>
   </header>
</sampleDoc>

وتريد دمج بعض البيانات في هذا المستند، الذي يحمل نفس الاسم، ولكن بمعنى آخر (لذلك القيمة لـ)، يجب عليك استخدام مساحة الاسم:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/>
      </items>
   </header>
</sampleDoc>

بالطبع - يمكنك تغيير اسم السمة.على سبيل المثال إلى "my_unique_color".في مستند آخر، يمكن أن تكون هناك سمة بنفس الاسم مرة أخرى.لذلك، إذا كان لديك مساحة اسم فريدة (نطاق الويب الخاص بنا على سبيل المثال)، فيمكنك دائمًا استخدام نفس أسماء العناصر و/أو السمات دون أي مشاكل.

من توصية W3...

توفر مساحات أسماء XML طريقة بسيطة لتأهيل أسماء العناصر والسمات المستخدمة في مستندات لغة التوصيف القابلة للتوسيع عن طريق ربطها بمساحات الأسماء المحددة بواسطة مراجع URI.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top