Lag xsd-fil i 1s 8.2. En kort beskrivelse av opprettelsen av en XML-fil i henhold til XSD-skjemaet ved å bruke eksemplet med å lage en nedlasting av statistisk rapportering for FCS. XML-filbeskrivelse

Feilen som sier at filen ikke samsvarer med XSD-skjemaet er vanlig i tilfeller der systemet kan ikke lese data fra rapporten... Generelt oppstår slike feil ofte hos mennesker, og det er ganske enkelt å takle dem.

Først må du forstå hva et XSD-skjema betyr for å forstå nøyaktig hva filen din ikke samsvarer med.

Så XSD er programmeringsspråk, den beskriver strukturen til rapporten din. Strukturen inkluderer for eksempel parametere for innholdet i rapporten, type, type, samt datasyntaks, seksjoner som inneholder informasjon.

Det viser seg at XSD-skjemaet er det en beskrivelse av strukturen til rapporten din skrevet på et av programmeringsspråkene. Hvis feil informasjon legges inn i rapporten, vil den rett og slett være uleselig for skjemaet, og det er grunnen til at systemet genererer en feil om at filen ikke samsvarer med XSD-skjemaet.

Dette betyr at informasjonen du skrev inn ikke kan leses på programmeringsspråket, derfor vil programmet gjenkjenne den som feil.

Det er verdt å merke seg at dette problemet kan oppstå både pga feil oppgitte data(du gjorde for eksempel en feil da du skrev inn organisasjonens TIN), og på grunn av feil dataregistreringsformat (du anga for eksempel ekstra mellomrom eller bindestreker).

Dette er imidlertid ikke den eneste grunnen til at filen ikke samsvarer med XSD-skjemaet. Denne feilen kan også oppstå på grunn av at det er installert en utdatert versjon av programmet på enheten din, der du lager en rapport, samt at programoppdateringen ikke er installert i selve skattemyndigheten.

For å løse en feil i XSD-skjemaet, må du kontrollere riktigheten av alle data, som du skrev inn, og også for å avklare om det er utgitt en oppdatering av programmet du jobber i. Men før du sjekker filen, se nøye på teksten til feilen som den gir deg.

Faktum er at i noen situasjoner, etter teksten om at filen ikke samsvarer med ordningen, er det et kolon, og årsaken til dette problemet er angitt. Hvis årsaken til selve feilen ikke er angitt, oppdater programmet til den nyeste versjonen.

Etter å ha fullført oppdateringen, prøv å sende inn rapporten på nytt. Hvis etter oppdatering av filen igjen gir en feil, er det nødvendig se etter et problem i den. Hvis du jobber i 1C-programmet, kan du sjekke filen ved å bruke en spesiell knapp kalt "sjekk på Internett".

Hvis de to foregående punktene ikke hjalp deg med å identifisere problemet, så sjekk om du fylte ut alle de obligatoriske feltene, om du skrev inn alle dataene riktig, fordi mange av dem må fylles ut med tall, i så fall er det veldig enkelt å gjøre en skrivefeil.

I tillegg må du sjekke alle feltene for ekstra mellomrom, bindestreker og andre tegn. Hvis du har sjekket hele filen og ikke finner feilen, eller hvis feilen ble funnet, men du ikke kan fikse den på noen måte, bør du definitivt kontakt teknisk støtte programmet du lager en rapport med eller til utviklerne.

For å løse dette problemet ved hjelp av programutviklerne, må du sende noen dokumenter, for eksempel selve filen, som inneholder rapporten, varslingsprotokollen som datamaskinen gir deg.

I tillegg kan utviklere be deg om noe informasjon om organisasjonen din, samt annen informasjon som de mener er nødvendig, du må gi dem, ellers vil det ikke være mulig å løse problemet.

Så hvis du prøver å sende en rapport til skattemyndigheten, men filen gir en feilmelding om at den ikke samsvarer med XSD-skjemaet, betyr dette at rapporten din kan ikke sendes, siden programmet ikke kan lese dataene du skrev inn.

Men du bør ikke gi etter for panikk, fordi dette problemet i de fleste tilfeller løst ganske enkelt og raskt. I tillegg, hvis du sendte rapporten i tide, men den ble ikke akseptert på grunn av feil format, så har ingen rett til bot du for ikke å levere inn rapporten i tide. Først av alt, vær oppmerksom på teksten til selve feilen, kanskje er årsaken til dens forekomst allerede angitt der.

Faktisk kan det bare være to grunner. Eller du har installert på enheten din gammel versjon av programmet, som du lager en rapport med, i dette tilfellet er det enkelt å løse problemet, du trenger bare å laste ned den siste oppdateringen, vanligvis kan den finnes på nettstedet til programmet du bruker. Den andre grunnen kan være at du fylte ut noen data feil, eller ikke fylte ut noe felt i det hele tatt.

I dette tilfellet må du sjekke filen din, mens du må huske at programmet til og med kan vurdere merkelig plass... Hvis du ikke kan finne årsaken til feilen på noen måte, kan du kontakte den tekniske støtten til programmet, der spesialister vil sikkert hjelpe deg med å løse problemet ditt.

Plattformer: 1C: Enterprise 8.3, 1C: Enterprise 8.2, 1C: Enterprise 8.1
Konfigurasjoner: Alle konfigurasjoner

2012-11-25
34938

XDTO er en mekanisme som er nødvendig for opprettelse og drift av webtjenester. XDTO-pakker brukes til å beskrive strukturen til den nødvendige XML-filen som kreves for å endre data fra XML til XML.

XML er en måte å beskrive en kompleks datastruktur i en ren tekstfil. Den beskriver ikke bare selve dataene, men også feltene der de er lagret.
Her er et grunnleggende eksempel på en XML-fil:

XML for dummies

Navnene (taggene) som brukes i denne filen - root, list, name, el - kan være helt vilkårlige. De grunnleggende reglene for dannelsen av en XML-fil er umiddelbart tydelig fra strukturen:
- Nesting av elementer er mulig;

Element start<Имя>, slutten er det samme navnet, men med "/"-tegnet vedlagt.

Inne i et element kan være:
- Nestede elementer;
- Tekst.

Hvert element kan ha egenskaper (attributter), de har en verdi og et navn. Det er forbudt å bruke noen tegn i XML, fordi flere av dem er okkupert direkte for XML, for eksempel "<» и «>". Beskrivelsesmetoden i XML er veldig praktisk å bruke ved utveksling med andre tredjepartsprogrammer og brukes i 1C-datautvekslingsmekanismen.

Navneområde

En XML-fil begynner med en header som beskriver XML-versjonen, koding, etc ... XML-headeren er valgfri og brukes ofte ganske enkelt ikke. Det er også mulig i overskriften å definere - navnerom.

XML-filer overføres over Internett og leses av mange forskjellige programmer. Oppfattet - dette betyr at koden deres har en beskyttelse - hvis du kommer over et spesifikt navn på et element i en XML-fil, må du oppfatte det slik og gjøre akkurat dette. Derfor, når vi bruker IBM-taggen, er det stor nok sjanse for at et annet program vil tro at det er IBM, kjent for det, mens vi mente noe eget med dette.

For å forhindre dette og for å tydelig indikere forskjellen mellom vår IBM og alle andre, er det mulig å angi navnet på navneområdet i filen - et prefiks som brukes før navnet på elementene.

Du kan definere navneområdet som følger - xmlns: Prefiks (SpaceName) = "URL", eksempel:
xmlns: store = "http://site.ru"

Hvorfor trengs en URL? Den som allerede har tenkt og ser videre - selvfølgelig er kanskje ikke navnerommet som vi fant opp unikt, dvs. alle andre kan bruke det også. Det er derfor en spesiell unik identifikator er spesifisert, som også identifiserer utføreren av navneområdet.

Naturligvis antydes det at personen som spesifiserte navneområdet er ekstremt ærlig. Han peker på nettstedet sitt og bruker ikke flere forskjellige navneområder med samme nettsted. Som regel er både nettadressen og nettadressen til en bestemt mappe på nettstedet angitt, slik at det er mulig å opprette et nytt navneområde i en mappe på dette nettstedet, for bruk i enhver situasjon.

DOM

Et objekt er en konkret datastruktur som er selvforsynt og som inneholder alle dens data.

På grunn av det faktum at strukturerte data er beskrevet i en XML-fil, det vil si data i form av en struktur som har sine egne egenskaper osv., kan du følgelig se på dem som objekter. I eksemplet ovenfor kan et LIST-objekt med egenskaper og et nestet element brukes.

DOM er en måte å behandle en XML-fil på, ikke som tekst i et spesifikt format, men som en samling av objekter med felt, egenskaper og mer.

Ulempene med denne arbeidsmetoden inkluderer høye krav til PC-ytelse. DOM-en behandler (danner en struktur i form av objekter) hele XML-filen på en gang, uavhengig av størrelsen, og den kan rett og slett ikke "fordøye" store filer (over 4GB).

For å analysere store filer brukes SAX, denne metoden for å analysere en fil er basert på sekvensiell lesing av filen, og ikke på å bygge hele strukturen på en gang .

XML-filbeskrivelse

Hvis vi bruker en fil med en bestemt struktur konstant for utveksling mellom 2 programmer, vil vi sannsynligvis ha følgende:

For å bruke spesifikke navn;
- Å bruke bare de elementene vi forventer (som "må eksistere for bruk i bytte");
- Slik at attributtene kun indikerer de typene vi forventer (tall, streng osv.).

For å beskrive en XML-struktur finnes det følgende filformater (også lagret i en ren tekstfil):

DTD-utvidelsen er en dokumenttypedefinisjon;
– XSD-utvidelsen er XML Shema.

Disse formatene beskriver hvordan dokumentet skal være. Prosedyren for å kontrollere XML-konformitet, som er beskrevet i en slik standardfil, kalles verifikasjon.

XDTO

XDTO er et 1C-objekt som lar deg legge til en XML-filbeskrivelse til konfigurasjonen. Mer presist er det ikke selve filen som beskrives, men enkelte XML-strukturer.

For å indikere hvilke typer som kan brukes, brukes en liste, et typebibliotek kalt XDTO-fabrikken. Denne fabrikken spesifiserer ikke bare enkle typer (dato, streng, tall) som brukes i andre programmer, språk osv., men også 1C-typer som brukes i 1C og i en bestemt konfigurasjon.

XDTO-fabrikken inkluderer flere pakker. De første typene er beskrevet i en pakke som heter www.w3.org Datatypene i konfigurasjonen er beskrevet i pakken http://v8.1c.ru/8.1/data/enterprise/current-config

Disse typene er navngitt i henhold til navnene i konfiguratoren med tillegg av et engelskspråklig skjema (CatalogRef, DocumentObject, CatalogObject, DocumentRef), for eksempel:

CatalogObject.Contractors

Legger til XDTO-pakke

Vi kom til temaet XSLT - en måte å transformere XML-filer til noe annet, for eksempel HTML-filer. XML-emnet er ekstremt stort og det er skrevet mer enn én bok om det.

Vår oppgave er å forstå at XDTO lar oss beskrive elementene som skal være i XML-pakken som må leses eller dannes. XDTO-pakker er plassert i 1C-konfigurasjonen og i General-grenen - XDTO-pakker.

Det er mulig å legge til en XDTO-pakke til 1C manuelt, men det er best å få den tilsvarende XSD-filen med en ferdig detaljert beskrivelse av ordningen. En beskrivelse av XSD-objektskjemaet for enhver konfigurasjon kan fås ved å klikke på grenen Generelt - XDTO-pakker og velge "Eksporter XML-konfigurasjonsdataskjema" i menyen.

Denne tekstfilen kan du redigere i Windows Notisblokk, mens du fjerner unødvendige objekter (unødvendig for deg). Det er mulig å legge til et ferdig XSD-skjema til 1C ved å høyreklikke på grenen Generelt - XDTO-pakker og velge punktet "Importer XML-skjema" i menyen.

Å jobbe med XDTO i 1C betyr å konvertere verdier fra XML til XML. Dette gjøres ved hjelp av objekter 1C-språk Leser XML / XMLWriting.

Når du arbeider med XDTO, må du spesifisere pakken du jobber med direkte. Det kan enten være en typisk pakke (se diskusjonen ovenfor, XDTO), eller en pakke lagt til konfigurasjonen.

En pakke identifiseres av URL-en som er spesifisert i pakken. Det er to hovedmåter å jobbe på - disse er:

Serialisering - automatisk endring av verdier fra XML til 1C og omvendt;

Fylle ut feltene til et objekt, lage og skrive det til XML (i tillegg til å lese fra XML og deretter lese dets felt).

Her er et eksempel på serialisering av en verdi:

Serializer = Ny XDTO Serializer (XDTO Factory);
XML-fil = Ny XML-post ();
XMLFile.OpenFile ("Filnavn");
Serializer.WriteXML (XMLFile, 1C-verdi);

Den inverse funksjonen er Serializer. XMLReader (), brukt fra 1C-objekter i XMLReader-språket.
Et eksempel på å skrive/lese et objekt:

XDTO ReferenceObject = XDTOFactory.Create (XDTOFactory. Type ("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Contractors"));
FillPropertyValues ​​​​(XDTOObject Directory, Directory.Contractors.FindByRequisite ("Navn", "Ivanov) .Link);

Deretter kan du skrive det opprettede objektet til XML på nøyaktig samme måte som serialisering. Når du leser XML på samme måte som beskrevet ovenfor, kan det hende at den ikke returnerer en XDTO-verdi, men bare et slikt objekt.

Under opprettelsen av et XDTO-objekt opprettes det en struktur som ligner strukturen til konfigurasjonsobjektet (hvis du selvfølgelig lager et konfigurasjonsobjekt fra pakken, som er indikert i eksemplet ovenfor). Typiske felt (navn, kode osv.) er på engelsk, og objektet lages tomt, så det må fylles ut, hvert felt separat eller ved å bruke funksjonen FillPropertyValues

XDTO er en 1C-mekanisme som er nødvendig når du oppretter og bruker webtjenester i 1C.

XDTO 1C-pakker lar deg beskrive strukturen til den nødvendige XML-filen for konvertering av data til og fra XML.

Hvis du er interessert, la oss undersøke spørsmålet mer detaljert.

XML-filer overføres over Internett og leses av mange programmer.

Oppfattet - det betyr at det er hardkodet i koden deres - hvis du finner et bestemt elementnavn i en XML-fil - ta det slik og gjør dette.

Derfor, hvis vi bruker navnet på elementet Apple, så er det stor nok sjanse for at et annet program kan "tro" at det er Apple det kjenner til, men vi mente noe eget.

For å forhindre at dette skjer og tydelig indikere at vårt Apple er forskjellig fra alle andre, kan navnet på navneområdet spesifiseres i filen - et prefiks som brukes før navnet på elementene.

Navneområdet (på engelsk navneområde) er definert slik - xmlns: SpaceName = "URL", for eksempel:
xmlns: store = "http://store.ru"

Hvorfor trenger jeg en URL?

Derfor spesifiseres en bestemt unik identifikator, som også identifiserer forfatteren av navneområdet.

Naturligvis er det underforstått at personen som spesifiserte navneområdet er en ekstremt ærlig person som har angitt nettstedet sitt og ikke bruker flere forskjellige navneområder med ett nettsted.

Forresten, vanligvis indikerer de ikke bare URL-en til nettstedet, men URL-en til en bestemt mappe på nettstedet, slik at du om noe kan opprette et annet navneområde i en annen mappe på nettstedet for å bruke det i en annen situasjon.

Et objekt er en spesifikk datastruktur, selvstendig, som inneholder alle dets data.

Siden XML beskriver strukturerte data, det vil si i form av en struktur, med egne egenskaper osv., kan du se på dem som objekter.

I eksemplet ovenfor kan det være et LIST-objekt med en egenskap og et nestet element.

DOM er en måte å behandle en XML-fil på, ikke som tekst i et spesifikt format, men som en samling av objekter med egenskaper, felt og så videre.

XML-filbeskrivelse

Hvis vi bruker en fil med en bestemt struktur konstant for utveksling mellom to programmer, vil vi sannsynligvis ha:

  • Å bruke bestemte navn
  • Å ha varene vi forventer (som "må være til bruk i utvekslingen vår")
  • Slik at attributtene indikerer typene vi forventer (streng, tall osv.).

Følgende filformatstandarder (som også er lagret i en ren tekstfil) eksisterer for å beskrive strukturen til XML:

  • DTD-utvidelse - dokumenttypedefinisjon
  • XSD-utvidelse - XML ​​​​Shema.

Begge formatene beskriver hvordan dokumentet skal være. Prosedyren for å kontrollere XML-samsvar med standarden beskrevet i en slik fil kalles verifikasjon.

XDTO 1C er et verktøy som lar deg legge til en beskrivelse av en XML-fil til konfigurasjonen. Det er heller ikke en fil som beskrives, men spesifikke XML-strukturer.

For å indikere hvilke typer som kan brukes, brukes en liste, et typebibliotek kalt XDTO 1C-fabrikken.

I denne fabrikken er både enkle typer (streng, nummer, dato) angitt, som vanligvis brukes på andre språk, programmer osv., men også 1C-typer som brukes i 1C og i en spesifikk konfigurasjon.

Selve XDTO 1C-fabrikken består av flere pakker. Basetypene er beskrevet i en pakke kalt www.w3.org

Datatypene for gjeldende konfigurasjon er beskrevet i pakken http://v8.1c.ru/8.1/data/enterprise/current-config

Selve typene er navngitt i henhold til navnet i konfiguratoren med tillegg av en engelskspråklig visning (CatalogRef, CatalogObject, DocumentRef, DocumentObject), for eksempel:

CatalogObject.Nomenclature

Legger til XDTO 1C-pakke

Det høres absolutt kult ut. Og vi har ikke kommet til temaet XSLT ennå - en måte å transformere XML-filer til noe annet, for eksempel HTML. XML-emnet er ekstremt stort og vanskelig å inkludere selv i en egen bok.

Vår oppgave er å forstå at XDTO 1C lar oss beskrive hvilke elementer en XML-pakke skal ha som må genereres eller leses.

XDTO 1C-pakker er plassert i konfigurasjonen i grenen Generelt / XDTO 1C-pakker.

Du kan legge til XDTO-pakken til 1C manuelt (kult!), men det er bedre å få den tilsvarende XSD-filen med en ferdig skjemabeskrivelse.

En beskrivelse av XSD-skjemaet for objekter av enhver konfigurasjon kan fås ved å klikke på grenen Generelt / XDTO 1C-pakker og velge menyelementet Eksporter XML-konfigurasjonsskjema.

Filen er tekst, du kan redigere den i Windows Notisblokk, og fjerne unødvendige, unødvendige objekter.

Du kan legge til et ferdig XSD-skjema til 1C ved å høyreklikke på grenen Generelt / XDTO 1C-pakker og velge menyelementet Importer XML-skjema.

Bruker XDTO 1C-mekanismen

Å jobbe med XDTO 1C betyr å konvertere verdier til og fra XML.

Arbeidet utføres ved hjelp av objekter av 1C-språket Reading XML / Writing XML.

Når du arbeider med XDTO 1C-mekanismen, må du spesifisere pakken du jobber med. Dette kan være en typisk pakke (diskutert ovenfor, se XDTO) eller en pakke lagt til konfigurasjonen. Pakken identifiseres av URL-en som er spesifisert i pakken.

De to viktigste enkle måtene å jobbe på er:

  • Serialisering - automatisk konvertering av verdier fra 1C til XML og omvendt
  • Opprette et objekt, fylle ut feltene, skrive til XML (og følgelig lese fra XML og deretter lese feltene).

Et eksempel på serialisering av en verdi:
Serializer = Ny XDTO Serializer (XDTO Factory);
XMLFile = Ny XMLRecord ();
FileXML.OpenFile ("Filnavn");
Serializer.WriteXML (FileXML, Value1C);

Et eksempel på å lese/skrive et objekt:

ReferenceXDTOObject = XDTOFactory.Create (XDTOFactory.Type ("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Warehouses"));
FillPropertyValues ​​​​(DirectoryXDTOObject, DirectoryRef1C);

Oppgaven med å lage en XML-fil basert på et XSD-skjema har dukket opp. Søking i forumene førte til mye diskusjon knyttet til misforståelser av prosessen, og bare et par artikler som forklarer essensen. Folk stilte spørsmål, kjempet om en løsning, men etter at problemet bukket under for dem, forsvant de rett og slett uten å beskrive mekanismen. Dette førte til opprettelsen av en enkel prosessbeskrivelse.
P.S. Ikke bann for mye, målet mitt var ikke å lage en slags vitenskapelig artikkel, strengt tatt med riktig terminologi, men ganske enkelt å hjelpe deg med å ta det første skrittet mot å forstå en veldig kraftig utvekslingsmekanisme gjennom XML.
P.P.S. Jeg må ta en reservasjon med en gang at opplastingsfilen vedlagt artikkelen kun er en tomhet som bare oppretter en del av den nødvendige XML-filstrukturen, siden arbeidet mitt med denne lossingen var ganske lærerikt (kopiering av forrige dokument om eksport på FCS-nettstedet og lasting fra Excel "bare den tabellformede delen av varene ble presentert som en mer effektiv løsning), og mangelen på tid tillot det ikke meg å legge til etableringen av hele strukturen, bare basert på betraktninger om perfeksjonisme ...

Så, etter å ha registrert seg på FCS-nettstedet, ble det klart at for å lage dokumenter for statistisk rapportering om eksport, er det nødvendig å laste ned data fra dokumentene Implementering av varer og tjenester fra Trade Administration og opprette en fil for opplasting.

Det er to alternativer for lasting.

Først: lasting av tabelldelen med varene fra Excel-filen (dette alternativet ble valgt som et fungerende, fordi det hadde fordelene at det ikke var nødvendig å fikle med behandlingen av "Header" av dokumentet, men du kunne kopier ganske enkelt den forrige ved å endre hva som kreves i "Header").

For det andre: opprettelse av en XML-fil i henhold til skjemaet lastet ned fra FCS-nettstedet i form av et "Album med elektroniske dokumenter". Albumet er et ganske stort antall XSD-skjemaer. De fant et skjema for «Statistisk regnskapsform for varebevegelse» og tilleggsfiler med beskrivelser av typer for den. Diagrammene er vedlagt artikkelen i arkivet med bearbeiding.

Gratis Microsoft XML Notepad 2007 ble brukt til å vise XSD-skjemaer.

Bildet viser hovedfilen med XSD-skjemaet "Statistisk form for varebevegelsesregnskap". Bildet fremhever hovedblokkene i XSD-skjemaet som vi trenger for å forstå det.

Fra diagrammet kan du se at vi trenger å få en XML-fil fylt med strukturen spesifisert i "xs: element"-grenen av typen StaticFormType.

Strukturen kan være ganske kompleks (som i vårt tilfelle). Med typebeskrivelser tilstede direkte i grenen, flyttet til en egen gren, eller til og med plassert i en annen fil.

Denne strukturen er av typen StaticFormType, som igjen består av basistypen BaseDocType, et sett med objekter av forskjellige typer, og tekstattributter.

Basetypen BaseDocStyle er beskrevet i en annen fil (og navneområde)
.

Denne filen inneholder mange flere typer som ikke brukes i vårt tilfelle.

La oss nå gå videre til å jobbe i 1C. I et nøtteskall, det vi trenger å gjøre, koker ned til følgende:

1. XDTO-fabrikken er opprettet

OurXDTOFactory = CreateXDTOFactory (ArrayFullFileNamesWithXSD Schemes);

2. Alle komplekse datatyper opprettes i XDTO-fabrikken, som vi videre vil fylle ut i den genererte XML-filen:

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

Datatypene som er inkludert i en bestemt type kan hentes fra samlingen av dens egenskaper:

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

3. Når alle komplekse datatyper er opprettet, oppretter du en XML-filstruktur basert på dem, bestående av XDTO Factory-objekter:

StaticFormType_XDTOObject = MyXDTOFactory.Create (StaticFormType); // samling med dokumenter NewDocuments = MyXDTOFactory.Create (DocumentsType); NewDocuments.PrDocumentName = MyXDTOFactory.Create (PrDocumentNameType, "Faktura"); NewDocuments.PrDocumentNumber = MyXDTOFactory.Create (PrDocumentNumberType, "123-nummer"); NewDocuments.PrDocumentDate = MyXDTOFactory.Create (PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add (NewDocuments);

Samtidig fyller vi inn elementære (enkle typer) detaljer.

4. Til slutt laster vi ut alt fra XDTO Factory til en fil:

XMLFile = Ny XMLRecord (); XML File.OpenFile (Filnavn); XML File.WriteXMLDeclaration (); MyXDTOFactory.WriteXML (XMLFile, StaticFormType_XDTOObject); XML File.Close ();

P.S. Arkivet inneholder en fil av utlastingsmalen i XML (bare noen detaljer opprettes som gjenspeiler alle tilfeller av utfylling av filen) og XSD-skjemaer.

Pakk ut alle filene til en katalog.

XML vil bli opprettet i den.

Dette kapittelet viser deg hvordan du skriver XML-skjemaer. Du vil også lære at et diagram kan skrives på forskjellige måter.

XML-dokument

La oss ta en titt på dette XML-dokumentet kalt "shiporder.xml":

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

Ola Nordmann

Langgt 23

4000 Stavanger
Norge


Empire burlesk
Spesialutgave
1
10.90


Skjul hjertet ditt
1
9.90

XML-dokumentet ovenfor består av et rotelement, "shiporder", som inneholder et påkrevd attributt kalt "orderid". "shiporder"-elementet inneholder tre forskjellige underordnede elementer: "orderperson", "shipto" og "item". Elementet "vare" vises to ganger, og det inneholder "tittelen", en valgfri "notat"-vare, "antall" og en "pris"-vare.

Linjen over: Xmlns: XSI = "http://www.w3.org/2001/XMLSchema-instance" forteller XML-parseren at dette dokumentet bør kontrolleres mot skjemaet. Linje: XSI: noNamespaceSchemaLocation = "shiporder.xsd" indikerer hvor skjemaet er plassert hva (her er den i samme mappe som "shiporder.xml") .

Genererer XML-skjema

Nå ønsker vi å lage et skjema for XML-dokumentet ovenfor.

Vi starter med å åpne en ny fil, som vi kaller "shiporder.xsd". For å lage skjemaet kan vi ganske enkelt følge strukturen i XML-dokumentet og definere hvert element slik vi finner det. Vi starter med en standard XML-erklæring etterfulgt av xs:-skjemaelementet som definerer skjemaet:



...

I skjemaet ovenfor bruker vi standard navnerom (xs), og URIen knyttet til dette navnerommet er definisjonen av skjemaspråket, som har standardverdien http://www.w3.org/2001/XMLSchema.

Deretter må vi definere et "shiporder"-element. Dette elementet har et attributt og inneholder andre elementer, så vi behandler det som en kompleks type. De underordnede elementene til "shiporder"-elementet er omgitt av et xs:-element i en sekvens som definerer en ordnet sekvens av underelementer:




...


Da må vi definere "orderperson"-elementet som en enkel type (siden det ikke inneholder noen attributter eller andre elementer). Typen (xs: streng) er prefikset med navneromsprefikset knyttet til XML-skjemaet, som indikerer en forhåndsdefinert skjemadatatype:










Ved hjelp av skjemaer kan vi bestemme antall mulige forekomster for et element med MaxOccurs- og MinOccurs-attributter. MaxOccurs definerer maksimalt antall forekomster for et element og MinOccurs definerer minimum antall forekomster for et element. Standard for både MaxOccurs og MinOccurs er 1!

Nå kan vi definere elementet "element". Dette elementet kan vises flere ganger i et "shiporder"-element. Dette bestemmes ved å sette maxOccurs-attributtet til "item"-elementet til "unbounded"-elementet, noe som betyr at det kan være så mange forekomster av "item"-elementet som forfatteren ønsker. Vær oppmerksom på at "note"-elementet er valgfritt. Vi har bestemt dette ved å sette minOccurs-attributtet til null:










Nå kan vi deklarere "shiporder"-attributtet til elementet. Siden dette er et obligatorisk attributt, bruker vi = "required".

Merk: Attributtutsagn må alltid komme sist:

Her er en fullstendig liste over skjemafilen kalt "shiporder.xsd":





























Del opp skjemaer

Den tidligere designmetoden er veldig enkel, men kan være vanskelig å lese og vedlikeholde når dokumenter er komplekse.

Følgende designmetode er basert på å definere alle elementer og attributter og deretter referere til dem ved å bruke ref-attributtet.

Her er den nye utformingen av skjemafilen ("shiporder.xsd"):








































Bruk av navngitte typer

Den tredje designmåten definerer klasser eller typer, som tillater gjenbruk av elementdefinisjoner. Dette gjøres ved å navngi simpleTypes- og complexTypes-elementene, og deretter referere til dem gjennom type-attributtet til elementet.

Her er den tredje utformingen av skjemafilen ("shiporder.xsd"):

































Begrensningselementet indikerer at datatypen ble avledet fra W3C XML Schema-datatypenavneområdet. Så følgende kodebit betyr at verdien til et element eller attributt må være en strengverdi:

Et begrensningselement brukes oftere for å bruke begrensninger på elementer. Ta en titt på følgende linjer fra diagrammet ovenfor:





Dette indikerer at verdien til elementet eller attributtet må være en streng, den må være nøyaktig seks tegn per streng, og disse tegnene må være et tall mellom 0 og 9.