1c xml xsd sxemasi misoliga asoslangan. Federal bojxona xizmati uchun statistik hisobotni yuklashni yaratish misolidan foydalanib, XSD sxemasidan foydalangan holda XML faylini yaratishning qisqacha tavsifi. XDTO to'plami qo'shilmoqda

Izoh: XML ma'lumotlar sxemalari (XSD). Visual Studio .NET da XSD sxemasini yaratish. Terilgan DataSet obyektini yaratish. DataSet ob'ektining tuzilishi haqida ma'lumot olish. XML hujjatlari va XSD sxemalarini yozilgan va oddiy DataSet obyektlariga yuklash. ReadXml va ReadXmlSchema usullari. Terilgan va oddiy DataSet obyektining mazmuni va tuzilishini yozib olish. WriteXml va WriteXmlSchema usullari

Yozilgan DataSet obyekti. XML hujjatlarini o'qish va yozish

XML ma'lumotlar sxemalari (XSD)

Ma'lumotlar sxemalari 1 XML sxemasi hujjatining aniq tarjimasi -< XML hujjat sxemasi>, ammo biz "XML ma'lumotlar sxemasi" atamasidan foydalanishda davom etamiz. XSD (XML Schema Document, XSD) XML hujjatlari uchun qoidalarni yaratishning muqobil usuli hisoblanadi. DTD bilan solishtirganda, sxemalar murakkab ma'lumotlar tuzilmalarini aniqlash uchun kuchliroqdir, til grammatikasini tasvirlashning aniqroq usulini ta'minlaydi va osongina modernizatsiya qilinishi va kengaytirilishi mumkin. XSD sxemasi quyidagi ma'lumotlarni o'z ichiga olishi mumkin:

  • relyatsion ma'lumotlar bazasidagi jadvallar orasidagi tashqi kalit munosabatlariga o'xshash ma'lumotlar elementlari orasidagi munosabatlarni tasvirlash;
  • birlamchi kalitga o'xshash noyob identifikatorlarni ko'rsatish;
  • turi spetsifikatsiyasi XML hujjatidagi har bir alohida element va atribut uchun ma'lumotlar.

Visual Studio .NET da ma'lumotlar sxemasini yaratish uchun asosiy menyuda File\New\File bo'limiga o'ting va shablonlar ro'yxatidan XML sxemasini tanlang (11.3-rasmga qarang). “Boshlash uchun Server Explorer yoki Toolbox oynasidan obyektlarni ish maydoniga (dizayn maydoni) torting yoki sichqonchaning o‘ng tugmachasini bosing” degan oyna paydo bo‘ladi (11.1-rasm):


Guruch. 11.1.

Gap shundaki, biz dizayn rejimidamiz. Tugmani bosish orqali kod rejimiga o'ting (XML):

Birinchi qator sxemaning xs:schema ildiz elementi bo'lgan XML hujjati ekanligining tanish belgisidir. Xs prefiksi: nom maydonini ko'rsatish uchun barcha sxema elementlariga prefiks qo'yadi. Ikkinchi qatorda sxemaning uzoq, batafsil va ko'pincha mutlaqo keraksiz tavsifi mavjud (HTML sahifalari uchun shunga o'xshash kod bilan solishtiring). To'g'ri ishlash uchun o'zingizni quyidagi vakillik bilan cheklash kifoya:

Biroq, studiyaning o'rnatilgan vizualizatsiya vositalari ushbu "sarlavha" mavjudligini taxmin qiladi, shuning uchun uni olib tashlamaslik kerak. Visual Studio .NET da berilgan XML hujjatini tavsiflovchi sxemani yaratish juda oddiy vazifadir. Keling, quyidagi XMLEasy.xml hujjatini yarataylik:

1

Biz (Ma'lumotlar) yorlig'iga o'tamiz va faqat bitta yozuvni ko'ramiz (11.2-rasm).


Guruch. 11.2.

Siz ushbu hujjatni bir necha usul bilan tavsiflovchi sxemani yaratishingiz mumkin: asosiy menyuda "XML \ Sxema yaratish" bandini tanlang (11.3-rasm, A), XML rejimida kontekst menyusida xuddi shu elementni tanlang (1-rasm). 11.3, B), XML rejimida kontekst menyusida bir xil elementni tanlang (11.3-rasm, B), Data-da kontekst menyusida ushbu elementni tanlang (11.3-rasm, C) va nihoyat, Data rejimida, XML asboblar paneli tugmachasini bosing (11.3-rasm, D).


Guruch. 11.3.

Har holda, hujjat konturi jadval shaklida ko'rinadi (11.4-rasm). Hozircha sxema rejimini qoldirib, (XML) rejimiga o‘tamiz.


Guruch. 11.4.

Muhit hujjatning tuzilishini tavsiflovchi XML kodini yaratdi:

Bu shuningdek, ADO .NET ob'ektlari yordamida sxemani qo'shimcha manipulyatsiya qilish uchun zarur bo'lgan tavsifni o'z ichiga oladi. XMLEasy.xml hujjatida ma'lumotlar sxemasiga havola paydo bo'ldi:

XMLEasy.xsd hujjati avtomatik ravishda XMLEasy.xml joylashgan katalogda yaratilgan.

XSD sxemalarini tushunishni o'rganish uchun siz avval qo'shimcha elementlarsiz sof shaklda ma'lumotlar tavsifi bilan ishlashingiz kerak. 11.1-jadvalda ADO .NET ob'yektlari bilan bog'lanmagan holda yaratilgan bir nechta oddiy XML hujjatlari va ularning sxemalari ko'rsatilgan.

11.1-jadval. XSD sxemalarini yaratishga misollar
XML hujjatining mazmuni XSD sxemasi tarkibi

1

Tavsif
XMLEasy.xml hujjatida TOUR elementi IDTOUR bola elementini o'z ichiga olgan ildiz element hisoblanadi. Ildiz elementining umumiy sxemasi quyidagicha:

: Element tarkibi...

Bolalar elementlari quyidagicha tavsiflanadi:

XML hujjatining mazmuni XSD sxemasi tarkibi

1 Kipr 25 000,00 rubl Ikkita kattalar vaucherlari narxiga bitta bolaning narxi (7 yoshgacha) kiradi. 2 Gretsiya 32 000,00 rubl Avgust va sentyabr oylarida maxsus chegirmalar amal qiladi 3 Tailand 30 000,00 rubl Aviachiptalarni hisobga olmaganda 4 Italiya 26 000,00 rubl Mehmonxonada nonushta sayohat narxiga kiritilgan 5 Fransiya 27 000,00 rubl Qo'shimcha ekskursiyalar tur narxiga kiritilmagan

Tavsif
Ildiz TABLE elementi TOUR elementini o'z ichiga oladi, u o'z navbatida bir guruh asosiy elementlardan iborat. Tanlov elementi boshqa elementlarni tanlashni nazorat qiladi, maxOccurs atributining "chegaralanmagan" qiymati TOUR guruhlari cheksiz bo'lishi mumkinligini ko'rsatadi.

: :

XML hujjatining mazmuni XSD sxemasi tarkibi

1 Kipr 25 000,00 rubl 1 Ikkita kattalar vaucherlari narxiga bitta bolaning narxi (7 yoshgacha) kiradi.


Guruch. 11.5.
Tavsif
IDTOUR elementining ma'lumotlar turi int ga o'rnatildi, YOPIQ elementning ma'lumotlar turi boolean ga, qolganlari esa standart satr ma'lumotlar turiga o'rnatildi. Ma'lumotlar turini to'g'ridan-to'g'ri XML ma'lumotlar sxemasi rejimida o'zgartirishingiz mumkin, lekin sxema rejimidan foydalanish qulayroqdir (bu holda rejim DataSet deb ataladi) ochiladigan ro'yxatdan ma'lumotlar turini tanlang (11.5-rasm). :

Kurs dasturida siz ushbu jadval uchun barcha fayllarni XSD papkasida topasiz (Code\Glava5\XSD).

XML hujjatida ma'lumotlar turini o'rnatish (11.1-jadval so'nggi misol) tarkibni cheklash usullaridan biridir. Qo'shimcha atributlar berilgan turning qiymatini cheklash uchun ishlatiladi. Quyidagi sxema bo'lagida PRICE elementining qiymati 50 dan 100 gacha bo'lishi kerak:

XML hujjatini ba'zi sobit qiymatlar bilan cheklash uchun quyidagi konstruktsiyadan foydalaning:

Bu yerda NAME elementi beshta mamlakat nomidan faqat bitta sobit qiymatni qabul qilishi mumkin.

XSD sxemasini ishlab chiqish juda ko'p ishdir. Visual Studio .NET dagi vizual vositalar bu vazifani ancha osonlashtiradi. Asosiy tushunchalarni o'zlashtirish uchun avtomatik ravishda yaratilgan bir nechta XML hujjat sxemalarini o'rganish tavsiya etiladi. 11.2-11.4-jadvallarda duch kelishi mumkin bo'lgan asosiy elementlar va atributlarning tavsifi keltirilgan.

11.2-jadval. XSD sxemasi elementlari
Element Tavsif
hammasi Ichki elementlar har qanday tartibda aniqlanishi mumkin
izoh Sharh elementlarining asosiy elementi Va
har qanday Har qanday ichki elementlar
anyAttribute Har qanday atributlar
appInfo Sharh elementi. Sxema sarlavhasini belgilaydi
xususiyat Xususiyat
attributeGroup Atributlar guruhi
tanlash Boshqa elementlarni tanlash. "|" operatorining analogi DTD da
murakkab tarkib Cheklovlar yoki model kengaytmalari murakkab tarkib turi
murakkab turi Murakkab element
hujjatlar Sharh elementi. Sxema haqida ma'lumot beradi
element Element
kengaytma Element kengaytmalari
maydon Dala deklaratsiyasi. Element ichida amal qiladi maydonlarni aniqlash uchun
guruh Elementlar guruhi
Import Boshqa sxemadan turdagi deklaratsiyani import qilish
o'z ichiga oladi Mavjud nom maydoniga boshqa sxemani kiritish
kalit Element yoki atributni boshqa elementga ishora qiluvchi kalit bilan belgilash
keyref Kalit ishora qiladigan element yoki atributni ko'rsatish
ro'yxati Qiymatlar ro'yxatini o'z ichiga olishi mumkin bo'lgan element
qayta belgilang E'lon qilingan elementlarni bekor qilish
cheklash Elementni cheklash
sxema Sxema ildiz elementi
selektor XML elementlarini tanlash uchun selektor
ketma-ketlik Boshqa elementlarning ketma-ketligi. DTDdagi "," operatorining analogi
oddiy tarkib Tarkibi faqat belgilar ma'lumotlarini ifodalovchi model
oddiy tur Oddiy element
ittifoq Bir nechta ma'noga ega bo'lishi mumkin bo'lgan element yoki atribut
noyob Noyob qiymatga ega bo'lishi kerak bo'lgan element yoki atribut
11.3-jadval. Atributlar - XSD sxemasi cheklovlari
Xususiyat Tavsif
sanab qiymatlar ro'yxati
uzunligi Uzunlik
maxLength Maksimal uzunlik
min Uzunlik Minimal uzunlik
maxExclusive Maksimal qiymat
maxInclusive Maksimal qiymat, shu jumladan
minExclusive Minimal qiymat
minInklyuziv Minimal qiymat, shu jumladan
fractionDigits Kasr sonlardagi kasrlar soni
jami Raqamlar Raqamlar soni
naqsh Element tarkibining namunasi (naqsh).
standart Standart element yoki atribut qiymati
elementFormDefault Mahalliy elementning global miqyosda belgilangan xususiyatlarini sozlash
belgilangan Ruxsat etilgan element yoki atribut qiymati
shakl Mahalliy e'lon qilingan elementlar muayyan hujjat misollarida aniqlanadi
element turi Ro'yxat elementi turi
a'zo turlari Uyushmada ishlatiladigan a'zolar turi
maxOccurs Elementning maksimal takrorlanish soni
min sodir bo'ladi Elementning minimal takrorlanish soni
aralashgan Aralash tipga ega elementni belgilash
nomi Element yoki atribut nomi
nom maydoni Ismlar maydoni
noNamespace Sxematik hujjatning joylashishini belgilash,
SxemaLocation natijada nom bo'shliqlari yo'q
nillable Element bo'sh NULL qiymatiga ega bo'lishi mumkinligini aniqlash (nil)
ref Global miqyosda belgilangan elementga havolani o'rnatish
sxema Joylashuvi Sxemani aniqlash
almashtirish guruhi Elementlarni boshqa elementlar bilan almashtirishni aniqlash
targetNamespace Natijadagi sxema nom maydoni
turi Element turi
foydalanish Element kerakmi yoki yo'qmi?
qiymat Sxematik element qiymati
xsi:nil XML hujjatidagi bo'sh (NULL) elementning haqiqiy tarkibini o'rnatish
xsi:schemaLocation XML hujjatidagi elementning haqiqiy joylashuvi
xsi: turi XML hujjatidagi elementning haqiqiy turi

XSD sxemasi asosida XML faylini yaratish vazifasi paydo bo'ldi. Forumlarni qidirish jarayonni noto'g'ri tushunish bilan bog'liq ko'plab munozaralarga olib keldi va faqat bir nechta maqolaning mohiyatini tushuntirdi. Odamlar savol berishdi, yechim bilan kurashishdi, lekin muammo ularga berilganidan so'ng, ular mexanizmni tasvirlamasdan g'oyib bo'lishdi. Bu jarayonning oddiy tavsifini yaratishga turtki bo'ldi.
P.S. Ko'p qasam ichmang, mening maqsadim to'g'ri atamalardan qat'iy foydalangan holda qandaydir ilmiy maqola yaratish emas, balki XML orqali juda kuchli almashinuv mexanizmini tushunish yo'lidagi birinchi qadamni qo'yishga yordam berish edi.
P.P.S. Maqolaga biriktirilgan yuklash fayli faqat kerakli XML fayl strukturasining faqat bir qismini yaratuvchi shablon ekanligini darhol taʼkidlab oʻtishim kerak, chunki mening ushbu yuklab olish bilan ishlashim juda ta'lim xarakteriga ega edi (FCS veb-saytidagi oldingi eksport hujjatidan nusxa ko'chirish va Excel faylidan mahsulotlarning faqat jadvalli qismini yuklab olish samaraliroq echim bo'lib tuyuldi) va vaqt etishmasligi bunga imkon bermadi. Men faqat perfektsionizm nuqtai nazaridan kelib chiqqan holda butun tuzilmani yaratishni yakunlayman.

Shunday qilib, FCS veb-saytida ro'yxatdan o'tgandan so'ng, eksport bo'yicha statistik hisobot hujjatlarini yaratish uchun tovarlarni sotish va xizmatlar savdosini boshqarish hujjatlaridan ma'lumotlarni yuklab olish va yuklab olish uchun fayl yaratish kerakligi aniq bo'ldi.

Yuklab olishning ikkita varianti mavjud.

Birinchidan: jadval qismini Excel faylidan Mahsulotlar bilan yuklash (bu variant ishchi variant sifatida tanlangan, chunki uning afzalliklari bor edi, chunki hujjatning "sarlavhasi" ni qayta ishlash bilan bezovtalanishning hojati yo'q edi, lekin siz shunchaki nusxa ko'chirishingiz mumkin edi. oldingi, uni "Sarlavha" ga o'zgartirish "kerak bo'lgan narsa).

Ikkinchidan: FCS veb-saytidan "Elektron hujjat shakllari uchun formatlar albomi" ko'rinishida yuklab olingan sxema bo'yicha XML faylini yaratish. Albom juda ko'p sonli XSD sxemalarini o'z ichiga oladi. Ular "Tovarlar harakatini hisobga olishning statistik shakli" diagrammasi va uning turlari tavsifi bilan qo'shimcha fayllarni topdilar. Diagrammalar arxivdagi maqolaga ishlov berilgan holda ilova qilinadi.

XSD sxemalarini ko'rish uchun biz bepul Microsoft XML Notepad 2007 dan foydalandik.

Rasmda "Tovarlar harakatini hisobga olish uchun statistik shakl" XSD sxemasi bilan asosiy fayl ko'rsatilgan. Rasm XSD sxemasining asosiy bloklarini ta'kidlaydi, biz buni tushunishimiz kerak.

Diagrammadan ko'rinib turibdiki, StaticFormType tipidagi "xs: element" filialida ko'rsatilgan tuzilma bilan to'ldirilgan XML faylini olishimiz kerak.

Tuzilishi ancha murakkab bo'lishi mumkin (bizning holatimizda bo'lgani kabi). Tur tavsiflari to'g'ridan-to'g'ri filialda mavjud, alohida filialga joylashtirilgan yoki hatto boshqa faylda joylashgan.

Bu tuzilma StaticFormType turiga ega bo'lib, u o'z navbatida BaseDocType tayanch turi, har xil turdagi ob'ektlar to'plami va matn atributlaridan iborat.

BaseDocStyle asosiy turi boshqa faylda (va nom maydonida) aniqlanadi.
.

Ushbu faylda bizning holatlarimizda ishlatilmaydigan juda ko'p turlar mavjud.

Endi 1C da ishlashga o'tamiz. Xulosa qilib aytganda, nima qilishimiz kerakligi quyidagilarga to'g'ri keladi:

1. XDTO zavodi yaratilmoqda

OurFactoryXDTO = CreateFactoryXDTO(ArrayFullFileNamesWithXSDSchemas);

2. XDTO zavodida barcha murakkab ma'lumotlar turlari yaratiladi, keyin ularni yaratilgan XML fayliga to'ldiramiz:

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

Muayyan turga kiritilgan ma'lumotlar turlarini uning xususiyatlari to'plamidan olish mumkin:

CUOrganizationType = StaticFormType.Properties.Get("Yuk oluvchi").Type; NameType = CUOrganizationType.Properties.Get("Tashkilot nomi").Type; ShortNameType = CUOrganizationType.Properties.Get("ShortName").Type; LanguageCodeType = CUOrganizationType.Properties.Get("Tashkilot tili").Type;

3. Barcha murakkab ma’lumotlar turlari yaratilgandan so‘ng biz ular asosida XDTO Factory obyektlaridan iborat XML fayl strukturasini yaratamiz:

StaticFormType_XDTOObject = MyXDTOFactory.Create(StaticFormType); // hujjatlar bilan to'plam NewDocuments = MyFactoryXDTO.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "Yo'llanma"); NewDocuments.PrDocumentNumber = MyFactoryXDTO.Create(PrDocumentNumberType, "123-raqam"); NewDocuments.PrDocumentDate = MyFactoryXDTO.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(NewDocuments);

Shu bilan birga, elementar (oddiy turdagi) tafsilotlarni to'ldiring.

4. Va nihoyat, biz hamma narsani XDTO fabrikasidan faylga tushiramiz:

XML fayli = Yangi XML yozuvi(); FileXML.OpenFile(Fayl nomi); FileXML.WriteXMLDeclaration(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

P.S. Arxivda XML formatidagi yuklash shablon fayli (faqat ba'zi tafsilotlar yaratilgan, fayl to'ldirilgan barcha holatlarni aks ettiruvchi) va XSD sxemalari mavjud.

Barcha fayllarni ma'lum bir katalogga oching.

Unda XML yaratiladi.

XML formati axborot tizimlari o'rtasida turli matnli hujjatlarni almashishda juda mashhur. Hujjatlar uchun noyob tuzilmani yaratish qobiliyati uni ko'plab sohalarda - elektron kutubxonalar, WEB, import/eksport va boshqalarda qo'llash imkonini beradi. Ushbu format bilan qulay ishlash imkoniyati bo'lmaganda, 1C tizimlari bunday mashhurlikka erisha olmas edi. 1C WEB texnologiyalaridan faol foydalanganligi sababli, har bir ishlab chiquvchi XMLni o'qishi va unga ma'lumot yozishi kerak.

XML faylini ko'rsatish va o'qish

XML belgilash tilining asosiy afzalliklaridan biri uning ancha qulay va intuitiv tuzilishi va sintaksisidir. Uni yaratishda mualliflar ham odamlar, ham kompyuterlar tomonidan o'qilishi oson bo'lgan belgilash tilini yaratishni maqsad qilgan. Bugungi kunda XML boshqa formatlarga keng miqyosda ishlab chiqilgan, ammo mashhurligicha qolmoqda va keng qo'llaniladi. XML faylining tuzilishi quyidagi sxema bo'yicha tuzilgan:

1C ga ma'lumotlarni import qilish misolini ko'rib chiqish uchun yuqorida keltirilgan fayl etarli bo'ladi. Yozma protsedura XML faylini o'qiy olishi uchun unga faylning o'ziga yo'lni o'tkazish kifoya. Bu foydalanuvchilarga faylni o'zlari belgilash imkonini beruvchi interfeys orqali yoki matnda qattiq kodlangan ishlov berish orqali amalga oshirilishi mumkin.

1C da hajmi 100 MB gacha bo'lgan XML bilan ishlashning mashhur usullaridan biri bu Document Object Model (DOM) dan foydalanishdir. Uning ma'nosi XMLda ifodalangan barcha hujjat tugunlarini ketma-ket qayta ishlashdir. O'rnatilgan 1C tilida ushbu algoritm quyidagicha ko'rinadi:

  1. XML faylini o'qish mexanizmlari deklaratsiyasi; Tugunlarni kesib o'tish uchun pastadir;
  2. Tugundagi ma'lumotlar va atributlarni o'qish;
  3. Axborot chiqishi. Agar kerak bo'lsa, ushbu bosqichda yozish o'zgaruvchilarda yoki to'g'ridan-to'g'ri kerakli jadvallarda sodir bo'lishi mumkin;
  4. Mexanizmning tugallanishi.
&OnServer protsedurasi ReadOnServer(PathToFile) //mexanizmlar deklaratsiyasi O'qish mexanizmi = Yangi ReadingXML; Reader.OpenFile(PathToFile); Quruvchi = Yangi BuilderDOM; Hujjat = Builder.Read(Reader); //tugunlarni aylanib o'tish uchun tsikl Har bir element uchun Document.DocumentElement.ChildrenNodes dan Loop //ma'lumotlarni o'qish Agar element.NodeName = "Mahsulot" Keyin mahsulot = element; Har bir qiymat uchun mahsulotdan.ChildrenNodes Cycle Agar qiymatlar.NodeName = "Ism" keyin Ism = qiymatlar; Rang = Name.Attributes.GetNamedElement("Rang"); ElseIf values.NodeName = "Narx" keyin Xarajat = qiymatlar; Valyuta = Cost.Attributes.GetNamedItem("Valyuta"); endIf; EndCycle; //chiqish xabarlari Notify("Ism: " + Name.TextContent + "; rang: "+Color.Value +"; Narx: "+Cost.TextContent + "; Valyuta: "+Currency.Value); endIf; EndCycle; //mexanizmni yopish Non-MechanismReading.Close(); Jarayonning oxiri

Natijada, biz import qilingan ma'lumotlar bilan foydalanuvchiga xabarlarni ko'rsatamiz. Shuningdek, siz barcha ma'lumotlarni kerakli tuzilmaga joylashtirishingiz va uning asosida katalogdagi hujjat yoki yozuvlarni yaratishni dasturlashingiz mumkin. 1C xml bilan ishlash tezligi ancha yuqori, shuning uchun bu format boshqa manbalar bilan ma'lumot almashishda tobora ko'proq foydalanilmoqda.

Ma'lumotni yuklash uchun biz XML fayllari bilan ham o'zaro ishlashimiz kerak bo'ladi. Keling, 1C platformasi XML Record ob'ektidan foydalangan holda yozuv misolini ko'rib chiqaylik va elementga ma'lumotlarni yuklaymiz. Uning asosiy afzalliklari - kodning soddaligi va ma'lumotlarni qayta ishlash tezligi. XML faylini yozish uchun server tomoni algoritmi bir necha ketma-ket qadamlar sifatida ifodalanishi mumkin:

  1. xml fayliga ulaning;
  2. Biz bosh elementlarni yaratamiz va ularga ma'lumotlarni yozamiz. Agar siz XML fayliga katta hajmdagi ma'lumotlarni yuklamoqchi bo'lsangiz, unda bu bosqichda siz tsikllardan foydalanasiz. Ehtiyot bo'ling va esda tutingki, ma'lumotlar so'rovi unda emas, balki tsikldan oldin amalga oshirilishi kerak;
  3. Faylni yoping.
//Nomenclatura.xml faylini oching va bosh elementni yozing RecordVFile = New RecordXML(); WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); WriteInFile.3writeStartItem("Mahsulotlar"); //yozuv uchun ma'lumotlarni tanlang SelectionFromDirectory = Directories.Nomenclature.Select(); //SelectingFromDirectory.Next() siklida yozib olish sodir bo'ladigan sikl //yangi ma'lumotlarni yozish RecordToFile.RecordStartofElement("Mahsulot"); RecordInFile.RecordAttribute("Ism", SelectionFromDirectory.Name); WriteToFile.WriteAttribute("InitialPrice", Line(SelectionFromDirectory.InitialPrice)); WriteToFile.WriteEndElement(); EndCycle; //Bosh elementni va faylni yoping WriteVFile.WriteEndElement(); WriteInFile.Close();

1C da XDTO mexanizmi

1C kompaniyasini ishlab chiquvchilari XML - XDTO (XML Data Transfer Objects) orqali ma'lumot almashish uchun o'zlarining mexanizmini yaratdilar. 8.1 versiyasidan boshlab platforma XML faylini yaratish masalalarini o'rganmasdan boshqa tizimlar bilan ma'lumot almashish imkoniyatiga ega. Ko'pgina texnik muammolar 1C tomonidan hal qilinadi va biz qilishimiz kerak bo'lgan yagona narsa XML yaratish uchun zarur bo'lgan ma'lumotlarni ko'rsatishdir. To'g'ri, buning uchun ishlab chiquvchi oldindan ba'zi manipulyatsiyalarni bajarishi kerak.

XDTO yordamida XML faylni yuklash uchun biz 1C ga fayl tuzilishini aytib berishimiz kerak. U matn muharririda yoki maxsus dastur yordamida yaratilishi mumkin bo'lgan diagrammalar to'plami orqali uzatiladi. Olingan fayl XML faylida ishlatiladigan umumiy tuzilma va ma'lumotlar turlarini tavsiflashi kerak. Yangi XML-ni o'qish yoki yozishdan oldin, ishlab chiquvchi o'z sxemasini XDTO paketlari ostidagi konfiguratsiyaga yuklashi kerak.

Bunday holda, biz qo'lda oddiy paketni yaratamiz, shunda 1C bizning misol faylimiz tuzilishini tushunadi. Fayl yaratish muvaffaqiyatli yakunlanishi uchun biz sxemada bosh element va atributlarga ega biriktirma mavjudligini aks ettirishimiz kerak. Yaratilgan sxema xsd formatidagi faylga eksport qilinishi va xml bilan birga uzatilishi kerak, shunda boshqa tomon tuzilma bilan shug'ullanishi va xdto paketini qayta yaratishi shart emas.


Avvalgisiga o'xshash server algoritmi yangi XML-ni qattiq diskingizga saqlashga yordam beradi. Yagona farq XDTO zavodiga 1 ta mahsulot uchun ma'lumotlarni qo'shish zarurati - 8.3 1C platformasining maxsus mexanizmi. Agar ko'proq joylashtirish darajalarini yaratish zarurati tug'ilsa, har bir bosh elementni tavsiflashingiz kerak bo'ladi.

//XML faylini oching RecordVFile = New RecordXML; WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); //1C ga qanday turdagi ma'lumotlarni yaratish kerakligini ko'rsating - bosh element AllProducts = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Mahsulotlar")); //yuklash uchun ma'lumotlarni tanlang SelectionFromDirectory = Directories.Nomenclature.Select(); //Katalog.Next() siklidan tanlash paytida bosh elementga alohida mahsulotlar qo'shish Mahsulot = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Mahsulot")); Product.Name = Directory.Name dan tanlang; Product.InitialPrice = String(SelectionFromDirectory.InitialPrice); AllProducts.Add(Mahsulot); EndCycle; //ma'lumotlarni yozing va faylni yoping FactoryXDTO.WriteXML(WriteToFile, AllProducts); WriteInFile.Close();

Ko'rib chiqilgan mexanizmlar juda universaldir va agar to'g'ri sozlangan bo'lsa, aksariyat muammolarni hal qilishi mumkin. Biroq, 1C va XML o'rtasidagi o'zaro ta'sirda juda ko'p nuanslar mavjud. XML faylini qayta ishlash juda tor muammolarni hal qiladigan test topshiriqlarida emas, balki ularni real sharoitda o'rganish ancha samaralidir.

Ushbu bob sizga XML sxemalarini qanday yozishni ko'rsatib beradi. Shuningdek, diagrammani turli yo'llar bilan yozish mumkinligini bilib olasiz.

XML hujjati

Keling, "shiporder.xml" deb nomlangan ushbu XML hujjatini ko'rib chiqaylik:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
Jon Smit

Ola Nordmann

Langt 23

4000 Stavanger
Norvegiya


Burlesk imperiyasi
Maxsus nashr
1
10.90


Yuragingizni yashiring
1
9.90

Yuqoridagi XML hujjati "orderid" deb nomlangan zarur atributni o'z ichiga olgan "shiporder" ildiz elementidan iborat. "shiporder" elementi uchta turli yordamchi elementni o'z ichiga oladi: "orderperson", "shipto" va "item" . "Element" elementi ikki marta paydo bo'ladi va unda "sarlavha" elementi, ixtiyoriy "eslatma" elementi, "miqdor" elementi va "narx" elementi mavjud.

Yuqoridagi qator: Xmlns: XSI="http://www.w3.org/2001/XMLSchema-instance" XML tahlilchisiga ushbu hujjat sxemani tekshirish kerakligini aytadi. Qator: XSI: noNamespaceSchemaLocation = "shiporder.xsd" sxemalar qayerda joylashganligini ko'rsatadi (bu erda u "shiporder.xml" bilan bir xil papkada joylashgan) .

XML sxemasini yaratish

Endi biz yuqoridagi XML hujjati uchun sxema yaratmoqchimiz.

Biz yangi faylni ochishdan boshlaymiz, uni "shiporder.xsd" deb nomlaymiz. Sxemani yaratish uchun biz shunchaki XML hujjatidagi tuzilishga amal qilishimiz va har bir elementni topganimizdek belgilashimiz mumkin. Biz standart XML deklaratsiyasidan boshlaymiz, undan keyin sxemani belgilaydigan xs:schema elementi:



...

Yuqoridagi sxemada biz standart nom maydonlaridan (xs) foydalanmoqdamiz va bu nom maydoni bilan bog'langan URI sxema tilining ta'rifi bo'lib, http://www.w3.org/2001/XMLSchema standart qiymatiga ega.

Keyinchalik, biz "shiporder" elementini aniqlashimiz kerak. Ushbu element atributga ega va boshqa elementlarni o'z ichiga oladi, shuning uchun biz uni murakkab tur sifatida ko'rib chiqamiz. "Yuklab berish buyurtmasi" elementining pastki elementlari xs bilan o'ralgan: quyi elementlarning tartiblangan ketma-ketligini belgilaydigan ketma-ketlik elementi:




...


Keyin "buyurtmachi" elementini oddiy tur sifatida belgilashimiz kerak (chunki u hech qanday atribut yoki boshqa elementlarni o'z ichiga olmaydi). Tur (xs:string) XML sxemasi bilan bog'langan nom maydoni prefiksi bilan prefiksga ega bo'lib, u oldindan belgilangan sxema ma'lumotlar turini belgilaydi:










Sxemalar yordamida biz MaxOccurs va MinOccurs atributlariga ega element uchun mumkin bo'lgan hodisalar sonini aniqlashimiz mumkin. MaxOccurs element uchun maksimal takrorlanish sonini, MinOccurs esa element uchun minimal takrorlanish sonini belgilaydi. MaxOccurs va MinOccurs uchun standart qiymat 1!

Endi biz "element" elementini aniqlashimiz mumkin. Bu element "jo'natuvchi" element ichida bir necha marta paydo bo'lishi mumkin. Bu "element" elementining maxOccurs atributini "cheklanmagan" ga o'rnatish orqali aniqlanadi, ya'ni "element" elementining muallif xohlagancha ko'p takrorlanishi mumkin. "Eslatma" elementi ixtiyoriy ekanligini unutmang. Biz buni minOccurs atributini nolga o'rnatish orqali aniqladik:










Endi biz elementning "shiporder" atributini e'lon qilishimiz mumkin. Bu talab qilinadigan atribut bo'lgani uchun biz use="required" ni belgilaymiz.

Eslatma: Atribut bayonotlari har doim oxirgi bo'lishi kerak:

Mana "shiporder.xsd" deb nomlangan sxema faylining to'liq ro'yxati:





























Alohida sxemalar

Oldingi dizayn usuli juda oddiy, ammo hujjatlar murakkab bo'lsa, o'qish va saqlash qiyin bo'lishi mumkin.

Keyingi dizayn usuli barcha elementlar va atributlarni aniqlashga va keyin ref atributidan foydalanib ularga havola qilishga asoslangan.

Mana sxematik faylning yangi dizayni (“shiporder.xsd”):








































Nomlangan turlardan foydalanish

Uchinchi dizayn usuli sinflar yoki turlarni belgilaydi, bu element ta'riflarini qayta ishlatishga imkon beradi. Bu elementlarni simpleTypes va complexTypes deb nomlash va keyin elementning type atributi orqali ularga murojaat qilish orqali amalga oshiriladi.

Mana sxematik faylning uchinchi dizayni (“shiporder.xsd”):

































Cheklov elementi ma'lumotlar turi W3C XML sxemasi ma'lumotlar turi nom maydonidan olinganligini ko'rsatadi. Shunday qilib, quyidagi parcha element yoki atributning qiymati satr qiymati bo'lishi kerakligini anglatadi:

Cheklash elementi ko'proq elementlarga cheklovlar qo'llash uchun ishlatiladi. Yuqoridagi diagrammadan quyidagi satrlarga qarang:





Bu element yoki atributning qiymati satr boʻlishi, har bir satrda toʻliq oltita belgidan iborat boʻlishi va bu belgilar 0 dan 9 gacha boʻlgan raqam boʻlishi kerakligini bildiradi.

XDTO - bu 1C-da veb-xizmatlarni yaratish va ulardan foydalanishda zarur bo'lgan 1C mexanizmi.

XDTO 1C paketlari ma'lumotlarni XML ga va undan konvertatsiya qilish uchun zarur bo'lgan XML faylining tuzilishini tavsiflash imkonini beradi.

Qiziqqanlar uchun, keling, savolni batafsil ko'rib chiqaylik.

XML fayllar Internet orqali uzatiladi va ko'plab dasturlar tomonidan o'qilishi mumkin.

Ular seziladi - bu ularning kodiga ulanganligini anglatadi - agar siz XML faylida ma'lum bir element nomiga duch kelsangiz - buni shunday qabul qiling va buni bajaring.

Shuning uchun, agar biz Apple element nomidan foydalansak, unda boshqa dastur bu Apple o'zi biladigan Apple deb "o'ylashi" ehtimoli juda yuqori, lekin biz o'zimiznikini nazarda tutganmiz.

Bunga yo'l qo'ymaslik va bizning Apple-ning boshqalardan farq qilishini aniq ko'rsatish uchun faylda nomlar maydoni nomini ko'rsatish mumkin - bu elementlar nomidan oldin ishlatiladigan prefiks.

Nomlar maydoni (inglizcha nom maydonida) quyidagicha aniqlanadi - xmlns:SpaceName = "URL", masalan:
xmlns:store = "http://store.ru"

Nima uchun sizga URL kerak?

Shuning uchun ma'lum bir noyob identifikator ko'rsatiladi, u ham nomlar maydoni muallifini aniqlaydi.

Tabiiyki, nom maydonini ko'rsatgan shaxs juda halol odam va o'z saytini ko'rsatgan va bir sayt bilan bir nechta turli nomlar maydonidan foydalanmaydi deb taxmin qilinadi.

Aytgancha, ular odatda nafaqat sayt URL manzilini, balki saytdagi ma'lum bir papkaning URL manzilini ham ko'rsatadilar, shuning uchun biror narsa yuz bersa, boshqa vaziyatda foydalanish uchun saytdagi boshqa papkada boshqa nom maydoni yaratishingiz mumkin.

Ob'ekt - bu ma'lum bir ma'lumotlar strukturasi bo'lib, o'zini o'zi ta'minlaydi, uning barcha ma'lumotlarini o'z ichiga oladi.

Strukturaviy ma'lumotlar XMLda tasvirlanganligi sababli, ya'ni o'ziga xos xususiyatlarga ega bo'lgan struktura shaklida va hokazo, ularni ob'ekt sifatida ko'rish mumkin.

Keltirilgan misolda bu xususiyat va ichki o'rnatilgan elementga ega LIST ob'ekti bo'lishi mumkin.

DOM - bu XML faylni ma'lum formatdagi matn sifatida emas, balki xossalari, maydonlari va boshqalarga ega bo'lgan ob'ektlar to'plami sifatida ko'rib chiqish usuli.

XML faylining tavsifi

Agar biz ikkita dastur o'rtasida almashish uchun doimiy ravishda ma'lum bir tuzilishdagi fayldan foydalansak, ehtimol biz quyidagilarni xohlaymiz:

  • Muayyan nomlardan foydalanish uchun
  • Biz kutgan elementlarga ega bo'lish (ular "birjamizda foydalanish uchun u erda bo'lishi kerak")
  • Shunday qilib, atributlar biz kutgan turlarni o'z ichiga oladi (string, raqam va boshqalar).

XML tuzilishini tavsiflash uchun quyidagi fayl formati standartlari mavjud (ular ham oddiy matn faylida saqlanadi):

  • DTD kengaytmasi - Hujjat turini aniqlash
  • XSD kengaytmasi - XML ​​Shema.

Ikkala format ham hujjat qanday bo'lishi kerakligini tasvirlaydi. XML ning bunday faylda tasvirlangan standartga mos kelishini tekshirish tartibi verifikatsiya deb ataladi.

XDTO 1C konfiguratsiyaga XML faylining tavsifini qo'shish imkonini beruvchi vositadir. To'g'rirog'i, tasvirlangan fayl emas, balki aniq XML tuzilmalari.

Foydalanish mumkin bo'lgan turlarni ko'rsatish uchun XDTO 1C zavodi deb ataladigan ro'yxat yoki turlar kutubxonasidan foydalaniladi.

Ushbu zavod boshqa tillarda, dasturlarda va hokazolarda keng qo'llaniladigan oddiy turlarni (satr, raqam, sana), shuningdek, 1C va ma'lum bir konfiguratsiyada qo'llaniladigan 1C turlarini ham belgilaydi.

XDTO 1C zavodining o'zi bir nechta paketlardan iborat. Asosiy turlar www.w3.org deb nomlangan paketda tasvirlangan

Joriy konfiguratsiya ma'lumotlari turlari http://v8.1c.ru/8.1/data/enterprise/current-config paketida tasvirlangan.

Turlarning o'zi konfiguratordagi nomga ko'ra ingliz tilidagi shakl qo'shilishi bilan nomlanadi (CatalogRef, CatalogObject, DocumentRef, DocumentObject), masalan:

CatalogObject.Nomenklatura

XDTO 1C paketini qo'shish

Bularning barchasi, albatta, ajoyib ko'rinadi. Va biz hali XSLT mavzusiga etib bormadik - XML ​​fayllarini HTML kabi boshqa narsaga aylantirish usuli. XML mavzusi juda katta va hatto alohida kitobda yoritib berish qiyin.

Bizning vazifamiz XDTO 1C yaratilishi yoki o'qilishi kerak bo'lgan XML paketining qanday elementlari bo'lishi kerakligini tasvirlash imkonini berishini tushunishdir.

XDTO 1C paketlari General/XDTO 1C Packages filialidagi konfiguratsiyada joylashgan.

XDTO to'plamini 1C ga qo'lda qo'shishingiz mumkin (salqin!), Lekin sxemaning tayyor tavsifi bilan mos keladigan XSD faylini olish yaxshiroqdir.

Har qanday konfiguratsiya ob'ektlari uchun XSD sxemasining tavsifini Umumiy/XDTO 1C Paketlari bo'limiga bosish va XML konfiguratsiya sxemasini eksport qilish menyu bandini tanlash orqali olish mumkin.

Fayl matndan iborat bo'lib, uni Windows Notepad-da o'zgartirishingiz mumkin, keraksiz narsalarni olib tashlashingiz mumkin.

Umumiy/XDTO 1C paketlari boʻlimida sichqonchaning oʻng tugmachasini bosish va XML sxemasini import qilish menyu bandini tanlash orqali 1C ga tayyor XSD sxemasini qoʻshishingiz mumkin.

XDTO 1C mexanizmidan foydalanish

XDTO 1C bilan ishlash qiymatlarni XML ga va undan o'zgartirishni anglatadi.

Ish 1C til ob'ektlari yordamida amalga oshiriladi Reading XML/Writing XML.

XDTO 1C mexanizmi bilan ishlashda siz ishlayotgan paketni ko'rsatishingiz kerak. Bu standart paket (yuqorida muhokama qilingan, XDTO ga qarang) yoki konfiguratsiyaga qo'shilgan paket bo'lishi mumkin. Paket paketda ko'rsatilgan URL orqali aniqlanadi.

Ishlashning ikkita asosiy oddiy usuli:

  • Serializatsiya - qiymatlarni 1C dan XML ga va aksincha avtomatik ravishda o'zgartirish
  • Ob'ektni yaratish, uning maydonlarini to'ldirish, XML ga yozish (va shunga mos ravishda XML dan o'qish va keyin uning maydonlarini o'qish).

Qiymatni ketma-ketlashtirishga misol:
Serializator = Yangi SerializerXDTO(FactoryXDTO);
XML fayli = Yangi XML yozuvi();
FileXML.OpenFile("Fayl nomi");
Serializer.WriteXML(XMLFile, Value1C);

Ob'ektni o'qish/yozish misoli:

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