كيف يتم التعامل مع أحرف المسافات البيضاء في نموذج كائن XML؟
في بعض الأحيان، سيعرض نموذج كائن XML العقد النصية التي تحتوي على أحرف مسافة بيضاء. عندما يتم اقتطاع أحرف المسافات البيضاء، فمن المحتمل أن يسبب ذلك بعض الالتباس. على سبيل المثال، مثال XML التالي:
]>
سميث
جون
يتم إنشاء الشجرة التالية:
تعليمات المعالجة: XML
نوع المستند: شخص
العنصر: شخص
نص:
العنصر: اسم العائلة
نص:
العنصر: الاسم الأول
نص:
الاسم الأول والأخير محاطان بعقد نصية تحتوي على أحرف مسافات بيضاء فقط لأن نموذج محتوى عنصر "الشخص" مختلط؛ فهو يحتوي على الكلمة الأساسية #PCDATA. يحدد نموذج المحتوى المختلط إمكانية وجود النص بين العناصر. ولذلك فإن ما يلي صحيح أيضًا:
اسمي الأخير هو سميث واسمي الأول هو
جون
والنتيجة هي شجرة مشابهة لما يلي:
العنصر: شخص
النص: اسمي الأخير هو
العنصر: اسم العائلة
النص: واسمي الأول هو
العنصر: الاسم الأول
نص:
بدون أحرف المسافة البيضاء بعد الكلمة "is" وقبلها، وأحرف المسافة البيضاء بعد الكلمة "و" وقبلها، ستكون الجملة غير مفهومة. لذلك، بالنسبة لنموذج المحتوى المختلط، تكون مجموعات النص وأحرف المسافات البيضاء والعناصر كلها ذات صلة. ليس هذا هو الحال بالنسبة لنماذج المحتوى غير المختلط.
لجعل العقد النصية ذات المسافات البيضاء فقط تختفي، قم بإزالة الكلمة الأساسية #PCDATA من تعريف عنصر "الشخص":
والنتيجة هي الشجرة الواضحة التالية:
تعليمات المعالجة: XML
نوع المستند: شخص
العنصر: شخص
العنصر: اسم العائلة
العنصر:
ماذا يفعل إعلان XML؟
يجب إدراج إعلان XML في أعلى مستند XML:
فهو يحدد العناصر التالية:
المستند عبارة عن مستند XML. يمكن أن تستخدم كاشفات MIME هذا لاكتشاف ما إذا كان الملف من النوع text/xml عندما يكون نوع MIME مفقودًا أو لم يتم تحديده.
يتوافق المستند مع مواصفات XML 1.0. سيكون هذا مهمًا في المستقبل عندما تكون هناك إصدارات أخرى من XML.
ترميز أحرف الوثيقة. تعتبر سمة التشفير اختيارية ويتم تعيينها افتراضيًا على UTF-8.
ملاحظة: يجب أن يكون إعلان XML في السطر الأول من مستند XML، وبالتالي فإن ملف XML التالي:
ينتج خطأ التحليل التالي:
تعريف XML غير صالح.
السطر 0000002:
الموقع 0000007: ------^
ملاحظة: إعلان XML اختياري. إذا كنت بحاجة إلى تحديد تعليقات أو تعليمات معالجة في الأعلى، فلا تضع إعلان XML. ومع ذلك، سيكون الترميز الافتراضي هو UTF-8.
كيف يمكنني طباعة مستند XML الخاص بي بتنسيق قابل للقراءة؟
عند إنشاء مستند من البداية باستخدام DOM لإنتاج ملف XML، يكون كل شيء على سطر واحد، بدون مسافات بينهما. هذا هو السلوك الافتراضي.
إنشاء ورقة أنماط XSL الافتراضية في Internet Explorer 5 لعرض وطباعة مستندات XML بتنسيق قابل للقراءة. على سبيل المثال، إذا كان IE5 مثبتًا بالفعل، فحاول النظر إلى الملف nospace.xml. يجب أن تظهر الشجرة التالية في المتصفح:
-
-
XYZ
12.56
لم يتم إدراج أحرف مسافة بيضاء في XML.
تعد طباعة XML القابلة للقراءة أمرًا مثيرًا للاهتمام، خاصة عندما تكون هناك DTDs تحدد أنواعًا مختلفة من نماذج المحتوى. على سبيل المثال، ضمن نموذج المحتوى المختلط (#PCDATA) لا يمكنك إدراج مسافات لأنها قد تغير معنى المحتوى. على سبيل المثال، خذ بعين الاعتبار ملف XML التالي:
Elephant
من الأفضل عدم إخراج هذا كـ:
E
lephant
لأن حدود الكلمة لم تعد صحيحة.
كل هذا يجعل الطباعة الآلية مشكلة. إذا لم تكن بحاجة إلى طباعة XML قابل للقراءة، فيمكنك استخدام DOM لإدراج أحرف المسافات البيضاء كعقد نصية في المواقع المناسبة.
كيفية استخدام مساحات الأسماء في DTD؟ لاستخدام مساحة اسم في DTD، قم بتعريفها في تعريف ATTLIST للعنصر الذي يستخدمها، كما يلي:
يجب أن يكون نوع مساحة الاسم #FIXED. الأمر نفسه ينطبق على مساحات أسماء السمات:
لا يمكن الخلط بين مساحات الأسماء ومخططات XML ومخططات DTD وXML. على سبيل المثال، ما يلي
xmlns:x CDATA #FIXED "x-schema:myschema.xml"
لن يتسبب في استخدام تعريف المخطط المحدد في myschema.xml. استخدام مخططات DTD وXML يتعارض مع بعضها البعض.
كيفية استخدام XMLDSO في Visual Basic؟
استخدم XML التالي كمثال:
مارك هانسون
2067654583
جين سميث
4258081111
يمكنك ربط مجموعة سجلات ADO كما يلي:
إنشاء مشروع VB 6.0 جديد.
قم بإضافة مراجع إلى Microsoft ActiveX Data Objects 2.1 أو الأحدث، وMicrosoft Data Adaptor Library، وMicrosoft XML الإصدار 2.0.
استخدم التعليمة البرمجية التالية لتحميل بيانات XML إلى عنصر تحكم XML DSO:
خافت dso كـ XMLDSOControl جديد
Dim doc كـ IXMLDOMDocument
تعيين المستند = dso.XMLDocument
doc.Load ("d:test.xml")
التعليمات البرمجية التالية لتعيين DSO في كائن مجموعة سجلات جديد باستخدام DataAdapter:
خافت دا كمحول بيانات جديد
تعيين da.Object = dso
Dim rs كـ ADODB.Recordset جديد
تعيين rs.DataSource = دا
الوصول إلى البيانات:
MsgBox rs.Fields("name").
تنتج القيمة في السلسلة "Mark Hanson"
كيفية استخدام XML DOM في جافا؟
يجب تثبيت إصدار IE5 من MSXML.DLL. في Visual J++ 6.0، حدد إضافة غلاف COM من قائمة المشروع، ثم حدد "Microsoft XML 1.0" من قائمة كائنات COM. سيؤدي هذا إلى إنشاء غلاف Java المطلوب في حزمة جديدة تسمى "msxml". تتوفر أيضًا أغلفة Java المعدة مسبقًا للتنزيل. يمكن استخدام الفصول على النحو التالي:
استيراد com.ms.com.*;
استيراد msxml.*;
الطبقة العامة Class1
{
الفراغ العام الثابت الرئيسي (وسائط السلسلة [])
{
DOMDocument doc = new DOMDocument();
doc.load(new Variant(" file://d:/samples/ot.xml "));
System.out.println("تم التحميل" + doc.getDocumentElement().getNodeName());
}
}
سيقوم مثال التعليمات البرمجية بتحميل ملف اختبار بحجم 3.8 ميجابايت "ot.xml" من مثال دين الشمس. تلتف فئة Variant مع النوع الأساسي Win32 VARIANT.
نظرًا لأنك تحصل فعليًا على غلاف جديد في كل مرة تقوم فيها باسترداد عقدة، فلا يمكنك استخدام مقارنات المؤشر على العقد. لذلك لا تستخدم الكود أدناه،
IXMLDOMNode root1 = doc.getDocumentElement();
IXMLDOMNode root2 = doc.getDocumentElement();
إذا (الجذر1 == الجذر2)...
بدلا من ذلك استخدم الكود التالي:
إذا (ComLib.isEqualUnknown(root1, root2)) ....
الحجم الإجمالي للمجمع .class هو حوالي 160 كيلو بايت. ومع ذلك، لتحقيق التوافق الكامل مع مواصفات W3C، يجب استخدام أغلفة IXMLDOM* فقط. الفئات التالية هي واجهات IE 4.0 XML قديمة ويمكن إزالتها من المجلد msxml:
سمة IXML*،
إكسملدوكومنت*، إكسملدوكومنت*
عنصر اكسميليمنت*،
خطأ IXML*،
IXMLElementCollection*,
العلامةXMLEMEM_TYPE*
_xml_خطأ*
يؤدي هذا إلى تقليل الحجم إلى 147 كيلو بايت. يمكنك أيضًا حذف العناصر التالية:
DOMFreeThreadedDocument
الوصول إلى مستندات XML من عدة سلاسل رسائل في تطبيقات Java.
XMLHttpRequest
استخدم ملحق XML DAV HTTP للتواصل مع الخادم.
IXTLRuntime
تعريف كائن البرنامج النصي لورقة أنماط XSL.
XMLDSOControl
يرتبط ببيانات XML في صفحة HTML.
XMLDOMDocumentEvents
رد الاتصال أثناء التحليل.
يؤدي هذا إلى تقليل الحجم إلى 116 كيلو بايت. ولجعله أصغر حجمًا، ضع في اعتبارك حقيقة أن DOM نفسه يتكون من طبقتين: الطبقة الأساسية تتكون من:
DOMDocument، IXMLDOMDocument
عقدة IXMLDOM*
قائمة IXMLDOMNodeList*
إكسملدومناميدنوديماب*
جزء IXMLDOMDocument*
التنفيذ IXMLDOMI
IXMLDOMParseError
ومعلومات DTD التي قد يحتاج المستخدمون إلى الاحتفاظ بها:
IXMLDOMDocumentType
IXMLDOMEntity
IXMLDOMNotation
كافة أنواع العقد في مستند XML هي IXMLDOMNodes، والتي توفر الوظائف الكاملة، ولكن هناك مغلفات ذات مستوى أعلى لكل نوع عقدة. لذلك، إذا قمت بتعديل غلاف DOMDocument وتغيير هذه الأنواع المحددة لاستخدام IXMLDOMNode، فيمكن إزالة كافة الواجهات التالية:
IXMLDOMAttribute
IXMLDOMCDATASection
IXMLDOMCharacterData
تعليق IXMLDOM
IXMLDOMElement
IXMLDOMProcessingInstruction
IXMLDOMEntityReference
IXMLDOMText
ستؤدي إزالة هذه العناصر إلى تقليل الحجم إلى 61 كيلو بايت. ومع ذلك، بالنسبة لـ IXMLDOMElement، تعد كلاً من طريقتي getAttribute وsetAttribute مفيدة. خلاف ذلك تحتاج إلى استخدام:
IXMLDOMNode.getAttributes().setNamedItem(...)