1c xml bazat pe exemplul de schemă xsd. O scurtă descriere a creării unui fișier XML utilizând schema XSD folosind exemplul creării unei încărcări de raportare statistică pentru Serviciul Vamal Federal. Adăugarea unui pachet XDTO

Adnotare: Scheme de date XML (XSD). Crearea unei scheme XSD în Visual Studio .NET. Crearea unui obiect DataSet tipizat. Obținerea de informații despre structura unui obiect DataSet. Încărcarea documentelor XML și a schemelor XSD în obiecte DataSet tipizate și obișnuite. Metodele ReadXml și ReadXmlSchema. Înregistrarea conținutului și structurii unui obiect DataSet tip și obișnuit. Metodele WriteXml și WriteXmlSchema

Obiect DataSet tastat. Citirea și scrierea documentelor XML

Scheme de date XML (XSD)

Scheme de date 1 Traducerea exactă a documentului XML Schema -< Schema documentului XML>, totuși vom continua să folosim termenul „schemă de date XML”. XSD (XML Schema Document, XSD) reprezintă o modalitate alternativă de a construi reguli pentru documentele XML. În comparație cu DTD-urile, schemele sunt mai puternice pentru definirea structurilor complexe de date, oferă o modalitate mai clară de a descrie gramatica unei limbi și pot fi ușor modernizate și extinse. O schemă XSD poate conține următoarele informații:

  • reprezentarea relațiilor dintre elementele de date, similare relațiilor de cheie străină dintre tabele dintr-o bază de date relațională;
  • reprezentarea identificatorilor unici similar cu o cheie primară;
  • specificarea tipului date pentru fiecare element și atribut individual dintr-un document XML.

Pentru a crea o schemă de date în Visual Studio .NET, mergeți la File\New\File din meniul principal și selectați XML Schema din lista de șabloane (vezi Fig. 11.3). Apare o fereastră care spune „Pentru a începe, trageți obiectele din fereastra Server Explorer sau Toolbox în spațiul de lucru (zona de proiectare) sau faceți clic dreapta” (Figura 11.1):


Orez. 11.1.

Ideea este că suntem în modul design. Treceți la modul cod făcând clic pe butonul (XML):

Prima linie este indicația familiară că schema este un document XML cu un element rădăcină xs:schema . Prefixul xs: prefixează toate elementele schemei pentru a indica spațiul de nume. A doua linie conține o descriere lungă, detaliată și adesea complet inutilă a schemei (comparați cu codul similar pentru paginile HTML). Pentru o funcționare corectă, este suficient să ne limităm la următoarea reprezentare:

Cu toate acestea, instrumentele de vizualizare încorporate ale studioului presupun prezența acestui „antet”, așa că nu ar trebui să fie eliminat. Crearea unei scheme care descrie un document XML dat în Visual Studio .NET este o sarcină destul de simplă. Să creăm următorul document XMLEasy.xml:

1

Trecem la fila (Date) și vedem o singură intrare (Fig. 11.2).


Orez. 11.2.

Puteți crea o schemă care descrie acest document în mai multe moduri: în meniul principal, selectați elementul „XML \ Create Schema” (Fig. 11.3, A), în modul XML, selectați același element în meniul contextual (Fig. 11.3, B), în modul XML, selectați același element în meniul contextual (Fig. 11.3, B), în Date, selectați acest element în meniul contextual (Fig. 11.3, C) și, în final, în modul Data, faceți clic pe butonul din bara de instrumente XML (Fig. 11.3, D).


Orez. 11.3.

În orice caz, conturul documentului apare sub forma unui tabel (Fig. 11.4). Să părăsim modul Schema pentru moment și să trecem la modul (XML).


Orez. 11.4.

Mediul a generat cod XML care descrie structura documentului:

Aceasta include, de asemenea, descrierea necesară pentru a manipula în continuare schema folosind obiecte ADO .NET. În documentul sursă XMLEasy.xml, a apărut un link către schema de date:

Documentul XMLEasy.xsd a fost creat automat în același director în care se află XMLEasy.xml.

Pentru a învăța să înțelegeți schemele XSD, ar trebui mai întâi să lucrați cu descrierea datelor în forma sa pură, fără elemente suplimentare. Tabelul 11.1 prezintă câteva documente XML simple și schemele acestora, generate fără legarea de obiecte ADO .NET.

Tabelul 11.1. Exemple de creare a schemelor XSD
Conținutul documentului XML Conținutul schemei XSD

1

Descriere
Într-un document XMLEasy.xml, elementul TOUR este elementul rădăcină care conține elementul copil IDTOUR. Schema generală pentru elementul rădăcină este următoarea:

: Conținutul elementului...

Elementele copil sunt descrise astfel:

Conținutul documentului XML Conținutul schemei XSD

1 Cipru 25.000,00 RUB Prețul a două vouchere pentru adulți include prețul unui copil (până la 7 ani) 2 Grecia 32.000,00 RUB Se aplică reduceri speciale în august și septembrie 3 Tailanda 30.000,00 RUB Nu include biletul de avion 4 Italia 26.000,00 RUB Micul dejun la hotel este inclus în prețul turului 5 Franţa 27.000,00 RUB Excursiile suplimentare nu sunt incluse în prețul turului

Descriere
Elementul rădăcină TABLE conține un element TOUR, care, la rândul său, constă dintr-un grup de elemente copil. Elementul choice controlează selecția altor elemente, valoarea „nelimitată” a atributului maxOccurs indicând faptul că grupurile TOUR pot fi nelimitate.

: :

Conținutul documentului XML Conținutul schemei XSD

1 Cipru 25.000,00 RUB 1 Prețul a două vouchere pentru adulți include prețul unui copil (până la 7 ani)


Orez. 11.5.
Descriere
Tipul de date al elementului IDTOUR a fost setat la int , tipul de date al elementului ÎNCHIS a fost setat la boolean , iar restul au fost setat la tipul de date implicit șir. Puteți schimba tipul de date direct în modul Schema de date XML, dar este mai convenabil să utilizați modul Schema (în acest caz modul se va numi DataSet) selectați tipul de date din lista derulantă (Fig. 11.5) :

În programul de curs veți găsi toate fișierele pentru acest tabel în folderul XSD (Code\Glava5\XSD).

Setarea unui tip de date într-un document XML (Tabelul 11.1 este cel mai recent exemplu) este o modalitate de a limita conținutul. Atributele suplimentare sunt folosite pentru a constrânge valoarea unui anumit tip. În următorul fragment de schemă, valoarea elementului PRICE trebuie să fie între 50 și 100:

Pentru a limita un document XML la unele valori fixe, utilizați următorul construct:

Aici elementul NAME poate lua o singură valoare fixă ​​din cinci nume de țări.

Dezvoltarea unei scheme XSD este destul de multă muncă. Instrumentele vizuale din Visual Studio .NET fac această sarcină mult mai ușoară. Pentru a stăpâni conceptele de bază, este recomandabil să înveți mai multe scheme de documente XML generate automat. Tabelele 11.2-11.4 oferă o descriere a principalelor elemente și atribute care pot fi întâlnite.

Tabelul 11.2. Elemente de schemă XSD
Element Descriere
toate Elementele imbricate pot fi definite în orice ordine
adnotare Elementul părinte al elementelor de comentariu Și
orice Orice elemente imbricate
oriceAtribut Orice atribute
info app Element de comentariu. Specifică titlul schemei
atribut Atribut
attributeGroup Grup de atribute
alegere Selectarea altor elemente. Analog al operatorului „|” în DTD
complexContent Restricții sau extensii de model tip de conținut complex
complexType Element complex
documentație Element de comentariu. Oferă informații despre schemă
element Element
extensie Extensii de elemente
camp Declarație de teren. Se aplică în interiorul unui element pentru a defini câmpuri
grup Grup de elemente
import Importul unei declarații de tip dintr-o altă schemă
include Includerea unei scheme diferite într-un spațiu de nume existent
cheie Specificarea unui element sau atribut cu o cheie care indică către un alt element
cheieref Specificarea elementului sau atributului către care indică cheia
listă Un element care poate conține o listă de valori
redefiniți Suprascrierea elementelor deja declarate
restricţie Constrângerea elementului
schemă Element rădăcină de schemă
selector Selector pentru selectarea elementelor XML
secvenţă Succesiunea altor elemente. Analog al operatorului "," în DTD
simpleContent Un model al cărui conținut reprezintă doar date de caractere
simpleType Element simplu
uniune Un element sau un atribut care poate avea mai multe semnificații
unic Un element sau un atribut care trebuie să aibă o valoare unică
Tabelul 11.3. Atribute - Limitări ale schemei XSD
Atribut Descriere
enumerare Lista de valori
lungime Lungime
lungime maxima Lungime maxima
minLungime Lungime minima
maxExclusive Valoare maximă
maxInclusive Valoarea maximă inclusiv
minExclusiv Valoarea minima
minInclusiv Valoarea minimă inclusiv
fractionDigits Numărul de zecimale în numere fracționale
totalDigits Numărul de cifre
model Eșantion (model) de conținut al elementului
Mod implicit Valoarea implicită a elementului sau a atributului
elementFormDefault Setarea proprietăților unui element local așa cum sunt definite global
fix Element fix sau valoare de atribut
formă Elementele declarate local sunt definite în cazuri specifice de document
categorie de obiect Tipul articolului din listă
MemberTypes Tipul de membri utilizați în unire
maxApare Numărul maxim de apariții ale unui element
minApare Numărul minim de apariții ale unui element
amestecat Specificarea unui element care are un tip mixt
Nume Nume element sau atribut
spatiu de nume Spațiu de nume
noNamspace Specificarea locației documentului schematic,
SchemaLocation neavând spații de nume rezultate
anulabil Determinarea faptului că un element poate avea o valoare NULL goală (nul)
ref Setarea unei referințe la un element definit global
schemaLocation Localizarea circuitului
substitutionGroup Definirea înlocuirii elementelor cu alte elemente
targetNamspace Spațiul de nume al schemei rezultat
tip Categorie de obiect
utilizare Este necesar sau nu elementul?
valoare Valoarea elementului schematic
xsi:nil Setarea conținutului real al unui element gol (NULL) într-un document XML
xsi:schemaLocation Locația reală a elementului în documentul XML
xsi:tip Tipul real al elementului din documentul XML

A apărut sarcina de a crea un fișier XML bazat pe o schemă XSD. Căutarea pe forumuri a dus la un număr mare de discuții legate de o neînțelegere a procesului și doar câteva articole care explică esența. Oamenii au pus întrebări, s-au luptat cu soluția, dar după ce problema a cedat în fața lor, pur și simplu au dispărut fără a descrie mecanismul. Acest lucru a determinat crearea unei descrieri simple a procesului.
P.S. Nu înjură prea mult, scopul meu nu a fost să creez un fel de articol științific folosind strict terminologia corectă, ci pur și simplu să ajut să faci primul pas către înțelegerea mecanismului de schimb foarte puternic prin XML.
P.P.S. Trebuie să fac imediat o rezervare că fișierul de încărcare atașat articolului este doar un șablon care creează doar o parte din structura fișierului XML necesară, deoarece munca mea cu această descărcare a fost mai degrabă de natură educațională (copiarea documentului anterior de export pe site-ul FCS și descărcarea doar a părții tabelare a Produselor dintr-un fișier Excel părea a fi o soluție mai eficientă), iar lipsa de timp nu a permis să finalizez crearea întregii structuri, bazată doar pe considerații de perfecționism.

Așadar, după înregistrarea pe site-ul FCS, a devenit clar că pentru a crea documente de raportare statistică privind exporturile, este necesar să descărcați date din documentele de gestiune a comerțului cu vânzări de bunuri și servicii și să creați un fișier pentru descărcare.

Există două opțiuni de descărcare posibile.

În primul rând: încărcarea părții tabulare cu Produse dintr-un fișier Excel (această opțiune a fost aleasă ca opțiune de lucru, deoarece avea avantajele că nu era nevoie să te deranjezi cu procesarea „Header” al documentului, dar puteai pur și simplu copia precedentul, schimbându-l în „Header” „ce era necesar).

În al doilea rând: crearea unui fișier XML conform schemei descărcate de pe site-ul FCS sub forma unui „Album de formate pentru formulare de documente electronice”. Albumul conține un număr destul de mare de scheme XSD. Ei au găsit o diagramă a „Formular statistic de contabilitate pentru circulația mărfurilor” și fișiere suplimentare cu descrieri ale tipurilor pentru acesta. Diagramele sunt atașate articolului din arhivă cu procesare.

Pentru a vizualiza schemele XSD, am folosit gratuit Microsoft XML Notepad 2007.

Imaginea prezintă fișierul principal cu schema XSD „Formular statistic pentru contabilizarea circulației mărfurilor”. Imaginea evidențiază principalele blocuri ale schemei XSD pe care trebuie să o înțelegem.

Din diagramă este clar că trebuie să obținem un fișier XML umplut cu structura specificată în ramura „xs:element” a tipului StaticFormType.

Structura poate fi destul de complexă (ca și în cazul nostru). Cu descrieri de tip prezente direct în ramură, plasate într-o ramură separată, sau chiar localizate într-un alt fișier.

Această structură are un tip StaticFormType, care la rândul său constă dintr-un tip de bază BaseDocType, un set de obiecte de diferite tipuri și atribute text.

Tipul de bază BaseDocStyle este definit într-un fișier diferit (și spațiu de nume)
.

Acest fișier conține o mulțime de tipuri care nu sunt utilizate în cazul nostru.

Acum să trecem la lucrul în 1C. Pe scurt, ceea ce trebuie să facem se reduce la următoarele:

1. Fabrica XDTO este în curs de creare

OurFactoryXDTO = CreateFactoryXDTO(ArrayFullFileNamesWithXSDSchemas);

2. În fabrica XDTO, sunt create toate tipurile de date complexe, pe care apoi le vom completa în fișierul XML creat:

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

Tipurile de date incluse într-un anumit tip pot fi obținute din colecția proprietăților acestuia:

CUOrganizationType = StaticFormType.Properties.Get("Destinatar").Type; NameType = CUOrganizationType.Properties.Get("OrganizationName").Type; ShortNameType = CUOrganizationType.Properties.Get("ShortName").Type; LanguageCodeType = CUOrganizationType.Properties.Get("OrganizationLanguage").Type;

3. Când toate tipurile de date complexe au fost create, creăm o structură de fișiere XML pe baza acestora, constând din obiecte XDTO Factory:

StaticFormType_XDTOObject = MyXDTOFactory.Create(StaticFormType); // colecție cu documente 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);

În același timp, completați detaliile elementare (tipuri simple).

4. Și, în sfârșit, descarcăm totul din fabrica XDTO într-un fișier:

Fișier XML = Noua intrare XML (); FileXML.OpenFile(FileName); XML File.WriteXML Declaration(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

P.S. Arhiva conține un fișier șablon de încărcare în XML (se creează doar câteva detalii, reflectând toate cazurile în care fișierul este completat) și scheme XSD.

Dezarhivați toate fișierele într-un anumit director.

XML va fi creat în el.

Formatul XML este foarte popular atunci când se schimbă diverse documente text între sistemele informaționale. Abilitatea de a crea o structură unică pentru documente îi permite să fie utilizat în multe domenii - biblioteci electronice, WEB, import/export și multe altele. Fără capacitatea de a lucra convenabil cu acest format, sistemele 1C nu ar fi câștigat o asemenea popularitate. Deoarece 1C utilizează în mod activ tehnologiile WEB, fiecare dezvoltator trebuie să fie capabil să citească XML și să scrie informații în el.

Reprezentarea și citirea fișierelor XML

Unul dintre avantajele cheie ale limbajului de marcare XML este structura și sintaxa sa destul de convenabilă și intuitivă. Când l-au creat, autorii și-au stabilit un obiectiv de a crea un limbaj de marcare care să fie ușor de citit atât de oameni, cât și de computere. Astăzi, XML a fost dezvoltat pe scară largă în alte formate, dar rămâne popular și utilizat pe scară largă. Structura fișierului XML este construită după următoarea schemă:

Pentru a lua în considerare un exemplu de import de date în 1C, fișierul prezentat mai sus va fi suficient. Pentru ca procedura scrisă să poată citi fișierul XML, este suficient să treci în el calea către fișierul însuși. Acest lucru se poate face prin interfață, permițând utilizatorilor să specifice fișierul ei înșiși sau prin procesare hard-coded în text.

Una dintre modalitățile populare de a lucra cu XML cu o dimensiune de până la 100 MB în 1C este utilizarea Document Object Model (DOM). Sensul său este de a procesa secvenţial toate nodurile de document reprezentate în XML. În limbajul 1C încorporat, acest algoritm arată astfel:

  1. Declararea mecanismelor prin care este citit fișierul XML; Buclă pentru a traversa nodurile;
  2. Citirea datelor și atributelor într-un nod;
  3. Ieșire de informații. Dacă este necesar, în această etapă scrierea poate apărea în variabile sau direct în tabelele necesare;
  4. Finalizarea mecanismului.
&OnServer Procedura ReadOnServer(PathToFile) //declararea mecanismelor Reading Mechanism = New ReadingXML; Reader.OpenFile(PathToFile); Builder = New BuilderDOM; Document = Builder.Read(Reader); //buclă pentru a parcurge nodurile Pentru fiecare element Din Document.DocumentElement.ChildrenNodes Buclă //citirea datelor Dacă element.NodeName = "Product" Then product = element; Pentru fiecare valoare Din product.ChildrenNodes Cycle If values.NodeName = "Nume" atunci Nume = valori; Culoare = Name.Attributes.GetNamedElement("Color"); ElseIf values.NodeName = „Preț”, apoi Cost = valori; Currency = Cost.Attributes.GetNamedItem("Currency"); endIf; EndCycle; //Mesaje de ieșire Notify("Nume: " + Nume.TextContent + "; culoare: "+Color.Value +"; Preț: "+Cost.TextContent + "; Moneda: "+Currency.Value); endIf; EndCycle; //închiderea mecanismului Non-MechanismReading.Close(); Sfârșitul procedurii

Drept urmare, afișăm mesaje utilizatorului cu datele importate. De asemenea, puteți plasa toate datele în structura dorită și, pe baza acesteia, puteți programa crearea unui document sau a unor intrări în director. Viteza de lucru 1C cu xml este destul de mare, astfel încât acest format este din ce în ce mai utilizat atunci când se schimbă date cu alte surse.

Pentru a încărca informații, va trebui, de asemenea, să interacționăm cu fișierele XML. Să ne uităm la un exemplu de înregistrare folosind obiectul platformei 1C Înregistrare XML și încărcare a datelor pe articol. Principalele sale avantaje sunt simplitatea codului și viteza de procesare a datelor. Algoritmul server-side pentru scrierea unui fișier XML poate fi reprezentat ca mai mulți pași secvențiali:

  1. Conectați-vă la fișierul xml;
  2. Creăm elemente principale și le scriem date. Dacă doriți să încărcați o cantitate mare de informații într-un fișier XML, atunci în această etapă veți folosi bucle. Fiți atenți și amintiți-vă că cererea de date trebuie făcută înaintea buclei, și nu în ea;
  3. Închideți fișierul.
//deschideți fișierul Nomenclatura.xml și scrieți elementul de cap RecordVFile = New RecordXML(); WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); WriteInFile.3writeStartItem(„Produse”); //selectați datele pentru înregistrare SelectionFromDirectory = Directories.Nomenclature.Select(); //ciclul în care are loc înregistrarea în timp ce ciclul SelectingFromDirectory.Next() //scrierea datelor noi RecordToFile.RecordStartofElement("Produs"); RecordInFile.RecordAttribute(„Nume”, SelectionFromDirectory.Name); WriteToFile.WriteAttribute("InitialPrice", Line(SelectionFromDirectory.InitialPrice)); WriteToFile.WriteEndElement(); EndCycle; //Închide elementul head și fișierul WriteVFile.WriteEndElement(); WriteInFile.Close();

Mecanismul XDTO în 1C

Dezvoltatorii companiei 1C și-au creat propriul mecanism de schimb de informații prin XML - XDTO (XML Data Transfer Objects). Începând cu versiunea 8.1, platforma are capacitatea de a face schimb de date cu alte sisteme fără a se aprofunda în problemele generării unui fișier XML. Cele mai multe probleme tehnice sunt rezolvate de 1C și tot ce trebuie să facem este să indicăm datele necesare pentru a genera XML. Adevărat, pentru aceasta, dezvoltatorul trebuie să facă unele manipulări în avans.

Pentru a încărca un fișier XML folosind XDTO, trebuie să spunem lui 1C structura fișierului. Se transmite printr-un set de diagrame care pot fi create într-un editor de text sau folosind un program specializat. Fișierul rezultat ar trebui să descrie structura generală și tipurile de date utilizate în fișierul XML. Înainte de a citi sau scrie un XML nou, dezvoltatorul trebuie să-și încarce schema în configurația din Pachete XDTO.

În acest caz, vom crea manual un pachet simplu, astfel încât 1C să înțeleagă structura fișierului nostru exemplu. Pentru ca generarea fișierului să se termine cu succes, trebuie să reflectăm în schemă că avem un element head și un atașament cu atribute. Schema creată trebuie exportată într-un fișier în format xsd și transferată împreună cu xml, astfel încât cealaltă parte nu trebuie să se ocupe de structura și să creeze din nou pachetul xdto.


Un algoritm de server similar cu cel anterior vă va ajuta să salvați noul XML pe hard disk. Singura diferență este necesitatea de a adăuga date pentru 1 produs în fabrica XDTO - un mecanism special al platformei 8.3 1C. Dacă este nevoie să creați mai multe niveluri de imbricare, va trebui să descrieți fiecare element cap.

//Deschideți fișierul XML RecordVFile = New RecordXML; WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); //Indica la 1C ce tip de date trebuie create - element head AllProducts = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Products")); //selectați datele pentru încărcare SelectionFromDirectory = Directories.Nomenclature.Select(); //Adăugați produse individuale la elementul principal în timp ce selectați din ciclul Directory.Next() Product = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Product")); Product.Name = Selectați din Directory.Name; Product.InitialPrice = String(SelectionFromDirectory.InitialPrice); AllProducts.Add(Produs); EndCycle; //scrieți datele și închideți fișierul FactoryXDTO.WriteXML(WriteToFile, AllProducts); WriteInFile.Close();

Mecanismele luate în considerare sunt destul de universale și, dacă sunt configurate corespunzător, pot rezolva majoritatea problemelor. Cu toate acestea, există destul de multe nuanțe în interacțiunea dintre 1C și XML. Este mult mai eficient să le studiezi în condiții reale, și nu pe sarcini de testare în care procesarea unui fișier XML rezolvă probleme destul de înguste.

Acest capitol vă va arăta cum să scrieți scheme XML. Veți învăța, de asemenea, că diagrama poate fi scrisă în diferite moduri.

Document XML

Să ne uităm la acest document XML numit „shiporder.xml”:

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

Ola Nordmann

Langgt 23

4000 Stavanger
Norvegia


Empire Burlesque
Ediție specială
1
10.90


Ascunde-ți inima
1
9.90

Documentul XML de mai sus constă dintr-un element rădăcină, „shiporder”, care conține un atribut obligatoriu numit „orderid”. Elementul „shiporder” conține trei elemente secundare diferite: „orderperson” , „shipto” și „item” . Elementul „articol” apare de două ori și conține un element „titlu”, un element opțional „notă”, un element „cantitate” și un element „preț”.

Linia de mai sus: Xmlns: XSI="http://www.w3.org/2001/XMLSchema-instance" spune parserului XML că acest document ar trebui validat schema. Linia: XSI: noNamespaceSchemaLocation = "shiporder.xsd" indică locul în care se află schemele (aici este în același folder cu „shiporder.xml”) .

Crearea unei scheme XML

Acum dorim să creăm o schemă pentru documentul XML de mai sus.

Vom începe prin a deschide un nou fișier, pe care îl vom numi „shiporder.xsd”. Pentru a crea o schemă, am putea pur și simplu să urmăm structura din documentul XML și să definim fiecare element așa cum îl găsim. Vom începe cu o declarație XML standard urmată de un element xs:schema care definește schema:



...

În schema de mai sus, folosim spații de nume standard (xs), iar URI-ul asociat cu acest spațiu de nume este definiția limbajului schemei, care are valoarea standard http://www.w3.org/2001/XMLSchema.

În continuare, trebuie să definim un element „shiporder”. Acest element are un atribut și conține alte elemente, așa că îl tratăm ca pe un tip complex. Elementele copil ale unui element „shiporder” sunt înconjurate de un element de secvență xs: care definește o secvență ordonată de subelemente:




...


Apoi trebuie să definim elementul „orderperson” ca un tip simplu (din moment ce nu conține niciun atribut sau alte elemente). Tipul (xs:string) este prefixat cu un prefix de spațiu de nume asociat cu Schema XML, care specifică un tip de date de schemă predefinit:










Cu ajutorul schemelor putem determina numărul de apariții posibile pentru un element cu atribute MaxOccurs și MinOccurs. MaxOccurs specifică numărul maxim de apariții pentru un element și MinOccurs specifică numărul minim de apariții pentru un element. Valoarea implicită atât pentru MaxOccurs, cât și pentru MinOccurs este 1!

Acum putem defini elementul „articol”. Acest element poate apărea de mai multe ori într-un element „comandă de expediere”. Acest lucru este determinat prin setarea atributului maxOccurs al elementului „item” la „unbounded”, ceea ce înseamnă că pot exista atâtea apariții ale elementului „item” câte dorește autorul. Rețineți că elementul „notă” este opțional. Am definit acest lucru setând atributul minOccurs la zero:










Acum putem declara atributul „shiporder” al elementului. Deoarece acesta este un atribut obligatoriu, specificăm use="required".

Notă: declarațiile de atribute trebuie să fie întotdeauna ultimele:

Iată o listă completă a fișierului schema numit „shiporder.xsd”:





























Circuite separate

Metoda anterioară de proiectare este foarte simplă, dar poate fi dificil de citit și întreținut atunci când documentele sunt complexe.

Următoarea metodă de proiectare se bazează pe definirea tuturor elementelor și atributelor și apoi referirea lor folosind atributul ref.

Iată noul design al fișierului schematic ("shiporder.xsd"):








































Utilizarea tipurilor denumite

A treia metodă de proiectare definește clase sau tipuri, ceea ce permite reutilizarea definițiilor de elemente. Acest lucru se face prin denumirea elementelor simpleTypes și complexTypes, iar apoi trimiterea la ele prin atributul tip al elementului.

Iată al treilea design al fișierului schematic ("shiporder.xsd"):

































Elementul de constrângere indică faptul că tipul de date a fost derivat din spațiul de nume W3C XML Schema tip de date. Deci, următorul fragment înseamnă că valoarea elementului sau a atributului trebuie să fie valoarea unui șir:

Elementul de constrângere este folosit mai des pentru a aplica restricții elementelor. Priviți următoarele rânduri din diagrama de mai sus:





Aceasta specifică faptul că valoarea elementului sau a atributului trebuie să fie un șir, trebuie să fie exact șase caractere pe linie, iar acele caractere trebuie să fie un număr între 0 și 9.

XDTO este un mecanism 1C care este necesar la crearea și utilizarea serviciilor web în 1C.

Pachetele XDTO 1C vă permit să descrieți structura fișierului XML necesar pentru conversia datelor în și din XML.

Pentru cei interesați, să ne uităm la întrebarea mai detaliat.

Fișierele XML sunt transmise prin Internet și pot fi citite de multe programe.

Ele sunt percepute - asta înseamnă că sunt conectate în codul lor - dacă întâlniți un anumit nume de element în fișierul XML - percepeți-l așa și faceți asta.

Prin urmare, dacă folosim numele elementului Apple, atunci există o șansă destul de mare ca un alt program să „credă” că acesta este Apple pe care îl cunoaște, dar ne-am referit la ceva al nostru.

Pentru a preveni acest lucru și pentru a indica clar că Apple-ul nostru este diferit de toate celelalte, numele spațiului de nume poate fi specificat în fișier - un prefix care este folosit înaintea numelui elementelor.

Spațiul de nume (în engleză namespace) este definit astfel - xmlns:SpaceName = „URL”, de exemplu:
xmlns:store = "http://store.ru"

De ce ai nevoie de un URL?

Prin urmare, este specificat un identificator unic, care identifică și autorul spațiului de nume.

Desigur, se presupune că persoana care a indicat spațiul de nume este o persoană extrem de sinceră și și-a indicat site-ul și nu folosește mai multe spații de nume diferite cu un singur site.

Apropo, de obicei indică nu numai adresa URL a site-ului, ci și adresa URL a unui anumit folder de pe site, astfel încât, dacă se întâmplă ceva, puteți crea un alt spațiu de nume într-un alt folder de pe site pentru a fi utilizat într-o situație diferită.

Un obiect este o structură de date specifică, autosuficientă, care conține toate datele sale.

Deoarece datele structurate sunt descrise în XML, adică sub forma unei structuri care are proprietăți proprii etc., ele pot fi privite ca obiecte.

În exemplul dat, acesta ar putea fi un obiect LIST cu o proprietate și un element imbricat.

DOM este o modalitate de a trata un fișier XML nu ca text într-un format specific, ci ca o colecție de obiecte cu proprietăți, câmpuri și așa mai departe.

Descrierea fișierului XML

Dacă folosim în mod constant un fișier cu o anumită structură pentru a face schimb între două programe, probabil că am dori să:

  • Să fie folosite anumite nume
  • Să avem acele elemente pe care le așteptăm (care „trebuie să fie acolo pentru a fi folosite în schimbul nostru”)
  • Astfel încât atributele să conțină tipurile pe care le așteptăm (șir, număr etc.).

Următoarele standarde de format de fișier există pentru a descrie structura XML (care sunt, de asemenea, stocate într-un fișier text simplu):

  • Extensie DTD – Definirea tipului de document
  • Extensie XSD – XML Shema.

Ambele formate descriu cum ar trebui să fie documentul. Procedura de verificare a conformității XML cu standardul descris într-un astfel de fișier se numește verificare.

XDTO 1C este un instrument care vă permite să adăugați o descriere a unui fișier XML la configurație. Sau, mai degrabă, nu fișierul este descris, ci structuri XML specifice.

Pentru a indica tipurile care pot fi utilizate, se folosește o listă sau o bibliotecă de tipuri, care se numește fabrica XDTO 1C.

Această fabrică specifică atât tipuri simple (șir, număr, dată), care sunt utilizate în mod obișnuit în alte limbi, programe etc., dar și tipuri 1C, care sunt folosite în 1C și într-o anumită configurație.

Fabrica XDTO 1C în sine constă din mai multe pachete. Tipurile de bază sunt descrise într-un pachet numit www.w3.org

Tipurile de date de configurare curentă sunt descrise în pachetul http://v8.1c.ru/8.1/data/enterprise/current-config

Tipurile în sine sunt denumite în funcție de numele din configurator, cu adăugarea unui formular în limba engleză (CatalogRef, CatalogObject, DocumentRef, DocumentObject), de exemplu:

CatalogObiect.Nomenclatură

Adăugarea pachetului XDTO 1C

Cu siguranță toate acestea sună cool. Și încă nu am ajuns la subiectul XSLT - o modalitate de a transforma fișierele XML în altceva, cum ar fi HTML. Subiectul XML este extrem de mare și greu de acoperit chiar și într-o carte separată.

Sarcina noastră este să înțelegem că XDTO 1C ne permite să descriem ce elemente ar trebui să aibă un pachet XML care trebuie să fie generat sau citit.

Pachetele XDTO 1C sunt situate în configurația din ramura General/Pachete XDTO 1C.

Puteți adăuga manual pachetul XDTO la 1C (cool!), dar este mai bine să obțineți fișierul XSD corespunzător cu o descriere gata făcută a schemei.

O descriere a schemei XSD pentru obiectele de orice configurație poate fi obținută făcând clic pe ramura General/XDTO 1C Packages și selectând elementul de meniu Export XML configuration schema.

Fișierul este text, îl puteți edita în Windows Notepad, eliminând obiectele inutile de care nu aveți nevoie.

Puteți adăuga o schemă XSD gata făcută la 1C făcând clic dreapta pe ramura pachete General/XDTO 1C și selectând elementul de meniu Import XML Schema.

Folosind mecanismul XDTO 1C

Lucrul cu XDTO 1C înseamnă conversia valorilor în și din XML.

Lucrarea se desfășoară folosind obiecte de limbaj 1C Reading XML/Writing XML.

Când lucrați cu mecanismul XDTO 1C, trebuie să indicați pachetul cu care lucrați. Acesta poate fi un pachet standard (discutat mai sus, vezi XDTO) sau un pachet adăugat la configurație. Pachetul este identificat prin adresa URL specificată în pachet.

Principalele două moduri simple de a lucra sunt:

  • Serializare - conversie automată a valorilor de la 1C la XML și invers
  • Crearea unui obiect, completarea câmpurilor acestuia, scrierea în XML (și, în consecință, citirea din XML și apoi citirea câmpurilor acestuia).

Exemplu de serializare a valorii:
Serializer = New SerializerXDTO(FactoryXDTO);
Fișier XML = Noua intrare XML ();
FileXML.OpenFile("FileName");
Serializer.WriteXML(XMLFile, Value1C);

Exemplu de citire/scriere a unui obiect:

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