1c xml zasnovan na primjeru xsd sheme. Kratak opis kreiranja XML datoteke koristeći XSD šemu na primjeru kreiranja učitavanja statističkih izvještaja za Federalnu carinsku službu. Dodavanje XDTO paketa

Napomena: XML šeme podataka (XSD). Kreiranje XSD šeme u Visual Studio .NET. Kreiranje ukucanog DataSet objekta. Dobijanje informacija o strukturi DataSet objekta. Učitavanje XML dokumenata i XSD šema u ukucane i regularne objekte DataSeta. ReadXml i ReadXmlSchema metode. Snimanje sadržaja i strukture ukucanog i regularnog DataSet objekta. WriteXml i WriteXmlSchema metode

Ukucani objekat skupa podataka. Čitanje i pisanje XML dokumenata

XML šeme podataka (XSD)

Šeme podataka 1 Tačan prijevod dokumenta XML sheme -< Šema XML dokumenta>, međutim, nastavit ćemo koristiti izraz "XML data schema". XSD (XML Schema Document, XSD) je alternativni način konstruisanja pravila za XML dokumente. U poređenju sa DTD-ovima, šeme su moćnije za definisanje složenih struktura podataka, pružaju jasniji način za opisivanje gramatike jezika i mogu se lako modernizovati i proširiti. XSD šema može sadržavati sljedeće informacije:

  • predstavljanje relacija između elemenata podataka, slično odnosima stranog ključa između tabela u relacionoj bazi podataka;
  • predstavljanje jedinstvenih identifikatora sličnih primarnom ključu;
  • specifikacija tipa podatke za svaki pojedinačni element i atribut u XML dokumentu.

Da kreirate šemu podataka u Visual Studio .NET, idite na File\New\File u glavnom meniju i izaberite XML Schema sa liste šablona (pogledajte sliku 11.3). Pojavljuje se prozor koji kaže „Da biste započeli, prevucite objekte iz prozora Server Explorer ili Toolbox na radni prostor (područje za dizajn) ili kliknite desnim tasterom miša“ (Slika 11.1):


Rice. 11.1.

Poenta je da smo u modu dizajna. Prebacite se na način rada koda klikom na dugme (XML):

Prvi red je poznata indikacija da je shema XML dokument s korijenskim elementom xs:schema. Prefiks xs: stavlja prefiks svim elementima sheme kako bi ukazao na njen imenski prostor. Drugi red sadrži dugačak, detaljan i često potpuno nepotreban opis šeme (uporedite sa sličnim kodom za HTML stranice). Za ispravan rad, dovoljno je da se ograničimo na sljedeću reprezentaciju:

Međutim, studijski ugrađeni alati za vizualizaciju pretpostavljaju prisustvo ovog „zaglavlja“, tako da ga ne treba uklanjati. Kreiranje šeme koja opisuje dati XML dokument u Visual Studio .NET je prilično jednostavan zadatak. Kreirajmo sljedeći XMLEasy.xml dokument:

1

Prebacujemo se na karticu (Podaci) i vidimo samo jedan unos (slika 11.2).


Rice. 11.2.

Možete kreirati šemu koja opisuje ovaj dokument na nekoliko načina: u glavnom meniju izaberite stavku „XML \ Kreiraj šemu” (Sl. 11.3, A), u XML režimu izaberite istu stavku u kontekstualnom meniju (Sl. 11.3, B), u XML režimu, izaberite istu stavku u kontekstualnom meniju (Sl. 11.3, B), u Podacima izaberite ovu stavku u kontekstualnom meniju (Sl. 11.3, C), i na kraju, u režimu podataka, kliknite na dugme XML na traci sa alatkama (slika 11.3, D).


Rice. 11.3.

U svakom slučaju, nacrt dokumenta se pojavljuje u obliku tabele (slika 11.4). Ostavimo za sada režim šeme i prebacimo se na (XML) režim.


Rice. 11.4.

Okruženje je generiralo XML kod koji opisuje strukturu dokumenta:

Ovo također uključuje opis potreban za daljnju manipulaciju shemom korištenjem ADO .NET objekata. U izvornom dokumentu XMLEasy.xml pojavila se veza do šeme podataka:

Dokument XMLEasy.xsd je automatski kreiran u istom direktoriju gdje se nalazi XMLEasy.xml.

Da biste naučili da razumete XSD šeme, prvo treba da radite sa opisom podataka u njihovom čistom obliku, bez dodatnih elemenata. Tabela 11.1 prikazuje nekoliko jednostavnih XML dokumenata i njihovih šema, generiranih bez vezivanja za ADO .NET objekte.

Tabela 11.1. Primjeri kreiranja XSD shema
Sadržaj XML dokumenta Sadržaj XSD šeme

1

Opis
U XMLEasy.xml dokumentu, TOUR element je korijenski element koji sadrži podređeni element IDTOUR. Opća shema za korijenski element je sljedeća:

: Sadržaj elementa...

Podređeni elementi su opisani ovako:

Sadržaj XML dokumenta Sadržaj XSD šeme

1 Kipar 25.000,00 RUB Cijena dva vaučera za odrasle uključuje cijenu jednog djeteta (do 7 godina) 2 Grčka 32.000,00 RUB U avgustu i septembru važe posebni popusti 3 Tajland 30.000,00 RUB Ne uključujući avionske karte 4 Italija 26.000,00 RUB Doručak u hotelu je uključen u cijenu izleta 5 Francuska 27.000,00 RUB Dodatni izleti nisu uključeni u cijenu ture

Opis
Osnovni element TABLE sadrži TOUR element, koji se zauzvrat sastoji od grupe podređenih elemenata. Element izbora kontrolira odabir drugih elemenata, s "neograničenom" vrijednošću atributa maxOccurs koja ukazuje da TOUR grupe mogu biti neograničene.

: :

Sadržaj XML dokumenta Sadržaj XSD šeme

1 Kipar 25.000,00 RUB 1 Cijena dva vaučera za odrasle uključuje cijenu jednog djeteta (do 7 godina)


Rice. 11.5.
Opis
Tip podataka elementa IDTOUR je postavljen na int, tip podataka CLOSED elementa je postavljen na boolean, a ostali su postavljeni na zadani tip podataka niza. Možete promijeniti tip podataka direktno u načinu XML sheme podataka, ali je zgodnije koristiti Shema mod (u ovom slučaju će se način zvati DataSet) odabrati tip podataka sa padajuće liste (Slika 11.5) :

U softveru za kurs ćete pronaći sve datoteke za ovu tabelu u fascikli XSD (Code\Glava5\XSD).

Postavljanje tipa podataka u XML dokumentu (Tabela 11.1 je najnoviji primjer) jedan je od načina da se ograniči sadržaj. Dodatni atributi se koriste za ograničavanje vrijednosti datog tipa. U sljedećem fragmentu sheme, vrijednost elementa PRICE mora biti između 50 i 100:

Da ograničite XML dokument na neke fiksne vrijednosti, koristite sljedeću konstrukciju:

Ovdje element NAME može uzeti samo jednu fiksnu vrijednost od pet naziva zemlje.

Razvoj XSD šeme je dosta posla. Vizuelni alati u Visual Studio .NET čine ovaj zadatak mnogo lakšim. Da biste savladali osnovne koncepte, preporučljivo je naučiti nekoliko automatski generiranih shema XML dokumenata. Tabele 11.2-11.4 daju opis glavnih elemenata i atributa koji se mogu sresti.

Tabela 11.2. Elementi XSD sheme
Element Opis
sve Ugniježđeni elementi se mogu definirati bilo kojim redoslijedom
anotacija Nadređeni element elemenata komentara I
bilo koji Bilo koji ugniježđeni elementi
anyAttribute Bilo koji atribut
appInfo Element komentara. Određuje naslov šeme
atribut Atribut
attributeGroup Grupa atributa
izbor Odabir ostalih elemenata. Analog operatora "|" u DTD
complexContent Ograničenja ili proširenja modela složen tip sadržaja
complexType Kompleksni element
dokumentaciju Element komentara. Pruža informacije o šemi
element Element
proširenje Ekstenzije elemenata
polje Deklaracija polja. Primjenjuje se unutar elementa za definisanje polja
grupa Grupa elemenata
uvoz Uvoz deklaracije tipa iz druge šeme
uključiti Uključivanje različite šeme u postojeći prostor imena
ključ Određivanje elementa ili atributa s ključem koji ukazuje na drugi element
keyref Određivanje elementa ili atributa na koji ključ ukazuje
lista Element koji može sadržavati listu vrijednosti
redefinisati Nadjačavanje već deklariranih elemenata
ograničenje Ograničenje elementa
shema Korijenski element sheme
selektor Selektor za odabir XML elemenata
sekvenca Redoslijed ostalih elemenata. Analog operatora "," u DTD
simpleContent Model čiji sadržaj predstavlja samo znakovne podatke
simpleType Jednostavan element
sindikat Element ili atribut koji može imati više značenja
jedinstveno Element ili atribut koji mora imati jedinstvenu vrijednost
Tabela 11.3. Atributi - ograničenja XSD sheme
Atribut Opis
popis vrijednosti
dužina Dužina
maxLength Maksimalna dužina
minLength Minimalna dužina
maxExclusive Maksimalna vrijednost
maxInclusive Uključuje maksimalnu vrijednost
minExclusive Minimalna vrijednost
minInclusive Minimalna vrijednost uključuje
fractionDigits Broj decimalnih mjesta u razlomcima
totalDigits Broj cifara
uzorak Uzorak (uzorak) sadržaja elementa
default Zadana vrijednost elementa ili atributa
elementFormDefault Postavljanje svojstava lokalnog elementa kako je globalno definirano
fiksno Fiksna vrijednost elementa ili atributa
formu Lokalno deklarisani elementi su definisani u specifičnim instancama dokumenta
itemType Tip stavke liste
memberTypes Vrsta članova koji se koriste u sindikatu
maxOccurs Maksimalan broj pojavljivanja elementa
minOccurs Minimalni broj pojavljivanja elementa
mješovito Određivanje elementa koji ima mješoviti tip
ime Ime elementa ili atributa
imenskog prostora Imenski prostor
noNamespace Određivanje lokacije šematskog dokumenta,
SchemaLocation bez rezultirajućih imenskih prostora
nillable Određivanje da element može imati praznu NULL vrijednost (nula)
ref Postavljanje reference na globalno definirani element
schemaLocation Lociranje kola
substitutionGroup Definiranje zamjene elemenata drugim elementima
targetNamespace Rezultirajući imenski prostor sheme
tip Vrsta stavke
koristiti Da li je element potreban ili ne?
vrijednost Vrijednost elementa šeme
xsi:nil Postavljanje stvarnog sadržaja praznog (NULL) elementa u XML dokumentu
xsi:schemaLocation Stvarna lokacija elementa u XML dokumentu
xsi:type Stvarni tip elementa u XML dokumentu

Pojavio se zadatak kreiranja XML fajla na osnovu XSD šeme. Pretraživanje foruma dovelo je do velikog broja rasprava vezanih za nerazumijevanje procesa, a tek nekoliko članaka koji objašnjavaju suštinu. Ljudi su postavljali pitanja, borili se sa rješenjem, ali nakon što im je problem popustio, jednostavno su nestajali bez opisa mehanizma. To je potaknulo stvaranje jednostavnog opisa procesa.
P.S. Ne psujte previše, moj cilj nije bio da napravim neku vrstu naučnog članka striktno koristeći ispravnu terminologiju, već da jednostavno pomognem da se napravi prvi korak ka razumijevanju vrlo moćnog mehanizma razmjene putem XML-a.
P.P.S. Moram odmah da rezervišem da je upload fajl koji je priložen članku samo šablon koji kreira samo deo potrebne strukture XML datoteke, jer moj rad s ovim preuzimanjem je bio prilično edukativne prirode (kopiranje prethodnog izvoznog dokumenta na web stranici FCS-a i preuzimanje samo tabelarnog dijela proizvoda iz Excel datoteke činilo se efikasnijim rješenjem), a nedostatak vremena nije dopuštao da dovršim stvaranje cijele strukture, samo na osnovu perfekcionizma.

Dakle, nakon registracije na web stranici FCS-a, postalo je jasno da je za kreiranje dokumenata statističkog izvješćivanja o izvozu potrebno preuzeti podatke iz dokumenata upravljanja prometom robe i usluga i kreirati datoteku za preuzimanje.

Postoje dvije moguće opcije preuzimanja.

Prvo: učitavanje tabelarnog dela sa proizvodima iz Excel fajla (ova opcija je izabrana kao radna opcija, jer je imala prednosti da nije bilo potrebe da se mučite sa obradom „Zaglavlja“ dokumenta, već ste mogli jednostavno kopirati prethodni, mijenjajući ga u “Header” “ono što je bilo potrebno).

Drugo: kreiranje XML datoteke prema šemi preuzetoj sa web stranice FCS-a u obliku „Albuma formata za elektronske obrasce dokumenata“. Album sadrži prilično veliki broj XSD šema. Pronašli su dijagram „Statističkog obrasca za obračun kretanja robe“ i dodatne datoteke sa opisima vrsta za njega. Dijagrami su priloženi uz članak u arhivi sa obradom.

Za pregled XSD shema koristili smo besplatni Microsoft XML Notepad 2007.

Na slici je prikazana glavna datoteka sa XSD šemom "Statistički obrazac za obračun kretanja robe". Slika naglašava glavne blokove XSD šeme koji su nam potrebni da bismo je razumjeli.

Iz dijagrama je jasno da trebamo dobiti XML datoteku ispunjenu strukturom specificiranom u grani "xs:element" tipa StaticFormType.

Struktura može biti prilično složena (kao u našem slučaju). Sa opisima tipa koji su prisutni direktno u grani, smešteni u posebnu granu ili čak smešteni u drugoj datoteci.

Ova struktura ima tip StaticFormType, koji se zauzvrat sastoji od osnovnog tipa BaseDocType, skupa objekata različitih tipova i tekstualnih atributa.

Osnovni tip BaseDocStyle definiran je u drugoj datoteci (i imenskom prostoru)
.

Ova datoteka sadrži mnogo tipova koji se ne koriste u našem slučaju.

Sada pređimo na rad u 1C. Ukratko, ono što treba da uradimo se svodi na sledeće:

1. XDTO Factory je u izradi

OurFactoryXDTO = CreateFactoryXDTO(ArrayFullFileNamesWithXSDSchemas);

2. U fabrici XDTO kreiraju se svi složeni tipovi podataka koje ćemo popuniti u kreiranom XML fajlu:

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

Tipovi podataka uključeni u određeni tip mogu se dobiti iz zbirke njegovih svojstava:

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

3. Kada su svi složeni tipovi podataka kreirani, kreiramo strukturu XML datoteke zasnovanu na njima, koja se sastoji od XDTO Factory objekata:

StaticFormType_XDTOObject = MyXDTOFactory.Create(StaticFormType); // zbirka s dokumentima NewDocuments = MyFactoryXDTO.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "Tovarni list"); NewDocuments.PrDocumentNumber = MyFactoryXDTO.Create(PrDocumentNumberType, "123-broj"); NewDocuments.PrDocumentDate = MyFactoryXDTO.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(NewDocuments);

Istovremeno popunite elementarne (jednostavne vrste) detalje.

4. I na kraju, učitavamo sve iz XDTO Factory u fajl:

XML datoteka = Novi XML unos(); FileXML.OpenFile(FileName); FileXML.WriteXMLDeclaration(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

P.S. Arhiva sadrži datoteku predloška za otpremanje u XML-u (kreiraju se samo neki detalji, koji odražavaju sve slučajeve kada je datoteka popunjena) i XSD šeme.

Raspakujte sve datoteke u određeni direktorij.

U njemu će biti kreiran XML.

XML format je veoma popularan pri razmeni različitih tekstualnih dokumenata između informacionih sistema. Mogućnost kreiranja jedinstvene strukture za dokumente omogućava da se koristi u mnogim oblastima - elektronske biblioteke, WEB, uvoz/izvoz i mnoge druge. Bez mogućnosti praktičnog rada s ovim formatom, 1C sistemi ne bi stekli takvu popularnost. Budući da 1C aktivno koristi WEB tehnologije, svaki programer mora biti u stanju čitati XML i upisivati ​​informacije u njega.

Predstavljanje i čitanje XML datoteka

Jedna od ključnih prednosti XML markup jezika je njegova prilično zgodna i intuitivna struktura i sintaksa. Prilikom kreiranja, autori su postavili cilj da kreiraju jezik za označavanje koji bi bio lak za čitanje i ljudima i računarima. Danas je XML naširoko razvijen u druge formate, ali je i dalje popularan i široko korišten. Struktura XML datoteke izgrađena je prema sljedećoj shemi:

Da bismo razmotrili primjer uvoza podataka u 1C, bit će dovoljna gornja datoteka. Da bi pisana procedura mogla da pročita XML datoteku, dovoljno je u nju proslediti putanju do same datoteke. Ovo se može uraditi preko interfejsa, omogućavajući korisnicima da sami odrede datoteku, ili tvrdo kodiranom obradom u tekstu.

Jedan od popularnih načina rada sa XML-om veličine do 100 MB u 1C je korištenje Document Object Model (DOM). Njegovo značenje je sekvencijalna obrada svih čvorova dokumenta predstavljenih u XML-u. U ugrađenom 1C jeziku ovaj algoritam izgleda ovako:

  1. Deklaracija mehanizama pomoću kojih se čita XML datoteka; Petlja za pomicanje čvorova;
  2. Čitanje podataka i atributa u čvoru;
  3. Izlaz informacija. Ako je potrebno, u ovoj fazi može doći do pisanja u varijablama ili direktno u potrebnim tabelama;
  4. Završetak mehanizma.
&OnServer procedura ReadOnServer(PathToFile) //deklaracija mehanizama Mehanizam čitanja = New ReadingXML; Reader.OpenFile(PathToFile); Builder = New BuilderDOM; Dokument = Builder.Read(Reader); //petlja za prelazak čvorova Za svaki element From Document.DocumentElement.ChildrenNodes Petlja //čitanje podataka Ako element.NodeName = "Proizvod" Tada proizvod = element; Za svaku vrijednost From product.ChildrenNodes Cycle If values.NodeName = "Name" then Name = values; Boja = Name.Attributes.GetNamedElement("Boja"); ElseIf values.NodeName = "Cijena" zatim Cost = vrijednosti; Valuta = Cost.Attributes.GetNamedItem("Valuta"); endIf; EndCycle; //izlazne poruke Notify("Ime: " + Name.TextContent + "; boja: "+Color.Value +"; Cijena: "+Cost.TextContent + "; Valuta: "+Currency.Value); endIf; EndCycle; //zatvaranje mehanizma Non-MechanismReading.Close(); Kraj procedure

Kao rezultat, korisniku prikazujemo poruke sa uvezenim podacima. Također možete smjestiti sve podatke u željenu strukturu i na osnovu nje programirati kreiranje dokumenta ili unosa u direktorij. Brzina rada 1C sa xml-om je prilično visoka, pa se ovaj format sve više koristi pri razmjeni podataka s drugim izvorima.

Da bismo učitali informacije, također ćemo morati komunicirati sa XML datotekama. Pogledajmo primjer zapisa koji koristi objekt 1C platforme XML Record i prenesite podatke na stavku. Njegove glavne prednosti su jednostavnost koda i brzina obrade podataka. Algoritam na strani servera za pisanje XML datoteke može se predstaviti kao nekoliko uzastopnih koraka:

  1. Povežite se na xml datoteku;
  2. Kreiramo elemente glave i upisujemo podatke u njih. Ako želite učitati veliku količinu informacija u XML datoteku, tada ćete u ovoj fazi koristiti petlje. Budite oprezni i zapamtite da zahtjev za podacima mora biti napravljen prije petlje, a ne u njoj;
  3. Zatvorite fajl.
//otvorimo datoteku Nomenclatura.xml i upišemo element glave RecordVFile = New RecordXML(); WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); WriteInFile.3writeStartItem("Proizvodi"); //odabir podataka za zapis SelectionFromDirectory = Directories.Nomenclature.Select(); //ciklus u kojem se snima dok SelectingFromDirectory.Next() ciklus //upisuje nove podatke RecordToFile.RecordBeginningElement("Proizvod"); RecordInFile.RecordAttribute("Ime", SelectionFromDirectory.Name); WriteToFile.WriteAttribute("InitialPrice", Line(SelectionFromDirectory.InitialPrice)); WriteToFile.WriteEndElement(); EndCycle; //Zatvaranje elementa glave i datoteke WriteVFile.WriteEndElement(); WriteInFile.Close();

XDTO mehanizam u 1C

Programeri kompanije 1C kreirali su vlastiti mehanizam za razmjenu informacija putem XML-a - XDTO (XML Data Transfer Objects). Počevši od verzije 8.1, platforma ima mogućnost razmjene podataka sa drugim sistemima bez upuštanja u probleme generiranja XML datoteke. Većinu tehničkih problema rješava 1C, a sve što trebamo učiniti je naznačiti podatke potrebne za generiranje XML-a. Istina, za to programer mora unaprijed napraviti neke manipulacije.

Za učitavanje XML datoteke koristeći XDTO, moramo reći 1C strukturu datoteke. Prenosi se kroz skup dijagrama koji se mogu kreirati u uređivaču teksta ili pomoću specijaliziranog programa. Rezultirajuća datoteka treba da opisuje opću strukturu i tipove podataka koji se koriste u XML datoteci. Prije čitanja ili pisanja novog XML-a, programer mora učitati svoju shemu u konfiguraciju pod XDTO paketima.

U ovom slučaju, kreirat ćemo jednostavan paket ručno tako da 1C razumije strukturu našeg primjera datoteke. Da bi se generiranje datoteke uspješno završilo, u šemi moramo odraziti da imamo element glave i prilog sa atributima. Kreirana šema mora biti izvezena u datoteku u xsd formatu i prenijeta zajedno sa xml, tako da druga strana ne mora da se bavi strukturom i ponovo kreira xdto paket.


Serverski algoritam sličan prethodnom pomoći će vam da novi XML sačuvate na tvrdom disku. Jedina razlika je u potrebi dodavanja podataka za 1 proizvod u tvornicu XDTO - poseban mehanizam platforme 8.3 1C. Ako postoji potreba za kreiranjem više nivoa ugniježđenja, morat ćete opisati svaki element glave.

//Otvorite XML datoteku RecordVFile = New RecordXML; WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); //Naznačite 1C koju vrstu podataka treba kreirati - element glave AllProducts = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Products")); //odabir podataka za učitavanje SelectionFromDirectory = Directories.Nomenclature.Select(); //Dodavanje pojedinačnih proizvoda elementu glave Dok Odaberite iz ciklusa Directory.Next() Product = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Product")); Product.Name = Odaberite iz Directory.Name; Product.InitialPrice = String(SelectionFromDirectory.InitialPrice); AllProducts.Add(Product); EndCycle; //upisujemo podatke i zatvaramo datoteku FactoryXDTO.WriteXML(WriteToFile, AllProducts); WriteInFile.Close();

Razmatrani mehanizmi su prilično univerzalni i, ako su pravilno konfigurirani, mogu riješiti većinu problema. Međutim, postoji dosta nijansi u interakciji između 1C i XML-a. Mnogo je efikasnije proučavati ih u realnim uslovima, a ne na test zadacima u kojima obrada XML fajla rešava prilično uske probleme.

Ovo poglavlje će vam pokazati kako pisati XML šeme. Također ćete naučiti da se dijagram može napisati na različite načine.

XML dokument

Pogledajmo ovaj XML dokument pod nazivom "shiporder.xml":

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

Ola Nordmann

Langgt 23

4000 Stavanger
Norveška


Empire Burlesque
Specijalno izdanje
1
10.90


Sakrij svoje srce
1
9.90

Gornji XML dokument se sastoji od osnovnog elementa, "shiporder", koji sadrži traženi atribut pod nazivom "orderid". Element "shiporder" sadrži tri različita podređena elementa: "orderperson" , "shipto" i "item" . Element "stavka" se pojavljuje dva puta i sadrži element "naslov", opcioni element "napomena", element "količina" i element "cijena".

Gornji red: Xmlns: XSI="http://www.w3.org/2001/XMLSchema-instance" govori XML parseru da bi ovaj dokument trebao biti potvrđen shemom. Red: XSI: noNamespaceSchemaLocation = "shiporder.xsd" označava gdje se nalaze šeme (ovdje se nalazi u istom folderu kao i "shiporder.xml") .

Kreiranje XML šeme

Sada želimo da kreiramo šemu za gornji XML dokument.

Počećemo otvaranjem nove datoteke, koju ćemo nazvati "shiporder.xsd". Da bismo kreirali šemu, mogli bismo jednostavno pratiti strukturu u XML dokumentu i definirati svaki element kako ga pronađemo. Počećemo sa standardnom XML deklaracijom praćenom elementom xs:schema koji definira shemu:



...

U gornjoj šemi koristimo standardne prostore imena (xs), a URI povezan sa ovim prostorom imena je definicija jezika šeme, koja ima standardnu ​​vrijednost http://www.w3.org/2001/XMLSchema.

Zatim moramo definirati element "shiporder". Ovaj element ima atribut i sadrži druge elemente, pa ga tretiramo kao složeni tip. Podređeni elementi elementa "shiporder" okruženi su elementom sekvence xs: koji definira uređeni niz podelemenata:




...


Zatim moramo definirati element "orderperson" kao jednostavan tip (pošto ne sadrži nikakve atribute ili druge elemente). Tip (xs:string) ima prefiks prefiksa imenskog prostora pridruženog XML shemi, koja specificira unaprijed definirani tip podataka sheme:










Uz pomoć šema možemo odrediti broj mogućih pojavljivanja za element sa atributima MaxOccurs i MinOccurs. MaxOccurs specificira maksimalni broj pojavljivanja za element, a MinOccurs specificira minimalni broj pojavljivanja za element. Zadana vrijednost za MaxOccurs i MinOccurs je 1!

Sada možemo definirati element "item". Ovaj element se može pojaviti više puta unutar elementa "shiporder". Ovo se određuje postavljanjem atributa maxOccurs elementa "item" na "unbounded", što znači da može postojati onoliko pojavljivanja elementa "item" koliko autor želi. Imajte na umu da element "napomena" nije obavezan. Ovo smo definirali postavljanjem atributa minOccurs na nulu:










Sada možemo deklarirati atribut "shiporder" elementa. Pošto je ovo obavezan atribut, navodimo use="required".

Napomena: Izrazi atributa uvijek moraju biti zadnji:

Evo kompletne liste datoteke šeme pod nazivom "shiporder.xsd":





























Odvojena kola

Prethodna metoda dizajna je vrlo jednostavna, ali može biti teška za čitanje i održavanje kada su dokumenti složeni.

Sljedeća metoda dizajna temelji se na definiranju svih elemenata i atributa, a zatim na njihovom referenciranju pomoću atributa ref.

Evo novog dizajna šematske datoteke ("shiporder.xsd"):








































Korištenje imenovanih tipova

Treći metod dizajna definiše klase ili tipove, što omogućava ponovnu upotrebu definicija elemenata. Ovo se postiže imenovanjem elemenata simpleTypes i complexTypes, a zatim upućivanjem na njih kroz atribut tipa elementa.

Evo trećeg dizajna šematske datoteke ("shiporder.xsd"):

































Element ograničenja pokazuje da je tip podataka izveden iz imenskog prostora tipa podataka W3C XML Schema. Dakle, sljedeći isječak znači da vrijednost elementa ili atributa mora biti vrijednost niza:

Element ograničenja se češće koristi za primjenu ograničenja na elemente. Pogledajte sljedeće linije sa gornjeg dijagrama:





Ovo specificira da vrijednost elementa ili atributa mora biti niz, mora biti točno šest znakova po redu, a ti znakovi moraju biti broj između 0 i 9.

XDTO je 1C mehanizam koji je potreban za kreiranje i korištenje web servisa u 1C.

XDTO 1C paketi vam omogućavaju da opišete strukturu potrebne XML datoteke za pretvaranje podataka u i iz XML-a.

Za one koji su zainteresovani, pogledajmo pitanje detaljnije.

XML datoteke se prenose preko Interneta i mogu ih čitati mnogi programi.

Oni se percipiraju - to znači da je ugrađeno u njihov kod - ako naiđete na određeni naziv elementa u XML datoteci - percipirajte ga ovako i uradite ovo.

Stoga, ako koristimo naziv elementa Apple, onda postoji prilično velika šansa da neki drugi program “misli” da je to Apple koji poznaje, ali mi smo mislili nešto svoje.

Da se to ne bi dogodilo i da bi se jasno naznačilo da se naš Apple razlikuje od svih ostalih, u datoteci se može navesti ime prostora imena - prefiks koji se koristi ispred naziva elemenata.

Imenski prostor (na engleskom namespace) je definiran ovako - xmlns:SpaceName = “URL”, na primjer:
xmlns:store = "http://store.ru"

Zašto vam treba URL?

Stoga je specificiran određeni jedinstveni identifikator, koji također identificira autora imenskog prostora.

Naravno, pretpostavlja se da je osoba koja je naznačila imenski prostor izuzetno poštena osoba i navela je svoju stranicu i da ne koristi više različitih imenskih prostora na jednom mjestu.

Usput, oni obično ne ukazuju samo na URL web-mjesta, već i na URL određene mape na web-mjestu, tako da, ako se nešto dogodi, možete kreirati drugi imenski prostor u drugoj mapi na web-mjestu za korištenje u drugačijoj situaciji.

Objekt je specifična struktura podataka, samodovoljna, koja sadrži sve svoje podatke.

Pošto su strukturirani podaci opisani u XML-u, odnosno u obliku strukture koja ima svoja svojstva itd., na njih se može gledati kao na objekte.

U datom primjeru, ovo bi mogao biti LIST objekt sa svojstvom i ugniježđenim elementom.

DOM je način tretiranja XML datoteke ne kao teksta u određenom formatu, već kao kolekcije objekata sa svojstvima, poljima i tako dalje.

Opis XML datoteke

Ako stalno koristimo datoteku određene strukture za razmjenu između dva programa, vjerovatno bismo željeli:

  • Da se koriste određena imena
  • Da imamo one elemente koje očekujemo (koji "moraju postojati da bi se koristili u našoj razmjeni")
  • Tako da atributi sadrže tipove koje očekujemo (string, broj, itd.).

Sljedeći standardi formata datoteke postoje za opis XML strukture (koji se također pohranjuju u običnu tekstualnu datoteku):

  • DTD ekstenzija – Definicija tipa dokumenta
  • XSD ekstenzija – XML Shema.

Oba formata opisuju kakav bi dokument trebao biti. Procedura za provjeru da li je XML usklađen sa standardom opisanim u takvoj datoteci naziva se provjera.

XDTO 1C je alat koji vam omogućava da dodate opis XML datoteke u konfiguraciju. Ili bolje rečeno, nije opisana datoteka, već specifične XML strukture.

Za označavanje tipova koji se mogu koristiti, koristi se lista ili biblioteka tipova, koja se naziva XDTO 1C fabrika.

Ova fabrika specificira i jednostavne tipove (string, broj, datum) koji se obično koriste u drugim jezicima, programima itd., ali i 1C tipove, koji se koriste u 1C iu specifičnoj konfiguraciji.

Sama fabrika XDTO 1C sastoji se od nekoliko paketa. Osnovni tipovi su opisani u paketu pod nazivom www.w3.org

Trenutni tipovi podataka o konfiguraciji opisani su u paketu http://v8.1c.ru/8.1/data/enterprise/current-config

Sami tipovi su imenovani prema nazivu u konfiguratoru uz dodatak obrasca na engleskom jeziku (CatalogRef, CatalogObject, DocumentRef, DocumentObject), na primjer:

CatalogObject.Nomenclature

Dodavanje paketa XDTO 1C

Sve ovo svakako zvuči cool. I još nismo došli do teme XSLT-a – načina da se XML datoteke transformišu u nešto drugo, kao što je HTML. Tema XML-a je izuzetno velika i teško ju je pokriti čak i u posebnoj knjizi.

Naš zadatak je da shvatimo da nam XDTO 1C omogućava da opišemo koje elemente treba da ima XML paket koji treba da se generiše ili pročita.

XDTO 1C paketi se nalaze u konfiguraciji u grani General/XDTO 1C Packages.

XDTO paket možete dodati u 1C ručno (cool!), Ali bolje je nabaviti odgovarajuću XSD datoteku sa gotovim opisom sheme.

Opis XSD šeme za objekte bilo koje konfiguracije može se dobiti klikom na granu General/XDTO 1C Packages i odabirom stavke menija Izvezi šemu XML konfiguracije.

Datoteka je tekstualna, možete je uređivati ​​u Windows Notepad-u, uklanjajući nepotrebne objekte koji vam nisu potrebni.

Možete dodati gotovu XSD shemu u 1C tako što ćete desnim klikom miša kliknuti na granu General/XDTO 1C paketi i odabrati stavku menija Uvoz XML sheme.

Korištenje mehanizma XDTO 1C

Rad sa XDTO 1C znači pretvaranje vrijednosti u i iz XML-a.

Rad se izvodi pomoću objekata 1C jezika Čitanje XML-a/Pisanje XML-a.

Kada radite sa mehanizmom XDTO 1C, morate navesti paket sa kojim radite. Ovo može biti standardni paket (o kojem je gore bilo riječi, pogledajte XDTO) ili paket dodan u konfiguraciju. Paket se identificira po URL-u navedenom u paketu.

Dva glavna jednostavna načina rada su:

  • Serijalizacija - automatska konverzija vrijednosti iz 1C u XML i obrnuto
  • Kreiranje objekta, popunjavanje njegovih polja, pisanje u XML (i, shodno tome, čitanje iz XML-a i zatim čitanje njegovih polja).

Primjer serijalizacije vrijednosti:
Serializator = Novi serijalizerXDTO(FactoryXDTO);
XML datoteka = Novi XML unos();
FileXML.OpenFile("Ime datoteke");
Serializer.WriteXML(XMLFile, Value1C);

Primjer čitanja/pisanja objekta:

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