1c xml استنادًا إلى مثال مخطط xsd. وصف موجز لإنشاء ملف XML باستخدام مخطط XSD باستخدام مثال إنشاء تحميل التقارير الإحصائية لدائرة الجمارك الفيدرالية. إضافة حزمة XDTO

حاشية. ملاحظة: مخططات بيانات XML (XSD). إنشاء مخطط XSD في Visual Studio .NET. إنشاء كائن DataSet مكتوب. الحصول على معلومات حول بنية كائن DataSet. تحميل مستندات XML ومخططات XSD إلى كائنات DataSet المكتوبة والعادية. أساليب ReadXml وReadXmlSchema. تسجيل محتوى وبنية كائن DataSet المكتوب والعادي. أساليب WriteXml وWriteXmlSchema

كائن DataSet المكتوب. قراءة وكتابة مستندات XML

مخططات بيانات XML (XSD)

مخططات البيانات 1 الترجمة الدقيقة لوثيقة مخطط XML -< مخطط وثيقة XML>، ومع ذلك سنستمر في استخدام المصطلح "مخطط بيانات XML". XSD (مستند مخطط XML، XSD) هي طريقة بديلة لإنشاء قواعد لمستندات XML. بالمقارنة مع DTDs، تعد المخططات أكثر قوة في تحديد هياكل البيانات المعقدة، وتوفر طريقة أوضح لوصف قواعد اللغة، ويمكن تحديثها وتوسيعها بسهولة. يمكن أن يحتوي مخطط XSD على المعلومات التالية:

  • تمثيل العلاقات بين عناصر البيانات، على غرار علاقات المفاتيح الخارجية بين الجداول في قاعدة البيانات العلائقية؛
  • تمثيل معرفات فريدة مشابهة للمفتاح الأساسي؛
  • مواصفات النوعبيانات لكل عنصر وسمة على حدة في مستند XML.

لإنشاء مخطط بيانات في Visual Studio .NET، انتقل إلى File\New\File في القائمة الرئيسية وحدد مخطط XML من قائمة القوالب (انظر الشكل 11.3). تظهر نافذة تقول "للبدء، اسحب الكائنات من نافذة Server Explorer أو Toolbox إلى مساحة العمل (منطقة التصميم) أو انقر بزر الماوس الأيمن" (الشكل 11.1):


أرز. 11.1.

النقطة المهمة هي أننا في وضع التصميم. قم بالتبديل إلى وضع التعليمات البرمجية بالنقر فوق الزر (XML):

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

ومع ذلك، فإن أدوات التصور المدمجة في الاستوديو تفترض وجود هذا "الرأس"، لذا لا ينبغي إزالته. يعد إنشاء مخطط يصف مستند XML محددًا في Visual Studio .NET مهمة بسيطة إلى حد ما. لنقم بإنشاء مستند XMLEasy.xml التالي:

1

ننتقل إلى علامة التبويب (البيانات) ونرى إدخالاً واحدًا فقط (الشكل 11.2).


أرز. 11.2.

يمكنك إنشاء مخطط يصف هذا المستند بعدة طرق: في القائمة الرئيسية، حدد عنصر "XML \ Create Schema" (الشكل 11.3، أ)، في وضع XML، حدد نفس العنصر في قائمة السياق (الشكل 11.3). 11.3، B)، في وضع XML، حدد نفس العنصر في قائمة السياق (الشكل 11.3، B)، في البيانات، حدد هذا العنصر في قائمة السياق (الشكل 11.3، C)، وأخيرًا، في وضع البيانات، انقر فوق زر شريط أدوات XML (الشكل 11.3، د).


أرز. 11.3.

على أي حال، يظهر مخطط الوثيقة في شكل جدول (الشكل 11.4). لنترك وضع المخطط الآن وننتقل إلى وضع (XML).


أرز. 11.4.

أنشأت البيئة رمز XML يصف بنية المستند:

يتضمن هذا أيضًا الوصف المطلوب لمعالجة المخطط بشكل أكبر باستخدام كائنات ADO .NET. في مستند XMLEasy.xml المصدر، ظهر رابط لمخطط البيانات:

تم إنشاء مستند XMLEasy.xsd تلقائيًا في نفس الدليل الذي يوجد به XMLEasy.xml.

لكي تتعلم كيفية فهم مخططات XSD، يجب عليك أولاً العمل على وصف البيانات في شكلها النقي، دون عناصر إضافية. يعرض الجدول 11.1 العديد من مستندات XML البسيطة ومخططاتها، التي تم إنشاؤها دون الارتباط بكائنات ADO .NET.

الجدول 11.1. أمثلة على إنشاء مخططات XSD
محتويات وثيقة XML محتويات مخطط XSD

1

وصف
في مستند XMLEasy.xml، يعتبر عنصر TOUR هو العنصر الجذر الذي يحتوي على عنصر IDTOUR الفرعي. المخطط العام للعنصر الجذر هو كما يلي:

: محتوى العنصر...

يتم وصف العناصر الفرعية على النحو التالي:

محتويات وثيقة XML محتويات مخطط XSD

1 قبرص 25000.00 روبل روسي سعر قسيمتين للبالغين يشمل سعر طفل واحد (حتى عمر 7 سنوات) 2 اليونان 32000.00 روبل روسي يتم تطبيق خصومات خاصة في شهري أغسطس وسبتمبر 3 تايلاند 30.000.00 روبل روسي لا تشمل تذاكر الطيران 4 إيطاليا 26000.00 روبل روسي يتم تضمين وجبة الإفطار في الفندق في سعر الجولة 5 فرنسا 27000.00 روبل روسي لا يتم تضمين الرحلات الإضافية في سعر الجولة

وصف
يحتوي عنصر TABLE الجذر على عنصر TOUR، والذي يتكون بدوره من مجموعة من العناصر الفرعية. يتحكم عنصر الاختيار في تحديد العناصر الأخرى، حيث تشير القيمة "غير المحدودة" للسمة maxOccurs إلى أن مجموعات TOUR يمكن أن تكون غير محدودة.

: :

محتويات وثيقة XML محتويات مخطط XSD

1 قبرص 25000.00 روبل روسي 1 سعر قسيمتين للبالغين يشمل سعر طفل واحد (حتى عمر 7 سنوات)


أرز. 11.5.
وصف
تم تعيين نوع بيانات عنصر IDTOUR على int، وتم تعيين نوع بيانات العنصر CLOSED على boolean، وتم تعيين الباقي على نوع بيانات السلسلة الافتراضية. يمكنك تغيير نوع البيانات مباشرة في وضع مخطط بيانات XML، ولكنه أكثر ملاءمة لاستخدام وضع المخطط (في هذه الحالة سيتم تسمية الوضع DataSet) حدد نوع البيانات من القائمة المنسدلة (الشكل 11.5) :

ستجد في برنامج الدورة كافة الملفات الخاصة بهذا الجدول في مجلد XSD (Code\Grav5\XSD).

يعد تعيين نوع البيانات في مستند XML (الجدول 11.1 هو أحدث مثال) إحدى الطرق للحد من المحتوى. يتم استخدام سمات إضافية لتقييد قيمة نوع معين. في جزء المخطط التالي، يجب أن تكون قيمة عنصر PRICE بين 50 و100:

لتحديد مستند XML ببعض القيم الثابتة، استخدم البنية التالية:

هنا يمكن لعنصر NAME أن يأخذ قيمة ثابتة واحدة فقط من بين خمسة أسماء بلدان.

يتطلب تطوير مخطط XSD الكثير من العمل. الأدوات المرئية في Visual Studio .NET تجعل هذه المهمة أسهل بكثير. لإتقان المفاهيم الأساسية، يُنصح بتعلم العديد من مخططات مستندات XML التي يتم إنشاؤها تلقائيًا. توفر الجداول 11.2-11.4 وصفًا للعناصر والصفات الرئيسية التي يمكن مواجهتها.

الجدول 11.2. عناصر مخطط XSD
عنصر وصف
الجميع يمكن تعريف العناصر المتداخلة بأي ترتيب
حاشية. ملاحظة العنصر الأصلي لعناصر التعليق و
أي أي عناصر متداخلة
AnyAttribute أي الصفات
معلومات التطبيق عنصر التعليق يحدد عنوان المخطط
يصف يصف
attributeGroup مجموعة السمات
خيار اختيار عناصر أخرى. التناظرية للمشغل "|" في دي تي دي
complexContent القيود أو ملحقات النموذجنوع المحتوى المعقد
complexType عنصر معقد
توثيق عنصر التعليق يوفر معلومات حول المخطط
عنصر عنصر
امتداد امتدادات العناصر
مجال تصريح ميداني. ينطبق داخل عنصر لتحديد الحقول
مجموعة مجموعة من العناصر
يستورد استيراد إعلان النوع من مخطط آخر
يشمل تضمين مخطط مختلف في مساحة اسم موجودة
مفتاح تحديد عنصر أو سمة بمفتاح يشير إلى عنصر آخر
keyref تحديد العنصر أو السمة التي يشير إليها المفتاح
قائمة عنصر يمكن أن يحتوي على قائمة من القيم
إعادة تعريف تجاوز العناصر المعلنة بالفعل
تقييد قيد العنصر
مخطط العنصر الجذر للمخطط
محدد محدد لاختيار عناصر XML
تسلسل تسلسل العناصر الأخرى. التناظرية للمشغل "،" في DTD
محتوى بسيط نموذج تمثل محتوياته بيانات الأحرف فقط
simpleType عنصر بسيط
اتحاد عنصر أو سمة يمكن أن يكون لها معاني متعددة
فريد عنصر أو سمة يجب أن يكون لها قيمة فريدة
الجدول 11.3. السمات - قيود مخطط XSD
يصف وصف
قائمة القيم
طول طول
الحد الاقصى للطول الحد الأقصى لطول
طول دقيقة الحد الأدنى للطول
maxExclusive القيمة القصوى
maxInclusive القيمة القصوى شاملة
minExclusive الحد الأدنى للقيمة
minInclusive الحد الأدنى للقيمة شامل
FractionDigits عدد المنازل العشرية في الأعداد الكسرية
TotalDigits عدد الأرقام
نمط عينة (نمط) لمحتويات العنصر
تقصير العنصر الافتراضي أو قيمة السمة
elementFormDefault تحديد خصائص العنصر المحلي كما هو محدد عالميًا
مُثَبَّت عنصر ثابت أو قيمة السمة
استمارة يتم تعريف العناصر المعلنة محليًا في حالات مستند محددة
نوع العنصر نوع عنصر القائمة
أنواع الأعضاء نوع الأعضاء المستخدم في الاتحاد
maxOccurs الحد الأقصى لعدد مرات ظهور العنصر
minOccurs الحد الأدنى لعدد مرات ظهور العنصر
مختلط تحديد عنصر له نوع مختلط
اسم اسم العنصر أو السمة
مساحة الاسم مساحة الاسم
noNamespace تحديد موقع المستند التخطيطي،
موقع المخطط عدم وجود مساحات الأسماء الناتجة
لا شيء تحديد أن العنصر يمكن أن يحتوي على قيمة NULL فارغة (لا شيء)
المرجع تحديد مرجع لعنصر محدد عالميًا
schemaLocation تحديد موقع الدائرة
substitutionGroup -تحديد استبدال العناصر بعناصر أخرى
targetNamespace مساحة اسم المخطط الناتجة
يكتب نوع العنصر
يستخدم هل العنصر مطلوب أم لا؟
قيمة قيمة العنصر التخطيطي
الحادي عشر: لا شيء تعيين المحتوى الفعلي لعنصر فارغ (NULL) في مستند XML
xsi:schemaLocation الموقع الفعلي للعنصر في مستند XML
xsi:اكتب النوع الفعلي للعنصر في مستند XML

ظهرت مهمة إنشاء ملف XML بناءً على مخطط XSD. أدى البحث في المنتديات إلى عدد كبير من المناقشات المتعلقة بسوء فهم العملية، ولم يشرح الجوهر سوى مقالتين فقط. طرح الناس الأسئلة، وكافحوا من أجل الحل، ولكن بعد أن استسلمت لهم المشكلة، اختفوا ببساطة دون وصف الآلية. دفع هذا إلى إنشاء وصف بسيط للعملية.
ملاحظة. لا تقسم كثيرًا، لم يكن هدفي إنشاء نوع من المقالات العلمية باستخدام المصطلحات الصحيحة بشكل صارم، ولكن ببساطة المساعدة في اتخاذ الخطوة الأولى نحو فهم آلية التبادل القوية جدًا عبر XML.
P.S. يجب أن أحجز على الفور أن ملف التحميل المرفق بالمقالة هو مجرد قالب يقوم بإنشاء جزء فقط من بنية ملف XML المطلوبة، لأنه كان عملي في هذا التنزيل تعليميًا بطبيعته (يبدو أن نسخ مستند التصدير السابق على موقع FCS وتنزيل الجزء الجدولي فقط من المنتجات من ملف Excel هو الحل الأكثر فعالية)، ولم يسمح لي ضيق الوقت بذلك لي أن أكمل إنشاء الهيكل بأكمله، بناءً على اعتبارات الكمال فقط.

لذلك، بعد التسجيل على موقع FCS، أصبح من الواضح أنه من أجل إنشاء وثائق التقارير الإحصائية عن الصادرات، من الضروري تنزيل البيانات من مستندات إدارة تجارة السلع والخدمات وإنشاء ملف للتنزيل.

هناك خياران ممكنان للتنزيل.

أولاً: تحميل الجزء الجدولي بالمنتجات من ملف Excel (تم اختيار هذا الخيار كخيار عمل، لأنه يتمتع بمزايا عدم الحاجة إلى الاهتمام بمعالجة "رأس" المستند، ولكن يمكنك ببساطة نسخ السابق، وتغييره في "الرأس" "ما هو مطلوب).

ثانياً: إنشاء ملف XML حسب المخطط الذي تم تنزيله من موقع FCS على شكل "ألبوم تنسيقات نماذج المستندات الإلكترونية". يحتوي الألبوم على عدد كبير إلى حد ما من مخططات XSD. وعثروا على رسم تخطيطي لـ "النموذج الإحصائي للمحاسبة عن حركة البضائع" وملفات إضافية مع وصف الأنواع الخاصة به. يتم إرفاق المخططات بالمقال الموجود في الأرشيف مع المعالجة.

لعرض مخططات XSD، استخدمنا برنامج Microsoft XML Notepad 2007 المجاني.

تُظهر الصورة الملف الرئيسي مع مخطط XSD "النموذج الإحصائي للمحاسبة عن حركة البضائع". تسلط الصورة الضوء على الكتل الرئيسية لمخطط XSD والتي نحتاج إلى فهمها.

يتضح من الرسم البياني أننا بحاجة إلى الحصول على ملف XML مملوء بالبنية المحددة في فرع "xs:element" من النوع StaticFormType.

يمكن أن يكون الهيكل معقدًا جدًا (كما في حالتنا). مع وجود أوصاف النوع مباشرة في الفرع، أو وضعها في فرع منفصل، أو حتى وضعها في ملف آخر.

تحتوي هذه البنية على نوع StaticFormType، والذي يتكون بدوره من نوع BaseDocType الأساسي، ومجموعة من الكائنات ذات الأنواع المختلفة وسمات النص.

يتم تعريف النوع الأساسي BaseDocStyle في ملف مختلف (ومساحة اسم)
.

يحتوي هذا الملف على الكثير من الأنواع غير المستخدمة في حالتنا.

الآن دعنا ننتقل إلى العمل في 1C. باختصار، ما يتعين علينا القيام به يتلخص في ما يلي:

1. يتم الآن إنشاء مصنع XDTO

OurFactoryXDTO = CreateFactoryXDTO(ArrayFullFileNamesWithXSDSchemas);

2. في مصنع XDTO، يتم إنشاء جميع أنواع البيانات المعقدة، والتي سنقوم بعد ذلك بملءها في ملف XML الذي تم إنشاؤه:

StaticFormType = MyFactoryXDTO.Type("urn:customs.ru:Information:CustomsDocuments:StaticForm:5.4.0"، "StaticFormType");

يمكن الحصول على أنواع البيانات المتضمنة في نوع معين من مجموعة خصائصه:

CUOrganizationType = StaticFormType.Properties.Get("Consignee").Type; NameType = CUOrganizationType.Properties.Get("اسم المؤسسة").Type; ShortNameType = CUOrganizationType.Properties.Get("ShortName").Type; LanguageCodeType = CUOrganizationType.Properties.Get("OrganizationLanguage").Type;

3. عندما يتم إنشاء جميع أنواع البيانات المعقدة، نقوم بإنشاء بنية ملف XML بناءً عليها، والتي تتكون من كائنات XDTO Factory:

StaticFormType_XDTOObject = MyXDTOFactory.Create(StaticFormType); // مجموعة المستندات NewDocuments = MyFactoryXDTO.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "Waybill"); NewDocuments.PrDocumentNumber = MyFactoryXDTO.Create(PrDocumentNumberType, "123-number"); NewDocuments.PrDocumentDate = MyFactoryXDTO.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(NewDocuments);

في الوقت نفسه، املأ التفاصيل الأولية (الأنواع البسيطة).

4. وأخيرًا، نقوم بتفريغ كل شيء من مصنع XDTO في ملف:

ملف XML = إدخال XML جديد ()؛ FileXML.OpenFile(FileName); FileXML.WriteXMLDeclaration(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

ملاحظة. يحتوي الأرشيف على ملف قالب تحميل بتنسيق XML (يتم إنشاء بعض التفاصيل فقط، مما يعكس جميع الحالات التي يتم فيها ملء الملف) ومخططات XSD.

قم بفك ضغط جميع الملفات في دليل معين.

سيتم إنشاء XML فيه.

يحظى تنسيق XML بشعبية كبيرة عند تبادل المستندات النصية المختلفة بين أنظمة المعلومات. القدرة على إنشاء بنية فريدة للمستندات تسمح باستخدامها في العديد من المجالات - المكتبات الإلكترونية، والويب، والاستيراد/التصدير، وغيرها الكثير. بدون القدرة على العمل بشكل ملائم مع هذا التنسيق، لم تكن أنظمة 1C لتكتسب هذه الشعبية. نظرًا لأن 1C تستخدم تقنيات الويب بشكل نشط، يجب أن يكون كل مطور قادرًا على قراءة XML وكتابة المعلومات فيه.

تمثيل ملف XML وقراءته

إحدى المزايا الرئيسية للغة ترميز XML هي بنيتها وتركيبها المريح والبديهي إلى حد ما. عند إنشائها، حدد المؤلفون هدفًا يتمثل في إنشاء لغة ترميزية يسهل قراءتها من قبل كل من البشر وأجهزة الكمبيوتر. اليوم، تم تطوير لغة XML على نطاق واسع إلى تنسيقات أخرى، ولكنها لا تزال شائعة ومستخدمة على نطاق واسع. تم إنشاء بنية ملف XML وفقًا للمخطط التالي:

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

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

  1. الإعلان عن الآليات التي يتم من خلالها قراءة ملف XML؛ حلقة لاجتياز العقد؛
  2. قراءة البيانات والسمات في العقدة؛
  3. إخراج المعلومات. إذا لزم الأمر، في هذه المرحلة يمكن أن تتم الكتابة في المتغيرات أو مباشرة في الجداول الضرورية؛
  4. الانتهاء من الآلية.
&OnServer الإجراء ReadOnServer(PathToFile) // إعلان آليات آلية القراءة = New ReadingXML; Reader.OpenFile(PathToFile); Builder = New BuilderDOM; المستند = Builder.Read(Reader); // حلقة لاجتياز العقد لكل عنصر من Document.DocumentElement.ChildrenNodes حلقة // قراءة البيانات إذا كان element.NodeName = "Product" ثم المنتج = element؛ لكل قيمة من دورة المنتج.ChildrenNodes إذا كانت القيم.NodeName = "الاسم"، ثم الاسم = القيم؛ Color = Name.Attributes.GetNamedElement("Color"); ElseIfvalues.NodeName = "السعر" ثم التكلفة = القيم؛ العملة = Cost.Attributes.GetNamedItem("Currency"); إنهاء إذا؛ EndCycle; // رسائل الإخراج Notify("Name: " + Name.TextContent + "; color: "+Color.Value +"; السعر: "+Cost.TextContent + "; العملة: "+Currency.Value); إنهاء إذا؛ EndCycle; // إغلاق الآلية Non-MechanismReading.Close(); نهاية الإجراء

ونتيجة لذلك، فإننا نعرض رسائل للمستخدم مع البيانات المستوردة. يمكنك أيضًا وضع جميع البيانات في البنية المطلوبة، وبناءً عليها، يمكنك برمجة إنشاء مستند أو إدخالات في الدليل. سرعة عمل 1C مع XML عالية جدًا، لذلك يتم استخدام هذا التنسيق بشكل متزايد عند تبادل البيانات مع مصادر أخرى.

لتحميل المعلومات، سنحتاج أيضًا إلى التفاعل مع ملفات XML. دعونا نلقي نظرة على مثال للسجل باستخدام سجل XML لكائن النظام الأساسي 1C وتحميل البيانات على العنصر. مزاياه الرئيسية هي بساطة الكود وسرعة معالجة البيانات. يمكن تمثيل خوارزمية جانب الخادم لكتابة ملف XML في عدة خطوات متسلسلة:

  1. الاتصال بملف XML؛
  2. نقوم بإنشاء عناصر الرأس وكتابة البيانات لهم. إذا كنت ترغب في تحميل كمية كبيرة من المعلومات إلى ملف XML، فستستخدم الحلقات في هذه المرحلة. كن حذرًا وتذكر أنه يجب تقديم طلب البيانات قبل الحلقة، وليس فيها؛
  3. أغلق الملف.
// افتح الملف Nomenclatura.xml واكتب عنصر الرأس RecordVFile = New RecordXML(); WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); WriteInFile.3writeStartItem("المنتجات"); // حدد بيانات السجل SelectionFromDirectory = Directorys.Nomenclature.Select(); // الدورة التي يحدث فيها التسجيل أثناء دورة SelectingFromDirectory.Next() // كتابة بيانات جديدة RecordToFile.RecordStartofElement("Product"); RecordInFile.RecordAttribute("Name"، SelectionFromDirectory.Name); WriteToFile.WriteAttribute("InitialPrice"، Line(SelectionFromDirectory.InitialPrice)); WriteToFile.WriteEndElement(); EndCycle; // أغلق عنصر الرأس والملف WriteVFile.WriteEndElement(); WriteInFile.Close();

آلية XDTO في 1C

أنشأ مطورو شركة 1C آليتهم الخاصة لتبادل المعلومات عبر XML - XDTO (كائنات نقل بيانات XML). بدءًا من الإصدار 8.1، تتمتع المنصة بالقدرة على تبادل البيانات مع الأنظمة الأخرى دون الخوض في مشكلات إنشاء ملف XML. يتم التعامل مع معظم المشكلات الفنية بواسطة 1C، وكل ما يتعين علينا فعله هو الإشارة إلى البيانات اللازمة لإنشاء XML. صحيح أن هذا يحتاج المطور إلى القيام ببعض التلاعبات مسبقًا.

لتحميل ملف XML باستخدام XDTO، يجب أن نخبر 1C ببنية الملف. يتم نقله من خلال مجموعة من المخططات التي يمكن إنشاؤها في محرر نصوص أو باستخدام برنامج متخصص. يجب أن يصف الملف الناتج البنية العامة وأنواع البيانات المستخدمة في ملف XML. قبل قراءة أو كتابة XML جديد، يجب على المطور تحميل مخططه في التكوين ضمن حزم XDTO.

في هذه الحالة، سنقوم بإنشاء حزمة بسيطة يدويًا حتى يفهم 1C بنية ملف المثال الخاص بنا. لكي يكتمل إنشاء الملف بنجاح، نحتاج إلى أن نعكس في المخطط أن لدينا عنصر رأس ومرفقًا به سمات. يجب تصدير المخطط الذي تم إنشاؤه إلى ملف بتنسيق xsd ونقله مع xml، حتى لا يحتاج الطرف الآخر إلى التعامل مع البنية وإنشاء حزمة xdto مرة أخرى.


ستساعدك خوارزمية الخادم المشابهة للخوارزمية السابقة على حفظ ملف XML الجديد على محرك الأقراص الثابتة لديك. والفرق الوحيد هو الحاجة إلى إضافة بيانات منتج واحد إلى مصنع XDTO - وهي آلية خاصة لمنصة 8.3 1C. إذا كانت هناك حاجة لإنشاء المزيد من مستويات التداخل، فسيتعين عليك وصف كل عنصر رئيسي.

// افتح ملف XML RecordVFile = New RecordXML; WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); // أشر إلى 1C نوع البيانات التي يجب إنشاؤها - عنصر الرأس AllProducts = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org"،"Products")); // حدد البيانات للتحميل SelectionFromDirectory = Directorys.Nomenclature.Select(); // أضف منتجات فردية إلى عنصر الرأس أثناء التحديد من دورة Directory.Next() Product = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org"،"Product")); اسم المنتج = اختر من اسم الدليل؛ Product.InitialPrice = String(SelectionFromDirectory.InitialPrice); AllProducts.Add(Product); EndCycle; // اكتب البيانات وأغلق الملف FactoryXDTO.WriteXML(WriteToFile, AllProducts); WriteInFile.Close();

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

سيوضح لك هذا الفصل كيفية كتابة مخططات XML. سوف تتعلم أيضًا أنه يمكن كتابة المخطط بطرق مختلفة.

وثيقة XML

دعونا نلقي نظرة على مستند XML هذا المسمى "shiporder.xml":

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
جون سميث

علا نوردمان

لانجت 23

4000 ستافنجر
النرويج


الإمبراطورية هزلية
طبعة خاصة
1
10.90


إخفاء قلبك
1
9.90

يتكون مستند XML أعلاه من عنصر جذر، "shiporder"، والذي يحتوي على سمة مطلوبة تسمى "orderid". يحتوي عنصر "shiporder" على ثلاثة عناصر فرعية مختلفة: "orderperson" و"shipto" و"item". يظهر عنصر "الصنف" مرتين، ويحتوي على عنصر "العنوان"، وعنصر "ملاحظة" اختياري، وعنصر "الكمية"، وعنصر "السعر".

السطر أعلاه: Xmlns: XSI = "http://www.w3.org/2001/XMLSchema-instance" يخبر محلل XML بأنه يجب التحقق من صحة المخطط لهذا المستند. السطر: XSI: noNamespaceSchemaLocation = "shiporder.xsd" يشير إلى مكان وجود المخططات (وهنا يوجد في نفس المجلد مثل "shiporder.xml") .

إنشاء مخطط XML

نريد الآن إنشاء مخطط لمستند XML أعلاه.

سنبدأ بفتح ملف جديد، والذي سنسميه "shiporder.xsd". لإنشاء مخطط، يمكننا ببساطة اتباع البنية الموجودة في مستند XML وتحديد كل عنصر كما نجده. سنبدأ بإعلان XML قياسي متبوعًا بعنصر xs:schema الذي يحدد المخطط:



...

في المخطط أعلاه، نستخدم مساحات الأسماء القياسية (xs)، وURI المرتبط بمساحة الاسم هذه هو تعريف لغة المخطط، الذي له القيمة القياسية http://www.w3.org/2001/XMLSchema.

بعد ذلك، نحتاج إلى تحديد عنصر "طلب الشحن". هذا العنصر له خاصية ويحتوي على عناصر أخرى، لذلك نتعامل معه كنوع معقد. العناصر الفرعية لعنصر "shiporder" محاطة بعنصر تسلسل xs: الذي يحدد تسلسلًا مرتبًا للعناصر الفرعية:




...


ثم يجب علينا تعريف عنصر "orderperson" كنوع بسيط (نظرًا لأنه لا يحتوي على أي سمات أو عناصر أخرى). النوع (xs:string) مسبوق ببادئة مساحة الاسم المرتبطة بمخطط XML، والذي يحدد نوع بيانات المخطط المحدد مسبقًا:










بمساعدة المخططات، يمكننا تحديد عدد التكرارات المحتملة لعنصر ذي سمات MaxOccurs وMinOccurs. يحدد MaxOccurs الحد الأقصى لعدد التكرارات لعنصر ما، بينما يحدد MinOccurs الحد الأدنى لعدد التكرارات للعنصر. القيمة الافتراضية لكل من MaxOccurs وMinOccurs هي 1!

الآن يمكننا تحديد عنصر "العنصر". قد يظهر هذا العنصر عدة مرات ضمن عنصر "طلب الشحن". يتم تحديد ذلك عن طريق تعيين السمة maxOccurs لعنصر "item" على "unbounded"، مما يعني أنه يمكن أن يكون هناك العديد من تكرارات عنصر "item" كما يريد المؤلف. لاحظ أن عنصر "الملاحظة" اختياري. لقد حددنا ذلك عن طريق تعيين سمة minOccurs على صفر:










الآن يمكننا الإعلان عن سمة "shiporder" للعنصر. وبما أن هذه سمة مطلوبة، فإننا نحدد use = "required".

ملاحظة: يجب أن تأتي عبارات السمات دائمًا في النهاية:

فيما يلي قائمة كاملة بملف المخطط المسمى "shiporder.xsd":





























دوائر منفصلة

طريقة التصميم السابقة بسيطة للغاية، ولكن قد يكون من الصعب قراءتها وصيانتها عندما تكون المستندات معقدة.

تعتمد طريقة التصميم التالية على تحديد جميع العناصر والسمات ثم الرجوع إليها باستخدام سمة المرجع.

إليك التصميم الجديد للملف التخطيطي ("shiporder.xsd"):








































استخدام الأنواع المسماة

تحدد طريقة التصميم الثالثة الفئات أو الأنواع، مما يسمح بإعادة استخدام تعريفات العناصر. ويتم ذلك عن طريق تسمية العناصر simpleTypes وcomplexTypes، ومن ثم الإشارة إليها من خلال سمة نوع العنصر.

هذا هو التصميم الثالث للملف التخطيطي ("shiporder.xsd"):

































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

يتم استخدام عنصر القيد في كثير من الأحيان لتطبيق القيود على العناصر. انظر إلى الأسطر التالية من الرسم البياني أعلاه:





يحدد هذا أن قيمة العنصر أو السمة يجب أن تكون سلسلة، ويجب أن تتكون من ستة أحرف بالضبط في كل سطر، ويجب أن تكون تلك الأحرف رقمًا بين 0 و9.

XDTO هي آلية 1C مطلوبة عند إنشاء خدمات الويب واستخدامها في 1C.

تسمح لك حزم XDTO 1C بوصف بنية ملف XML المطلوب لتحويل البيانات من وإلى XML.

للمهتمين، دعونا نلقي نظرة على السؤال بمزيد من التفصيل.

يتم نقل ملفات XML عبر الإنترنت ويمكن قراءتها بواسطة العديد من البرامج.

يتم إدراكها - وهذا يعني أنها مدمجة في التعليمات البرمجية الخاصة بها - إذا صادفت اسم عنصر معين في ملف XML - ففهمه على هذا النحو وافعله.

لذلك، إذا استخدمنا اسم العنصر Apple، فهناك احتمال كبير إلى حد ما أن "يعتقد" برنامج آخر أن هذا هو Apple الذي يعرفه، لكننا قصدنا شيئًا خاصًا بنا.

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

يتم تعريف مساحة الاسم (في مساحة الاسم باللغة الإنجليزية) على النحو التالي - xmlns:SpaceName = "URL"، على سبيل المثال:
xmlns:store = "http://store.ru"

لماذا تحتاج إلى عنوان URL؟

ولذلك، يتم تحديد معرف فريد، والذي يحدد أيضًا مؤلف مساحة الاسم.

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

بالمناسبة، فهي لا تشير عادةً إلى عنوان URL للموقع فحسب، بل إلى عنوان URL لمجلد معين على الموقع، بحيث يمكنك، في حالة حدوث أي شيء، إنشاء مساحة اسم أخرى في مجلد آخر على الموقع لاستخدامها في موقف مختلف.

الكائن عبارة عن بنية بيانات محددة ومكتفية ذاتيًا وتحتوي على جميع بياناتها.

نظرًا لأن البيانات المنظمة موصوفة في XML، أي في شكل بنية لها خصائصها الخاصة، وما إلى ذلك، فيمكن النظر إليها ككائنات.

في المثال المعطى، يمكن أن يكون هذا كائن LIST مع خاصية وعنصر متداخل.

DOM هي طريقة للتعامل مع ملف XML ليس كنص بتنسيق معين، ولكن كمجموعة من الكائنات ذات الخصائص والحقول وما إلى ذلك.

وصف ملف XML

إذا كنا نستخدم ملفًا ذو بنية معينة باستمرار للتبادل بين برنامجين، فربما نرغب في:

  • لاستخدام أسماء معينة
  • الحصول على تلك العناصر التي نتوقعها (والتي "يجب أن تكون موجودة لاستخدامها في تبادلنا")
  • بحيث تحتوي السمات على الأنواع التي نتوقعها (سلسلة، رقم، إلخ).

توجد معايير تنسيق الملف التالية لوصف بنية XML (والتي يتم تخزينها أيضًا في ملف نص عادي):

  • ملحق DTD – تعريف نوع المستند
  • ملحق XSD - XML ​​شيما.

يصف كلا التنسيقين الشكل الذي يجب أن تكون عليه الوثيقة. يسمى إجراء التحقق من توافق XML مع المعيار الموضح في مثل هذا الملف بالتحقق.

XDTO 1C هي أداة تسمح لك بإضافة وصف لملف XML إلى التكوين. أو بالأحرى، ليس الملف الموصوف، ولكن هياكل XML محددة.

للإشارة إلى الأنواع التي يمكن استخدامها، يتم استخدام قائمة أو مكتبة الأنواع، والتي تسمى مصنع XDTO 1C.

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

يتكون مصنع XDTO 1C نفسه من عدة حزم. يتم وصف الأنواع الأساسية في حزمة تسمى www.w3.org

يتم وصف أنواع بيانات التكوين الحالية في الحزمة http://v8.1c.ru/8.1/data/enterprise/current-config

تتم تسمية الأنواع نفسها وفقًا للاسم الموجود في أداة التهيئة مع إضافة نموذج باللغة الإنجليزية (CatalogRef، CatalogObject، DocumentRef، DocumentObject)، على سبيل المثال:

CatalogObject.Nomenclature

إضافة حزمة XDTO 1C

كل هذا يبدو رائعًا بالتأكيد. ولم نصل إلى موضوع XSLT بعد - وهو طريقة لتحويل ملفات XML إلى شيء آخر، مثل HTML. موضوع XML كبير للغاية ويصعب تغطيته حتى في كتاب منفصل.

مهمتنا هي أن نفهم أن XDTO 1C يسمح لنا بوصف العناصر التي يجب أن تحتويها حزمة XML التي يجب إنشاؤها أو قراءتها.

توجد حزم XDTO 1C في التكوين في فرع الحزم General/XDTO 1C.

يمكنك إضافة حزمة XDTO إلى 1C يدويًا (رائع!)، ولكن من الأفضل الحصول على ملف XSD المقابل مع وصف جاهز للمخطط.

يمكن الحصول على وصف لمخطط XSD للكائنات من أي تكوين من خلال النقر على فرع الحزم العامة/XDTO 1C وتحديد عنصر القائمة مخطط تكوين تصدير XML.

الملف عبارة عن نص، ويمكنك تحريره في Windows Notepad، وإزالة الكائنات غير الضرورية التي لا تحتاج إليها.

يمكنك إضافة مخطط XSD جاهز إلى 1C عن طريق النقر بزر الماوس الأيمن على فرع حزم General/XDTO 1C وتحديد عنصر القائمة Import XML Schema.

باستخدام آلية XDTO 1C

العمل مع XDTO 1C يعني تحويل القيم من وإلى XML.

يتم تنفيذ العمل باستخدام كائنات لغة 1C قراءة XML/كتابة XML.

عند العمل مع آلية XDTO 1C، يجب عليك الإشارة إلى الحزمة التي تعمل بها. يمكن أن تكون هذه حزمة قياسية (تمت مناقشتها أعلاه، راجع XDTO) أو حزمة مضافة إلى التكوين. يتم تعريف الحزمة بواسطة عنوان URL المحدد في الحزمة.

الطريقتان الرئيسيتان البسيطتان للعمل هما:

  • التسلسل - التحويل التلقائي للقيم من 1C إلى XML والعكس
  • إنشاء كائن وملء حقوله والكتابة إلى XML (وبالتالي القراءة من XML ثم قراءة حقوله).

مثال على تسلسل القيمة:
Serializer = New SerializerXDTO(FactoryXDTO);
ملف XML = إدخال XML جديد ()؛
FileXML.OpenFile("اسم الملف");
Serializer.WriteXML(XMLFile, Value1C);

مثال على قراءة/كتابة كائن:

DirectoryObjectXDTO = FactoryXDTO.Create(FactoryXDTO.Type("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Warehouses"));
fillPropertyValues(DirectoryObjectXDTO, DirectoryLink1C);