كيفية التحقق من صحة مستند XML باستخدام DTD أو الشديد XSD في Visual C#.NET

ملخص

توضح هذه المقالة كيفية تطبيق تعريف نوع المستند (DTD) أو مخطط المنخفض بيانات XML Microsoft (XDR) أو مخطط لغة تعريف مخطط XML (XSD) إلى مستند لغة توصيف الموسعة (XML). توضح هذه المقالة أيضا كيفية استخدام فئة XmlValidatingReader للتحقق من صحة مستند XML على النحو المحدد، بالإضافة إلى كيفية استخدام فئة XmlSchemaCollection إلى مخططات ذاكرة التخزين المؤقت في الذاكرة من أجل تحسين التحقق من صحة XML.

مستندات XML يحتوي على العناصر والسمات. أنها توفر طريقة مرنة وفعالة لتبادل البيانات بين التطبيقات والمؤسسات. لتحديد بنية المسموح به ومحتويات مستند XML، يمكنك كتابة DTD أو مخطط الشديد أو مخطط XSD. مخططات XSD الأسلوب المفضل لتحديد قواعد النحو XML في Microsoft.NET Framework ولكن Dtd ويتم اعتماد المخططات الشديد أيضا.

متطلبات

تفترض هذه المقالة التي كنت معتاداً على المواضيع التالية:

  • بناء جملة Microsoft Visual C#.NET أو Microsoft Visual Basic.NET
  • مفاهيم XML، بما في ذلك مسائل التحقق من الصحة

إنشاء مستند XML

  1. بتشغيل Visual Studio.NET.
  2. إنشاء ملف XML جديد على الكمبيوتر المحلي.
  3. إضافة البيانات التالية إلى مستند XML لتمثيل منتج في نشرة مصورة:
    <Product ProductID="123">   <ProductName>Rugby jersey</ProductName>
    </Product>

  4. قم بحفظ الملف ك Product.xml في مجلد جديد يسمى C:\MyFolder.

استخدام DTD

إنشاء DTD وارتباط إلى مستند XML

  1. في Visual Studio.NET, بإنشاء ملف نصي فارغ.
  2. إضافة تعريفات DTD التالية إلى الملف لوصف النحوي مستند XML:
    <!ELEMENT Product (ProductName)><!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>

  3. حفظ الملف باسم Product.dtd في الدليل C:\MyFolder.
  4. افتح Product.xml في Visual Studio.NET.
  5. إضافة العبارة التالية نوع المستند إلى أعلى Product.xml لربط مستند XML لملف DTD:
    <?xml version="1.0"?><!DOCTYPE Product SYSTEM "Product.dtd">

  6. حفظ مستند XML المعدل ك ProductWithDTD.xml.

استخدام DTD للتحقق من صحة مستند XML

  1. في Visual Studio.NET, إنشاء مشروع تطبيق Visual C# وحدة تحكم جديد باسم فاليداتيكسمل.
  2. إضافة استخدام العبارتين بداية Class1.cs كما يلي:
    using System.Xml;        // for XmlTextReader and XmlValidatingReaderusing System.Xml.Schema; // for XmlSchemaCollection (which is used later)

  3. في Class1.cs، تقوم بتعريف متغير منطقية المسماة isValid قبل بداية الأسلوب الرئيسي كما يلي:
    private static bool isValid = true;      // If a validation error occurs,                                         // set this flag to false in the
    // validation event handler.
  4. إنشاء كائن XmlTextReader لقراءة مستند XML من ملف نصي في الأسلوب الرئيسي ثم قم بإنشاء XmlValidatingReader للتحقق من صحة بيانات XML هذا كما يلي:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithDTD.xml");XmlValidatingReader v = new XmlValidatingReader(r);

  5. تشير الخاصية فاليداتيونتيبي للكائن XmlValidatingReader إلى نوع التحقق من الصحة المطلوبة (DTD الشديدأو مخطط). تعيين هذه الخاصية إلى DTD كما يلي:
    v.ValidationType = ValidationType.DTD;
  6. في حالة حدوث أي أخطاء التحقق من الصحة، ينشئ القارئ التحقق حدث التحقق من صحة. أضف التعليمات البرمجية التالية تسجيل معالج أحداث التحقق من صحة (سيتم تطبيق الأسلوب ميفاليداتيونيفينثاندلير في الخطوة 8):
    v.ValidationEventHandler +=    new ValidationEventHandler(MyValidationEventHandler);

  7. أضف التعليمات البرمجية التالية لقراءة والتحقق من صحة مستند XML. في حالة حدوث أي أخطاء التحقق من الصحة، يسمى ميفاليداتيونيفينثاندلير لمعالجة الخطأ. هذا الأسلوب يعين isValid إلى false (راجع الخطوة 8). يمكنك التحقق من حالة isValid بعد التحقق من الصحة معرفة ما إذا كانت الوثيقة صحيحة أو غير صحيحة.
    while (v.Read()){
    // Can add code here to process the content.
    }
    v.Close();

    // Check whether the document is valid or invalid.
    if (isValid)
    Console.WriteLine("Document is valid");
    else
    Console.WriteLine("Document is invalid");

  8. كتابة الأسلوب ميفاليداتيونيفينثاندلير بعد الأسلوب الرئيسي كما يلي:
    public static void MyValidationEventHandler(object sender,                                             ValidationEventArgs args) 
    {
    isValid = false;
    Console.WriteLine("Validation event\n" + args.Message);
    }

  9. بناء وتشغيل التطبيق. يجب على التطبيق تقرير وجود مستند XML صالح.
  10. في Visual Studio.NET, تعديل ProductWithDTD.xml لإبطال ذلك (على سبيل المثال، حذف "< اسم المنتج > جيرسي الركبي </ProductName >" العنصر).
  11. قم بتشغيل التطبيق مرة أخرى. يجب أن تظهر رسالة الخطأ التالية:
    التحقق من صحة الحدث
    العنصر 'المنتجات' يحتوي على محتوى غير صالح. ومن المتوقع "اسم المنتج".
    حدث خطأ في file:///C:/MyFolder/ProductWithDTD.xml(4, 5).
    مستند غير صالح

استخدام مخطط الشديد

إنشاء مخطط الشديد وارتباط إلى مستند XML

  1. في Visual Studio.NET, بإنشاء ملف نصي فارغ.
  2. إضافة تعريفات مخطط الشديد التالية إلى الملف لوصف النحوي مستند XML:
    <?xml version="1.0"?><Schema name="ProductSchema" 
    xmlns="urn:schemas-microsoft-com:xml-data"
    xmlns:dt="urn:schemas-microsoft-com:datatypes">

    <ElementType name="Product" content="eltOnly">
    <attribute type="ProductID" required="yes"/>
    <element type="ProductName"/>
    </ElementType>

    <AttributeType name="ProductID" dt:type="int"/>
    <ElementType name="ProductName" dt:type="string"/>
    </Schema>

  3. حفظ الملف باسم Product.xdr في الدليل C:\MyFolder.
  4. فتح ملف Product.xml الأصلية، والارتباط بالمخطط الشديد كما يلي:
    <?xml version="1.0"?><Product ProductID="123" xmlns="x-schema:Product.xdr"> 
    <ProductName>Rugby jersey</ProductName>
    </Product>

  5. حفظ مستند XML المعدل ك ProductWithXDR.xml.

استخدم مخطط الشديد للتحقق من صحة مستند XML

  1. تعديل التطبيق الخاص بك بحيث يحمل XmlTextReader ProductWithXDR.xml كما يلي:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXDR.xml");
  2. تعيين فاليداتيونتيبي إلى الشديد حيث يقوم قارئ التحقق الشديد التحقق من الصحة:
    v.ValidationType = ValidationType.XDR;
  3. بناء وتشغيل التطبيق. يجب على التطبيق تقرير وجود مستند XML صالح.
  4. تعديل ProductWithXDR.xml لإبطال ذلك.
  5. بناء وتشغيل التطبيق مرة أخرى. يجب أن تتلقى خطأ التحقق من صحة.

استخدام مخطط XSD

إنشاء مخطط XSD وارتباط إلى مستند XML

  1. في Visual Studio.NET, بإنشاء ملف نصي فارغ.
  2. إضافة تعريفات مخطط XSD التالية إلى الملف لوصف النحوي مستند XML:
    <?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Product">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="ProductName" type="xsd:string"/>
    </xsd:sequence>
    <xsd:attribute name="ProductID" use="required" type="xsd:int"/>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>

  3. حفظ الملف باسم Product.xsd في الدليل C:\MyFolder.
  4. افتح Product.xml الأصلية، وربطها بمخطط XSD كما يلي:
    <?xml version="1.0"?><Product ProductID="123" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="Product.xsd">
    <ProductName>Rugby jersey</ProductName>
    </Product>

  5. حفظ مستند XML المعدل ك ProductWithXSD.xml.

استخدام مخطط XSD للتحقق من صحة مستند XML

  1. تعديل التطبيق الخاص بك بحيث يحمل XmlTextReader ProductWithXSD.xml كما يلي:
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXSD.xml");
  2. تعيين فاليداتيونتيبي إلى مخطط حيث يقوم قارئ التحقق التحقق من صحة مخطط XSD:
    v.ValidationType = ValidationType.Schema;
  3. بناء وتشغيل التطبيق لاستخدام مخطط XSD للتحقق من صحة مستند XML.

استخدام مساحات الأسماء في مخطط XSD

  1. في Visual Studio.NET, قم بفتح ProductWithXSD.xml.
  2. قم بتعريف مساحة اسم افتراضية urn: MyNamespace في المستند. تعديل ارتباط XSD بالإضافة إلى ذلك، بحيث تحدد مخطط XSD للتحقق من صحة المحتوى في مساحة الاسم:
    <?xml version="1.0"?><Product ProductID="123" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="urn:MyNamespace"
    xsi:schemaLocation="urn:MyNamespace Product.xsd">
    <ProductName>Rugby jersey</ProductName>
    </Product>

  3. حفظ التغييرات إلى ProductWithXSD.xml.
  4. فتح Product.xsd. تعديل علامة بداية < xsd:schema > كما يلي بحيث يطبق المخطط ل مساحة الاسم urn: MyNamespace:
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"            targetNamespace="urn:MyNamespace"
    elementFormDefault="qualified">

  5. حفظ التغييرات إلى Product.xsd.
  6. بناء وتشغيل التطبيق لاستخدام مخطط XSD للتحقق من صحة مستند XML.

مساحات الأسماء ذاكرة التخزين المؤقت

  1. في Visual Studio.NET, افتح Class1.cs. إنشاء كائن XmlSchemaCollection في بداية الأسلوب الرئيسي كما يلي:
    XmlSchemaCollection cache = new XmlSchemaCollection();
  2. يسمح لك كائن XmlSchemaCollection إلى مخططات ذاكرة التخزين المؤقت في الذاكرة لتحسين الأداء. يقترن كل مخطط مساحة اسم مختلفة. أضف التعليمات البرمجية التالية إلى ذاكرة التخزين المؤقت Product.xsd:
    cache.Add("urn:MyNamespace", "C:\\MyFolder\\Product.xsd");
  3. إضافة العبارة التالية بعد التعليمة البرمجية التي يقوم بإنشاء
    كائن XmlValidatingReader إضافة التخزين المؤقت للمخطط إلى XmlValidatingReader حيث القارئ استخدام المخططات في الذاكرة:
    v.Schemas.Add(cache);

تحقق من أنه يعمل

  1. إنشاء وتشغيل التطبيق.
  2. تحقق من أن مستند XML لا يزال التحقق من مقارنة بمخطط XSD.
  3. تعديل ProductWithXSD.xml لإبطال ذلك.
  4. تحقق من أن التطبيق يقوم باكتشاف أخطاء التحقق من الصحة هذه.
خصائص

رقم الموضوع: 307379 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات