ما هي الطريقة الصحيحة لتمثيل عناصر XML Null؟

StackOverflow https://stackoverflow.com/questions/774192

  •  13-09-2019
  •  | 
  •  

سؤال

لقد رأيت null العناصر الممثلة بعدة طرق:

العنصر موجود مع xsi:nil="true":

 <book>
     <title>Beowulf</title>
     <author xsi:nil="true"/>
 </book>

العنصر موجود، ولكن يمثل كعنصر فارغ (الذي أعتقد أنه خطأ منذ "فارغة" و null مختلفة دلالة):

 <book>
     <title>Beowulf</title>
     <author/>
 </book>

 <!-- or: -->
 <book>
     <title>Beowulf</title>
     <author></author>
 </book>

العنصر غير موجود على الإطلاق في العلامات التي تم إرجاعها:

 <book>
     <title>Beowulf</title>
 </book>

العنصر لديه <null/> عنصر الطفل (من tstamper. أقل):

 <book>
     <title>Beowulf</title>
     <author><null/></author>
 </book>

هل هناك طريقة صحيحة أو قانونية لتمثيل مثل هذا null القيمة؟ هل هناك طرق إضافية من الأمثلة أعلاه؟

يتعارض XML للأمثلة أعلاه، لذلك لا تقرأ بعيدا عن ذلك. :)

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

المحلول

XSI: NIL هو الطريقة الصحيحة لتمثيل قيمة بحيث ما يلي: عندما يتم إصدار COM DOM 2 Call GetElementValue ()، يتم إرجاع القيمة الخالية. XSI: يستخدم NIL أيضا للإشارة إلى عنصر صالح بدون محتوى حتى لو كانت نوع المحتوى العناصر عادة لا يسمح بالعناصر الفارغة.

إذا تم استخدام علامة فارغة، فإن GetEllementValue () إرجاع السلسلة الفارغة ("") إذا تم حذف العلامة، فلا توجد علامة مؤلف حتى. قد يختلف هذا بشكل شبه نفسي بدلا من تحديدها إلى "Nil" (EX. Setting "Series" قد يكون أن الكتاب ينتمي إلى أي سلسلة، أثناء حذف السلسلة يمكن أن تعني هذه السلسلة عنصر غير قابل للتطبيق على العنصر الحالي.)

من: W3C.

مخطط XML: تقدم الهياكل آلية للإشارات أنه يجب قبول عنصر · ساري المفعول · عندما لا يكون لديه محتوى على الرغم من نوع المحتوى الذي لا يتطلب أو حتى يسمح بالضرورة بالمحتوى الفارغ بالضرورة. قد يكون عنصر صحيح · دون محتوى إذا كان لديه سمة XSI: NIL مع القيمة TRUE. يجب أن يكون العنصر المسمى فارغا، ولكن يمكنه حمل سمات إذا سمح به النوع المعقد المقابل.

توضيح:
إذا كان لديك عنصر كتاب XML وواحد من عناصر الأطفال هو الكتاب: سلسلة لديك العديد من الخيارات عند ملءها:

  1. إزالة العنصر بالكامل - يمكن القيام بذلك عندما ترغب في الإشارة إلى أن هذه السلسلة لا تنطبق على هذا الكتاب أو هذا الكتاب ليس جزءا من سلسلة. في هذه الحالة يحول XSL (أو غيرها من المعالجات القائمة على الأحداث) التي تحتوي على قالب يطابق دفتر: لن يتم استدعاء السلسلة أبدا. على سبيل المثال، إذا قام XSL بتشغيل عنصر الكتاب إلى صف جدول (XHTML: TR)، فقد تحصل على عدد غير صحيح من خلايا الجدول (XHTML: TD) باستخدام هذه الطريقة.
  2. ترك العنصر فارغ - قد يشير ذلك إلى أن السلسلة ""، أو غير معروف، أو أن الكتاب ليس جزءا من سلسلة. سيتم استدعاء أي تحويل XSL (أو غيرها من المحفوظات المستندة إلى everntnt) التي تطابق دفتر: سلسلة. قيمة الحالية () ستكون "". سوف تحصل على نفس عدد XHTML: TD العلامات باستخدام هذه الطريقة كما هو الحال مع واحد الموصوف واحد.
  3. باستخدام XSI: NIL = "TRUE" - وهذا يدل على أن الكتاب: عنصر السلسلة لاغيا، وليس فارغا فقط. سيتم استدعاء تحويل XSL الخاص بك (أو محلل حدث آخر يستند إلى الأحداث) التي تحتوي على دفتر مطابقة قالب: سلسلة. ستكون قيمة الحالية () فارغة (وليس سلسلة فارغة). الفرق الرئيسي بين هذه الطريقة و (2) هو أن نوع المخطط من الكتاب: لا تحتاج السلسلة إلى السماح بالسلسلة الفارغة ("") كقيمة صالحة. لا يوجد معنى حقيقي لعنصر سلسلة، ولكن بالنسبة لعنصر اللغة يتم تعريفه كوعي تعداد في المخطط، XSI: NIL = "TRUE" يسمح للعنصر ليس لديه بيانات. مثال آخر سيكون عناصر من النوع العشري. إذا كنت تريد أن تكون فارغة، فيمكنك الاتحاد سلسلة تعداد تسمح فقط "" وزيارة، أو استخدام عشري غير قابل للإشارة.

نصائح أخرى

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

ذلك يعتمد على كيفية التحقق من صحة XML الخاصة بك. إذا كنت تستخدم التحقق من صحة مخطط XML، والطريقة الصحيحة للتمثيل null القيم مع xsi:nil ينسب.

[مصدر]

الوثائق في رابط W3

http://www.w3.org/tr/rec-xml/#sec-starttags.

يقول أن هذه هي النماذج المنصوص عليها.

<test></test>
<test/>

السمة المذكورة في الإجابة الأخرى هي آلية التحقق من الصحة وليس تمثيل الدولة. يرجى الرجوع إلى http://www.w3.org/tr/xmlschema-1/#xsi_nil.

مخطط XML: الهياكل يقدم آلية الإشارة إلى أنه يجب قبول عنصر · صالح · عندما لا يكون لديه محتوى على الرغم من نوع المحتوى الذي لا يتطلب أو حتى بالضرورة السماح للمحتوى الفارغ. قد يكون عنصر صحيح · دون محتوى إذا كان لديه سمة XSI: NIL مع القيمة TRUE. يجب أن يكون عنصر المسمى بحيث فارغ, ، ولكن يمكن أن تحمل سمات إذا سمح بها النوع المعقد المقابل.

لتوضيح هذه الإجابة: المحتوى

  <Book>
    <!--Invalid construct since the element attribute xsi:nil="true" signal that the element must be empty-->
    <BuildAttributes HardCover="true" Glued="true" xsi:nil="true">
      <anotherAttribute name="Color">Blue</anotherAttribute>
    </BuildAttributes>
    <Index></Index>
    <pages>
      <page pageNumber="1">Content</page>            
    </pages>
    <!--Missing ISBN number could be confusing and misguiding since its not present-->
  </Book>
</Books>

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

ببساطة حذف السمة أو عنصر يعمل بشكل جيد في بيانات أقل رسمية.

إذا كنت بحاجة إلى معلومات أكثر تطورا، فإن مخططات GML تضيف سمة NilReason، على سبيل المثال: في Geosciml.:

  • xsi:nil مع قيمة "True" يستخدم للإشارة إلى أنه لا توجد قيمة متاحة
  • nilReason يمكن استخدامها لتسجيل معلومات إضافية للقيم المفقودة؛ قد يكون هذا أحد أسباب GML القياسية (missing, inapplicable, withheld, unknown)، أو نص إضفاء other:, ، أو قد يكون رابط URI إلى شرح أكثر تفصيلا.

عندما تقوم بتبادل البيانات، فإن الدور الذي يستخدم عادة XML يستخدم عادة، قد يكون للبيانات المرسلة إلى مستلم واحد أو لغرض معين محتوى غامض سيكون متاحا لشخص آخر دفع أو كان لديه مصادقة مختلفة. معرفة السبب في أن المحتوى مفقود قد يكون مهم جدا.

يهتم العلماء أيضا بسبب مفقود المعلومات. على سبيل المثال، إذا تم إسقاطها لأسباب عالية الجودة، فقد يرغبون في رؤية البيانات السيئة الأصلية.

في كثير من الحالات، فإن الغرض من قيمة فارغة هو خدمة قيمة بيانات غير موجودة في إصدار سابق من طلبك.

لذلك قل لديك ملف XML من الإصدار 1 "Reportmaster" الخاص بك 1.

الآن في إصدار ReportMaster 2، تمت إضافة بعض السمات الإضافية التي قد يتم أو عدم تحديدها.

إذا كنت تستخدم "أي علامة تعني تمثيل NULL"، فستحصل على التوافق المتخلف التلقائي لقراءة ملف Reportmaster 1 XML.

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