1c xml perustuu xsd-skeemaesimerkkiin. Lyhyt kuvaus XML-tiedoston luomisesta XSD-mallilla käyttämällä esimerkkiä liittovaltion tulliviranomaisen tilastoraportoinnin lataamisesta. XDTO-paketin lisääminen

Huomautus: XML Data Schemas (XSD). XSD-skeeman luominen Visual Studio .NET:ssä. Kirjoitetun DataSet-objektin luominen. Tietojen hankkiminen DataSet-objektin rakenteesta. XML-asiakirjojen ja XSD-skeemojen lataaminen kirjoitettuihin ja tavallisiin DataSet-objekteihin. ReadXml- ja ReadXmlSchema-menetelmät. Tyypityn ja tavallisen DataSet-objektin sisällön ja rakenteen tallentaminen. WriteXml ja WriteXmlSchema menetelmät

Kirjoitettu DataSet-objekti. XML-dokumenttien lukeminen ja kirjoittaminen

XML Data Schemas (XSD)

Tietoskeemat 1 XML Schema Documentin tarkka käännös -< XML-dokumenttiskeema> käytämme kuitenkin edelleen termiä "XML-tietoskeema". XSD (XML Schema Document, XSD) on vaihtoehtoinen tapa luoda sääntöjä XML-dokumenteille. Verrattuna DTD:hen skeemat ovat tehokkaampia monimutkaisten tietorakenteiden määrittelyssä, tarjoavat selkeämmän tavan kuvata kielen kielioppia ja niitä voidaan helposti modernisoida ja laajentaa. XSD-skeema voi sisältää seuraavat tiedot:

  • tietoelementtien välisten suhteiden esitys, joka on samanlainen kuin relaatiotietokannan taulukkojen väliset vierasavainsuhteet;
  • ensisijaista avainta muistuttavien yksilöllisten tunnisteiden esitys;
  • tyyppispesifikaatio tiedot jokaiselle yksittäiselle elementille ja attribuutille XML-dokumentissa.

Luodaksesi tietoskeeman Visual Studio .NET:ssä, siirry päävalikon kohtaan File\New\File ja valitse malliluettelosta XML Schema (katso kuva 11.3). Näyttöön tulee ikkuna, jossa lukee "Aloita vetämällä objektit Server Explorer- tai Toolbox-ikkunasta työtilaan (suunnittelualueelle) tai napsauttamalla hiiren kakkospainikkeella" (Kuva 11.1):


Riisi. 11.1.

Asia on siinä, että olemme suunnittelutilassa. Vaihda kooditilaan napsauttamalla painiketta (XML):

Ensimmäinen rivi on tuttu osoitus siitä, että skeema on XML-dokumentti, jonka juurielementti on xs:schema . xs-etuliite: asettaa etuliitteen kaikki skeeman elementit osoittamaan sen nimiavaruutta. Toisella rivillä on pitkä, yksityiskohtainen ja usein täysin tarpeeton kuvaus skeemasta (vertaa vastaavaan koodiin HTML-sivuille). Oikean toiminnan varmistamiseksi riittää, että rajoitamme itsemme seuraavaan esitykseen:

Studion sisäänrakennetut visualisointityökalut kuitenkin olettavat tämän "otsikon" olemassaolon, joten sitä ei pidä poistaa. Tiettyä XML-dokumenttia kuvaavan skeeman luominen Visual Studio .NET:ssä on melko yksinkertainen tehtävä. Luodaan seuraava XMLEasy.xml-dokumentti:

1

Siirrymme (Data)-välilehteen ja näemme vain yhden merkinnän (kuva 11.2).


Riisi. 11.2.

Voit luoda tätä dokumenttia kuvaavan skeeman useilla tavoilla: valitse päävalikosta kohta ”XML \ Create Schema” (Kuva 11.3, A), XML-tilassa valitse sama kohde kontekstivalikosta (kuva 1). 11.3, B), valitse XML-tilassa sama kohde kontekstivalikosta (Kuva 11.3, B), Data-kohdassa valitse tämä kohde kontekstivalikosta (Kuva 11.3, C) ja lopuksi Data-tilassa napsauta XML-työkalurivin painiketta (kuva 11.3, D).


Riisi. 11.3.

Joka tapauksessa asiakirjan ääriviivat näkyvät taulukon muodossa (kuva 11.4). Jätetään Schema-tila toistaiseksi ja siirrytään (XML)-tilaan.


Riisi. 11.4.

Ympäristö loi XML-koodin, joka kuvaa dokumentin rakennetta:

Tämä sisältää myös kuvauksen, jota tarvitaan skeeman jatkokäsittelyyn ADO .NET -objektien avulla. Lähde-XMLEasy.xml-asiakirjassa ilmestyi linkki tietoskeemaan:

XMLEasy.xsd-asiakirja luotiin automaattisesti samaan hakemistoon, jossa XMLEasy.xml sijaitsee.

Jotta voit oppia ymmärtämään XSD-skeemoja, sinun tulee ensin käsitellä tietojen kuvausta sen puhtaassa muodossa ilman lisäelementtejä. Taulukko 11.1 näyttää useita yksinkertaisia ​​XML-asiakirjoja ja niiden skeemoja, jotka on luotu sitomatta ADO .NET -objekteihin.

Taulukko 11.1. Esimerkkejä XSD-skeemojen luomisesta
XML-dokumentin sisältö XSD-skeeman sisältö

1

Kuvaus
XMLEasy.xml-asiakirjassa TOUR-elementti on juurielementti, joka sisältää IDTOUR-alaelementin. Juurielementin yleinen kaavio on seuraava:

: Elementin sisältö...

Lapsielementit kuvataan seuraavasti:

XML-dokumentin sisältö XSD-skeeman sisältö

1 Kypros 25 000,00 RUB Kahden aikuisen kupongin hinta sisältää yhden lapsen (korkeintaan 7-vuotiaan) hinnan 2 Kreikka 32 000,00 RUB Erikoisalennukset ovat voimassa elo- ja syyskuussa 3 Thaimaa 30 000,00 RUB Ei sisällä lentolippuja 4 Italia 26 000,00 RUB Aamiainen hotellissa sisältyy retken hintaan 5 Ranska 27 000,00 RUB Lisämatkat eivät sisälly kierroksen hintaan

Kuvaus
Juurielementti TABLE sisältää TOUR-elementin, joka puolestaan ​​koostuu ryhmästä lapsielementtejä. Valintaelementti ohjaa muiden elementtien valintaa, ja maxOccurs-attribuutin "rajoittamaton" arvo osoittaa, että TOUR-ryhmät voivat olla rajoittamattomia.

: :

XML-dokumentin sisältö XSD-skeeman sisältö

1 Kypros 25 000,00 RUB 1 Kahden aikuisen kupongin hinta sisältää yhden lapsen (korkeintaan 7-vuotiaan) hinnan


Riisi. 11.5.
Kuvaus
IDTOUR-elementin tietotyypiksi asetettiin int, CLOSED-elementin tietotyypiksi asetettiin boolean ja loput määritettiin oletusmerkkijonotietotyypiksi. Voit muuttaa tietotyyppiä suoraan XML-tietoskeematilassa, mutta on kätevämpää käyttää Schema-tilaa (tässä tapauksessa tilan nimi on DataSet) valitse tietotyyppi pudotusvalikosta (kuva 11.5). :

Kurssiohjelmistosta löydät kaikki tämän taulukon tiedostot XSD-kansiosta (Koodi\Glava5\XSD).

Tietotyypin asettaminen XML-dokumenttiin (Taulukko 11.1 on viimeisin esimerkki) on yksi tapa rajoittaa sisältöä. Lisäattribuutteja käytetään rajoittamaan tietyn tyypin arvoa. Seuraavassa skeeman fragmentissa PRICE-elementin arvon on oltava välillä 50–100:

Voit rajoittaa XML-dokumentin joihinkin kiinteisiin arvoihin käyttämällä seuraavaa rakennetta:

Tässä NAME-elementti voi ottaa vain yhden kiinteän arvon viidestä maan nimestä.

XSD-skeeman kehittäminen on melko paljon työtä. Visual Studio .NET:n visuaaliset työkalut tekevät tästä tehtävästä paljon helpompaa. Peruskäsitteiden hallitsemiseksi on suositeltavaa opetella useita automaattisesti luotuja XML-dokumenttiskeemoja. Taulukoissa 11.2-11.4 on kuvaus tärkeimmistä elementeistä ja määritteistä, joita voidaan kohdata.

Taulukko 11.2. XSD Schema Elements
Elementti Kuvaus
kaikki Sisäkkäiset elementit voidaan määrittää missä tahansa järjestyksessä
huomautus Kommenttielementtien yläelementti Ja
minkä tahansa Kaikki sisäkkäiset elementit
mikä tahansa Attribuutti Kaikki attribuutit
appInfo Kommenttielementti. Määrittää skeeman otsikon
attribuutti Attribuutti
attribuuttiryhmä Attribuuttiryhmä
valinta Muiden elementtien valinta. Analogi operaattorille "|" DTD:ssä
monimutkainen sisältö Rajoitukset tai mallin laajennuksia monimutkainen sisältötyyppi
monimutkainen tyyppi Monimutkainen elementti
dokumentointi Kommenttielementti. Tarjoaa tietoja skeemasta
elementti Elementti
laajennus Elementin laajennukset
ala Kenttäilmoitus. Sovelletaan elementin sisällä kenttien määrittämiseen
ryhmä Elementtien ryhmä
tuonti Tyyppimäärityksen tuonti toisesta skeemasta
sisältää Eri skeeman sisällyttäminen olemassa olevaan nimiavaruuteen
avain Elementin tai attribuutin määrittäminen avaimella, joka osoittaa toiseen elementtiin
keyref Elementin tai attribuutin määrittäminen, johon avain osoittaa
lista Elementti, joka voi sisältää arvoluettelon
uudelleenmääritellä Ohitetaan jo ilmoitettuja elementtejä
rajoitus Elementin rajoitus
kaava Kaavan juurielementti
valitsin Valitsija XML-elementtien valitsemiseen
järjestys Muiden elementtien järjestys. Analogi operaattorille "," DTD:ssä
yksinkertainen sisältö Malli, jonka sisältö edustaa vain merkkidataa
yksinkertainen Tyyppi Yksinkertainen elementti
liitto Elementti tai attribuutti, jolla voi olla useita merkityksiä
ainutlaatuinen Elementti tai attribuutti, jolla on oltava yksilöllinen arvo
Taulukko 11.3. Attribuutit - XSD Schema Limitations
Attribuutti Kuvaus
numeration Luettelo arvoista
pituus Pituus
Maksimi pituus Suurin pituus
minPituus Minimipituus
maxExclusive Suurin arvo
max Sisältää Enimmäisarvo mukaan lukien
minExclusive Minimiarvo
MinInclusive Vähimmäisarvo mukaan lukien
murtonumerot Desimaalien määrä murtoluvuissa
TotalDigits Numeroiden määrä
kuvio Näyte (kuvio) elementin sisällöstä
oletuksena Oletuselementin tai attribuutin arvo
elementFormDefault Paikallisen elementin ominaisuuksien asettaminen globaalisti määritellyiksi
korjattu Kiinteä elementin tai attribuutin arvo
muodossa Paikallisesti ilmoitetut elementit määritellään tietyissä asiakirjainstanssissa
itemType Luettelokohteen tyyppi
jäsentyypit Liitossa käytetyt jäsentyypit
max Tapahtuu Elementin esiintymien enimmäismäärä
minTapahtuu Elementin esiintymisten vähimmäismäärä
sekoitettu Sekatyyppisen elementin määrittäminen
nimi Elementin tai määritteen nimi
nimiavaruus Nimiavaruus
noNamespace Määritä kaavamaisen asiakirjan sijainti,
SchemaLocation joilla ei ole tuloksena olevia nimiavaruuksia
nollattavissa Sen määrittäminen, että elementillä voi olla tyhjä NULL-arvo (nolla)
viite Viittauksen asettaminen globaalisti määriteltyyn elementtiin
schemaLocation Piirin paikantaminen
korvausryhmä Elementtien korvaamisen määrittäminen muilla elementeillä
targetNamespace Tuloksena oleva skeeman nimiavaruus
tyyppi Kohteen tyyppi
käyttää Onko elementti pakollinen vai ei?
arvo Kaavioelementin arvo
xsi:nil Tyhjän (NULL) elementin todellisen sisällön asettaminen XML-dokumentissa
xsi:schemaLocation Elementin todellinen sijainti XML-dokumentissa
xsi:tyyppi Elementin todellinen tyyppi XML-dokumentissa

Tehtävä luoda XML-tiedosto perustuen XSD-skeemaan ilmestyi. Foorumeilta etsiminen johti suureen määrään keskustelua prosessin väärinymmärryksestä ja vain muutamaan artikkeliin, jotka selittivät olemuksen. Ihmiset esittivät kysymyksiä, kamppailivat ratkaisun kanssa, mutta kun ongelma antoi periksi, he yksinkertaisesti katosivat kuvailematta mekanismia. Tämä sai aikaan yksinkertaisen kuvauksen luomisesta prosessista.
P.S. Älä kiroile liikaa, tavoitteeni ei ollut luoda jonkinlaista tieteellistä artikkelia tiukasti oikeaa terminologiaa käyttäen, vaan yksinkertaisesti auttaa ottamaan ensimmäinen askel kohti erittäin tehokkaan XML-vaihtomekanismin ymmärtämistä.
P.P.S. Minun on heti tehtävä varaus, että artikkeliin liitetty lataustiedosto on vain malli, joka luo vain osan vaaditusta XML-tiedostorakenteesta, koska työni tämän latauksen parissa oli luonteeltaan varsin opettavaista (edellisen vientiasiakirjan kopioiminen FCS:n verkkosivuilta ja vain Tuotteiden taulukkoosan lataaminen Excel-tiedostosta tuntui tehokkaammalta ratkaisulta), eikä ajanpuute mahdollistanut Minun on saatava koko rakenteen luominen päätökseen perustuen vain perfektionismiin.

Joten rekisteröitymisen jälkeen FCS-verkkosivustolla kävi selväksi, että viennin tilastoraportointiasiakirjojen luomiseksi on tarpeen ladata tiedot Tavaroiden ja palveluiden kaupan hallintaasiakirjoista ja luoda tiedosto ladattavaksi.

Latausvaihtoehtoja on kaksi.

Ensinnäkin: ladattiin taulukkoosa Tuotteet Excel-tiedostosta (tämä vaihtoehto valittiin toimivaksi vaihtoehdoksi, koska sillä oli se etu, että ei tarvinnut vaivautua dokumentin "Otsikko" käsittelyyn, vaan voit yksinkertaisesti kopioida edellinen, muuttamalla sitä "Otsikko" "mitä vaadittiin).

Toiseksi: XML-tiedoston luominen FCS:n verkkosivustolta ladatun järjestelmän mukaisesti "sähköisten asiakirjalomakkeiden muotojen albumin" muodossa. Albumi sisältää melko suuren määrän XSD-malleja. He löysivät kaavion "Tavaroiden liikkeen kirjanpidon tilastollisesta lomakkeesta" ja lisätiedostoja, joissa oli kuvaukset sen tyypeistä. Kaaviot ovat käsiteltynä arkiston artikkelin liitteenä.

XSD-skeemojen katseluun käytimme ilmaista Microsoft XML Notepad 2007:ää.

Kuvassa on päätiedosto XSD-skeemalla "Tilastolomake tavaroiden liikkeen kirjanpitoon". Kuva korostaa XSD-järjestelmän päälohkot, jotka meidän on ymmärrettävä.

Kaaviosta on selvää, että meidän on saatava XML-tiedosto, joka on täytetty StaticFormType-tyypin "xs:element" -haarassa määritellyllä rakenteella.

Rakenne voi olla melko monimutkainen (kuten meidän tapauksessamme). Tyyppikuvaukset ovat suoraan haarassa, erilliseen haaraan tai jopa toiseen tiedostoon.

Tämän rakenteen tyyppi on StaticFormType, joka puolestaan ​​koostuu perustyypistä BaseDocType, joukosta erityyppisiä ja tekstiattribuutteja olevia objekteja.

Perustyyppi BaseDocStyle on määritelty eri tiedostossa (ja nimiavaruudessa)
.

Tämä tiedosto sisältää monia tyyppejä, joita ei käytetä meidän tapauksessamme.

Siirrytään nyt työskentelemään 1C:ssä. Lyhyesti sanottuna, mitä meidän on tehtävä, on seuraava:

1. XDTO Factoryä luodaan

OurFactoryXDTO = CreateFactoryXDTO(ArrayFullFileNamesWithXSDSchemas);

2. XDTO-tehtaalla luodaan kaikki monimutkaiset tietotyypit, jotka sitten täytämme luotuun XML-tiedostoon:

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

Tiettyyn tyyppiin sisältyvät tietotyypit voidaan saada sen ominaisuuksien kokoelmasta:

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

3. Kun kaikki monimutkaiset tietotyypit on luotu, luomme niiden pohjalta XML-tiedostorakenteen, joka koostuu XDTO Factory -objekteista:

StaticFormType_XDTOObject = OmaXDTOFactory.Create(StaticFormType); // kokoelma asiakirjoilla NewDocuments = MyFactoryXDTO.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "Raatikirja"); NewDocuments.PrDocumentNumber = MyFactoryXDTO.Create(PrDocumentNumberType, "123-numero"); NewDocuments.PrDocumentDate = MyFactoryXDTO.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(New Documents);

Täytä samalla perustiedot (yksinkertaiset tyypit).

4. Lopuksi puramme kaiken XDTO Factoryn tiedostoon:

XML-tiedosto = Uusi XML-merkintä(); FileXML.OpenFile(Tiedostonimi); FileXML.WriteXMLDeclaration(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

P.S. Arkisto sisältää latausmallitiedoston XML-muodossa (vain jotkin tiedot luodaan, mikä heijastaa kaikkia tapauksia, joissa tiedosto on täytetty) ja XSD-skeemoja.

Pura kaikki tiedostot tiettyyn hakemistoon.

XML luodaan siihen.

XML-muoto on erittäin suosittu vaihdettaessa erilaisia ​​tekstidokumentteja tietojärjestelmien välillä. Mahdollisuus luoda asiakirjoille ainutlaatuinen rakenne mahdollistaa sen käytön monilla aloilla - sähköisissä kirjastoissa, WEB:ssä, tuonnissa/viennissä ja monilla muilla. Ilman kykyä työskennellä kätevästi tämän muodon kanssa, 1C-järjestelmät eivät olisi saavuttaneet tällaista suosiota. Koska 1C käyttää aktiivisesti WEB-teknologioita, jokaisen kehittäjän on kyettävä lukemaan XML:ää ja kirjoittamaan siihen tietoja.

XML-tiedostojen esitys ja lukeminen

Yksi XML-kuvauskielen tärkeimmistä eduista on sen melko kätevä ja intuitiivinen rakenne ja syntaksi. Sitä luodessaan kirjoittajat asettivat tavoitteeksi luoda merkintäkielen, jota sekä ihmisten että tietokoneiden olisi helppo lukea. Nykyään XML on laajalti kehitetty muihin muotoihin, mutta se on edelleen suosittu ja laajalti käytetty. XML-tiedoston rakenne on rakennettu seuraavan kaavan mukaan:

Jos tarkastellaan esimerkkiä tietojen tuomisesta 1C:hen, edellä esitetty tiedosto riittää. Jotta kirjallinen toimintosarja pystyy lukemaan XML-tiedoston, riittää, että siihen välitetään polku itse tiedostoon. Tämä voidaan tehdä käyttöliittymän kautta, jolloin käyttäjät voivat määrittää tiedoston itse, tai tekstin kovakoodatulla käsittelyllä.

Yksi suosituimmista tavoista työskennellä XML:n kanssa, jonka koko on enintään 100 Mt 1C:ssä, on käyttää Document Object Model (DOM) -mallia. Sen tarkoitus on käsitellä peräkkäin kaikki XML:ssä esitetyt asiakirjasolmut. Sisäänrakennetussa 1C-kielessä tämä algoritmi näyttää tältä:

  1. Selvitys mekanismeista, joilla XML-tiedosto luetaan; Silmukka solmujen läpikulkuun;
  2. Datan ja attribuuttien lukeminen solmussa;
  3. Tietojen ulostulo. Tarvittaessa tässä vaiheessa kirjoittaminen voi tapahtua muuttujiin tai suoraan tarvittaviin taulukoihin;
  4. Mekanismin valmistuminen.
&OnServer-menettely ReadOnServer(PathToFile) //mekanismien ilmoitus Lukumekanismi = Uusi ReadingXML; Reader.OpenFile(PathToFile); Builder = Uusi BuilderDOM; Asiakirja = Builder.Read(Reader); //silmukka solmujen läpikulkuun Jokaiselle elementille From Document.DocumentElement.ChildrenNodes Silmukka //tietojen lukeminen If element.NodeName = "Tuote" Sitten tuote = elementti; Jokaiselle arvolle From product.ChildrenNodes Cycle Jos arvot.NodeName = "Nimi", sitten Nimi = arvot; Väri = Name.Attributes.GetNamedElement("Väri"); ElseIf values.NodeName = "Hinta" sitten Hinta = arvot; Valuutta = Cost.Attributes.GetNamedItem("Valuutta"); loppu Jos; EndCycle; //tulostusviestit Notify("Nimi: " + Nimi.Tekstisisältö + "; väri: "+Väri.Arvo +"; Hinta: "+Kustannus.Tekstisisältö + "; Valuutta: "+Valuutta.Arvo); loppu Jos; EndCycle; //mekanismin sulkeminen Non-MechanismReading.Close(); Menettelyn loppu

Tämän seurauksena näytämme käyttäjälle viestejä tuoduista tiedoista. Voit myös sijoittaa kaikki tiedot haluttuun rakenteeseen ja ohjelmoida sen perusteella dokumentin tai merkintöjen luomisen hakemistoon. 1C-työn nopeus xml:n kanssa on melko korkea, joten tätä muotoa käytetään yhä enemmän tietojen vaihdossa muiden lähteiden kanssa.

Tietojen lataamiseksi meidän on myös oltava vuorovaikutuksessa XML-tiedostojen kanssa. Katsotaanpa esimerkkiä tietueesta, joka käyttää 1C-alustan objektia XML Record ja lataa kohteen tiedot. Sen tärkeimmät edut ovat koodin yksinkertaisuus ja tietojenkäsittelyn nopeus. Palvelinpuolen algoritmi XML-tiedoston kirjoittamiseen voidaan esittää useana peräkkäisenä vaiheena:

  1. Yhdistä xml-tiedostoon;
  2. Luomme pääelementtejä ja kirjoitamme niihin dataa. Jos haluat ladata suuren määrän tietoa XML-tiedostoon, käytät tässä vaiheessa silmukoita. Ole varovainen ja muista, että tietopyyntö on tehtävä ennen silmukkaa, ei siinä;
  3. Sulje tiedosto.
//avaa tiedosto Nomenclatura.xml ja kirjoita head-elementti RecordVFile = New RecordXML(); WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); WriteInFile.3writeStartItem("Tuotteet"); //valitse tietueen tiedot SelectionFromDirectory = Directories.Nomenclature.Select(); //sykli, jossa tallennus tapahtuu, kun SelectingFromDirectory.Next() cycle //kirjoitetaan uutta tietoa RecordToFile.RecordBeginningElement("Tuote"); RecordInFile.RecordAttribute("Nimi", SelectionFromDirectory.Name); WriteToFile.WriteAttribute("Alkuhinta", Line(SelectionFromDirectory.InitialPrice)); WriteToFile.WriteEndElement(); EndCycle; //Sulje head-elementti ja tiedosto WriteVFile.WriteEndElement(); WriteInFile.Close();

XDTO-mekanismi 1C:ssä

1C-yrityskehittäjät ovat luoneet oman mekanisminsa tiedonvaihtoon XML - XDTO (XML Data Transfer Objects) -muodossa. Versiosta 8.1 alkaen alustalla on mahdollisuus vaihtaa tietoja muiden järjestelmien kanssa ilman XML-tiedoston luomiseen liittyviä ongelmia. 1C hoitaa suurimman osan teknisistä ongelmista, ja meidän tarvitsee vain ilmoittaa XML:n luomiseen tarvittavat tiedot. Totta, tätä varten kehittäjän on tehtävä joitain manipulaatioita etukäteen.

XML-tiedoston lataamiseksi XDTO:lla meidän on kerrottava 1C:lle tiedoston rakenne. Se lähetetään kaavioiden avulla, jotka voidaan luoda tekstieditorissa tai käyttämällä erikoisohjelmaa. Tuloksena olevan tiedoston tulee kuvata XML-tiedostossa käytetty yleinen rakenne ja tietotyypit. Ennen uuden XML:n lukemista tai kirjoittamista kehittäjän on ladattava skeemansa XDTO-pakettien kokoonpanoon.

Tässä tapauksessa luomme yksinkertaisen paketin käsin, jotta 1C ymmärtää esimerkkitiedostomme rakenteen. Jotta tiedostojen luominen onnistuisi, meidän on heijastettava skeemassa, että meillä on head-elementti ja liite attribuuteineen. Luotu skeema tulee viedä tiedostoon xsd-muodossa ja siirtää xml:n mukana, jotta toisen osapuolen ei tarvitse käsitellä rakennetta ja luoda xdto-pakettia uudelleen.


Palvelinalgoritmi, joka on samanlainen kuin edellinen, auttaa sinua tallentamaan uuden XML:n kiintolevyllesi. Ainoa ero on tarve lisätä tiedot yhdestä tuotteesta XDTO-tehtaan - 8.3 1C -alustan erikoismekanismiin. Jos on tarvetta luoda lisää sisäkkäitasoja, sinun on kuvattava jokainen pääelementti.

//Avaa XML-tiedosto RecordVFile = Uusi RecordXML; WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); //Ilmoita 1C:lle, minkä tyyppistä dataa tulisi luoda - head elementti AllProducts = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Products")); //valitse tiedot ladattavaksi SelectionFromDirectory = Directories.Nomenclature.Select(); //Lisää yksittäisiä tuotteita head-elementtiin While Select from Directory.Next() cycle Product = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Tuote")); Product.Name = Valitse hakemistosta Directory.Name; Product.InitialPrice = Merkkijono(ValintaHakemistosta.Alkuhinta); KaikkiTuotteet.Lisää(Tuote); EndCycle; //kirjoita tiedot ja sulje tiedosto FactoryXDTO.WriteXML(WriteToFile, AllProducts); WriteInFile.Close();

Tarkasteltavat mekanismit ovat varsin yleismaailmallisia ja oikein konfiguroituina voivat ratkaista useimmat ongelmat. 1C:n ja XML:n vuorovaikutuksessa on kuitenkin melko paljon vivahteita. On paljon tehokkaampaa tutkia niitä todellisissa olosuhteissa, ei testitehtävissä, joissa XML-tiedoston käsittely ratkaisee melko kapeita ongelmia.

Tässä luvussa kerrotaan, kuinka XML-skeemoja kirjoitetaan. Opit myös, että kaavio voidaan kirjoittaa eri tavoin.

XML-dokumentti

Katsotaanpa tätä XML-dokumenttia nimeltä "shiporder.xml":

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

Ola Nordmann

Langgt 23

4000 Stavanger
Norja


Empire Burlesque
Erikoispainos
1
10.90


Piilota sydämesi
1
9.90

Yllä oleva XML-dokumentti koostuu juurielementistä "shiporder", joka sisältää pakollisen attribuutin nimeltä "orderid". "shiporder"-elementti sisältää kolme erilaista alielementtiä: "orderperson" , "shipto" ja "item" . "Tuote"-elementti näkyy kahdesti, ja se sisältää "title"-elementin, valinnaisen "huomautus"-elementin, "quantity"-elementin ja "price"-elementin.

Yllä oleva rivi: Xmlns: XSI="http://www.w3.org/2001/XMLSchema-instance" kertoo XML-jäsentimelle, että tämä asiakirja on skeema validoitu. Rivi: XSI: noNamespaceSchemaLocation = "shiporder.xsd" osoittaa, missä kaaviot sijaitsevat (tässä se on samassa kansiossa kuin "shiporder.xml") .

XML-skeeman luominen

Nyt haluamme luoda skeeman yllä olevalle XML-dokumentille.

Aloitamme avaamalla uuden tiedoston, jota kutsutaan nimellä "shiporder.xsd". Kaavan luomiseksi voisimme yksinkertaisesti seurata XML-dokumentin rakennetta ja määrittää jokaisen elementin sellaisena kuin se on löydetty. Aloitamme tavallisella XML-ilmoituksella, jota seuraa xs:schema-elementti, joka määrittää skeeman:



...

Yllä olevassa skeemassa käytämme vakionimiavaruuksia (xs), ja tähän nimiavaruuteen liittyvä URI on skeeman kielen määritelmä, jonka vakioarvo on http://www.w3.org/2001/XMLSchema.

Seuraavaksi meidän on määritettävä "shiporder"-elementti. Tällä elementillä on attribuutti ja se sisältää muita elementtejä, joten käsittelemme sitä monimutkaisena tyyppinä. "shiporder"-elementin alielementtejä ympäröi xs: sekvenssielementti, joka määrittää järjestetyn alielementtien sarjan:




...


Sitten meidän on määriteltävä "orderperson"-elementti yksinkertaiseksi tyypiksi (koska se ei sisällä attribuutteja tai muita elementtejä). Tyypin (xs:string) etuliitteenä on XML-skeemaan liittyvä nimitilan etuliite, joka määrittää ennalta määritetyn kaavan tietotyypin:










Kaavioiden avulla voimme määrittää MaxOccurs- ja MinOccurs-attribuuttien sisältävän elementin mahdollisten esiintymien lukumäärän. MaxOccurs määrittää elementin esiintymien enimmäismäärän ja MinOccurs määrittää elementin esiintymien vähimmäismäärän. Sekä MaxOccurs- että MinOccurs -oletusarvo on 1!

Nyt voimme määritellä "tuote"-elementin. Tämä elementti voi esiintyä useita kertoja "shiporder"-elementissä. Tämä määritetään asettamalla "item"-elementin maxOccurs-attribuutiksi "unbounded" , mikä tarkoittaa, että "item"-elementtiä voi esiintyä niin monta kertaa kuin kirjoittaja haluaa. Huomaa, että "huomautus"-elementti on valinnainen. Määritimme tämän asettamalla minOccurs-attribuutin nollaan:










Nyt voimme ilmoittaa elementin "shiporder"-attribuutin. Koska tämä on pakollinen attribuutti, määritämme use="required".

Huomautus: Attribuuttilausekkeiden tulee aina olla viimeisenä:

Tässä on täydellinen luettelo skeematiedostosta nimeltä "shiporder.xsd":





























Erilliset piirit

Edellinen suunnittelumenetelmä on hyvin yksinkertainen, mutta sitä voi olla vaikea lukea ja ylläpitää, kun asiakirjat ovat monimutkaisia.

Seuraava suunnittelumenetelmä perustuu kaikkien elementtien ja attribuuttien määrittämiseen ja sitten niihin viittaamiseen ref-attribuutilla.

Tässä on kaaviotiedoston ("shiporder.xsd") uusi rakenne:








































Nimettyjen tyyppien käyttäminen

Kolmas suunnittelumenetelmä määrittelee luokat tai tyypit, mikä mahdollistaa elementtimäärittelyjen uudelleenkäytön. Tämä tehdään nimeämällä elementit simpleTypes ja complexTypes, ja sitten viitataan niihin elementin type-attribuutin kautta.

Tässä on kaaviotiedoston ("shiporder.xsd") kolmas malli:

































Rajoituselementti osoittaa, että tietotyyppi on johdettu W3C XML Schema -tietotyypin nimiavaruudesta. Joten seuraava katkelma tarkoittaa, että elementin tai attribuutin arvon on oltava merkkijonon arvo:

Rajoituselementtiä käytetään useammin rajoitusten soveltamiseen elementteihin. Katso seuraavat rivit yllä olevasta kaaviosta:





Tämä määrittää, että elementin tai attribuutin arvon on oltava merkkijono, sen on oltava täsmälleen kuusi merkkiä riviä kohden, ja näiden merkkien on oltava numeroita välillä 0–9.

XDTO on 1C-mekanismi, jota tarvitaan luotaessa ja käytettäessä verkkopalveluita 1C:ssä.

XDTO 1C -pakettien avulla voit kuvata tarvittavan XML-tiedoston rakenteen tietojen muuntamiseksi XML:ksi ja XML:stä.

Kiinnostuneille katsotaanpa kysymystä tarkemmin.

XML-tiedostoja lähetetään Internetin kautta, ja monet ohjelmat voivat lukea niitä.

Ne havaitaan - se tarkoittaa, että se on kiinteästi kytketty heidän koodiinsa - jos kohtaat tietyn elementin nimen XML-tiedostossa - havaitse se tällä tavalla ja tee näin.

Siksi, jos käytämme elementtinimeä Apple, on melko suuri mahdollisuus, että joku muu ohjelma saattaa "luottaa", että tämä on se Apple, jonka se tuntee, mutta tarkoitimme jotain omaa.

Tämän estämiseksi ja osoittaaksemme selvästi, että Applemme eroaa kaikista muista, nimiavaruuden nimi voidaan määrittää tiedostoon - etuliite, jota käytetään ennen elementtien nimeä.

Nimiavaruus (englanniksi nimiavaruudessa) määritellään näin - xmlns:SpaceName = “URL”, esimerkiksi:
xmlns:store = "http://store.ru"

Miksi tarvitset URL-osoitteen?

Siksi määritetään tietty yksilöllinen tunniste, joka identifioi myös nimiavaruuden tekijän.

Luonnollisesti oletetaan, että nimiavaruuden ilmoittanut henkilö on erittäin rehellinen henkilö ja ilmoitti sivustonsa, eikä käytä useita eri nimiavaruuksia yhdellä sivustolla.

Muuten, ne eivät yleensä ilmoita vain sivuston URL-osoitetta, vaan myös tietyn sivuston kansion URL-osoitetta, joten jos jotain tapahtuu, voit luoda toisen nimitilan sivuston toiseen kansioon käytettäväksi eri tilanteessa.

Objekti on tietty tietorakenne, omavarainen ja sisältää kaikki sen tiedot.

Koska strukturoitu data on kuvattu XML:ssä, eli rakenteen muodossa, jolla on omat ominaisuudet jne., niitä voidaan tarkastella objekteina.

Annetussa esimerkissä tämä voi olla LIST-objekti, jossa on ominaisuus ja sisäkkäinen elementti.

DOM on tapa käsitellä XML-tiedostoa ei tekstinä tietyssä muodossa, vaan kokoelmana objekteja, joilla on ominaisuuksia, kenttiä ja niin edelleen.

XML-tiedoston kuvaus

Jos käytämme jatkuvasti tietyn rakenteen omaavaa tiedostoa kahden ohjelman väliseen vaihtoon, haluaisimme todennäköisesti:

  • Käyttääksesi tiettyjä nimiä
  • Saadaksemme ne elementit, joita odotamme (jotka "täytyy olla olemassa, jotta niitä voidaan käyttää vaihdossamme")
  • Jotta attribuutit sisältävät odottamamme tyypit (merkkijono, numero jne.).

Seuraavat tiedostomuotostandardit ovat olemassa kuvaamaan XML-rakennetta (jotka myös tallennetaan pelkkään tekstitiedostoon):

  • DTD-laajennus – Asiakirjatyypin määritelmä
  • XSD-laajennus – XML Shema.

Molemmat muodot kuvaavat, millainen asiakirjan tulee olla. Menettelyä, jolla tarkistetaan, onko XML tällaisessa tiedostossa kuvatun standardin mukainen, kutsutaan todentamiseksi.

XDTO 1C on työkalu, jonka avulla voit lisätä XML-tiedoston kuvauksen kokoonpanoon. Tai pikemminkin, kuva ei ole tiedosto, vaan tietyt XML-rakenteet.

Käytettävissä olevien tyyppien osoittamiseen käytetään luetteloa tai tyyppikirjastoa, jota kutsutaan XDTO 1C -tehtaiksi.

Tämä tehdas määrittää sekä yksinkertaiset tyypit (merkkijono, numero, päivämäärä), joita käytetään yleisesti muissa kielissä, ohjelmissa jne., mutta myös 1C-tyypit, joita käytetään 1C:ssä ja tietyssä kokoonpanossa.

Itse XDTO 1C -tehdas koostuu useista paketeista. Perustyypit on kuvattu paketissa nimeltä www.w3.org

Nykyiset määritystietotyypit on kuvattu paketissa http://v8.1c.ru/8.1/data/enterprise/current-config

Itse tyypit nimetään konfiguraattorissa olevan nimen mukaan lisättynä englanninkielisellä lomakkeella (CatalogRef, CatalogObject, DocumentRef, DocumentObject), esimerkiksi:

CatalogObject.Nomenclature

XDTO 1C -paketin lisääminen

Tämä kaikki kuulostaa varmasti hienolta. Emme ole vielä päässeet XSLT-aiheeseen - tapaan muuttaa XML-tiedostoja joksikin muuksi, kuten HTML:ksi. XML-aihe on erittäin laaja ja vaikea käsitellä jopa erillisessä kirjassa.

Tehtävämme on ymmärtää, että XDTO 1C:n avulla voimme kuvata, mitä elementtejä generoitavassa tai luettavassa XML-paketissa tulisi olla.

XDTO 1C -paketit sijaitsevat kokoonpanossa Yleiset/XDTO 1C -paketit -haarassa.

Voit lisätä XDTO-paketin 1C:hen manuaalisesti (hieno!), mutta on parempi hankkia vastaava XSD-tiedosto valmiilla kaavion kuvauksilla.

Kuvaus XSD-skeemasta minkä tahansa kokoonpanon kohteille voidaan saada napsauttamalla Yleiset/XDTO 1C -paketit -haaraa ja valitsemalla valikosta Vie XML-konfiguraatioskeema.

Tiedosto on teksti, voit muokata sitä Windowsin Muistiossa poistamalla tarpeettomat esineet, joita et tarvitse.

Voit lisätä valmiin XSD-skeeman 1C:hen napsauttamalla hiiren kakkospainikkeella Yleiset/XDTO 1C-paketit -haaraa ja valitsemalla Import XML Schema -valikosta kohdan.

XDTO 1C -mekanismilla

Työskentely XDTO 1C:n kanssa tarkoittaa arvojen muuntamista XML-muotoon ja XML:stä.

Työ suoritetaan käyttäen 1C-kieliobjekteja Reading XML/Writing XML.

Kun työskentelet XDTO 1C -mekanismin kanssa, sinun on ilmoitettava paketti, jonka kanssa työskentelet. Tämä voi olla vakiopaketti (käsitelty yllä, katso XDTO) tai kokoonpanoon lisätty paketti. Paketti tunnistetaan paketissa määritetyn URL-osoitteen perusteella.

Kaksi tärkeintä yksinkertaista tapaa työskennellä ovat:

  • Serialisointi - arvojen automaattinen muuntaminen 1C:stä XML:ään ja päinvastoin
  • Objektin luominen, sen kenttien täyttäminen, XML:ään kirjoittaminen (ja vastaavasti XML:stä lukeminen ja sen kenttien lukeminen).

Esimerkki arvojen sarjoittamisesta:
Serializer = Uusi SerializerXDTO(FactoryXDTO);
XML-tiedosto = Uusi XML-merkintä();
FileXML.OpenFile("Tiedostonimi");
Serializer.WriteXML(XMLFile, Value1C);

Esimerkki objektin lukemisesta/kirjoittamisesta:

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