هل يمكن لتعليقات XML أن تذهب إلى أي مكان؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

لذلك سؤالي:هل هو صالح XML لوضعه في أي من الموقعين؟على سبيل المثال، فوق إعلان XML:

<!-- Queries used: ... -->
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>

أو أسفل العقدة الجذرية:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  ...
</dataset>
<!-- Queries used: ... -->

أخطط مبدئيًا للمحاولة فوق إعلان XML، ولكن لدي شكوك حول ما إذا كان XML صالحًا، على الرغم من المطالبة المقدمة من ويكيبيديا:

يمكن وضع التعليقات في أي مكان في الشجرة، بما في ذلك النص إذا كان محتوى العنصر نصًا أو #PCDATA.

أخطط لإعادة النشر إذا نجح هذا، ولكن سيكون من الجيد معرفة ما إذا كان معيار XML رسميًا.

تحديث: يرى ردي أدناه لنتيجة الاختبار الخاص بي.

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

المحلول

بحسب ال مواصفات XML, ، مستند XML جيد التكوين هو:

document ::= prolog element Misc*

أين prolog يكون

prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?

و Misc يكون

Misc ::= Comment | PI | S

و

XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

مما يعني أنه إذا كنت ترغب في الحصول على تعليقات في الأعلى، فلا يمكنك الحصول على إعلان نوع XML.

ومع ذلك، يمكنك الحصول على تعليقات بعد الإعلان وخارج عنصر المستند، سواء في أعلى المستند أو أسفله، لأن Misc* يمكن أن تحتوي على تعليقات.

المواصفات تتفق مع ويكيبيديا على التعليقات:

2.5 تعليقات

[تعريف:قد تظهر التعليقات في أي مكان في المستند خارج العلامات الأخرى؛بالإضافة إلى ذلك، قد تظهر ضمن إعلان نوع المستند في الأماكن التي تسمح بها القواعد.فهي ليست جزءًا من بيانات أحرف المستند؛قد يتيح معالج XML، ولكن ليس من الضروري، للتطبيق استرداد نص التعليقات.من أجل التوافق، يجب ألا تظهر السلسلة "--" (واصلة مزدوجة) ضمن التعليقات.] يجب عدم التعرف على مراجع كيان المعلمات ضمن التعليقات.

كل هذا معًا يعني أنه يمكنك وضع التعليقات في أي مكان ليس داخل العلامات الأخرى, ، إلا أنك لا يمكن أن يكون لديك إعلان XML إذا قمت بالتعليق.

ومع ذلك، في حين أن النظرية تتفق مع الممارسة من الناحية النظرية، إلا أنها لا تتفق من الناحية العملية، لذلك سأكون فضوليًا لمعرفة كيف ستنجح تجربتك.

نصائح أخرى

المثال الأول ليس XML صالحًا، ويجب أن يكون الإعلان أول شيء في مستند XML.

ولكن إلى جانب ذلك، يمكن للتعليقات أن تذهب إلى أي مكان آخر.

تصحيح المثال الأول:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Queries used: ... -->
<dataset>
</dataset>

يجب أن تكون تعليمات المعالجة أول شيء في محتوى XML (انظر تعليق XML و تعليمات المعالجة).يجب أن يعمل ما يلي:

<?xml version='1.0' encoding='UTF-8'?>
<!-- Queries used: ... -->
<dataset>
  ...
</dataset>

شكرا لأجوبتكم جميعا!

كما اتضح، يبدو أن التعليق الموجود قبل الملف يعمل، ولكن عندما بحثت في مصدر DBUnit، كان ذلك بسبب إيقاف التحقق من الصحة.

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

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("/path/to/file"));

وهذا يفشل مع استثناء لأن إعلان XML ليس أول شيء (كما أشار الآخرون إلى ذلك).

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

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