1c xml, xsd şema örneğine dayanmaktadır. Federal Gümrük Hizmeti için İstatistiksel Raporlama yüklemesi oluşturma örneğini kullanarak XSD şemasını kullanarak bir XML dosyası oluşturmanın kısa bir açıklaması. XDTO paketi ekleme

Dipnot: XML Veri Şemaları (XSD). Visual Studio. NET'te bir XSD şeması oluşturma. Yazılı bir DataSet nesnesi oluşturma. DataSet nesnesinin yapısı hakkında bilgi edinme. XML belgelerini ve XSD şemalarını yazılı ve normal DataSet nesnelerine yükleme. ReadXml ve ReadXmlSchema yöntemleri. Yazılan ve normal bir DataSet nesnesinin içeriğini ve yapısını kaydetme. WriteXml ve WriteXmlSchema yöntemleri

DataSet nesnesi yazıldı. XML belgelerini okuma ve yazma

XML Veri Şemaları (XSD)

Veri şemaları 1 XML Şema Belgesinin tam çevirisi -< XML belge şeması> ancak "XML veri şeması" terimini kullanmaya devam edeceğiz. XSD (XML Şema Belgesi, XSD), XML belgeleri için kurallar oluşturmanın alternatif bir yoludur. DTD'lerle karşılaştırıldığında şemalar, karmaşık veri yapılarını tanımlamak için daha güçlüdür, bir dilin gramerini tanımlamanın daha net bir yolunu sunar ve kolayca modernize edilip genişletilebilir. Bir XSD şeması aşağıdaki bilgileri içerebilir:

  • ilişkisel bir veritabanındaki tablolar arasındaki yabancı anahtar ilişkilerine benzer şekilde veri öğeleri arasındaki ilişkilerin temsili;
  • birincil anahtara benzer benzersiz tanımlayıcıların temsili;
  • tip spesifikasyonu Bir XML belgesindeki her bir öğe ve öznitelik için veriler.

Visual Studio.NET'te bir veri şeması oluşturmak için ana menüde Dosya\Yeni\Dosya'ya gidin ve şablonlar listesinden XML Şeması'nı seçin (bkz. Şekil 11.3). “Başlamak için nesneleri Sunucu Gezgini veya Araç Kutusu penceresinden çalışma alanına (tasarım alanı) sürükleyin veya sağ tıklayın” yazan bir pencere görüntülenir (Şekil 11.1):


Pirinç. 11.1.

Mesele şu ki tasarım modundayız. (XML) butonuna tıklayarak kod moduna geçin:

İlk satır, şemanın xs:schema kök öğesine sahip bir XML belgesi olduğunun bilinen göstergesidir. xs öneki: ad alanını belirtmek için tüm şema öğelerinin önekini oluşturur. İkinci satır, şemanın uzun, ayrıntılı ve çoğu zaman tamamen gereksiz bir açıklamasını içerir (HTML sayfaları için benzer kodla karşılaştırın). Doğru işlem için kendimizi aşağıdaki gösterimle sınırlamak yeterlidir:

Ancak stüdyonun yerleşik görselleştirme araçları bu "başlığın" varlığını varsayar, dolayısıyla kaldırılmaması gerekir. Belirli bir XML belgesini Visual Studio.NET'te açıklayan bir şema oluşturmak oldukça basit bir iştir. Aşağıdaki XMLEasy.xml belgesini oluşturalım:

1

(Veri) sekmesine geçiyoruz ve yalnızca bir giriş görüyoruz (Şekil 11.2).


Pirinç. 11.2.

Bu belgeyi birkaç şekilde açıklayan bir şema oluşturabilirsiniz: ana menüde “XML \ Şema Oluştur” öğesini seçin (Şek. 11.3, A), XML modunda, içerik menüsünde aynı öğeyi seçin (Şek. 11.3, A). 11.3, B), XML modunda, içerik menüsünde aynı öğeyi seçin (Şekil 11.3, B), Veri'de, içerik menüsünde bu öğeyi seçin (Şekil 11.3, C) ve son olarak Veri modunda, XML araç çubuğu düğmesine tıklayın (Şekil 11.3, D).


Pirinç. 11.3.

Her durumda, belgenin taslağı bir tablo şeklinde görünür (Şekil 11.4). Şimdilik Schema modundan çıkıp (XML) moduna geçelim.


Pirinç. 11.4.

Ortam, belgenin yapısını açıklayan XML kodunu oluşturdu:

Bu aynı zamanda ADO .NET nesnelerini kullanarak şemayı daha fazla değiştirmek için gereken açıklamayı da içerir. Kaynak XMLEasy.xml belgesinde veri şemasına bir bağlantı göründü:

XMLEasy.xsd belgesi, XMLEasy.xml'nin bulunduğu dizinde otomatik olarak oluşturuldu.

XSD şemalarını anlamayı öğrenmek için öncelikle verilerin ek unsurlar olmadan saf haliyle tanımlanmasıyla çalışmalısınız. Tablo 11.1, ADO .NET nesnelerine bağlanmadan oluşturulan birkaç basit XML belgesini ve bunların şemalarını göstermektedir.

Tablo 11.1. XSD şemaları oluşturma örnekleri
XML belgesinin içeriği XSD Şeması İçeriği

1

Tanım
Bir XMLEasy.xml belgesinde TOUR öğesi, IDTOUR alt öğesini içeren kök öğedir. Kök elemanın genel şeması aşağıdaki gibidir:

: Öğe içeriği...

Alt öğeler şu şekilde tanımlanır:

XML belgesinin içeriği XSD Şeması İçeriği

1 Kıbrıs 25.000,00 RUB İki yetişkin kuponunun fiyatına bir çocuğun (7 yaşına kadar) fiyatı dahildir. 2 Yunanistan 32.000,00 RUB Ağustos ve Eylül aylarında özel indirimler uygulanır 3 Tayland 30.000,00 RUB Uçak bileti dahil değil 4 İtalya 26.000,00 RUB Otelde sabah kahvaltısı tur fiyatına dahildir 5 Fransa 27.000,00 RUB Tur fiyatına ek geziler dahil değildir

Tanım
Kök TABLE öğesi, bir grup alt öğeden oluşan bir TOUR öğesi içerir. Seçim öğesi diğer öğelerin seçimini kontrol eder; maxOccurs özelliğinin "sınırsız" değeri TOUR gruplarının sınırsız olabileceğini gösterir.

: :

XML belgesinin içeriği XSD Şeması İçeriği

1 Kıbrıs 25.000,00 RUB 1 İki yetişkin kuponunun fiyatına bir çocuğun (7 yaşına kadar) fiyatı dahildir.


Pirinç. 11.5.
Tanım
IDTOUR öğesinin veri türü int olarak, CLOSED öğesinin veri türü boolean olarak ve geri kalanı varsayılan dize veri türü olarak ayarlandı. Veri türünü doğrudan XML veri şeması modunda değiştirebilirsiniz, ancak Şema modunu kullanmak daha uygundur (bu durumda mod DataSet olarak adlandırılacaktır), açılır listeden veri türünü seçin (Şekil 11.5) :

Kurs yazılımında bu tabloya ait tüm dosyaları XSD klasöründe (Kod\Glava5\XSD) bulacaksınız.

Bir XML belgesinde veri tipinin ayarlanması (Tablo 11.1 en son örnektir) içeriği sınırlamanın bir yoludur. Belirli bir türün değerini sınırlamak için ek özellikler kullanılır. Aşağıdaki şema parçasında PRICE öğesinin değeri 50 ile 100 arasında olmalıdır:

Bir XML belgesini bazı sabit değerlerle sınırlamak için aşağıdaki yapıyı kullanın:

Burada NAME öğesi beş ülke adından yalnızca bir sabit değeri alabilir.

Bir XSD şeması geliştirmek oldukça fazla iş gerektirir. Visual Studio.NET'teki görsel araçlar bu görevi çok daha kolaylaştırır. Temel kavramlara hakim olmak için otomatik olarak oluşturulan birkaç XML belge şemasını öğrenmeniz önerilir. Tablo 11.2-11.4'te karşılaşılabilecek ana unsurların ve niteliklerin bir açıklaması verilmektedir.

Tablo 11.2. XSD Şema Öğeleri
Öğe Tanım
Tümü İç içe öğeler herhangi bir sırayla tanımlanabilir
dipnot Yorum öğelerinin ana öğesi Ve
herhangi İç içe geçmiş herhangi bir öğe
herhangi bir özellik Herhangi bir özellik
Uygulama bilgisi Yorum öğesi. Şema başlığını belirtir
bağlanmak Bağlanmak
özellikGrubu Özellik grubu
seçenek Diğer öğelerin seçilmesi. "|" operatörünün analogu DTD'de
karmaşıkİçerik Kısıtlamalar veya modeli uzantıları karmaşık içerik türü
karmaşık Tür Karmaşık eleman
dokümantasyon Yorum öğesi. Şema hakkında bilgi sağlar
eleman Öğe
eklenti Öğe uzantıları
alan Saha beyanı. Bir öğenin içinde geçerlidir alanları tanımlamak
grup Öğe grubu
içe aktarmak Başka bir şemadan tür bildirimini içe aktarma
katmak Mevcut bir ad alanına farklı bir şema ekleme
anahtar Başka bir öğeyi işaret eden bir anahtarla bir öğeyi veya niteliği belirtme
anahtar referans Anahtarın işaret ettiği öğeyi veya niteliği belirtme
liste Değerlerin listesini içerebilen bir öğe
yeniden tanımla Önceden bildirilmiş öğeleri geçersiz kılma
kısıtlama Eleman kısıtlaması
şema Şema kök öğesi
seçici XML öğelerini seçmek için seçici
sekans Diğer elemanların sırası. DTD'de "" operatörünün analogu
basitİçerik İçeriği yalnızca karakter verilerini temsil eden bir model
basit Tip Basit öğe
birlik Birden fazla anlamı olabilen bir öğe veya özellik
eşsiz Benzersiz bir değere sahip olması gereken bir öğe veya özellik
Tablo 11.3. Nitelikler - XSD Şeması Sınırlamaları
Bağlanmak Tanım
numaralandırma Değer listesi
uzunluk Uzunluk
maksimum uzunluk Maksimum uzunluk
minUzunluk Minimum uzunluk
maxExclusive Maksimum değer
maxInclusive Maksimum değer dahil
dk.Özel En az değer
minKapsayıcı Minimum değer dahil
kesirRakamlar Kesirli sayılarda ondalık basamak sayısı
toplam Rakam Basamak sayısı
model Öğe içeriğinin örneği (deseni)
varsayılan Varsayılan öğe veya özellik değeri
elementFormDefault Yerel bir öğenin özelliklerini genel olarak tanımlandığı şekilde ayarlama
sabit Sabit öğe veya nitelik değeri
biçim Yerel olarak bildirilen öğeler belirli belge örneklerinde tanımlanır
öğe türü Öğe Türünü Listele
üye Türleri Birliklerde kullanılan üye türleri
maxOccurs Bir öğenin maksimum oluşum sayısı
dkOluşur Bir öğenin minimum oluşum sayısı
karışık Karışık türde bir öğeyi belirtme
isim Öğe veya özellik adı
ad alanı Ad alanı
noAd alanı Şematik belgenin konumunun belirtilmesi,
ŞemaKonumu sonuçta ortaya çıkan ad alanlarına sahip olmamak
sıfırlanabilir Bir öğenin boş bir NULL değerine (nil) sahip olabileceğini belirleme
referans Global olarak tanımlanmış bir öğeye referans ayarlama
şemaKonumu Devrenin yerini bulma
ikameGrubu Elemanların diğer elemanlarla değiştirilmesinin tanımlanması
hedefAd alanı Ortaya çıkan şema ad alanı
tip Öğe türü
kullanmak Öğe gerekli mi, değil mi?
değer Şematik eleman değeri
xsi:nil Bir XML belgesinde boş (NULL) bir öğenin gerçek içeriğini ayarlama
xsi:schemaKonum Öğenin XML belgesindeki gerçek konumu
xsi:tür XML belgesindeki öğenin gerçek türü

XSD şemasına dayalı bir XML dosyası oluşturma görevi ortaya çıktı. Forumlarda arama yapmak, sürecin yanlış anlaşılmasıyla ilgili çok sayıda tartışmaya ve özü açıklayan yalnızca birkaç makaleye yol açtı. İnsanlar sorular sordular, çözüm bulmakta zorlandılar ama sorun teslim olduktan sonra mekanizmayı açıklamadan ortadan kayboldular. Bu, sürecin basit bir açıklamasının oluşturulmasına yol açtı.
Not: Çok fazla yemin etmeyin, amacım kesinlikle doğru terminolojiyi kullanarak bir tür bilimsel makale oluşturmak değil, yalnızca XML yoluyla çok güçlü değişim mekanizmasını anlama yolunda ilk adımı atmaya yardımcı olmaktı.
P.P.S. Makaleye eklenen yükleme dosyasının yalnızca gerekli XML dosya yapısının yalnızca bir kısmını oluşturan bir şablon olduğuna dair hemen bir rezervasyon yaptırmalıyım çünkü Bu indirmeyle ilgili çalışmam doğası gereği oldukça eğiticiydi (FCS web sitesindeki önceki ihracat belgesini kopyalamak ve Ürünlerin yalnızca tablolu kısmını bir Excel dosyasından indirmek daha etkili bir çözüm gibi görünüyordu) ve zaman eksikliği buna izin vermedi Tüm yapının yaratılışını sadece mükemmeliyetçilik düşüncelerine dayanarak tamamlamak.

Böylece, FCS web sitesine kayıt olduktan sonra, ihracata ilişkin İstatistiksel Raporlama belgeleri oluşturmak için Mal ve Hizmet Satışı Ticaret Yönetimi belgelerinden veri indirmenin ve indirmek üzere bir dosya oluşturmanın gerekli olduğu anlaşıldı.

İki olası indirme seçeneği vardır.

İlki: Ürünlerin yer aldığı tablolu kısmın bir Excel dosyasından yüklenmesi (bu seçenek bir çalışma seçeneği olarak seçildi, çünkü belgenin "Başlığını" işleme zahmetine gerek olmaması gibi avantajlara sahipti, ancak yalnızca kopyalayabilirsiniz) öncekini, “Başlık”ta "gerekli olanı" değiştirerek).

İkincisi: FCS web sitesinden indirilen şemaya göre “Elektronik belge formları için format albümü” şeklinde bir XML dosyası oluşturmak. Albüm oldukça fazla sayıda XSD şeması içeriyor. “Mal Hareketinin Muhasebeleştirilmesine İlişkin İstatistik Formu”nun bir diyagramını ve bunun türlerinin açıklamalarını içeren ek dosyaları buldular. Diyagramlar arşivdeki makaleye işlenerek eklenmiştir.

XSD şemalarını görüntülemek için ücretsiz Microsoft XML Notepad 2007'yi kullandık.

Resimde "Malların hareketinin muhasebeleştirilmesi için istatistiksel form" XSD şemasına sahip ana dosya gösterilmektedir. Resim, XSD şemasının anlamamız gereken ana bloklarını vurgulamaktadır.

Diyagramdan, StaticFormType türünün "xs:element" dalında belirtilen yapıyla doldurulmuş bir XML dosyası almamız gerektiği açıktır.

Yapı oldukça karmaşık olabilir (bizim durumumuzda olduğu gibi). Tür açıklamaları doğrudan dalda bulunur, ayrı bir dalda bulunur ve hatta başka bir dosyada bulunur.

Bu yapının StaticFormType türü vardır; bu da BaseDocType temel türünden, farklı türlerdeki nesneler ve metin niteliklerinden oluşan bir kümeden oluşur.

BaseDocStyle temel türü farklı bir dosyada (ve ad alanında) tanımlanmıştır.
.

Bu dosya bizim durumumuzda kullanılmayan birçok tür içerir.

Şimdi 1C'de çalışmaya geçelim. Kısaca yapmamız gerekenler şu şekilde;

1. XDTO Fabrikası oluşturuluyor

OurFactoryXDTO = CreateFactoryXDTO(ArrayFullFileNamesWithXSDSchemas);

2. XDTO fabrikasında, tüm karmaşık veri türleri oluşturulur ve bunları daha sonra oluşturulan XML dosyasına dolduracağız:

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

Belirli bir türün içerdiği veri türleri, özelliklerinin toplanmasından elde edilebilir:

CUOrganizationType = StaticFormType.Properties.Get("Alıcı").Type; NameType = CUOrganizationType.Properties.Get("KuruluşAdı").Type; ShortNameType = CUOrganizationType.Properties.Get("ShortName").Type; LanguageCodeType = CUOrganizationType.Properties.Get("OrganizationLanguage").Type;

3. Tüm karmaşık veri türleri oluşturulduğunda, bunlara dayalı olarak XDTO Factory nesnelerinden oluşan bir XML dosya yapısı oluştururuz:

StaticFormType_XDTOObject = MyXDTOFactory.Create(StaticFormType); // belgelerle toplama NewDocuments = MyFactoryXDTO.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "İrsaliye"); NewDocuments.PrDocumentNumber = MyFactoryXDTO.Create(PrDocumentNumberType, "123-sayı"); NewDocuments.PrDocumentDate = MyFactoryXDTO.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(NewDocuments);

Aynı zamanda temel (basit türler) ayrıntıları da doldurun.

4. Ve son olarak XDTO Factory'deki her şeyi bir dosyaya boşaltıyoruz:

XML Dosyası = Yeni XML Girişi(); FileXML.OpenFile(DosyaAdı); FileXML.WriteXMLDeclaration(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

Not: Arşiv, XML biçiminde bir yükleme şablonu dosyası (dosyanın doldurulduğu tüm durumları yansıtan yalnızca bazı ayrıntılar oluşturulur) ve XSD şemalarını içerir.

Tüm dosyaları belirli bir dizine açın.

İçinde XML oluşturulacak.

XML formatı, bilgi sistemleri arasında çeşitli metin belgelerinin alışverişi sırasında çok popülerdir. Belgeler için benzersiz bir yapı oluşturma yeteneği, onun birçok alanda (elektronik kütüphaneler, WEB, ithalat/ihracat ve diğerleri) kullanılmasına olanak tanır. Bu formatla rahatça çalışma yeteneği olmasaydı, 1C sistemleri bu kadar popüler olmazdı. 1C, WEB teknolojilerini aktif olarak kullandığından, her geliştiricinin XML okuyabilmesi ve içine bilgi yazabilmesi gerekir.

XML Dosya Gösterimi ve Okuma

XML işaretleme dilinin en önemli avantajlarından biri oldukça kullanışlı ve sezgisel yapısı ve sözdizimidir. Yazarlar bunu oluştururken hem insanlar hem de bilgisayarlar tarafından okunması kolay bir işaretleme dili oluşturma hedefini belirlediler. Günümüzde XML geniş ölçüde diğer formatlara dönüştürülmüştür, ancak popülerliğini ve yaygın olarak kullanılmasını sürdürmektedir. XML dosyasının yapısı aşağıdaki şemaya göre oluşturulmuştur:

1C'ye veri aktarma örneğini düşünmek için yukarıda sunulan dosya yeterli olacaktır. Yazılı prosedürün XML dosyasını okuyabilmesi için dosyanın yolunu ona iletmek yeterlidir. Bu, kullanıcıların dosyayı kendilerinin belirtmesine olanak tanıyan arayüz aracılığıyla veya metinde sabit kodlu işlem yoluyla yapılabilir.

1C'de boyutu 100 MB'a kadar XML ile çalışmanın popüler yollarından biri Belge Nesne Modelini (DOM) kullanmaktır. Bunun anlamı, XML'de temsil edilen tüm belge düğümlerinin sırayla işlenmesidir. Yerleşik 1C dilinde bu algoritma şöyle görünür:

  1. XML dosyasının okunduğu mekanizmaların beyanı; Düğümleri çaprazlamak için döngü;
  2. Bir düğümdeki verileri ve nitelikleri okuma;
  3. Bilgi çıkışı. Gerekirse bu aşamada değişkenlere veya doğrudan gerekli tablolara yazı yazılabilir;
  4. Mekanizmanın tamamlanması.
&OnServer Prosedürü ReadOnServer(PathToFile) //mekanizmaların bildirimi Okuma Mekanizması = Yeni ReadingXML; Reader.OpenFile(PathToFile); Oluşturucu = Yeni OluşturucuDOM; Belge = Builder.Read(Okuyucu); //düğümleri çaprazlamak için döngü Her öğe için Document.DocumentElement.ChildrenNodes'tan Döngü //veri okuma Eğer element.NodeName = "Ürün" O halde ürün = öğe; Her değer için Product.ChildrenNodes Döngüsünden Değerler.NodeName = "Ad" ise Ad = değerler; Renk = Name.Attributes.GetNamedElement("Renk"); ElseIf değerleri.NodeName = "Fiyat" ve ardından Maliyet = değerler; Para Birimi = Cost.Attributes.GetNamedItem("Para Birimi"); endIf; EndCycle; //çıktı mesajları Notify("Ad: " + Ad.TextContent + "; renk: "+Renk.Değer +"; Fiyat: "+Maliyet.Textİçerik + "; Para Birimi: "+Para Birimi.Değer); endIf; EndCycle; //mekanizma kapatılıyor Non-MechanismReading.Close(); Prosedürün Sonu

Sonuç olarak, içe aktarılan verileri içeren mesajları kullanıcıya görüntüleriz. Ayrıca tüm verileri istediğiniz yapıya yerleştirebilir ve buna dayanarak bir belgenin veya dizindeki girişlerin oluşturulmasını programlayabilirsiniz. 1C'nin xml ile çalışma hızı oldukça yüksektir, bu nedenle bu format, diğer kaynaklarla veri alışverişinde giderek daha fazla kullanılmaktadır.

Bilgi yüklemek için XML dosyalarıyla da etkileşim kurmamız gerekecek. 1C platform nesnesi XML Record'u kullanan bir kayıt örneğine bakalım ve öğeye veri yükleyelim. Başlıca avantajları kodun basitliği ve veri işleme hızıdır. Bir XML dosyası yazmak için kullanılan sunucu tarafı algoritması birkaç ardışık adımla temsil edilebilir:

  1. Xml dosyasına bağlanın;
  2. Head elementleri oluşturup onlara veri yazıyoruz. Bir XML dosyasına büyük miktarda bilgi yüklemek istiyorsanız bu aşamada döngüleri kullanacaksınız. Dikkatli olun ve veri talebinin döngünün içinde değil döngüden önce yapılması gerektiğini unutmayın;
  3. Dosyayı kapatın.
//Nomenclatura.xml dosyasını açın ve başlık öğesini yazın RecordVFile = New RecordXML(); WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); WriteInFile.3writeStartItem("Ürünler"); //kayıt için verileri seçin SelectionFromDirectory = Directoryies.Nomenclature.Select(); //kayıt işleminin gerçekleştiği döngü While SelectingFromDirectory.Next() döngüsü //yeni veri yazma RecordToFile.RecordStartofElement("Product"); RecordInFile.RecordAttribute("Ad", SelectionFromDirectory.Name); WriteToFile.WriteAttribute("InitialPrice", Line(SelectionFromDirectory.InitialPrice)); WriteToFile.WriteEndElement(); EndCycle; //Head öğesini ve WriteVFile.WriteEndElement() dosyasını kapatın; WriteInFile.Close();

1C'de XDTO mekanizması

1C şirket geliştiricileri, XML - XDTO (XML Veri Aktarım Nesneleri) aracılığıyla bilgi alışverişi için kendi mekanizmalarını oluşturdular. Sürüm 8.1'den başlayarak platform, XML dosyası oluşturma sorunlarına girmeden diğer sistemlerle veri alışverişi yapma olanağına sahiptir. Çoğu teknik sorun 1C tarafından halledilir ve tek yapmamız gereken, XML oluşturmak için gerekli verileri belirtmektir. Doğru, bunun için geliştiricinin önceden bazı manipülasyonlar yapması gerekiyor.

XDTO kullanarak bir XML dosyası yüklemek için 1C'ye dosyanın yapısını söylemeliyiz. Bir metin düzenleyicide veya özel bir program kullanılarak oluşturulabilen bir dizi diyagram aracılığıyla iletilir. Ortaya çıkan dosya, XML dosyasında kullanılan genel yapıyı ve veri türlerini açıklamalıdır. Yeni XML'i okumadan veya yazmadan önce geliştiricinin şemasını XDTO Paketleri altındaki yapılandırmaya yüklemesi gerekir.

Bu durumda 1C'nin örnek dosyamızın yapısını anlaması için elle basit bir paket oluşturacağız. Dosya oluşturmanın başarılı bir şekilde tamamlanması için şemaya bir head öğemiz ve nitelikleri olan bir ekimiz olduğunu yansıtmamız gerekir. Oluşturulan şemanın xsd formatında bir dosyaya aktarılıp xml ile birlikte aktarılması gerekir, böylece karşı tarafın yapıyla uğraşmasına ve xdto paketini tekrar oluşturmasına gerek kalmaz.


Öncekine benzer bir sunucu algoritması, yeni XML'i sabit sürücünüze kaydetmenize yardımcı olacaktır. Tek fark, 8.3 1C platformunun özel bir mekanizması olan XDTO fabrikasına 1 ürün için veri ekleme ihtiyacıdır. Daha fazla iç içe geçme düzeyi oluşturmaya ihtiyaç duyulursa, her bir başlık öğesini tanımlamanız gerekecektir.

//XML dosyasını açın RecordVFile = Yeni RecordXML; WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); //1C'ye ne tür verilerin oluşturulması gerektiğini belirtin - başlık öğesi AllProducts = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Products")); //yüklemek için verileri seçin SelectionFromDirectory = Directoryies.Nomenclature.Select(); //Directory.Next() döngüsünden Seçim yaparken head öğesine tek tek ürünler ekleyin Product = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org", "Product")); Ürün.Adı = Dizin.Adı'ndan seçin; Product.InitialPrice = String(SelectionFromDirectory.InitialPrice); AllProducts.Add(Product); EndCycle; //verileri yazın ve FactoryXDTO.WriteXML(WriteToFile, AllProducts) dosyasını kapatın; WriteInFile.Close();

Göz önünde bulundurulan mekanizmalar oldukça evrenseldir ve uygun şekilde yapılandırılırsa çoğu sorunu çözebilir. Ancak 1C ile XML arasındaki etkileşimde oldukça fazla nüans vardır. Bunları, bir XML dosyasının işlenmesinin oldukça dar sorunları çözdüğü test görevlerinde değil, gerçek koşullarda incelemek çok daha etkilidir.

Bu bölüm size XML şemalarının nasıl yazılacağını gösterecektir. Ayrıca diyagramın farklı şekillerde yazılabileceğini de öğreneceksiniz.

XML Belgesi

"shiporder.xml" adlı bu XML belgesine bakalım:

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

Ola Nordmann

Uzun 23

4000 Stavanger
Norveç


İmparatorluk Burlesk'i
Özel sayı
1
10.90


Kalbini gizle
1
9.90

Yukarıdaki XML belgesi, "orderid" adı verilen gerekli bir özniteliği içeren "shiporder" adlı bir kök öğeden oluşur. "shiporder" öğesi üç farklı alt öğe içerir: "orderperson", "shipto" ve "item". "Ürün" öğesi iki kez görünür ve bir "başlık" öğesi, isteğe bağlı bir "not" öğesi, bir "miktar" öğesi ve bir "fiyat" öğesi içerir.

Yukarıdaki satır: Xmlns: XSI="http://www.w3.org/2001/XMLSchema-instance", XML ayrıştırıcısına bu belgenin şema açısından doğrulanması gerektiğini bildirir. Satır: XSI: noNamespaceSchemaLocation = "shiporder.xsd" şemaların nerede bulunduğunu belirtir (burada "shiporder.xml ile aynı klasördedir") .

XML Şeması Oluşturma

Şimdi yukarıdaki XML belgesi için bir şema oluşturmak istiyoruz.

"shiporder.xsd" adını verdiğimiz yeni bir dosya açarak başlayacağız. Bir şema oluşturmak için XML belgesindeki yapıyı takip edebilir ve bulduğumuz her öğeyi tanımlayabiliriz. Standart bir XML bildirimi ve ardından şemayı tanımlayan bir xs:schema öğesiyle başlayacağız:



...

Yukarıdaki şemada standart ad alanlarını (xs) kullanıyoruz ve bu ad alanıyla ilişkili URI, http://www.w3.org/2001/XMLSchema standart değerine sahip olan şema dili tanımıdır.

Daha sonra bir "shiporder" elemanı tanımlamamız gerekiyor. Bu öğenin bir özelliği vardır ve başka öğeler de içerir, bu nedenle onu karmaşık bir tür olarak ele alırız. Bir "shiporder" öğesinin alt öğeleri, sıralı bir alt öğe dizisini tanımlayan bir xs: sıra öğesi tarafından çevrelenir:




...


O halde "sipariş elemanı" elemanını basit bir tür olarak tanımlamamız gerekir (çünkü herhangi bir nitelik veya başka eleman içermemektedir). (xs:string) türüne, önceden tanımlanmış bir şema veri türünü belirten, XML Şeması ile ilişkili bir ad alanı öneki eklenir:










Şemaların yardımıyla MaxOccurs ve MinOccurs niteliklerine sahip bir öğenin olası oluşum sayısını belirleyebiliriz. MaxOccurs bir öğenin maksimum oluşum sayısını belirtir ve MinOccurs bir öğenin minimum oluşum sayısını belirtir. Hem MaxOccurs hem de MinOccurs için varsayılan değer 1'dir!

Artık "item" elementini tanımlayabiliriz. Bu öğe bir "shiporder" öğesi içinde birden çok kez görünebilir. Bu, "item" öğesinin maxOccurs niteliğinin "unbounded" olarak ayarlanmasıyla belirlenir; bu, "item" öğesinin yazarın istediği sayıda tekrarı olabileceği anlamına gelir. "Not" öğesinin isteğe bağlı olduğunu unutmayın. Bunu minOccurs niteliğini sıfıra ayarlayarak tanımladık:










Artık elementin "shiporder" özelliğini bildirebiliriz. Bu gerekli bir özellik olduğundan, use = "gerekli" olarak belirtiyoruz.

Not: Nitelik ifadeleri her zaman en sonda gelmelidir:

"shiporder.xsd" adlı şema dosyasının tam listesi:





























Ayrı devreler

Önceki tasarım yöntemi çok basittir ancak belgeler karmaşık olduğunda okunması ve bakımı zor olabilir.

Bir sonraki tasarım yöntemi, tüm öğelerin ve niteliklerin tanımlanmasına ve daha sonra ref niteliğini kullanarak bunlara referans verilmesine dayanmaktadır.

İşte şematik dosyanın ("shiporder.xsd") yeni tasarımı:








































Adlandırılmış Türleri Kullanma

Üçüncü tasarım yöntemi, öğe tanımlarının yeniden kullanılmasına olanak tanıyan sınıfları veya türleri tanımlar. Bu, elemanların simpleTypes ve ComplexTypes olarak adlandırılması ve ardından elemanın type özelliği aracılığıyla bunlara başvurulması yoluyla gerçekleştirilir.

Şematik dosyanın üçüncü tasarımı ("shiporder.xsd") buradadır:

































Kısıtlama öğesi, veri türünün W3C XML Şeması veri türü ad alanından türetildiğini belirtir. Dolayısıyla aşağıdaki kod parçası, öğenin veya niteliğin değerinin bir dizenin değeri olması gerektiği anlamına gelir:

Kısıtlama öğesi daha çok öğelere kısıtlamalar uygulamak için kullanılır. Yukarıdaki diyagramdan aşağıdaki satırlara bakın:





Bu, öğenin veya niteliğin değerinin bir dize olması gerektiğini, satır başına tam olarak altı karakter olması gerektiğini ve bu karakterlerin 0 ile 9 arasında bir sayı olması gerektiğini belirtir.

XDTO, 1C'de web hizmetleri oluştururken ve kullanırken gerekli olan bir 1C mekanizmasıdır.

XDTO 1C paketleri, verileri XML'e ve XML'den dönüştürmek için gerekli XML dosyasının yapısını tanımlamanıza olanak tanır.

İlgilenenler için soruya daha ayrıntılı olarak bakalım.

XML dosyaları İnternet üzerinden iletilir ve birçok program tarafından okunabilir.

Algılanırlar - bu onların koduna bağlı olduğu anlamına gelir - eğer XML dosyasında belirli bir öğe adına rastlarsanız - onu bu şekilde algılayın ve şunu yapın.

Bu nedenle, Apple öğe adını kullanırsak, başka bir programın bunun bildiği Apple olduğunu "düşünmesi" olasılığı oldukça yüksektir, ancak biz kendimize ait bir şeyi kastettik.

Bunun olmasını önlemek ve Apple'ımızın diğerlerinden farklı olduğunu açıkça belirtmek için, dosyada ad alanının adı belirtilebilir - öğelerin adından önce kullanılan bir önek.

Ad alanı (İngilizce ad alanında) şu şekilde tanımlanır - xmlns:SpaceName = “URL”, örneğin:
xmlns:mağaza = "http://store.ru"

Neden bir URL’ye ihtiyacınız var?

Bu nedenle, ad alanının yazarını da tanımlayan benzersiz bir tanımlayıcı belirtilir.

Doğal olarak ad alanını belirten kişinin son derece dürüst bir kişi olduğu, sitesini belirttiği ve tek bir siteyle birden fazla farklı ad alanı kullanmadığı varsayılmaktadır.

Bu arada, genellikle yalnızca site URL'sini değil aynı zamanda sitedeki belirli bir klasörün URL'sini de belirtirler; böylece herhangi bir şey olursa, farklı bir durumda kullanmak üzere sitedeki başka bir klasörde başka bir ad alanı oluşturabilirsiniz.

Bir nesne, tüm verilerini içeren, kendi kendine yeterli, belirli bir veri yapısıdır.

Yapılandırılmış veriler XML'de yani kendine has özellikleri vb. olan bir yapı şeklinde tanımlandığı için nesneler olarak bakılabilir.

Verilen örnekte bu, bir özelliğe ve iç içe geçmiş bir öğeye sahip bir LIST nesnesi olabilir.

DOM, bir XML dosyasını belirli bir formattaki metin olarak değil, özellikleri, alanları vb. içeren bir nesne koleksiyonu olarak ele almanın bir yoludur.

XML dosyasının açıklaması

İki program arasında alışveriş yapmak için sürekli olarak belirli bir yapıya sahip bir dosya kullanıyorsak, muhtemelen şunları yapmak isteriz:

  • Belirli isimlerin kullanılmasını sağlamak
  • Beklediğimiz unsurlara sahip olmak ("değişimimizde kullanılmak üzere orada olması gerekir")
  • Böylece öznitelikler beklediğimiz türleri (string, number vb.) içerir.

XML yapısını tanımlamak için aşağıdaki dosya formatı standartları mevcuttur (bunlar aynı zamanda düz metin dosyasında da saklanır):

  • DTD uzantısı – Belge Türü Tanımı
  • XSD uzantısı – XML Şeması.

Her iki format da belgenin nasıl olması gerektiğini açıklar. XML'in böyle bir dosyada açıklanan standarda uygun olup olmadığını kontrol etme prosedürüne doğrulama denir.

XDTO 1C, yapılandırmaya bir XML dosyasının açıklamasını eklemenizi sağlayan bir araçtır. Daha doğrusu, açıklanan dosya değil, belirli XML yapılarıdır.

Kullanılabilecek türleri belirtmek için XDTO 1C fabrikası adı verilen bir liste veya tür kitaplığı kullanılır.

Bu fabrika, hem diğer dillerde, programlarda vb. yaygın olarak kullanılan basit türleri (dize, sayı, tarih) hem de 1C'de ve belirli bir konfigürasyonda kullanılan 1C türlerini belirtir.

XDTO 1C fabrikasının kendisi birkaç paketten oluşur. Temel türler www.w3.org adlı bir pakette açıklanmaktadır.

Mevcut yapılandırma veri türleri http://v8.1c.ru/8.1/data/enterprise/current-config paketinde açıklanmaktadır.

Türlerin kendileri yapılandırıcıdaki isme göre İngilizce bir formun eklenmesiyle (CatalogRef, CatalogObject, DocumentRef, DocumentObject) adlandırılır, örneğin:

KatalogObject.Nomenclature

XDTO 1C paketini ekleme

Bunların hepsi kesinlikle kulağa hoş geliyor. Ve henüz XSLT konusuna gelmedik; XML dosyalarını HTML gibi başka bir şeye dönüştürmenin bir yolu. XML konusu son derece geniştir ve ayrı bir kitapta bile ele alınması zordur.

Görevimiz, XDTO 1C'nin, oluşturulması veya okunması gereken bir XML paketinin hangi öğelere sahip olması gerektiğini tanımlamamıza olanak sağladığını anlamaktır.

XDTO 1C paketleri, Genel/XDTO 1C Paketleri şubesindeki yapılandırmada bulunur.

XDTO paketini 1C'ye manuel olarak ekleyebilirsiniz (harika!), ancak ilgili XSD dosyasını şemanın hazır bir açıklamasıyla birlikte almak daha iyidir.

Herhangi bir konfigürasyondaki nesneler için XSD şemasının bir açıklaması, Genel/XDTO 1C Paketleri dalına tıklayarak ve XML konfigürasyon şemasını dışarı aktar menü öğesini seçerek elde edilebilir.

Dosya metindir, ihtiyacınız olmayan gereksiz nesneleri kaldırarak Windows Not Defteri'nde düzenleyebilirsiniz.

Genel/XDTO 1C paketleri dalına sağ tıklayıp XML Şemasını İçe Aktar menü öğesini seçerek 1C'ye hazır bir XSD şeması ekleyebilirsiniz.

XDTO 1C mekanizmasını kullanma

XDTO 1C ile çalışmak, değerleri XML'e ve XML'den dönüştürmek anlamına gelir.

Çalışma, XML Okuma/XML Yazma 1C dil nesneleri kullanılarak gerçekleştirilir.

XDTO 1C mekanizması ile çalışırken çalıştığınız paketi belirtmeniz gerekmektedir. Bu standart bir paket (yukarıda tartışılmıştır, bkz. XDTO) veya konfigürasyona eklenen bir paket olabilir. Paket, pakette belirtilen URL ile tanımlanır.

Çalışmanın iki ana basit yolu şunlardır:

  • Serileştirme - değerlerin 1C'den XML'e veya tam tersi şekilde otomatik olarak dönüştürülmesi
  • Bir nesne oluşturma, alanlarını doldurma, XML'e yazma (ve buna göre XML'den okuma ve ardından alanlarını okuma).

Değer serileştirme örneği:
Serileştirici = Yeni SerileştiriciXDTO(FactoryXDTO);
XML Dosyası = Yeni XML Girişi();
FileXML.OpenFile("DosyaAdı");
Serializer.WriteXML(XMLFile, Value1C);

Bir nesneyi okuma/yazma örneği:

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