1c xml na podstawie przykładowego schematu xsd. Krótki opis tworzenia pliku XML z wykorzystaniem schematu XSD na przykładzie tworzenia wgrania Sprawozdawczości Statystycznej dla Federalnej Służby Celnej. Dodanie pakietu XDTO

Adnotacja: Schematy danych XML (XSD). Tworzenie schematu XSD w Visual Studio .NET. Tworzenie wpisanego obiektu DataSet. Pozyskiwanie informacji o strukturze obiektu DataSet. Ładowanie dokumentów XML i schematów XSD do obiektów DataSet z określonym typem i zwykłymi. Metody ReadXml i ReadXmlSchema. Rejestrowanie zawartości i struktury wpisanego i zwykłego obiektu DataSet. Metody WriteXml i WriteXmlSchema

Wpisano obiekt DataSet. Czytanie i pisanie dokumentów XML

Schematy danych XML (XSD)

Schematy danych 1 Dokładne tłumaczenie dokumentu schematu XML -< Schemat dokumentu XML>, jednak nadal będziemy używać terminu „schemat danych XML”. XSD (XML Schema Document, XSD) to alternatywny sposób konstruowania reguł dla dokumentów XML. W porównaniu do DTD, schematy mają większą skuteczność w definiowaniu złożonych struktur danych, zapewniają jaśniejszy sposób opisu gramatyki języka i można je łatwo modernizować i rozszerzać. Schemat XSD może zawierać następujące informacje:

  • reprezentacja relacji pomiędzy elementami danych, podobnie jak relacje klucza obcego pomiędzy tabelami w relacyjnej bazie danych;
  • reprezentacja unikalnych identyfikatorów podobna do klucza podstawowego;
  • specyfikacja typu dane dla każdego pojedynczego elementu i atrybutu w dokumencie XML.

Aby utworzyć schemat danych w Visual Studio .NET należy w menu głównym wybrać opcję Plik\Nowy\Plik i z listy szablonów wybrać opcję XML Schema (patrz rys. 11.3). Pojawi się okno z informacją: „Aby rozpocząć, przeciągnij obiekty z okna Eksploratora serwera lub okna Toolbox na obszar roboczy (obszar projektu) lub kliknij prawym przyciskiem myszy” (rysunek 11.1):


Ryż. 11.1.

Chodzi o to, że jesteśmy w trybie projektowania. Przejdź do trybu kodowania klikając na przycisk (XML):

Pierwsza linia to znane wskazanie, że schemat jest dokumentem XML z elementem głównym xs:schema . Przedrostek xs: poprzedza wszystkie elementy schematu, aby wskazać jego przestrzeń nazw. Druga linia zawiera długi, szczegółowy i często zupełnie niepotrzebny opis schematu (porównaj z podobnym kodem dla stron HTML). Do poprawnego działania wystarczy ograniczyć się do następującego przedstawienia:

Jednak wbudowane w studio narzędzia do wizualizacji zakładają obecność tego „nagłówka”, więc nie należy go usuwać. Stworzenie schematu opisującego dany dokument XML w Visual Studio .NET jest zadaniem dość prostym. Utwórzmy następujący dokument XMLEasy.xml:

1

Przechodzimy do zakładki (Dane) i widzimy tylko jeden wpis (ryc. 11.2).


Ryż. 11.2.

Możesz utworzyć schemat opisujący ten dokument na kilka sposobów: w menu głównym wybierz pozycję „XML \ Utwórz schemat” (ryc. 11.3, A), w trybie XML wybierz tę samą pozycję w menu kontekstowym (ryc. 11.3, B), w trybie XML wybierz tę samą pozycję w menu kontekstowym (ryc. 11.3, B), w Dane wybierz tę pozycję z menu kontekstowego (ryc. 11.3, C), a na koniec w trybie Dane, kliknij przycisk paska narzędzi XML (ryc. 11.3, D).


Ryż. 11.3.

W każdym przypadku zarys dokumentu pojawia się w formie tabeli (ryc. 11.4). Wyjdźmy na razie z trybu Schemat i przejdźmy do trybu (XML).


Ryż. 11.4.

Środowisko wygenerowało kod XML opisujący strukturę dokumentu:

Obejmuje to również opis potrzebny do dalszej manipulacji schematem przy użyciu obiektów ADO .NET. W źródłowym dokumencie XMLEasy.xml pojawił się odnośnik do schematu danych:

Dokument XMLEasy.xsd został automatycznie utworzony w tym samym katalogu, w którym znajduje się plik XMLEasy.xml.

Aby nauczyć się rozumieć schematy XSD należy najpierw popracować z opisem danych w czystej postaci, bez dodatkowych elementów. Tabela 11.1 przedstawia kilka prostych dokumentów XML i ich schematów, wygenerowanych bez wiązania z obiektami ADO .NET.

Tabela 11.1. Przykłady tworzenia schematów XSD
Zawartość dokumentu XML Zawartość schematu XSD

1

Opis
W dokumencie XMLEasy.xml element TOUR jest elementem głównym zawierającym element podrzędny IDTOUR. Ogólny schemat elementu głównego jest następujący:

: Zawartość elementu...

Elementy podrzędne opisano w następujący sposób:

Zawartość dokumentu XML Zawartość schematu XSD

1 Cypr 25 000,00 RUB Cena dwóch voucherów dla dorosłych obejmuje cenę jednego dziecka (do 7 lat) 2 Grecja 32.000,00 RUB W sierpniu i wrześniu obowiązują specjalne zniżki 3 Tajlandia 30 000,00 RUB Nie wliczając biletu lotniczego 4 Włochy 26 000,00 RUB Śniadanie w hotelu jest wliczone w cenę wycieczki 5 Francja 27.000,00 RUB Dodatkowe wycieczki nie są wliczone w cenę wycieczki

Opis
Główny element TABLE zawiera element TOUR, który z kolei składa się z grupy elementów podrzędnych. Element choice steruje wyborem innych elementów, przy czym „nieograniczona” wartość atrybutu maxOccurs wskazuje, że grupy TOUR mogą być nieograniczone.

: :

Zawartość dokumentu XML Zawartość schematu XSD

1 Cypr 25 000,00 RUB 1 Cena dwóch voucherów dla dorosłych obejmuje cenę jednego dziecka (do 7 lat)


Ryż. 11,5.
Opis
Typ danych elementu IDTOUR został ustawiony na int , typ danych elementu CLOSED został ustawiony na boolean , a reszta została ustawiona na domyślny typ danych string. Możesz zmienić typ danych bezpośrednio w trybie schematu danych XML, ale wygodniej jest skorzystać z trybu Schema (w tym przypadku tryb będzie nosił nazwę DataSet) wybierz typ danych z rozwijanej listy (rys. 11.5) :

W oprogramowaniu kursu wszystkie pliki tej tabeli znajdziesz w folderze XSD (Code\Glava5\XSD).

Ustawianie typu danych w dokumencie XML (najnowszym przykładem jest tabela 11.1) jest jednym ze sposobów ograniczenia zawartości. Dodatkowe atrybuty służą do ograniczenia wartości danego typu. W poniższym fragmencie schematu wartość elementu PRICE musi mieścić się w przedziale od 50 do 100:

Aby ograniczyć dokument XML do pewnych stałych wartości, użyj następującej konstrukcji:

Tutaj element NAME może przyjmować tylko jedną stałą wartość z pięciu nazw krajów.

Opracowanie schematu XSD to sporo pracy. Narzędzia wizualne w Visual Studio .NET znacznie ułatwiają to zadanie. Aby opanować podstawowe pojęcia, wskazane jest poznanie kilku automatycznie generowanych schematów dokumentów XML. Tabele 11.2-11.4 zawierają opis głównych elementów i atrybutów, które można napotkać.

Tabela 11.2. Elementy schematu XSD
Element Opis
Wszystko Elementy zagnieżdżone można definiować w dowolnej kolejności
adnotacja Element nadrzędny elementów komentarza I
każdy Wszelkie zagnieżdżone elementy
dowolnyAtrybut Wszelkie atrybuty
Informacje o aplikacji Element komentarza. Określa tytuł schematu
atrybut Atrybut
Grupa atrybutów Grupa atrybutów
wybór Wybór pozostałych elementów. Analog operatora „|” w DTD
złożona treść Ograniczenia lub rozszerzenia modeli złożony typ treści
Typ złożony Element złożony
dokumentacja Element komentarza. Zawiera informacje o schemacie
element Element
rozszerzenie Rozszerzenia elementów
pole Deklaracja terenowa. Stosuje się wewnątrz elementu do definiowania pól
Grupa Grupa elementów
import Importowanie deklaracji typu z innego schematu
włączać Dołączenie innego schematu do istniejącej przestrzeni nazw
klucz Określanie elementu lub atrybutu za pomocą klawisza wskazującego inny element
klucz ref Określanie elementu lub atrybutu, na który wskazuje klucz
lista Element, który może zawierać listę wartości
przedefiniować Zastępowanie już zadeklarowanych elementów
ograniczenie Ograniczenie elementu
schemat Element główny schematu
selektor Selektor do wybierania elementów XML
sekwencja Kolejność innych elementów. Analog operatora „,” w DTD
prosta treść Model, którego zawartość reprezentuje tylko dane znakowe
prostyTyp Prosty element
unia Element lub atrybut, który może mieć wiele znaczeń
unikalny Element lub atrybut, który musi mieć unikalną wartość
Tabela 11.3. Atrybuty — ograniczenia schematu XSD
Atrybut Opis
wyliczenie Lista wartości
długość Długość
maksymalna długość Maksymalna długość
minimalna długość Minimalna długość
maxWyjątkowy Maksymalna wartość
maxInclusive Maksymalna wartość włącznie
minWyłącznie Minimalna wartość
minWłącznie Wartość minimalna włącznie
ułamekCyfry Liczba miejsc po przecinku w liczbach ułamkowych
łącznieCyfry Ilość cyfr
wzór Próbka (wzór) zawartości elementu
domyślny Domyślny element lub wartość atrybutu
elementFormDefault Ustawianie właściwości elementu lokalnego zgodnie z definicją globalną
naprawił Naprawiono wartość elementu lub atrybutu
formularz Elementy zadeklarowane lokalnie są definiowane w określonych instancjach dokumentu
typ przedmiotu Typ elementu listy
Typy członków Rodzaj prętów używanych w związku
maks.Występuje Maksymalna liczba wystąpień elementu
minWystępuje Minimalna liczba wystąpień elementu
mieszany Określanie elementu o typie mieszanym
nazwa Nazwa elementu lub atrybutu
przestrzeń nazw Przestrzeń nazw
bez przestrzeni nazw Określenie lokalizacji dokumentu schematu,
Lokalizacja schematu nie mając wynikowych przestrzeni nazw
do zniesienia Ustalenie, że element może mieć pustą wartość NULL (nil)
ref Ustawianie odniesienia do globalnie zdefiniowanego elementu
schematLokalizacja Lokalizowanie obwodu
Grupa substytucyjna Definiowanie zamiany elementów na inne elementy
docelowa przestrzeń nazw Wynikowa przestrzeń nazw schematu
typ Typ przedmiotu
używać Czy element jest wymagany, czy nie
wartość Wartość elementu schematu
xsi: zero Ustawienie rzeczywistej zawartości elementu null (NULL) w dokumencie XML
xsi:schematLokalizacja Rzeczywista lokalizacja elementu w dokumencie XML
xsi: wpisz Rzeczywisty typ elementu w dokumencie XML

Pojawiło się zadanie utworzenia pliku XML na podstawie schematu XSD. Przeszukiwanie forów doprowadziło do dużej liczby dyskusji związanych z niezrozumieniem procesu i tylko kilku artykułów wyjaśniających istotę. Ludzie zadawali pytania, zmagali się z rozwiązaniem, ale gdy problem ustąpił, po prostu znikali, nie opisując mechanizmu. Skłoniło to do stworzenia prostego opisu procesu.
P.S. Nie przeklinaj za bardzo, moim celem nie było stworzenie jakiegoś artykułu naukowego ściśle stosującego poprawną terminologię, ale po prostu pomoc w zrobieniu pierwszego kroku w kierunku zrozumienia bardzo potężnego mechanizmu wymiany poprzez XML.
P.P.S. Muszę od razu zastrzec, że załączony do artykułu plik uploadu jest jedynie szablonem tworzącym jedynie część wymaganej struktury pliku XML, gdyż moja praca z tym pobieraniem miała raczej charakter edukacyjny (skuteczniejszym rozwiązaniem wydawało się skopiowanie poprzedniego dokumentu eksportowego na stronie FCS i pobranie jedynie tabelarycznej części Produktów z pliku Excel, wydawało się bardziej efektywnym rozwiązaniem), a brak czasu nie pozwolił mi dokończyć tworzenie całej konstrukcji, bazując wyłącznie na rozważaniach o perfekcjonizmie.

Tak więc, po zarejestrowaniu się na stronie internetowej FCS, stało się jasne, że w celu stworzenia dokumentów raportowania statystycznego dotyczącego eksportu konieczne jest pobranie danych z dokumentów zarządzania handlem towarami i usługami oraz utworzenie pliku do pobrania.

Istnieją dwie możliwe opcje pobierania.

Po pierwsze: załadowanie części tabelarycznej produktami z pliku Excel (ta opcja została wybrana jako działająca, ponieważ miała tę zaletę, że nie trzeba było zawracać sobie głowy przetwarzaniem „nagłówka” dokumentu, ale można było po prostu skopiować poprzedni, zmieniając go w „Nagłówku” „co było wymagane).

Drugie: utworzenie pliku XML według schematu pobranego ze strony FCS w formie „Albumu formatów elektronicznych formularzy dokumentów”. Album zawiera dość dużą liczbę schematów XSD. Znaleźli schemat „Formularza statystycznego rozliczania przepływu towarów” oraz dodatkowe pliki z opisami jego typów. Schematy są dołączone do artykułu w archiwum z obróbką.

Do przeglądania schematów XSD użyliśmy bezpłatnego Notatnika Microsoft XML 2007.

Obraz przedstawia główny plik ze schematem XSD „Formularz statystyczny do rozliczania przepływu towarów”. Obraz podkreśla główne bloki schematu XSD, które musimy zrozumieć.

Z diagramu jasno wynika, że ​​musimy otrzymać plik XML wypełniony strukturą określoną w gałęzi „xs:element” typu StaticFormType.

Struktura może być dość złożona (jak w naszym przypadku). Z opisami typów obecnymi bezpośrednio w gałęzi, umieszczonymi w osobnej gałęzi lub nawet znajdującymi się w innym pliku.

Struktura ta posiada typ StaticFormType, który z kolei składa się z typu bazowego BaseDocType, czyli zestawu obiektów różnych typów i atrybutów tekstowych.

Typ podstawowy BaseDocStyle jest zdefiniowany w innym pliku (i przestrzeni nazw)
.

Plik ten zawiera wiele typów, które w naszym przypadku nie są używane.

Przejdźmy teraz do pracy w 1C. W skrócie to, co musimy zrobić, sprowadza się do następujących rzeczy:

1. Powstaje Fabryka XDTO

OurFactoryXDTO = CreateFactoryXDTO(ArrayFullFileNamesWithXSDSchemas);

2. W fabryce XDTO tworzone są wszystkie złożone typy danych, które następnie wypełniamy w utworzonym pliku XML:

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

Typy danych zawarte w danym typie można uzyskać ze zbioru jego właściwości:

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

3. Po utworzeniu wszystkich złożonych typów danych tworzymy na ich podstawie strukturę plików XML złożoną z obiektów XDTO Factory:

StaticFormType_XDTOObject = MyXDTOFactory.Create(StaticFormType); // kolekcja z dokumentami NewDocuments = MyFactoryXDTO.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "List przewozowy"); NewDocuments.PrDocumentNumber = MyFactoryXDTO.Create(PrDocumentNumberType, "123-number"); NewDocuments.PrDocumentDate = MyFactoryXDTO.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(NewDocuments);

Jednocześnie uzupełnij podstawowe (typy proste) szczegóły.

4. Na koniec wyładowujemy wszystko z fabryki XDTO do pliku:

Plik XML = Nowy wpis XML(); PlikXML.OpenFile(NazwaPliku); FileXML.WriteXMLDeclaration(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); PlikXML.Zamknij();

P.S. Archiwum zawiera plik szablonu przesyłania w formacie XML (tworzona jest tylko część szczegółów, odzwierciedlająca wszystkie przypadki, w których plik jest wypełniony) oraz schematy XSD.

Rozpakuj wszystkie pliki do określonego katalogu.

Zostanie w nim utworzony XML.

Format XML jest bardzo popularny przy wymianie różnych dokumentów tekstowych pomiędzy systemami informatycznymi. Możliwość tworzenia unikalnej struktury dokumentów pozwala na wykorzystanie ich w wielu obszarach - bibliotekach elektronicznych, WEB-ie, imporcie/ekporcie i wielu innych. Bez możliwości wygodnej pracy z tym formatem systemy 1C nie zyskałyby takiej popularności. Ponieważ 1C aktywnie korzysta z technologii WEB, każdy programista musi umieć czytać XML i zapisywać w nim informacje.

Reprezentacja i odczyt plików XML

Jedną z kluczowych zalet języka znaczników XML jest jego dość wygodna i intuicyjna struktura i składnia. Tworząc go, autorzy postawili sobie za cel stworzenie języka znaczników, który byłby łatwy do odczytania zarówno przez ludzi, jak i komputery. Obecnie XML został szeroko rozwinięty w innych formatach, ale pozostaje popularny i szeroko stosowany. Struktura pliku XML zbudowana jest według następującego schematu:

Aby rozważyć przykład importowania danych do 1C, wystarczy plik przedstawiony powyżej. Aby pisemna procedura mogła odczytać plik XML, wystarczy przekazać do niego ścieżkę do samego pliku. Można to zrobić za pomocą interfejsu, umożliwiając użytkownikom samodzielne określenie pliku lub poprzez zakodowane przetwarzanie tekstu.

Jednym z popularnych sposobów pracy z XML o rozmiarze do 100 MB w 1C jest użycie Document Object Model (DOM). Jego znaczenie polega na sekwencyjnym przetwarzaniu wszystkich węzłów dokumentu reprezentowanych w formacie XML. We wbudowanym języku 1C algorytm ten wygląda następująco:

  1. Deklaracja mechanizmów, za pomocą których odczytywany jest plik XML; Pętla do przechodzenia przez węzły;
  2. Odczyt danych i atrybutów w węźle;
  3. Wyjście informacyjne. W razie potrzeby na tym etapie można dokonać zapisu w zmiennych lub bezpośrednio w niezbędnych tabelach;
  4. Zakończenie mechanizmu.
Procedura &OnServer ReadOnServer(PathToFile) //deklaracja mechanizmów Mechanizm odczytu = Nowy ReadingXML; Czytnik.OpenFile(PathToFile); Konstruktor = Nowy BuilderDOM; Dokument = Builder.Read(Reader); //pętla do przechodzenia przez węzły Dla każdego elementu From Document.DocumentElement.ChildrenNodes Pętla //odczyt danych If element.NodeName = "Product" Następnie produkt = element; Dla każdej wartości Z produktu.ChildrenNodes Cycle Jeśli wartości.NodeName = „Nazwa”, to Nazwa = wartości; Kolor = Nazwa.Attributes.GetNamedElement("Kolor"); ElseIf wartości.NodeName = „Cena”, a następnie Koszt = wartości; Waluta = Koszt.Attributes.GetNamedItem("Waluta"); koniecJeśli; Koniec cyklu; //wiadomości wyjściowe Notify("Nazwa: " + Nazwa.Treść tekstu + "; kolor: "+Kolor.Wartość +"; Cena: "+Koszt.Treść tekstu + "; Waluta: "+Waluta.Wartość); koniecJeśli; Koniec cyklu; //zamknięcie mechanizmu Non-MechanismReading.Close(); Koniec procedury

Dzięki temu wyświetlamy użytkownikowi komunikaty z zaimportowanymi danymi. Możesz także umieścić wszystkie dane w żądanej strukturze i na jej podstawie zaprogramować utworzenie dokumentu lub wpisów w katalogu. Szybkość pracy 1C z XML jest dość wysoka, dlatego ten format jest coraz częściej używany przy wymianie danych z innymi źródłami.

Aby przesłać informacje, będziemy musieli także wejść w interakcję z plikami XML. Spójrzmy na przykład rekordu przy użyciu obiektu XML Record na platformie 1C i prześlij dane o elemencie. Jego głównymi zaletami są prostota kodu i szybkość przetwarzania danych. Algorytm po stronie serwera do zapisywania pliku XML można przedstawić w kilku kolejnych krokach:

  1. Połącz się z plikiem xml;
  2. Tworzymy elementy głowy i zapisujemy do nich dane. Jeśli chcesz załadować dużą ilość informacji do pliku XML, to na tym etapie skorzystasz z pętli. Bądź ostrożny i pamiętaj, że żądanie danych musi zostać złożone przed pętlą, a nie w niej;
  3. Zamknij plik.
//otwórz plik Nomenclatura.xml i wpisz element nagłówkowy RecordVFile = New RecordXML(); WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); WriteInFile.3writeStartItem("Produkty"); //wybierz dane do rekordu SelectionFromDirectory = Directories.Nomenclature.Select(); //cykl, w którym następuje zapis While SelectingFromDirectory.Next() cykl //zapis nowych danych RecordToFile.RecordBeginningElement("Product"); RecordInFile.RecordAttribute("Nazwa", SelectionFromDirectory.Name); WriteToFile.WriteAttribute("InitialPrice", Line(SelectionFromDirectory.InitialPrice)); WriteToFile.WriteEndElement(); Koniec cyklu; //Zamknij element head i plik WriteVFile.WriteEndElement(); WriteInFile.Close();

Mechanizm XDTO w 1C

Programiści firmy 1C stworzyli własny mechanizm wymiany informacji poprzez XML - XDTO (XML Data Transfer Objects). Począwszy od wersji 8.1 platforma posiada możliwość wymiany danych z innymi systemami bez konieczności zagłębiania się w kwestie generowania pliku XML. Większość kwestii technicznych załatwia 1C, a my jedyne, co musimy zrobić, to wskazać dane niezbędne do wygenerowania XML. To prawda, że ​​​​programista musi wcześniej wykonać pewne manipulacje.

Aby załadować plik XML za pomocą XDTO, musimy poinformować 1C o strukturze pliku. Przekazuje się go poprzez zestaw diagramów, które można utworzyć w edytorze tekstu lub za pomocą specjalistycznego programu. Wynikowy plik powinien opisywać ogólną strukturę i typy danych użyte w pliku XML. Przed odczytaniem lub zapisaniem nowego pliku XML programista musi załadować jego schemat do konfiguracji w obszarze Pakiety XDTO.

W takim przypadku ręcznie stworzymy prosty pakiet, aby 1C zrozumiał strukturę naszego przykładowego pliku. Aby generowanie pliku przebiegło pomyślnie musimy na schemacie odzwierciedlić fakt, że mamy element head oraz załącznik z atrybutami. Utworzony schemat należy wyeksportować do pliku w formacie xsd i przesłać wraz z xml, aby druga strona nie musiała zajmować się strukturą i tworzyć pakietu xdto na nowo.


Algorytm serwera podobny do poprzedniego pomoże Ci zapisać nowy XML na dysku twardym. Jedyną różnicą jest konieczność dodania danych dla 1 produktu do fabryki XDTO – specjalny mechanizm platformy 8.3 1C. Jeśli zaistnieje potrzeba utworzenia większej liczby poziomów zagnieżdżenia, konieczne będzie opisanie każdego elementu głównego.

//Otwórz plik XML RecordVFile = Nowy RecordXML; WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); //Wskaż 1C, jaki typ danych powinien zostać utworzony - element nagłówkowy AllProducts = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Products")); //wybierz dane do przesłania SelectionFromDirectory = Directories.Nomenclature.Select(); //Dodaj poszczególne produkty do elementu głównego Podczas wybierania z katalogu Directory.Next() cyklu Product = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Product")); Product.Name = Wybierz z katalogu.Name; Product.InitialPrice = String(SelectionFromDirectory.InitialPrice); AllProducts.Add(Produkt); Koniec cyklu; //zapisz dane i zamknij plik FactoryXDTO.WriteXML(WriteToFile, AllProducts); WriteInFile.Close();

Rozważane mechanizmy są dość uniwersalne i odpowiednio skonfigurowane mogą rozwiązać większość problemów. Istnieje jednak wiele niuansów w interakcji między 1C a XML. O wiele skuteczniejsze jest badanie ich w rzeczywistych warunkach, a nie na zadaniach testowych, w których przetwarzanie pliku XML rozwiązuje raczej wąskie problemy.

W tym rozdziale dowiesz się, jak pisać schematy XML. Dowiesz się również, że diagram można zapisać na różne sposoby.

Dokument XML

Przyjrzyjmy się temu dokumentowi XML o nazwie „shiporder.xml”:

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

Ola Nordmann

Langgta 23

4000 Stavangerów
Norwegia


Burleska Imperium
Specjalna edycja
1
10.90


Ukryj swoje serce
1
9.90

Powyższy dokument XML składa się z elementu głównego „shiporder”, który zawiera wymagany atrybut o nazwie „orderid”. Element „shiporder” zawiera trzy różne elementy podrzędne: „orderperson”, „shipto” i „item”. Element „przedmiot” pojawia się dwukrotnie i zawiera element „tytułu”, opcjonalny element „uwagi”, element „ilości” i element „ceny”.

Powyższa linia: Xmlns: XSI="http://www.w3.org/2001/XMLSchema-instance" informuje parser XML, że ten dokument powinien zostać zweryfikowany pod kątem schematu. Wiersz: XSI: noNamespaceSchemaLocation = „shiporder.xsd” wskazuje, gdzie znajdują się schematy (tutaj znajduje się w tym samym folderze co „shiporder.xml”) .

Tworzenie schematu XML

Teraz chcemy utworzyć schemat dla powyższego dokumentu XML.

Zaczniemy od otwarcia nowego pliku, który nazwiemy „shiporder.xsd”. Aby utworzyć schemat, możemy po prostu podążać za strukturą dokumentu XML i definiować każdy element tak, jak go znajdziemy. Zaczniemy od standardowej deklaracji XML, po której następuje element xs:schema definiujący schemat:



...

W powyższym schemacie używamy standardowych przestrzeni nazw (xs), a identyfikator URI powiązany z tą przestrzenią nazw to definicja języka schematu, która ma standardową wartość http://www.w3.org/2001/XMLSchema.

Następnie musimy zdefiniować element „shiporder”. Element ten ma atrybut i zawiera inne elementy, dlatego traktujemy go jako typ złożony. Elementy potomne elementu „shiporder” są otoczone elementem xs: sekwencja, który definiuje uporządkowaną sekwencję podelementów:




...


Następnie musimy zdefiniować element „orderperson” jako typ prosty (ponieważ nie zawiera on żadnych atrybutów ani innych elementów). Typ (xs:string) jest poprzedzony przedrostkiem przestrzeni nazw powiązanym ze schematem XML, który określa predefiniowany typ danych schematu:










Za pomocą schematów możemy określić liczbę możliwych wystąpień elementu z atrybutami MaxOccurs i MinOccurs. MaxOccurs określa maksymalną liczbę wystąpień elementu, a MinOccurs określa minimalną liczbę wystąpień elementu. Domyślna wartość zarówno MaxOccurs, jak i MinOccurs to 1!

Teraz możemy zdefiniować element „przedmiot”. Ten element może pojawić się wiele razy w elemencie „zamówienie dostawcy”. Można to określić poprzez ustawienie atrybutu maxOccurs elementu „item” na „unbounded” , co oznacza, że ​​element „item” może wystąpić tyle razy, ile chce autor. Należy pamiętać, że element „notatka” jest opcjonalny. Zdefiniowaliśmy to, ustawiając atrybut minOccurs na zero:










Teraz możemy zadeklarować atrybut „shiporder” elementu. Ponieważ jest to atrybut wymagany, określamy use="required".

Uwaga: Instrukcje atrybutów muszą zawsze znajdować się na końcu:

Oto pełna lista pliku schematu o nazwie „shiporder.xsd”:





























Oddzielne obwody

Poprzednia metoda projektowania jest bardzo prosta, ale może być trudna do odczytania i utrzymania, gdy dokumenty są złożone.

Kolejna metoda projektowania opiera się na zdefiniowaniu wszystkich elementów i atrybutów, a następnie odwołaniu się do nich za pomocą atrybutu ref.

Oto nowy wygląd pliku schematu („shiporder.xsd”):








































Używanie typów nazwanych

Trzecia metoda projektowania definiuje klasy lub typy, co pozwala na ponowne wykorzystanie definicji elementów. Odbywa się to poprzez nadanie elementom nazw SimpleType i complexTypes, a następnie odwoływanie się do nich poprzez atrybut type elementu.

Oto trzeci projekt pliku schematu („shiporder.xsd”):

































Element ograniczenia wskazuje, że typ danych pochodzi z przestrzeni nazw typu danych W3C XML Schema. Zatem poniższy fragment oznacza, że ​​wartość elementu lub atrybutu musi być wartością ciągu znaków:

Element ograniczający jest częściej używany do stosowania ograniczeń do elementów. Spójrz na następujące linie z powyższego diagramu:





Określa, że ​​wartość elementu lub atrybutu musi być ciągiem znaków, w każdym wierszu musi znajdować się dokładnie sześć znaków, a znaki te muszą być liczbą z zakresu od 0 do 9.

XDTO to mechanizm 1C potrzebny podczas tworzenia i korzystania z usług internetowych w 1C.

Pakiety XDTO 1C pozwalają opisać strukturę wymaganego pliku XML do konwersji danych do i z XML.

Dla zainteresowanych przyjrzyjmy się pytaniu bardziej szczegółowo.

Pliki XML są przesyłane przez Internet i mogą być odczytywane przez wiele programów.

Są postrzegane — co oznacza, że ​​jest to wbudowane w ich kod — jeśli natkniesz się na nazwę określonego elementu w pliku XML — postrzegaj to w ten sposób i wykonaj to.

Dlatego jeśli użyjemy nazwy elementu Apple, istnieje dość duże prawdopodobieństwo, że jakiś inny program „pomyśli”, że to jest Apple, które zna, ale my mieliśmy na myśli coś własnego.

Aby temu zapobiec i wyraźnie wskazać, że nasz Apple różni się od wszystkich innych, w pliku można podać nazwę przestrzeni nazw - przedrostek, który stosuje się przed nazwami elementów.

Przestrzeń nazw (w języku angielskim) jest zdefiniowana w następujący sposób - xmlns:SpaceName = „URL”, na przykład:
xmlns:store = "http://store.ru"

Dlaczego potrzebujesz adresu URL?

Dlatego też określany jest unikalny identyfikator, który identyfikuje również autora przestrzeni nazw.

Naturalnie zakłada się, że osoba, która wskazała przestrzeń nazw, jest osobą wyjątkowo uczciwą i wskazała swoją witrynę i nie korzysta z kilku różnych przestrzeni nazw w ramach jednej witryny.

Nawiasem mówiąc, zwykle wskazują nie tylko adres URL witryny, ale adres URL konkretnego folderu w witrynie, więc jeśli coś się stanie, możesz utworzyć inną przestrzeń nazw w innym folderze w witrynie do wykorzystania w innej sytuacji.

Obiekt to specyficzna struktura danych, samowystarczalna, zawierająca wszystkie swoje dane.

Ponieważ dane strukturalne są opisane w języku XML, to znaczy w postaci struktury, która ma swoje własne właściwości itp., Można na nie patrzeć jak na obiekty.

W podanym przykładzie może to być obiekt LIST z właściwością i elementem zagnieżdżonym.

DOM to sposób traktowania pliku XML nie jako tekstu w określonym formacie, ale jako zbioru obiektów z właściwościami, polami i tak dalej.

Opis pliku XML

Jeśli stale używamy pliku o określonej strukturze do wymiany między dwoma programami, prawdopodobnie chcielibyśmy:

  • Aby używać pewnych nazw
  • Mieć te elementy, których oczekujemy (które „muszą tam być, aby można je było wykorzystać w naszej wymianie”)
  • Aby atrybuty zawierały typy, których oczekujemy (string, number itp.).

Istnieją następujące standardy formatu plików opisujące strukturę XML (które są również przechowywane w zwykłym pliku tekstowym):

  • Rozszerzenie DTD – Definicja typu dokumentu
  • Rozszerzenie XSD – XML Shema.

Obydwa formaty opisują, jak powinien wyglądać dokument. Procedura sprawdzania, czy XML jest zgodny ze standardem opisanym w takim pliku, nazywa się weryfikacją.

XDTO 1C to narzędzie umożliwiające dodanie do konfiguracji opisu pliku XML. A raczej nie jest opisywany plik, ale określone struktury XML.

Aby wskazać typy, których można użyć, stosuje się listę lub bibliotekę typów, która nazywa się fabryką XDTO 1C.

Ta fabryka określa zarówno typy proste (łańcuch, liczba, data), które są powszechnie używane w innych językach, programach itp., Ale także typy 1C, które są używane w 1C i w określonej konfiguracji.

Sama fabryka XDTO 1C składa się z kilku pakietów. Podstawowe typy są opisane w pakiecie o nazwie www.w3.org

Aktualne typy danych konfiguracyjnych opisano w pakiecie http://v8.1c.ru/8.1/data/enterprise/current-config

Same typy nazywane są zgodnie z nazwą w konfiguratorze z dodatkiem anglojęzycznej formy (CatalogRef, CatalogObject, DocumentRef, DocumentObject), na przykład:

Obiekt Katalogu.Nomenklatura

Dodanie pakietu XDTO 1C

To wszystko z pewnością brzmi fajnie. Nie dotarliśmy jeszcze do tematu XSLT – sposobu na przekształcenie plików XML w coś innego, np. HTML. Temat XML jest niezwykle obszerny i trudny do omówienia nawet w osobnej książce.

Naszym zadaniem jest zrozumienie, że XDTO 1C pozwala nam opisać, jakie elementy powinien zawierać pakiet XML, który ma zostać wygenerowany lub odczytany.

Pakiety XDTO 1C znajdują się w konfiguracji w gałęzi Pakiety Ogólne/XDTO 1C.

Możesz ręcznie dodać pakiet XDTO do 1C (fajnie!), Ale lepiej jest uzyskać odpowiedni plik XSD z gotowym opisem schematu.

Opis schematu XSD dla obiektów o dowolnej konfiguracji można uzyskać klikając na gałąź Pakiety Ogólne/XDTO 1C i wybierając z menu opcję Eksportuj schemat konfiguracyjny XML.

Plik jest tekstowy, możesz go edytować w Notatniku Windows, usuwając niepotrzebne obiekty, których nie potrzebujesz.

Możesz dodać gotowy schemat XSD do 1C, klikając prawym przyciskiem myszy gałąź pakietów Ogólne/XDTO 1C i wybierając pozycję menu Importuj schemat XML.

Korzystanie z mechanizmu XDTO 1C

Praca z XDTO 1C oznacza konwersję wartości do i z XML.

Praca odbywa się z wykorzystaniem obiektów języka 1C Reading XML/Writing XML.

Pracując z mechanizmem XDTO 1C musisz wskazać pakiet z którym pracujesz. Może to być pakiet standardowy (omówiony powyżej, patrz XDTO) lub pakiet dodany do konfiguracji. Pakiet jest identyfikowany poprzez adres URL podany w pakiecie.

Dwa główne proste sposoby pracy to:

  • Serializacja - automatyczna konwersja wartości z 1C na XML i odwrotnie
  • Tworzenie obiektu, wypełnianie jego pól, zapisywanie do XML (i odpowiednio odczytywanie z XML, a następnie odczytywanie jego pól).

Przykład serializacji wartości:
Serializer = Nowy SerializerXDTO(FactoryXDTO);
Plik XML = Nowy wpis XML();
PlikXML.OpenFile("Nazwa pliku");
Serializer.WriteXML(plik XML, wartość1C);

Przykład odczytu/zapisu obiektu:

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

Podobało się? Polub nas na Facebooku