1. مقدمة
مرة أخرى في عام 2001 ، قدم اتحاد W3C توصيات حول لغة تعريف مخطط XML (XSD) ، ودمج لغات تعريف المخطط الأكثر شيوعًا في معيار واحد. كان الهدف الرئيسي ، الذي تم السعي إليه في هذه الحالة ، هو الحصول على معيار مستقل عن المنصة يمكن لجميع المشاركين في تبادل المعلومات استخدامه. لتسخير الفوضى ، أصبح XML هو تنسيق تبادل المعلومات الأكثر جاذبية. في الوقت الحاضر ، يتم استخدام تنسيق XML في تكنولوجيا المعلومات على نطاق واسع للغاية ، ويتجاوز مجرد التبادل البسيط للبيانات.
يؤدي انتشار واتساع استخدام XML إلى زيادة في الحجم وتعقيد بنية البيانات المرسلة في XML. ساهم أيضًا في هذه العملية تنسيق JSON الأصغر والأبسط ، الذي "أخذ" جميع تدفقات المعلومات من XML مع بنية بسيطة إلى حد ما من تنسيقات الرسائل. اليوم لدينا حقيقة أن مخططات XSD التي تصف بنية بيانات رسائل XML أصبحت كبيرة ومعقدة. لقد أصبح من الصعب جدًا قراءة المخططات الكبيرة والمعقدة في شكل نصي ، لذلك هناك حاجة إلى كل من البرامج الخاصة والوثائق الحديثة التي تصف تنسيقات رسائل XML.
في هذا المقال سأتحدث عن كيفية حل مشكلة توثيق تنسيقات رسائل XML المستخدمة لتبادل المعلومات ...

2. القضايا
أفضل وثائق مخطط XSD هي مخطط XSD نفسه. هذه البديهية صحيحة حتى يتجاوز المخطط حدًا معينًا من التعقيد أو تلتقي بشخص لا يعرف كيف أو لا يريد قراءة مخططات XSD. عند تطوير تطبيق باستخدام مخططات XSD ، قد تواجه أيضًا متطلبًا لوصف تنسيقات الرسائل المطورة في الوثائق الفنية أو المصاحبة.
إذا كنت متصلاً بتطوير التطبيقات التي تحتوي على مكونات مقترنة أو موزعة بشكل فضفاض في بنية موجهة نحو الخدمة ، فأنت على دراية بمفاهيم SOA (بنية موجهة للخدمة) و SOAP (بروتوكول الوصول البسيط للكائنات) ، ثم قريبًا سيأتي وقت تحتاج فيه نفسك إلى تحديث هناك وثائق أكثر من عميلك.
لذلك ، السؤال "هل أحتاج إلى وثائق؟" لديه إجابة محددة "نعم" ، عاجلاً أم آجلاً ، سيواجه هذا كل من يشارك في تطوير البرامج باستخدام XML.
السؤال الواضح التالي هو ماذا يجب أن يكون نتيجة توثيق الأشكال؟ من الصعب الإجابة عن هذا السؤال ، لأن المستهلكين المختلفين للنتيجة (المهندسين المعماريين والمطورين والمحللين والكتاب التقنيين والإداريين وممثلي العميل وكل شخص آخر) لديهم مهام مختلفة تمامًا.
يحلون هذه المشكلة بطرق مختلفة. ذهب شخص (على سبيل المثال ، مطورو oXygen) إلى طريق الوصف الكامل لنظام XSD. ونتيجة لذلك ، يصبح الوصف أكثر صعوبة من المخطط نفسه. يعتمد البعض الآخر على حقيقة أن الجميع يجب أن يكونوا قادرين على قراءة مخططات XSD وليس هناك حاجة إلى وثائق - في بعض الأحيان فقط لأنهم يفهمون أنهم غير قادرين على الحفاظ على أهمية هذه الوثائق. كما هو الحال دائمًا ، تقع الحقيقة في مكان ما بين ...
3. جوهر المشكلة
يمكن تمثيل عملية تطوير تنسيقات الرسائل في الخطوات الرئيسية التالية (انظر الشكل أدناه).

التكرار رقم 1:
- 1. تحديد كمية البيانات لتبادل المعلومات - في هذه الخطوة يتم تحديد كمية البيانات التي سيتم إرسالها بين المشاركين في تبادل المعلومات - الكيان ، وبنيتهم المنسوبة وعلاقاتهم.
- 2. تطوير مخططات XSD - بناءً على الخطوة رقم 1 ، يقوم المهندس المعماري أو المطور بتطوير مخططات XSD ، التي تحتوي ، بالإضافة إلى البيانات نفسها ، على آليات رسائل SOAP اللازمة للنقل والأمان وما إلى ذلك.
- 3. وصف تنسيقات الرسائل - في هذه الخطوة ، يتم تطوير وثائق تصف التنسيقات وتقدم أمثلة على الرسائل.
- 4. التوفيق - في هذه الخطوة ، يتم التحقق من الصيغ والموافقة عليها داخل فريق تطوير هذه التنسيقات. إذا تم العثور على عدم دقة ، يتم تكرار تكرار التطوير.
إن عملية تطوير تنسيقات الرسائل تكرارية. بعد اكتمال التكرار الأول وتلقي التعليقات ، يبدأ التالي فورًا من الخطوة رقم 2:
- 2. تطوير مخططات XSD - يقوم المهندس المعماري بإجراء تغييرات على مخططات XSD ، وهذا يستغرق وقتًا أقل بكثير من تطوير هذه المخططات في أول تكرار.
- 3. وصف تنسيقات الرسائل - يجب على المحلل أو الكاتب التقني تحديث الوثائق مع وصف التنسيقات.
وهنا لديه معضلة: إجراء التغييرات فقط التي أبلغه بها المهندس المعماري أو الذهاب إلى جميع المخططات التي تغير حجم الملف من أجلها. أي شخص ، حتى الموظف الأكثر وعيًا سيختار الخيار الأول - وسيكون على خطأ. هذا الخيار لا يعمل! - في كثير من الأحيان هناك تغييرات غير معلنة في المخططات ، والتي ينسى المهندس المعماري أو المطور الإبلاغ عنها ، وبهذه الطريقة سيختلف وصف التنسيقات حتمًا عن المخططات. ماذا يهدد هذا؟ - عندما يبدأ التطوير ، سيتم العثور على تناقض سوف يجلب القليل من الفوضى ، وبدرجات متفاوتة ، يعقد تطوير جميع الفرق المشاركة في الاندماج.
هل يمكن أن يكون أسوأ؟ - نعم ، إذا كان جدول تطوير الفرق المشاركة مختلفًا. يقوم أحد الفرق في بداية العام ، وفقًا للمواصفات ، بتنفيذ إرسال الرسائل مع البيانات المعبأة بشكل غير صحيح وإغلاق العقد بنجاح. يدرك فريق آخر في منتصف العام استلام هذه الرسائل ويجد تعارضًا بين البيانات المطلوبة ووصفها. هذه المرة ، تبقى الفوضى لفترة طويلة ويمكن أن يكون التناقض بين الأشكال ووصفها مكلفًا للغاية.
ما الحل؟ للأسف - يبقى الخيار الوحيد - أن يخطيء في كل مرة ، كل الأنماط المتغيرة. هذا صعب جدا للقبول. يمكن أن يستغرق المستند الذي يحتوي على ألبوم من التنسيقات أكثر من مائة ورقة ويرشها ، إنه عمل شاق ومضن للغاية. في كثير من الأحيان ، يتعرض الشخص الذي يطور هذه الوثيقة لضغوط شديدة بسبب إلحاح التنفيذ. لا يفهم الجميع لماذا يمكن أن يؤدي تغيير وصف العديد من العناصر في العديد من المخططات إلى "تكلفة" يوم عمل كامل أو حتى أكثر.
وهكذا ، تصبح هذه الخطوة "عنق الزجاجة" للتطور ، حيث يحدد الجميع ، قدر استطاعتهم ، ما هو الأكثر قيمة في الوقت الحالي - الجودة أو الوقت. - 4. الموافقة - يذهب الموافقة في البداية داخل الفريق تطوير الأشكال. عند اكتمال التنسيق الداخلي ، يأتي دور التنسيق الخارجي - لجميع المشاركين في تبادل المعلومات.
يمثل الاختناق المكتشف خيارًا صعبًا للغاية بين الجودة ووقت التطوير. يكاد يكون من المستحيل الاختيار بينهما لأن كلا الخيارين مطلوبان في وقت واحد!
4. توثيق صيغ الرسائل
الطريقة الأكثر وضوحًا لتوثيق التنسيقات هي الأقلام. افتح الرسم التخطيطي ووصف عنصره بعنصر ، والذي يستغرق الكثير من وقت العمل. إذا كان المخطط كبيرًا أو كان هناك الكثير منها ، فستحصل في غضون أيام قليلة على ظل أحمر محدد لعين المبرمج المحترف ونفورًا مستمرًا لهذا العمل. يأتي بعد ذلك فهم ما لا يمكن أن يكون ، بحيث لم يتم أتمتة هذا العمل لفترة طويلة والبحث المستمر اللاحق عن أداة منتهية.
قبل البحث عن أداة الأتمتة ، سيكون من الجيد أن تفهم كيف تريد استخدامها وماذا يجب أن يكون نتيجة لعملها؟
تتناسب جميع الأعمال المتعلقة بتوثيق تنسيقات الرسائل مع سيناريوهات الاستخدام التالية:
- يعد توثيق بنية عناصر واحد أو أكثر من مخططات XSD مع "الوثائق" المعبأة هو الخيار الأسهل عندما نقوم بتشكيل مستند من مصدر واحد للمعلومات (مخططات XSD). عادة ، هذه مخططات تم تطويرها داخل الفريق كجزء من العمل الحالي. من الناحية المثالية ، إذا تم تنفيذ التطوير مع مراعاة الاتفاق على تطوير المخططات ، مما يشير ، ليس فقط إلى أنه يجب توثيق عناصر المخطط ، ولكن أيضًا مع المحتوى والصياغة.
- توثيق بنية عناصر واحد أو أكثر من مخططات XSD مع "توثيق" غير معبأ أو ممتلئ جزئيًا - هذا الخيار أكثر تعقيدًا. هذه مخططات طورتها فرق أخرى. غالبًا ما تأتي مثل هذه المخططات بانتظام من جانب "كما هي" ولا يمكننا تقديم أي مطالب عليها. في هذه الحالة ، يمكن فقط أخذ الهيكل من الدائرة نفسها ، ويجب إضافة وصف العناصر مع الأقلام.
- مقارنة بين بنية عناصر مخططات XSD من إصدارات مختلفة - لدينا مخططات ووصفها ، والآن تغيرت المخططات وتحتاج إلى تحديث الوصف أو الحصول على معلومات حول التغييرات. يمكن أن تتغير المخططات بشكل كبير سواء عند إضافة العناصر أو إزالتها ، أو بشكل تجميلي بحت ، عندما تتم إزالة مساحة إضافية في التعليق وتغيير المجموع الاختباري للملف. بشكل منفصل ، يجب ملاحظة الحالة عندما تتم إعادة كتابة المخطط باستخدام قالب آخر - في هذه الحالة ، لا يتغير شيء من وجهة نظر البيانات ، ولكن لا يمكنك معرفة النموذج القديم إلا من خلال قضاء الكثير من الوقت عليه أو استخدام برنامج خاص. بالنظر إلى أن المخططات يمكن أن تأتي في حزم المئات ، يصبح من الواضح أن مقارنة المخططات بالعينين مهمة صعبة للغاية وتستهلك موارد كثيرة.
بالنسبة للنتيجة ، على مدى سنوات عديدة من العمل مع المخططات ووثائقها ، قمت بتطوير فهمي الخاص لما يجب أن تكون عليه نتيجة وصف تنسيقات الرسائل ، والتي تسمى "من المحراث". يمكن وصف أساس المفهوم في ثلاث نقاط فقط:
- الدائرة نفسها ثانوية - البيانات الأولية. أثناء التطوير ، لا نحتاج إلى وصف للمخطط على هذا النحو - نحن بحاجة إلى وصف للبيانات التي يصفها هذا المخطط. في الواقع ، نحتاج إلى وصف لتنسيق العناصر في الشكل الذي تكون فيه في رسالة XML ، أو في مخطط XSD الذي تم تطويره باستخدام قالب تصميم الدمية الروسية (لمزيد من التفاصيل حول قوالب التصميم ، راجع المقالة " قوالب تصميم XSD " ) في هذا الشكل ، من الملائم مناقشة المخطط أثناء التطوير وبعد ذلك بكثير ، أثناء التكامل أو الصيانة. هذا ما يريد العميل رؤيته في الوثائق الفنية.
- يجب أن يكون وصف التنسيقات جدولًا بسيطًا ومفهومًا يمكن لكل من المطورين المحترفين وأولئك الذين يتعلق بهم كل شيء يتعلق بالتطوير نوعًا من "السحر" أن يعملوا بنفس السهولة. سيكون هناك دائمًا شخص ما ، كونه مصدرًا حاسمًا أو مستهلكًا للمعلومات بالنسبة لك ، يضغط بإصبع على دائرة XSD ويقول: "ما هذا ؟؟؟".
- يجب وصف جميع العناصر في ألبوم التنسيق مرة واحدة. هذا يعني أنه عند وصف أي عنصر يتم أخذه في مخطط XSD منفصل ، يجب وصف هذا العنصر فقط في الجدول. لا حاجة لسحب تنسيق رسالة SOAP بأكمله هناك ، لا حاجة لتوسيع الأنواع الموضحة في المخططات المستوردة. سيمنع هذا النهج المستند من الانتفاخ إلى أبعاد غير لائقة ويتم قراءته بشكل أفضل ، وإذا لزم الأمر ، قم بإضافة معلومات إضافية حول أي عنصر ، ستحتاج إلى القيام بذلك في مكان واحد!
ما هو وصف التنسيقات في المستند؟ في هذه العملية ، تم تغيير الجدول الذي يحتوي على وصف تنسيقات عناصر مخطط XSD بشكل متكرر ، من خلال مجموعة الأعمدة وحشوها حتى تلقيت الأعمدة الموضحة في ما يلي:
- "رقم p / p" - يظهر هنا وضع العنصر في الرسم التخطيطي في شكل قائمة متعددة المستويات.
- "اسم العنصر ونوعه" - تظهر البيانات التي تظهر العنصر هنا - اسم العنصر ونوعه.
- "وصف العنصر" - يتم عرض بيانات العمل على العنصر هنا - وصفه من وجهة نظر العمل.
- "قواعد الملء" - البيانات الفنية معروضة هنا: قواعد لملء عنصر وتنسيق البيانات وأمثلة على القيم وما إلى ذلك.
- "Mn." - قوة العنصر موضحة هنا - الالتزام والتعدد وإمكانية اختيار عنصر.
ويرد أدناه وصف لوصف التنسيقات في قسم "الحل" ...
5. إيجاد حل
بناءً على سيناريوهات الاستخدام والنتيجة المرغوبة ، تم تشكيل المتطلبات الأساسية لوظائف الأداة التي يجب أن تعمل على أتمتة هذا النشاط:
- توليد أوصاف تنسيقات العناصر لنظام XSD المحدد.
- إنشاء أوصاف تنسيقات العناصر لجميع مخططات XSD في المجلد المحدد والمجلدات الفرعية الخاصة به.
- مقارنة وصف تنسيقات العناصر للمخطط المحدد (أو المخططات في المجلدات) وإصداره السابق.
- إثراء وصف تنسيقات العناصر في مستند الإخراج باستخدام أوصاف العناصر المحددة في ملف منفصل.
- جلب وصف تنسيقات العناصر إلى عرض واحد في بنية قالب Matryoshka ، بغض النظر عن القالب المستخدم في تصميم مخططات XSD.
على الرغم من انتشار استخدام XSD والعدد الكبير من البرامج التي تعمل معها ، ما زلت لم أجد أداة تلبي على الأقل هذه المتطلبات جزئيًا.
ومع ذلك ، كانت المشكلة أكثر صلة من أي وقت مضى وتم إنشاء مثل هذه الأداة ...
6. القرار
بالنسبة لأولئك الذين يرغبون في النظر إلى الأداة ، سأقدم روابط لها في التعليقات بعد المقالة ، ولكن في إطار المقالة ، من المثير للاهتمام أن ننظر إلى النتيجة ، كمثال لتوثيق تنسيقات الرسائل.
6.1. مثال على معالجة مخطط موثق
هنا نتيجة وصف تنسيقات العناصر التي تم الحصول عليها من مخطط XSD مع ملء "الوثائق".
6.1.1. دارة المصدر
عنوان المفسد<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/Customer" xmlns:tns="http://www.example.org/Customer" elementFormDefault="qualified"> <xsd:annotation> <xsd:documentation> .</xsd:documentation> </xsd:annotation> <xsd:element name="Customer"> <xsd:annotation> <xsd:documentation>.</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="CustomerId" type="xsd:int"> <xsd:annotation> <xsd:documentation>ID .</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="FirstName" type="xsd:string"> <xsd:annotation> <xsd:documentation>.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="LastName" type="xsd:string"> <xsd:annotation> <xsd:documentation>.</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="Address"> <xsd:annotation> <xsd:documentation>.</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:sequence> <xsd:element name="StreetAddress" type="xsd:string"> <xsd:annotation> <xsd:documentation> .</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="City" type="xsd:string"> <xsd:annotation> <xsd:documentation> .</xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="Zip" type="xsd:string"> <xsd:annotation> <xsd:documentation> . >>> .</xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
6.1.2. النتيجة

6.2. مثال الوصف الخارجي
فيما يلي نتيجة وصف تنسيقات العناصر التي تم الحصول عليها من مخطط XSD مع وثائق فارغة.
6.2.1. دارة المصدر
عنوان المفسد <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/Customer" xmlns:tns="http://www.example.org/Customer" elementFormDefault="qualified"> <xsd:element name="Customer"> <xsd:complexType> <xsd:sequence> <xsd:element name="CustomerId" type="xsd:int" /> <xsd:element name="FirstName" type="xsd:string" /> <xsd:element name="LastName" type="xsd:string" /> <xsd:element name="Address"> <xsd:complexType> <xsd:sequence> <xsd:element name="StreetAddress" type="xsd:string"/> <xsd:element name="City" type="xsd:string"/> <xsd:element name="Zip" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
6.2.2. بيانات ملف الوصف الخارجية
عنوان المفسد \matr . Customer . CustomerId ID . FirstName . LastName . Address . StreetAddress . City . Zip . >>> .
6.2.3. النتيجة

يرجى ملاحظة أن النتيجة التي تم الحصول عليها مطابقة تمامًا لنتيجة معالجة المخطط الموثق!
6.3. مثال لمقارنة نظامين
فيما يلي وصف لتنسيقات العناصر التي تم الحصول عليها من خلال مقارنة الإصدارات المختلفة من مخطط XSD.
6.3.1. دارة المصدر
عنوان المفسد <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/Customer" xmlns:tns="http://www.example.org/Customer" elementFormDefault="qualified"> <xsd:element name="Customer"> <xsd:complexType> <xsd:sequence> <xsd:element name="CustomerId" type="xsd:int" /> <xsd:element name="FirstName" type="xsd:string" /> <xsd:element name="LastName" type="xsd:string" /> <xsd:element name="Address"> <xsd:complexType> <xsd:sequence> <xsd:element name="StreetAddress" type="xsd:string"/> <xsd:element name="City" type="xsd:string"/> <xsd:element name="Zip" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
6.3.2. النسخة السابقة من المخطط
عنوان المفسد <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/Customer" xmlns:tns="http://www.example.org/Customer" elementFormDefault="qualified"> <xsd:element name="Customer"> <xsd:complexType> <xsd:sequence> <xsd:element name="CustomerId" type="xsd:int" /> <xsd:element name="FullName" type="xsd:string" /> <xsd:element name="Address"> <xsd:complexType> <xsd:sequence> <xsd:element name="StreetAddress" type="xsd:string"/> <xsd:element name="City" type="xsd:string"/> <xsd:element name="Country" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
6.3.3. النتيجة

تحتوي عناصر FirstName و LastName و Zip الجديدة على جميع الأعمدة بالخط العريض. تم تغيير موضع عنصر "العنوان" - تم تمييز العمود الأول فقط بالخط العريض. تم حذف عناصر "FullName" و "Country" المحذوفة. تساعد خلفية الخطوط أيضًا على "قراءة" التغييرات.
هذا العرض التقديمي يجعل من السهل قراءة الاختلافات على الشاشة والطباعة.
7. الملخص
الآن ، لإنشاء نسخة جديدة من ألبوم التنسيقات لعدة مئات من دوائر XSD ، لا يستغرق الأمر سوى بضع دقائق. يتم الحصول على ملف الإخراج بتنسيق مستند Word بحجم 1500 ورقة تقريبًا. اختفت مشاكل الأخطاء في الوصف ، والأهم من ذلك ، عدم أهمية وصف المخططات. وبالتالي ، اتضح أنه أتمتة واحدة من أكثر المجالات كثافة في العمالة في إدارة تطوير التطبيقات بنجاح.