Počítače Okna Internet

Jak vytvořit xml soubor delphi. Internetový cestovní průvodce – veškerá zábava na webu. Několik slov o organizaci toku dokumentů

Vítejte! Tento blog je o internetu a počítačích, respektive jim byl věnován.

Pravděpodobně je okamžitě jasné, že se na webu již mnoho let neobjevily žádné nové články. Ano, to je úděl většiny blogů. Tento projekt byl kdysi ambiciózním počinem a autor, stejně jako mnoho dalších, kteří v té době psali, měl ambiciózní plány stát se jedním z nejlepších ruských blogerů. No, když se teď podíváte, tak z těch blogů, které vznikly současně s mým, už většina zmizela na věčnosti. A na blog jsem prostě neměl dost času. Takže ano, již se neaktualizuje. I když jednou jsme s tímto webem vyhráli soutěž "Blog of Runet 2011".

Dokonce mě napadlo to všechno smazat, ale pak jsem zrevidoval staré materiály a uvědomil jsem si, že mohou být čtenářům stále užitečné. Ano, některé články jsou zastaralé (pokud budu mít dost síly, dostanou patřičné poznámky), ale web se může hodit například začátečníkům – zde si můžete přečíst o základní pojmy Internet, naučte se konfigurovat Internet, Windows nebo se dokonce rozhodněte přejít na Linux. Podívejte se tedy do rubrik a vyberte si tu, která je pro vás ta pravá.

A přesto doufám, že to není jen blog, ale skutečný průvodce internetem. Stránky lze prohlížet v adresářovém režimu, kde jsou všechny dostupné články strukturovány podle kategorií. A kdo ví, třeba se tu jednou začnou objevovat nové kvalitní články.

Sander

Picodi.ru je slevový portál od International Coupons, polského odborníka na úspory a levné nakupování. Poláci jsou považováni za jeden z nejekonomičtějších národů na světě, a tak není divu, že tento typ projektu vyrostl z polského startupu kodyrabatowe.pl. Jak může být tento portál užitečný běžnému uživateli internetu v Rusku?

Moderní telefony s Androidem jsou víc než jen telefony. Na psaní si zvyknete nainstalované programy, do historie vašich hovorů a textové zprávy, sbírky fotografií a další. Ale čas plyne a zařízení, které vám vyhovuje, se zcela zpomaluje, vadí nebo jednoduše ztrácí svůj prezentovatelný vzhled kvůli čipům na pouzdru nebo škrábancům na obrazovce. Vyvstává otázka výběru nového telefonu a výměny telefon s Androidem... A když teď obejdeme otázku volby, tak „stěhování“ do nový mobil zůstává vážným problémem – absolutně nechcete spouštět všechna data od nuly. To je to, o čem budeme dnes mluvit.

Většina čtenářů tohoto blogu se s největší pravděpodobností nikdy nesetkala se systémy pro správu verzí a ani v blízké budoucnosti na žádný nenarazí. Je to škoda. Tento extrémně pohodlný vynález je široce využíván programátory, ale podle mého názoru by mohl být velmi užitečný pro ty, kteří aktivně pracují s texty. Pravděpodobně však nyní neexistuje jediný systém správy verzí, který by bylo snadné začít používat pro „kancelář“ ( Microsoft Office) práce. Přesto si myslím, že materiál uvedený v článku může být zajímavý pro všechny čtenáře.

Pokud jste přemýšleli o tom, jak sledovat filmy v síti z vašeho televizoru a jít online, tento článek je pro vás. Ne, vím, že některé televizory již funkci Smart TV mají, ale nikdy jsem neviděl, že by fungovala správně. Zřejmě proto nedávno korporace Google předvedla naprosto ohromující zařízení, které se okamžitě stalo senzací. Mluvíme o streameru médií Chromecast (Chromecast), pokročilejší a dostupnější verzi loňského katastrofálního Nexus Q.

Dongle Chromecast, který není větší než 2 palce, se připojuje k portu HDMI TV a umožňuje vám vychutnat si sledování streamovaného webového obsahu. K ovládání streameru můžete použít jakékoli zařízení (tablet, PC, smartphone) založené na operační platformě iOS, Windows, Android nebo Mac OS.

Tento článek je věnován zařízení systémové paměti Android, problémům, které mohou nastat kvůli jeho nedostatku, a jak je vyřešit. Není to tak dávno, co jsem sám čelil skutečnosti, že můj telefon s Androidem začal pravidelně vydávat zprávy o nedostatečné paměti při pokusu o instalaci aplikace. Což pro mě bylo velmi zvláštní, vzhledem k tomu, že podle popisu na trhu tam mělo být cca 16GB a navíc jsem tento objem navýšil přídavnou paměťovou kartou. Vyskytl se však problém a musel jsem hodně makat, než jsem našel správné řešení který nevyžaduje přístup root ani úplné obnovení telefonu z výroby.

XML se stále více používá k ukládání informací a jejich výměně mezi aplikacemi a webovými stránkami. Mnoho aplikací používá tento jazyk jako základní jazyk pro ukládání dat, zatímco jiné jej používají pro export a import dat XML. Je tedy čas, aby vývojáři začali přemýšlet o tom, jak lze data XML použít v jejich vlastních aplikacích.

V tomto článku se podíváme na XML Document Object Model (DOM) a implementaci XML DOM od společnosti Microsoft.

XML DOM je objektový model, který poskytuje vývojářům objekty pro načítání a zpracování souborů XML. Objektový model se skládá z následujících základních objektů: XMLDOMDocument, XMLDOMNodeList, XMLDOMNode, XMLDOMNamedNodeMap a XMLDOMParseError. Každý z těchto objektů (kromě XMLDOMParseError) obsahuje vlastnosti a metody, které vám umožňují získat informace o objektu, manipulovat s hodnotami a strukturou objektu a procházet strukturou dokumentu XML.

Podívejme se na hlavní objekty XML DOM a ukažme si některé příklady jejich použití v Borland Delphi.

Použití XML DOM v Borland Delphi

Abyste mohli používat Microsoft XML DOM v aplikacích Delphi, musíte k projektu připojit příslušnou knihovnu typů. K tomu spustíme příkaz Projekt | Import knihovny typů a v dialogovém okně Import knihovny typů vyberte knihovnu Microsoft XML verze 2.0 (verze 2.0), která se obvykle nachází v souboru Windows \ System \ MSXML.DLL.

Po kliknutí na tlačítko Create Unit se vytvoří modul rozhraní MSXML_TLB, který nám umožní používat objekty XML DOM: DOMDocument, XMLDocument, XMLHTTPRequest a řadu dalších, implementovaných v knihovně MSXML.DLL. Odkaz na modul MSXML_TLB musí být v seznamu Použití.

XML DOM zařízení

Objektový model dokumentu představuje dokument XML ve stromové struktuře větví. XML DOM API umožňují aplikacím procházet strom dokumentů a manipulovat s jeho větvemi. Každá větev může mít specifický typ (DOMNodeType), podle kterého se určuje nadřazená a podřízená větev. Většina dokumentů XML obsahuje větve typu element, atribut a text. Atributy jsou speciálním druhem větvení a nejsou podřízenými větvemi. K manipulaci s atributy se používají speciální metody poskytované objekty XML DOM.

Kromě implementace rozhraní doporučených konsorciem World Wide Web Consortium (W3C), Microsoft XML DOM obsahuje metody, které podporují XSL, XSL vzory, jmenné prostory a datové typy. Například metoda SelectNodes umožňuje použít syntaxi vzoru XSL k nalezení větví v určitém kontextu a metoda TransformNode podporuje použití XSL k provádění transformací.

Test XML dokumentu

Jako příklad dokumentu XML si vezměme adresář hudebního CD-ROM, který má následující strukturu:

Empírová burleska Bob Dylan USA Kolumbie 10.90 1985 Skryj své srdce Bonnie tylor Spojené království CBS Records 9.90 1988 ... Odpoutejte mé srdce Joe kokr USA EMI 8.20 1987

Nyní jsme připraveni začít zkoumat objektový model XML DOM, počínaje objektem XMLDOMDocument.

Dokument XML - Objekt XMLDOMDocument

Práce s dokumentem XML začíná jeho načtením. K tomu používáme metodu Load, která má pouze jeden parametr, který určuje URL načítaného dokumentu. Při načítání souborů z lokálního disku se zadává pouze celý název souboru (soubor: /// protokol lze v tomto případě vynechat). Pokud je dokument XML uložen jako řetězec, použijte k načtení dokumentu metodu LoadXML.

Vlastnost Async se používá k řízení způsobu načítání dokumentu (synchronního nebo asynchronního). Ve výchozím nastavení je tato vlastnost nastavena na hodnotu True, což znamená, že dokument je načten asynchronně a řízení je vráceno aplikaci před úplným načtením dokumentu. V opačném případě se dokument načte synchronně a pak musíte zkontrolovat hodnotu vlastnosti ReadyState, abyste zjistili, zda se dokument načetl nebo ne. Můžete také vytvořit obslužnou rutinu pro událost OnReadyStateChange, která převezme řízení, když se změní hodnota vlastnosti ReadyState.

Následující text ukazuje, jak načíst dokument XML pomocí metody Load:

Používá ... MSXML_TLB ... procedure TForm1.Button1Click (Sender: TObject); var XMLDoc: IXMLDOMDocument; begin XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // // Zde se nachází kód, který // manipuluje s dokumentem XML a jeho větvemi // XMLDoc: = Nil; konec;

Po načtení dokumentu máme přístup k jeho vlastnostem. Vlastnost NodeName tedy bude obsahovat hodnotu #document, vlastnost NodeTypeString bude obsahovat hodnotu dokumentu a vlastnost URL bude obsahovat soubor: /// C: /DATA/DATA.xml value.

Vypořádání se s chybou

Zvláště zajímavé jsou vlastnosti související se zpracováním dokumentů při načítání. Například vlastnost ParseError vrací objekt XMLDOMParseError obsahující informace o chybě, ke které došlo při zpracování dokumentu.

Chcete-li napsat obslužnou rutinu chyb, můžete přidat následující kód:

Var XMLError: IXMLDOMParseError; ... XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); XMLError: = XMLDoc.ParseError; Pokud XMLError.ErrorCode<>0 Potom // // Zde zpracujeme chybu // Else Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nil;

Chcete-li zjistit, jaké informace jsou vráceny v případě chyby, změňte následující položku adresáře:

Empírová burleska Bob Dylan USA Kolumbie 10.90 1985

odstranění uzavíracího prvku na druhém řádku:</p><p> <CD> <TITLE>Empírová burleska <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Kolumbie</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> </p><p>Nyní napíšeme kód, který vrátí hodnoty vlastností objektu XMLDOMParseError:</p><p>XMLError: = XMLDoc.ParseError; Pokud XMLError.ErrorCode<>0 Potom s XMLError Memo1.Lines začnou Add (‚Soubor:‘ + URL); Přidat (‚Kód:‘ + IntToStr (Kód chyby)); Přidat (‚Chyba:‘ + Důvod); Přidat (‚Text:‘ + SrcText); Přidat (‚Řádek:‘ + IntToStr (Řádek)); Přidat (‚Position:‘ + IntToStr (LinePos)); end Else Memo1.Lines.Add (XMLDoc.XML); Konec;</p><p>a spusťte naši aplikaci. V důsledku toho získáme následující informace o chybě.</p> <p>Jak můžete vidět z výše uvedeného příkladu, informace vrácené objektem XMLDOMParseError jsou dostatečné k lokalizaci chyby a pochopení příčiny jejího výskytu.</p> <p>Nyní obnovíme uzavírací prvek <TITLE>v našem dokumentu a pokračujte v diskusi o XML DOM.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Přístup ke stromu dokumentů</h2> <p>Chcete-li získat přístup ke stromu dokumentů, můžete buď získat kořenový prvek a poté iterovat jeho podřízené větve, nebo najít konkrétní větev. V prvním případě získáváme kořenový element prostřednictvím vlastnosti DocumentElement, která vrací objekt typu XMLDOMNode. Zde je návod, jak použít vlastnost DocumentElement k získání obsahu každého podřízeného prvku:</p><p>Var Node: IXMLDOMNode; Kořen: IXMLDOMElement; I: celé číslo; ... Kořen: = XMLDoc.DocumentElement; Pro I: = 0 až Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; Memo1.Lines.Add (Node.Text); Konec;</p><p>Pro náš dokument XML získáme následující text.</p> <p>Pokud nás zajímá konkrétní větev nebo větev pod první podřízenou větví, můžeme použít buď metodu NodeFromID nebo metodu GetElementByTagName objektu XMLDOMDocument.</p> <p>Metoda NodeFromID vyžaduje jedinečný identifikátor definovaný v XML Schema nebo Document Type Definition (DTD) a vrací větev s tímto identifikátorem.</p> <p>Metoda GetElementByTagName vyžaduje řetězec s konkrétním prvkem (tag) a vrací všechny větve s tímto prvkem. Zde je návod, jak použít tuto metodu k nalezení všech umělců v našem adresáři CD-ROM:</p><p>Uzly: IXMLDOMNodeList; Uzel: IXMLDOMNode; ... Nodes: = XMLDoc.GetElementsByTagName (‚ARTIST‘); Pro I: = 0 až Nodes.Length-1 do Begin Node: = Nodes.Item [I]; Memo1.Lines.Add (Node.Text); Konec;</p><p>Pro náš dokument XML získáme následující text</p> <p>Všimněte si, že metoda SelectNodes objektu XMLDOMNode poskytuje flexibilnější způsob přístupu k větvím dokumentu. Ale o tom více níže.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Větev dokumentu - Objekt XMLDOMNode</h2> <p>Objekt XMLDOMNode představuje větev dokumentu. S tímto objektem jsme se již setkali, když jsme získali kořenový prvek dokumentu:</p><p>Kořen: = XMLDoc.DocumentElement;</p><p>Chcete-li získat informace o větvi dokumentu XML, můžete použít vlastnosti objektu XMLDOMNode (tabulka 1).</p> <p>Pro přístup k datům uloženým ve větvi se běžně používá buď vlastnost NodeValue (dostupná pro atributy, textové větve, komentáře, instrukce pro zpracování a sekce CDATA), nebo vlastnost Text, která vrací textový obsah větve, nebo vlastnost NodeTypedValue. Ten však lze použít pouze pro pobočky s napsanými položkami.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Procházení stromu dokumentů</h3> <p>Objekt XMLDOMNode poskytuje mnoho způsobů, jak procházet strom dokumentu. Například pro přístup k nadřazené větvi použijte vlastnost ParentNode (typ XMLDOMNode), přistupujte k podřízeným větvím prostřednictvím vlastností ChildNodes (typ XMLDOMNodeList), FirstChild a LastChild (typ XMLDOMNode) atd. Vlastnost OwnerDocument vrací objekt XMLDOMDocument, který identifikuje samotný dokument XML. Výše uvedené vlastnosti usnadňují navigaci ve stromu dokumentu.</p> <p>Nyní projdeme všechny větve dokumentu XML:</p><p>Kořen: = XMLDoc.DocumentElement; Pro I: = 0 až Root.ChildNodes.Length-1 do Begin Node: = Root.ChildNodes.Item [I]; If Node.HasChildNodes Then GetChilds (Uzel, 0); Konec;</p><p>Jak bylo uvedeno výše, SelectNodes objektu XMLDOMNode poskytuje flexibilnější způsob přístupu k větvím dokumentu. Navíc existuje metoda SelectSingleNode, která vrací pouze první větev dokumentu. Obě tyto metody umožňují definovat šablony XSL pro vyhledávání větví.</p> <p>Podívejme se na proces použití metody SelectNodes k načtení všech větví, které mají větev CD a dílčí větev PRICE:</p><p>Kořen: = XMLDoc.DocumentElement; Nodes: = Root.SelectNodes (‚CD / CENA‘);</p><p>Všechny dílčí větve PRICE větve CD budou umístěny do kolekce Nodes. K diskusi o šablonách XSL se vrátíme o něco později.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h3>Manipulace s dětskými ratolestmi</h3> <p>Pro manipulaci s podřízenými větvemi můžeme použít metody objektu XMLDOMNode (tabulka 2).</p> <p>Chcete-li zcela odstranit záznam o prvním disku, musíte spustit následující kód:</p><p>Var XMLDoc: IXMLDOMDocument; Kořen: IXMLDOMNode; Uzel: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // Získání kořenového prvku Root: = XMLDoc.DocumentElement; Uzel: = Kořen; // Odebere první podřízenou větev Node.RemoveChild (Node.FirstChild);</p><p>Všimněte si, že v tomto příkladu odstraňujeme první podřízenou větev. Jak odstranit první prvek první podřízené větve je znázorněno níže:</p><p>Var XMLDoc: IXMLDOMDocument; Kořen: IXMLDOMNode; Uzel: IXMLDOMNode; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.Load (‘C: \ DATA \ DATA.xml‘); // Získání kořenového prvku Root: = XMLDoc.DocumentElement; // a první podřízená větev Uzel: = Root.FirstChild; // Odebere první podřízenou větev Node.RemoveChild (Node.FirstChild);</p><p>Ve výše uvedeném příkladu jsme neodstranili první větev <CD>…</CD> a prvním prvkem větve je <TITLE>….

Nyní přidáme novou větev. Níže je uveden kód, který ukazuje, jak přidat nový záznam hudebního disku CD-ROM:

Var NewNode: IXMLDOMNode; Podřízený: IXMLDOMNode; ... // Vytvořit novou větev - NewNode: = XMLDoc.CreateNode (1, ‚CD‘, ‚‘); // Přidání prvku Child: = XMLDoc.CreateNode (1, 'TITLE', ''); // Přidání prvku NewNode.AppendChild (Child); // A nastavte jeho hodnotu Child.Text: = ‘Pink Floyd’; // Přidání prvku <ARTIST>Child: = XMLDoc.CreateNode (1, 'ARTIST', ''); // Přidání prvku NewNode.AppendChild (Child); // A nastavte jeho hodnotu Child.Text: = ‘Division Bell’; // Přidání prvku <COUNTRY>Dítě: = XMLDoc.CreateNode (1, ‚ZEMĚ‘, ‚‘); // Přidání prvku NewNode.AppendChild (Child); // A nastavte jeho hodnotu Child.Text: = ‘UK’; // Přidání prvku <COMPANY>Dítě: = XMLDoc.CreateNode (1, ‚SPOLEČNOST‘, ‚‘); // Přidání prvku NewNode.AppendChild (Child); // A nastavte jeho hodnotu Child.Text: = ‘EMI Records Ltd.’; // Přidání prvku <PRICE>Podřízené: = XMLDoc.CreateNode (1, ‚PRICE‘, ‚‘); // Přidání prvku NewNode.AppendChild (Child); // A nastavte jeho hodnotu Child.Text: = '11 .99 "; // Přidejte prvek <YEAR>Child: = XMLDoc.CreateNode (1, ‚YEAR‘, ‚‘); // Přidání prvku NewNode.AppendChild (Child); // A nastavte jeho hodnotu Child.Text: = ‘1994’; // A přidáme větev Root.AppendChild (NewNode); ...</p><p>Výše uvedený kód ukazuje následující sekvenci kroků pro přidání nové větve:</p> <ul><li>Vytvoření nové větve pomocí metody CreateNode: <ul><li>vytvoření prvku pomocí metody CreateNode;</li> <li>přidání prvku do větve pomocí metody AppendChild;</li> <li>nastavení hodnoty prvku pomocí vlastnosti Text;</li> <li>… Opakujte pro všechny prvky.</li> </ul></li> <li>Přidání nové větve do dokumentu pomocí metody AppendChild.</li> </ul><p>Připomeňme, že metoda AppendChild přidá větev na konec stromu. Chcete-li přidat větev na konkrétní místo ve stromu, musíte použít metodu InsertBefore.</p> <h2>Sada větví - objekt XMLDOMNodeList</h2> <p>Objekt XMLNodeList obsahuje seznam větví, které lze sestavit pomocí metod SelectNodes nebo GetElementsByTagName a také získat z vlastnosti ChildNodes.</p> <p>Použití tohoto objektu jsme již probrali v příkladu uvedeném v části „Navigace ve stromu dokumentů“. Zde uvedeme několik teoretických komentářů.</p> <p>Počet větví v seznamu lze získat jako hodnotu vlastnosti Délka. Větve jsou indexovány od 0 do Délka-1 a každá jednotlivá větev je přístupná prostřednictvím odpovídající indexované položky v poli Item.</p> <p>Procházení seznamu větví lze také provést pomocí metody NextNode, která vrátí další větev v seznamu nebo Nil, pokud je aktuální větev poslední. Chcete-li se vrátit na začátek seznamu, zavolejte metodu Reset.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Vytvářejte a ukládejte dokumenty</h2> <p>Probrali jsme tedy, jak můžete přidat větve a prvky do existujících dokumentů XML. Nyní vytvoříme dokument XML za běhu. V první řadě si pamatujte, že dokument lze načíst nejen z adresy URL, ale také z běžného řetězce. Zde je návod, jak vytvořit kořenový prvek, který pak lze použít k dynamickému sestavení zbytku prvků (které jsme již probrali v sekci Manipulace podřízených větví):</p><p>Var XMLDoc: IXMLDOMDocument; Kořen: IXMLDOMNode; Uzel: IXMLDOMNode; S: WideString; ... S: = ' <CATALOG></CATALOG>'; XMLDoc: = CoDOMDocument.Create; XMLDoc.Async: = False; XMLDoc.LoadXML (S); Kořen: = XMLDoc.DocumentElement; Uzel: = XMLDoc.CreateNode (1, ‚CD‘, ‚‘); Root.AppendChild (Node); Memo1.Lines.Add (XMLDoc.XML); ... XMLDoc: = Nil;</p><p>Po vytvoření dokumentu XML jej uložte do souboru pomocí metody Save. Například:</p> <p>XMLDoc.Save ('C: \ DATA \ NEWCD.XML');</p> <p>Kromě uložení do souboru vám metoda Save umožňuje uložit dokument XML do nového objektu XMLDOMDocument. V tomto případě je dokument plně zpracován a v důsledku toho je zkontrolována jeho struktura a syntaxe. Zde je návod, jak uložit dokument do jiného objektu:</p><p>Procedure TForm1.Button2Click (Sender: TObject); var XMLDoc2: IXMLDOMDocument; begin XMLDoc2: = CoDOMDocument.Create; XMLDoc.Save (XMLDoc2); Memo2.Lines.Add (XMLDoc2.XML); ... XMLDoc2: = Nil; konec;</p><p>Závěrem, metoda Save také umožňuje uložit dokument XML do jiných objektů COM, které podporují rozhraní IStream, IPersistStream nebo IPersistStreamInit.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Použití šablon XSL</h2> <p>Když jsme probírali metodu SelectNodes objektu XMLDOMNode, zmínili jsme se, že poskytuje flexibilnější způsob přístupu k větvím dokumentu. Flexibilita spočívá v tom, že jako kritéria pro výběr větví můžete zadat šablonu XSL. Tyto šablony poskytují výkonný mechanismus pro vyhledávání informací v dokumentech XML. Chcete-li například získat seznam všech titulů hudebních CD-ROM v našem adresáři, můžete spustit následující dotaz:</p><p>Chcete-li zjistit, které disky umělců jsou vydány v USA, je požadavek vytvořen následovně:</p><p>Nodes: = Root.SelectNodes (‚CD / ARTIST‘);</p><p>Zde je návod, jak najít první jednotku v adresáři:</p><p>Nodes: = Root.SelectNodes (‚CD / TITLE‘);</p><p>A poslední:</p><p>Nodes: = Root.SelectNodes (‚CD / TITLE‘);</p><p>Chcete-li najít disky Boba Dylana, můžete spustit následující dotaz:</p><p>Nodes: = Root.SelectNodes (‘CD [$ any $ ARTIST =” Bob Dylan ”] / TITLE’);</p><p>a abychom získali seznam disků vyrobených po roce 1985, spustíme následující dotaz:</p><p>Nodes: = Root.SelectNodes (‚CD / TITLE‘);</p><p>Podrobnější popis syntaxe XSL vyžaduje samostatnou publikaci. Abych čtenáře zaujal a povzbudil k dalšímu výzkumu, uvedu jen jeden malý příklad možného použití XSL. Řekněme, že potřebujeme převést náš katalog na běžnou HTML tabulku. Pomocí tradičních metod musíme iterovat přes všechny větve stromu a pro každý přijatý prvek vytvořit odpovídající tagy <TD>…</TD>.</p> <p>Pomocí XSL jednoduše vytvoříme šablonu (nebo šablonu stylů), která specifikuje, co a jak transformovat. Poté tuto šablonu překryjeme v našem katalogu – a máte hotovo: máme text šablony XSL, která převede katalog na tabulku (Výpis 2).</p> <p>Kód pro překrytí šablony XSL v našem adresáři vypadá takto:</p><p>Procedure TForm1.Button2Click (Sender: TObject); var XSLDoc: IXMLDOMDocument; begin XSLDoc: = CoDOMDocument.Create; XSLDoc.Load (‘C: \ DATA \ DATA.xsl‘); Memo2.Text: = XMLDoc.TransformNode (XSLDoc); XSLDoc: = nula; konec;</p><p>Na závěr naší diskuse o XSL je třeba říci, že v současné době se tento jazyk aktivně používá pro transformaci mezi různými dokumenty XML a také pro formátování dokumentů.</p> <table border="0" width="100%"><tr><td width="50%"> </td> <td width="50%"> </td> </tr></table><h2>Závěr</h2> <p>Z pochopitelných důvodů není možné pokrýt všechny objekty Microsoft XML DOM a uvést příklady jejich použití v jednom článku. Zde jsme se právě dotkli základních otázek používání XML DOM v aplikacích. Stůl 3 ukazuje všechny objekty implementované v Microsoft XML DOM.</p> <p>ComputerPress 12 "2000</p> <p>Pro mnoho programátorů Delphi je ukládání nastavení spojeno s používáním <i>INI</i> soubory ve svých programech. Použití této metody ve více či méně závažných projektech je třeba se vyhnout, protože omezuje flexibilitu, což brání dalšímu rozšiřování programu. Je třeba říci, že tento přístup je poměrně populární díky snadnému použití a přítomnosti vestavěných nástrojů ve vývojovém prostředí. <br><br>Nicméně strukturované <i>XML</i> soubory. Jejich výhodou je, že počet parametrů nemusí být pevně daný. Abyste tomu lépe porozuměli, zvažte konkrétní příklad.</p><p>V programu USearch se po kliknutí na záznam zobrazí kontextové menu, ve kterém je zobrazen seznam položek. Tyto položky jsou příkazy, které se načítají ze souboru nastavení. V případě, že byla nastavení uložena v <i>INI</i> soubor, pak by program mohl uložit a načíst určitý počet příkazů, například 10 nebo 50. Jakmile bude vyžadována větší hodnota, budete muset přepsat kód a znovu jej odpovídajícím způsobem zkompilovat.</p><p><img src='https://i2.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.ini_.jpg' height="145" width="247" loading=lazy loading=lazy><br>Použití přístupu pomocí <i>XML</i> soubory, budeme moci dynamicky načítat všechny parametry sekce. Konfigurační soubor se navíc stane elegantnějším, bez nadbytečného číslování parametrů. Nicméně standardní nástroje pro práci s <i>XML</i> Delphi má mnoho nevýhod, proto doporučuji používat standardní knihovnu <b>MSXML</b>... Obvykle je standardně součástí operačních systémů rodiny Windows.</p><p><img src='https://i1.wp.com/zoo-mania.ru/wp-content/uploads/2011/08/settings.xml_.jpg' align="center" width="100%" loading=lazy loading=lazy><br>Chcete-li se připojit <b>MSXML</b>, potřebujeme vygenerovat soubor rozhraní se seznamem všech funkcí jeho importem ze serveru COM. O tom, jak importovat rozhraní, bylo napsáno mnoho podrobných článků, ale doporučuji vám stáhnout soubor <b>MSXML2_TLB.PAS</b> připraven k použití. Po stažení soubor umístěte vedle svého projektu nebo jej přesuňte do složky lib prostředí Delphi. Modul tedy budou moci používat všechny vytvořené programy <b>MSXML</b>, stačí přidat řádek MSXML2_TLB k použití.</p><p>Pro srozumitelnost zvažte následující příklad použití této knihovny:</p><p>Postup LoadData; var XMLDoc: DOMDocument; Kořen: IXMLDOMElement; begin XMLDoc: = CoDOMDocument.Create; XMLDoc.Load ("settins.xml"); Kořen: = XMLDoc.DocumentElement; ShowMessage (Root.SelectSingleNode ("velikost / šířka"). Text); Kořen: = nula; XMLDoc: = nula; konec;</p><p>Nejprve se vytvoří instance třídy DOMDocument a poté se do paměti načte obsah souboru settings.xml. Jelikož dle normy jakákoliv <i>XML</i> soubor musí obsahovat kořenovou značku (v tomto případě <i>config</i>), pak jej musíme získat pomocí funkce <i>DocumentElement</i>... Poté se obsah zobrazí mezi značkami. <width></width>, které jsou zase mezi značkami <size></size>... Naše metoda tedy ze souboru settings.xml zobrazí text ve MessageBoxu <i>"100px"</i>.</p><p> <?xml version="1.0" encoding="utf-8"?> <config> <size> <height>500 pixelů</height> <width>100 pixelů</width> </size> </config> </p><p>Zde je aplikována metoda SelectSingleNode, která jako parametr bere řetězec</p> <p>OBJEDNÁVKA ŘEŠENÍ PROBLÉMU NA DELPHI <br>Delphi je druhým nejdůležitějším programovacím jazykem, se kterým se studenti v procesu učení nejčastěji seznamují. To je začátek učení o objektově orientovaném programování. Jako student jsem došel k závěru, že neexistuje jednodušší metoda, jak se jazyk naučit, než si v něm napsat kalkulačku. I když implementujete primitivní funkci pro sčítání dvou čísel, hodně to osvětlí.</p> <p>CodeGaear, Delphi 7, Lazarus jsou různé kompilátory, programy, které přenesou vámi napsaný kód do stroje a převedou ho na jedničky a jedničky. Toto jsou všechny programy pro tvorbu programů, nikoli samostatné programovací jazyky. Tyto kompilátory používají programovací jazyk Object Pascal, který je základem jazyka Delphi, který je syntaxí podobný běžnému Pascalu, ale funkčně se výrazně liší. <br></p> <h2>Jaká je syntaxe programovacího jazyka?</h2> <p>Toto je formát pro psaní různých operátorů. Například smyčka Pascal "for" má následující formát: "for n: = 1 až k do" a tak dále.</p><p>V programovacím jazyce C++ se stejná smyčka píše trochu jinak: for (n = 1; n Píšeme kalkulačku</p><p>To vám umožní pochopit, jak objekty interagují s programovým kódem, co jsou to "proměnné" a jak fungují matematické funkce. Jakékoli programování bude stejně výpočtem. Hra je také program, který neustále něco počítá, pracuje s čísly a číselnými funkcemi. Programování je neoddělitelné od matematiky.</p> <p>Pro psaní použijme vývojové prostředí Lazarus. Jeho funkčnost není tak bohatá jako třeba CodeGear, ale je volně dostupná a je určena pro školení.</p><p>Po otevření vývojového prostředí vidíme formulář a sadu nástrojů. Zde je formulář.</p> <p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-24.jpg' width="100%" loading=lazy loading=lazy></p><p>Zde je sada nástrojů.</p><p>První věc, kterou uděláme, je přidat tři prvky, které potřebujeme k implementaci funkce pro sčítání dvou čísel. Potřebujeme: "Tedit" v počtu tří kusů a "TButton". Na obrázku níže jsou zobrazeny na panelu pomocí šipek. Klikneme na ně jednou a pak jednou na formulář a oni se v něm objeví.</p><p>Jedná se o textová pole pro vstup a běžné tlačítko. Na tyto prvky narazíte pomocí téměř jakéhokoli programu Windows. Podívej se.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-27.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>Nyní tyto štítky vyčistíme. Klikněte na kartu "Zobrazit". A klikněte na položku „Inspektor objektů. Objeví se okno jako toto.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-28.jpg' width="100%" loading=lazy loading=lazy></p><p>Jednou klikneme na náš prvek "Button" ve formuláři a změníme hodnotu "Caption" v okně inspektoru na jakoukoli jinou. Například slovo "OK". Stiskneme Enter. Na formuláři vidíme, jak prvek změnil svůj název.</p><p>To samé uděláme s Edit's, jen je nebudeme přejmenovávat, ale uděláme je bez obsahu. Postupně je vyberte a vymažte hodnotu Text v inspektoru. Nezapomeňte stisknout Enter.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-29.jpg' width="100%" loading=lazy loading=lazy></p><p>Ve výsledku naše forma vypadá takto.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-30.jpg' width="100%" loading=lazy loading=lazy><br></p> <p>Nyní, aby naše kalkulačka fungovala, musíte napsat potřebný programový kód pro postup našeho tlačítka. Klikněte dvakrát na prvek Button a otevřete zdrojový editor.</p><p><img src='https://i2.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-31.jpg' width="100%" loading=lazy loading=lazy></p><p>Vidět? Postup Button1Click. Toto je postup, který je zodpovědný za to, co se stane, když jednou klikneme na tlačítko. A mělo by se stát následující: program potřebuje zobrazit součet čísel zadaných do prvních dvou polí ve třetí Editaci. Napíšeme kód.</p><p><img src='https://i1.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-32.jpg' width="100%" loading=lazy loading=lazy></p><p>Potřebujeme napsat takových jednoduchých 5 řádků kódu. Komentáře a vysvětlení můžete vidět na obrázku výše. Poté stiskneme toto tlačítko.</p> <p>Náš projekt bude sestaven. Bude zkompilován do programu. Do prvních dvou polí zadáme čísla, klikneme na tlačítko a získáme hodnotu součtu.</p><p><img src='https://i0.wp.com/reshatel.org/wp-content/uploads/2018/09/Bez-imeni-34-2.jpg' width="100%" loading=lazy loading=lazy></p> <h2>Závěr</h2> <p>Můžete kliknout na tlačítko "Soubor", poté na "Uložit vše", vybrat složku k uložení a budete mít plnohodnotný program, který lze spustit z plochy. Nyní zkuste sami přijít na to, co musíte v tomto kódu přepsat, aby program dělil dvě čísla a nesčítal. Tip: musíte změnit typ dat. Video níže ukazuje podobný příklad, ale v prostředí Delphi 7, nikoli Lazarus.</p><p><span class="6qR5tjJKK3g"></span></p> <p>V poslední době je velká pozornost věnována budování e-business systémů, nebo jak se jim také říká - B2B (business to business). S ohledem na doporučení k výstavbě výměnných streamovacích systémů koordinačního orgánu internetových technologií - WWW Consortium: důraz je kladen na XML technologie a konstrukci systémů pro výměnu XML dokumentů.</p> <p>Výhodou použití XML v e-businessu je vysoká efektivita B2B systémů při nízkých nákladech na jeho tvorbu díky přehledné a vizuální prezentaci strukturovaných informací, možnost využívat moderní síťové protokoly a vytvářet obchodní systémy v reálném čase.</p> <p>Nezávislost prezentace informací ve formě XML dokumentů umožňuje různým společnostem zapojeným do e-businessu vyrábět software nezávisle na sobě.</p> <p>Ve všech systémech je burza zpravidla postavena podle stejného schématu pomocí požadavků HTTP. SSL se používá jako protokol zabezpečení informací (ale to je samostatné téma).</p> <p>Jednou z možných možností zpracování zpráv XML je sestavení aplikací BIN / CGI (ISAPI) nebo komponent COM (server), které generují nebo zpracovávají dokumenty XML.</p> <p>Na jedné straně se aplikace chová jako klient, který zadává HTTP požadavek v režimu POST, na druhé straně je WEB server, na jehož straně je požadavek zpracován a je vypsána odpověď. Výměna informací využívá XML dokumenty.</p> <p>Jednou z nejúčinnějších možností implementace je použití existujícího analyzátoru XML, který podporuje model DOM. Takový parser je distribuční balíček Win'98 nebo integrální součást IE 4.7 a vyšší (pro Win'95) a představuje COM server umístěný v knihovně msxml.dll.</p> <p>Component Object Model (COM) – Představuje zapouzdřená data a metody do jediné entity a způsob, jak k nim přistupovat prostřednictvím systému rozhraní. Pomocí nástrojů Delphi je poměrně snadný přístup k třídám objektu COM (na jednom COM serveru může být zahrnuto několik tříd). K objektům se přistupuje inicializací instance třídy prostřednictvím systému rozhraní. Popis rozhraní je prováděn jazykem definice rozhraní (IDL), který lze pomocí prostředí provádět automaticky.</p> <p>Nástroje Delphi se používají k importu z COM serveru <i>msxml.dll</i>, jsou sestaveny soubory pro popis rozhraní IDL a soubor pro binární popis typů knihoven - TLB. Tato operace se provádí prostřednictvím systémové nabídky: <b>Projekt | Import knihovny typů:</b>(obrázek 1). Dále se objeví dialogové okno (obrázek 2), ve kterém je potřeba vybrat COM objekt (v našem případě je objekt registrován pod názvem "Microsoft.XMLDom (verze 2.0)") a vytvořit TLB soubor (tlačítko <b>Vytvořte jednotku</b>). Pomocí souboru TLB framework vygeneruje soubor popisu serveru COM "Pascal" - MSXML_TLB.pas</p> <p>Soubor MSXML_TLB.pas popisuje všechna rozhraní, konstanty a coclasses serveru COM.</p> <p>Pro přístup k objektům prvku COM potřebujete v direktivě <b>POUŽITÍ</b> přidejte název souboru s popisem knihovny (MSXML_TLB.pas). Níže je uveden jednoduchý program využívající standardní analyzátor DOM msxml.dll, který načte dokument XML a zobrazí jej v prvku textového pole Memo1.</p> <b>používá</b> Windows, Zprávy, SysUtils, Třídy, Grafika, Ovládací prvky, Formuláře, Dialogy, OleServer, MSXML_TLB, StdCtrls; <b>typ</b> TForm1 = <b>třída</b>(TForm) Tlačítko1: TButton; Memo1: TMemo; <b>postup</b> Button1Click (Sender: TObject); <b>konec;</b> <b>var</b> Form1: TForm1; <b>implementace</b>($ R * .DFM) <b>Postup</b> TForm1.Button1Click (Sender: Tobject); <span>// deklarace soclass objektu DOMDocument;</span> <b>var</b> coDoc: CoDOMDocument; <span>// třída konzistentní s rozhraním IDOMDocument;</span> <b>var</b> Dokument: IXMLDOMDocument; <b>začít</b> <span>// vytvoření instance objektu DOMDocument;</span> Doc: = coDoc.Create; <span>// volání metody Load instance objektu DOMDocument;</span> Doc.load ("data.xml"); <span>// přístup k vlastnosti xml instance DOMDocument;</span> Memo1.Text: = Doc.xml; <b>konec;</b> <b>konec.</b> <h2>Koncept DOM – objektový model dokumentu</h2> <p>Každý XML dokument je reprezentován jako soubor více objektů (tříd), s jejichž pomocí je možné přistupovat k jednotlivým prvkům (objektovým polím). DOM - rozhraní popisuje přístup jak k jednoduchým objektům typu DOMString nebo CharacterData, tak k částem či jednotlivým prvkům XML dokumentu: DOMFragmentElement, DOMNode, DOMElement.</p> <p>Následují nejdůležitější vlastnosti a metody objektů XMLDOMDocument, XMLDOMNode, XMLDOMNodeList. Je třeba poznamenat, že níže uvedené metody a funkce objektů DOM (Document Object Model) používá analyzátor Microsoft XML msxml.dll a jsou poněkud širší než model DOM schválený konsorciem W3C.</p> <p>Úplnější popis rozhraní objektu DOM lze nalézt na</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2">Objekt XMLDOMDocument</td> </tr><tr><td valign="top" colspan="2">Představuje nejvyšší úroveň hierarchie objektů a obsahuje metody pro práci s dokumentem: jeho načítání, analyzování, vytváření prvků, atributů, komentářů atd. ...</td> </tr><tr><td valign="top" colspan="2"><b>Vlastnosti</b> </td> </tr><tr><td valign="top" width="39%"><b>Async</b> </td> <td valign="top" width="61%">Vlastnost identifikující aktuální režim zpracování</td> </tr><tr><td valign="top" width="39%" height="19"><b>ParseError</b> </td> <td valign="top" width="61%" height="19">Vrátí odkaz na objekt zpracování chyb XMLDOMParseError</td> </tr><tr><td valign="top" width="39%"><b>Povolit – zakáže ověřování dokumentů.</b> </td> <td> </td> </tr><tr><td valign="top" width="39%"><b>url</b> </td> <td valign="top" width="61%">Vrátí adresu URL dokumentu</td> </tr><tr><td valign="top" width="39%"><b>documentElement</b> </td> <td valign="top" width="61%">Obsahuje odkaz na kořenový prvek dokumentu jako objekt XMLDOMElement.</td> </tr><tr><td valign="top" colspan="2"><b>Metody</b> </td> </tr><tr><td valign="top" width="39%"><b>načíst (url) <br>loadXML (xmlString)</b> </td> <td valign="top" width="61%">Načte dokument XML,</td> </tr><tr><td valign="top" width="39%"><b>uložit (objTarget)</b> </td> <td valign="top" width="61%">Uloží dokument XML do souboru</td> </tr><tr><td valign="top" width="39%"><b>přerušit</b> </td> <td valign="top" width="61%">Přerušení procesu načítání a zpracování dokumentu.</td> </tr><tr><td valign="top" width="39%"><b>createAtribute (jméno)</b> </td> <td valign="top" width="61%">Vytvoří nový atribut se zadaným názvem pro aktuální prvek.</td> </tr><tr><td valign="top" width="39%"><b>createNode (typ, název, názevSpaceURI)</b> </td> <td valign="top" width="61%">Vytvoří uzel zadaného typu a názvu</td> </tr><tr><td valign="top" width="39%"><b>createElement (tagName)</b> </td> <td valign="top" width="61%">Vytvoří prvek dokumentu se zadaným názvem.</td> </tr><tr><td valign="top" width="39%"><b>createTextNode (data)</b> </td> <td valign="top" width="61%">Vytvoří text v dokumentu</td> </tr><tr><td valign="top" width="39%"><b>getElementsByTagName (název tagu)</b> </td> <td valign="top" width="61%">Vrátí odkaz na kolekci prvků dokumentu s daným názvem</td> </tr><tr><td valign="top" width="39%"><b>nodeFromID (idString)</b> </td> <td valign="top" width="61%">Najděte prvek podle ID</td> </tr></tbody></table><br><table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" colspan="2"> <b>Objekt XMLDOMNode</b> </td> </tr><tr><td valign="top" colspan="2">Objekt XMLDOMNode, který implementuje základní rozhraní DOM <b>Uzel</b>, je určen pro manipulaci se samostatným uzlem stromu dokumentů. Jeho vlastnosti a metody umožňují získat a změnit kompletní informace o aktuálním uzlu – jeho typ, název, celé jméno, jeho obsah, seznam podřízených prvků atd.</td> </tr><tr><td valign="top" colspan="2"><b>Vlastnosti</b> </td> </tr><tr><td valign="top" width=" "><b>nodeName, baseName</b> </td> <td valign="top" width="65%">Vrátí název aktuálního uzlu.</td> </tr><tr><td valign="top" width="35%"><b>předpona</b> </td> <td valign="top" width="65%">Vrátí předponu Namespace.</td> </tr><tr><td valign="top" width="35%"><b>datový typ</b> </td> <td valign="top" width="65%">Určuje typ obsahu aktuálního uzlu</td> </tr><tr><td valign="top" width="35%"><b>nodeType, nodeTypeString</b> </td> <td valign="top" width="65%">Vrátí typ aktuálního uzlu:</td> </tr><tr><td valign="top" width="35%"><b>atributy</b> </td> <td valign="top" width="65%">Získá seznam atributů aktuálního uzlu jako kolekci XMLDOMNamedNodeMap.</td> </tr><tr><td valign="top" width="35%"><b>text</b> </td> <td valign="top" width="65%">Vrátí obsah aktuálního podstromu jako text</td> </tr><tr><td valign="top" width="35%"><b>xml</b> </td> <td valign="top" width="65%">Vrátí reprezentaci XML aktuálního podstromu.</td> </tr><tr><td valign="top" width="35%"><b>nodeValue</b> </td> <td valign="top" width="65%">Vrátí obsah aktuálního uzlu.</td> </tr><tr><td valign="top" width="35%"><b>childNodes</b> </td> <td valign="top" width="65%">Vrátí seznam podřízených prvků jako XMLDOMNodeList.</td> </tr><tr><td valign="top" width="35%"><b>firstChild, lastChild</b> </td> <td valign="top" width="65%">Vrátí první / poslední dítě</td> </tr><tr><td valign="top" width="35%"><b>předchozíSourozenec, dalšíSourozenec</b> </td> <td valign="top" width="65%">Vrátí předchozího / dalšího sourozence.</td> </tr><tr><td valign="top" width="35%"><b>parentNode</b> </td> <td valign="top" width="65%">Obsahuje odkaz na nadřazený prvek.</td> </tr><tr><td valign="top" width="35%"><b>vlastníkDokument</b> </td> <td valign="top" width="65%">Vrátí ukazatel na dokument obsahující aktuální uzel.</td> </tr><tr><td valign="top" colspan="2"><b>Metody</b> </td> </tr><tr><td valign="top" width="35%"><b>appendChild (newChild)</b> </td> <td valign="top" width="65%">Přidá nového potomka k aktuálnímu uzlu.</td> </tr><tr><td valign="top" width="35%"><b>insertBefore (newChild, refChild)</b> </td> <td valign="top" width="65%">Vloží podřízený uzel a umístí jej do aktuálního podstromu vlevo od uzlu určeného refChild.</td> </tr><tr><td valign="top" width="35%"><b>cloneNode (hluboký)</b> </td> <td valign="top" width="65%">Vytvoří kopii aktuální položky.</td> </tr><tr><td valign="top" width="35%"><b>getAttribute</b><b>(název) <br> </b><b>getAttributeNode</b><b><span>(název) <br>setAttribute (název, hodnota) <br>setAttributeNode (XMLDOMAttribute)</span> </b> </td> <td valign="top" width="65%">Přístup k atributům (vytvoření, čtení, zápis) objektu. Name je název atributu, value je jeho hodnota. Vrátí hodnotu objektu XMLDOMAttribute.</td> </tr><tr><td valign="top" width="35%"><b>nahraditChild (newChild, oldChild) removeChild (oldChild)</b> </td> <td valign="top" width="65%">Nahrazení objektu oldChild v aktuálním seznamu podřízených objektů objektem newChild. Odstranění objektu oldChild</td> </tr><tr><td valign="top" width="35%"><b>selectNodes (patternString) selectSingleNode (patternString)</b> </td> <td valign="top" width="65%">Vrátí objekt XMLDOMNodeList vybraný podle vzoru vyhledávání nebo prvního uzlu</td> </tr><tr><td valign="top" width="35%"><b>transformNode (šablona stylů) <br>transformNodeToObject (stylesheet, outputObject)</b> </td> <td valign="top" width="65%">Přiřadí šablonu stylů podstromu aktuálního uzlu a vrátí řetězec, který je výsledkem zpracování. Parametr je odkaz na objekt DOMDocument, který obsahuje příkazy XSL.</td> </tr></tbody></table><br><h2>Použití XML v podnikání.</h2> <p>Pro jasnější obrázek je potřeba vysvětlení a proč je to všechno potřeba, abychom pochopili, jak to funguje:</p> <p>Při budování B2B nebo podnikového ERP systému, při organizování výměny informací XML dokumentů mezi podniky nebo pobočkami pr-I se využívá efektivně osvědčený systém přenosu informací založený na existujících WEB serverech přes HTTP protokoly.</p> <p>Na jedné straně se aplikace chová jako klient, který zadává HTTP požadavek v režimu POST, na druhé straně je WEB server, na jehož straně je požadavek zpracován a je vypsána odpověď. XML dokumenty se používají jako výměna.</p> <p>Například v jednoduchém podnikovém ERP systému, účetním programu (ACS Accounting), je potřeba vygenerovat požadavek na fakturu a poslat ji na pobočku, která má sklad (ACS Warehouse). AWP Podobné prohlášení o problému při vytváření B2B systému, kdy podnik A požaduje dostupnost produktů (vytváří objednávku na nákup) od dodavatele B.</p> <p>Enterprise A a jeho program vystupují jako klient. Sklad obsluhuje dodavatel B, který má skladový komplex s databází na SQL serveru. Výměna se provádí prostřednictvím firemního WEB serveru dodavatele V.</p> <p>Níže je uveden následující typický algoritmus výměny:</p> <br>Obrázek 3 <ol><li><b>Enterprise A</b> iniciuje <b>proces A</b>(objednávka produktu), která funguje jako WEB klient.</li><li><b>Proces A</b> vygeneruje XML dokument (například požadavek na fakturu) a předá jej jako POST http požadavek na WEB server poskytovatele B. Identifikátor zdroje zpracovatelské aplikace se používá jako URI. Identifikátor URI může být stejný pro všechny typy dokumentů nebo individuální pro každý typ. Vše závisí na struktuře B2B (WEB) serveru.</li><li>WEB server analyzuje požadavek a vygeneruje server <b>Proces B</b> předáním těla XML dokumentu jako parametru. <br>Proces B spouští WEB server a je zpracován buď jako ASP stránka, CGI (ISAPI) - aplikace nebo JAVA server (serverová aplikace)</li><li><b>Proces B</b>- vygeneruje požadavek na SQL databázový server.</li><li>SQL server provede potřebné operace v databázi, vygeneruje odpověď a vrátí ji <b>Proces B</b>.</li><li>Podle odpovědi z SQL serveru <b>Proces B</b> vygeneruje XML dokument (odpověď) a vrátí jej jako odpověď na http požadavek klientské aplikaci.</li><li>Dále, v závislosti na situaci na straně klienta, se buď vytvoří nový http požadavek, nebo se relace ukončí.</li> </ol><h2>Několik slov o organizaci toku dokumentů.</h2> <p>Obecné pravidlo pro vývoj systému pro výměnu dokumentů XML je:</p><ul><li><b>Nejprve</b>- vývoj vývojového diagramu elektronických dokumentů a jejich struktury;</li><li><b>Za druhé</b>- vývoj tabulek procesních funkcí (podprocesů), tzn. jakou funkci s ohledem na který dokument XML bude každý proces implementovat.</li> </ul><p>Každý dokument XML, stejně jako dokument HTML, se musí skládat z hlavičky zprávy (informace uzavřené značkami) a těla zprávy (u požadavku je tato informace orámována značkami, které odpovídají na požadavek). Aby byl dokument XML dobře formován, je nutné jeho dvě součásti „Title“ a „Request“ orámovat například tagy. Typ typického dokumentu je uveden níže:</p> <p>Záhlaví (obrázek 4), na rozdíl od HTML dokumentu, musí obsahovat různé druhy servisních informací, včetně informací o typu přenášeného dokumentu a procesu jeho zpracování. Tělo dokumentu vstupuje do zpracování informací, tzn. obsah orámovaný značkami. Je třeba poznamenat, že struktura nadpisů by měla být stejná pro všechny typy dokumentů.</p> <p>Pro Proces spuštěný serverem je vhodnější (ale není to nutné) sestavit algoritmus zpracování následovně:</p> <img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128666.jpg' height="500" width="408" loading=lazy loading=lazy><br>Obrázek 6. <h2>Některé základní body při vytváření klientské strany</h2> <p>Jak již bylo vysvětleno, při vytváření XML dokumentu se využívá jeho reprezentace ve formě modelu DOM. Níže je uveden příklad textové části Delphi programu pro generování záhlaví xml zpráv.</p> <b>postup</b> TThread1.HeaderCreate (Sender: Tobject); <b>var</b> <span>// deklarace třídy, potřebná k vytvoření</span> coDoc: CoDomDocument; <span>// Objekt XMLDomDocument</span> Doc: DomDocument; r: IXMLDOMEprvek; Uzel: IXMLDOMElement; // DOMText txt: IXMLDOMText; // DOMAttribute attr: IXMLDOMAttribute; <b>začít</b> <span>// vytvoření dokumentu DOM</span> Doc: = coDoc.Create; Doc.Set_async (false); <span>// počáteční spuštění dokumentu DOM</span> Doc.LoadXML (" <Header/>"); <span>// vytvořit DOMElement (tag<<b>Odesílatel</b>>) </span> Uzel: = Doc.createElement ("Odesílatel"); <span>// vytvořte textový uzel " <b>Společnost Typhoon LLC</b>" </span> txt: = Doc.createTextNode ("Typhoon LLC"); <span>// přiřazení k uzlu<<b>Odesílatel</b>> hodnotu</span> <span>// textový uzel " <b>Společnost Typhoon LLC</b>" </span> Node.appendChild (txt); <span>// přidat prvek<<b>Odesílatel</b>> do kořenového adresáře dokumentu jako dítě</span> r.appendChild (Uzel); <span> <<b>Z</b>> </span> Uzel: = Doc.createElement ("Od"); txt: = Doc.createTextNode ("http://tayfun.ru/xml/default.asp"); Node.appendChild (txt); r.appendChild (Uzel); <span>// podobné operace pro značku<<b>Na</b>> </span> Uzel: = Doc.createElement ("Komu"); txt: = Doc.createTextNode ("http://irbis.ru"); Node.appendChild (txt); r.appendChild (Uzel); <span>// vytvořit DOMElement ()</span> Uzel: = Doc.createElement ("TypDokument"); <span>// vytvořit uzel XMLDOMAttribute</span> Att: = Doc.createAttribute ("Id", "Objednávka"); <span> // <TypeDocument Id="Order"/> </span> Node.appendChild (Att); r.appendChild (Uzel); <b>konec;</b> <p>Je třeba poznamenat, že deklarace proměnné coDoc: CoDomDocument a Doc: DomDocument, stejně jako její vytvoření metodou Create (Doc: = coDoc.Create;), se provádí jednou. Deklarace proměnné je v sekci popisující globální proměnné, nikoli v lokální proceduře, jak bylo pro názornost demonstrováno na tomto příkladu (tedy jedna globální proměnná typu DomDocument na jeden programový modul).</p> <p>Výsledkem práce výše uvedeného programu bude vytvořená hlavička, aplikovaná na náš příklad xml-document: zobrazený na obrázku 5.</p> <img src='https://i0.wp.com/codenet.ru/np-includes/upload/2005/01/05/128662.gif' height="116" width="298" loading=lazy loading=lazy><br>Obrázek 5 <p><img src='https://i2.wp.com/codenet.ru/np-includes/upload/2005/01/05/128664.gif' height="179" width="385" loading=lazy loading=lazy><br>Obrázek 6.</p><p>Hlavní výhodou přenosu informací ve formě XML dokumentů je, že je možné vytvořit zprávu pomocí nezávislých tabulkových struktur v DBMS jak na přijímací, tak na vysílací straně. S použitím našeho příkladu předpokládejme, že je nutné přenést informace o fakturách podniku A z DBMS se strukturou znázorněnou na obrázku 6</p> <p>Pro vygenerování xml dokumentu obsahujícího fakturu je nejprve vytvořen SQL dotaz (dotaz A) s informacemi o samotné faktuře:</p> <b>VYBRAT</b>* FROM Invoice_General <b>KDE</b> InvoiceNum =: num <b>VYBRAT</b> Zboží, kvalita, cena, HZ_cod <b>Z</b> Zboží <b>KDE</b> InvoiceNum =: num <span>//: num je parametr, který určuje číslo faktury.</span> <p>Níže je část programu, která generuje tělo xml dokumentu:</p> <b>postup</b> TThread1.DataBodyCreate (Sender: Tobject); <b>var</b> <span>// deklarace třídy a objektu XMLDomDocument</span>// coDoc: CoDomDocument; <span>// musí být globální pro celý modul.</span>// Dokument: DomDocument; <span>// deklarovat objekty DOMElement</span> r: IXMLDOMEprvek; // DOMEprvek; Uzel, Uzel2: IXMLDOMElement; Uzel3, Uzel4: IXMLDOMElement; // DOMText txt: IXMLDOMText; str: řetězec; <span>// Číslo faktury: <b>celé číslo;</b>- globální proměnná - // má hodnotu 987654 // dotazA, dotazB: <b>Tětiva;</b>- globální proměnná, // má hodnotu odpovídající požadavku // dotazA - požadavek A s obecnými informacemi o faktuře // dotazB - požadavek B informace o zboží popsaném // faktuře (viz text)</span> <b>začít</b> Query.Close; <span>// viz text "požadavek A"</span> Dotaz.Text: = dotazA; <span>// vykoná požadavek</span> Query.ExecSQL; Query.Open; <span>// získat adresu kořenového prvku</span> r: = Doc.Get_documentElement; Uzel2: = Doc.createElement ("Požadavek"); <span>// vytvořit DOMElement (tag)</span> Uzel: = Doc.createElement ("Faktura"); <span>// přidání prvku do kořenového adresáře</span> r.appendChild (Uzel2); <span>// přidat položku do</span> Uzel2. appendChild (Uzel); <span>// vytvořit DOMElement (tag)</span> Uzel3: = Doc.createElement ("Depurture"); <span>// přidat položku do</span> Uzel. appendChild (Uzel3); <span>// volání do pole "Depurture" požadavku</span> str: = Query.FieldByName ("Depurture"). AsString; <span>// vytvoření textového uzlu = hodnota pole</span><span>// přiřadí hodnotu uzlu</span> <span>// textový uzel, proměnná str</span> Node.appendChild (txt); <span>// podobné operace pro značku <Destination>, <DataSend>, // <DataDepurture>, <Currency> // <DestinationCompany>(pole DB "Příjemce")</span> Uzel: = Doc.createElement ("Cíl"); <span>// název databázového pole nemusí být stejný jako název</span> str: = Query.FieldByName ("Příjemce") .AsString; <span>// tag, to je výhoda použití</span> txt: = Doc.createTextNode (str); <span>// DOM rozhraní před DBMS, které podporuje rozhraní XML, // jako ORACLE 8i nebo MS SQL 2000</span> Node.appendChild (txt); ... <span>// vygenerování požadavku na specifikaci zboží</span> <span>// zavře žádost o přístup</span> Query.Close; <span>// viz v textu "žádost B", info. O zboží</span> Query.Text: = dotazВ; <span>// přiřazení hodnot parametrů</span> Query.Params.AsInteger: = InvoiceNumber; <span>// vykoná požadavek</span> Query2.ExecSQL; <span>// otevřít přístup k vyžádání dat</span> Query.Open; <span>// vytvořit DOMElement (tag)</span> Uzel3: = Doc.createElement ("Imems"); <span>// přidat položku do</span> Uzel. appendChild (Uzel3); <span>// prochází všechny řádky dotazu</span> <b>zatímco</b> <b>ne</b> Eof.Query <b>dělat</b> begin Uzel4: = Doc.createElement ("Imem"); <span>// přidat položku do</span> Uzel3.appendChild (Uzel4); <span>// vytvoření dat pro značku</span> str: = Query.FieldByName ("Cena"). AsString; txt: = Doc.createTextNode (str); Node.appendChild (txt); ... <span>// podobné operace pro značky <HZ_Cod>, <Quality>, <GoodName> </span> <b>konec;</b> <b>konec;</b> <p>Výsledkem tohoto postupu je vygenerování následujícího textu XML dokumentu:</p> <table width="100%"><tbody><tr><td align="middle"><br><img src='https://i1.wp.com/codenet.ru/np-includes/upload/2005/01/05/128661.gif' width="100%" loading=lazy loading=lazy></td> </tr></tbody></table><p>K vytvoření požadavku se používá metoda Open objektu <b>IXMLHttpRequest</b>:</p> <b>postup</b> Otevřít (const bstrMethod, - typ metody = "POST" bstrUrl, - adresa URL serveru varAsync, - režim komunikace asynchronní / synchronní = true bstrUser, - uživatelské jméno pro autentizaci bstrPassword) - heslo <h2>Vytvoření serverové strany zpracování dokumentů</h2> <p>Jak bylo uvedeno dříve, zpracování požadavku HTTP může být zpracováno aplikacemi CGI nebo Java servlety. Je možná i varianta zápisu ASP stránek. Ale v tomto případě je přenos dat možný pouze metodou "GET" přes řetězec dotazu. Zpracování požadavku HTTP pro stránky ASP je však efektivnější než aplikace CGI. Podle mě je však jedno, jak to zpracovat, ale důležitější je vyřešit otázku - jak sestavit program pro zpracování, a ne jakými prostředky.</p> <p>Jestliže jsme v předchozí kapitole zkoumali možnosti tvorby XML dokumentu, pak je úkolem serverové aplikace opačný – parsování XML dokumentů. Níže je část programu, který analyzuje xml dokument:</p> <b>postup</b> Tthread1.DataParser (Sender: Tobject); <b>var</b> <span>// deklarovat objekty DOMElement</span> r, FNode: IXMLDOMElement; Str, Název souboru: String; parm: Struna; <span>// deklarace soclass and</span> CoDocXML, CoDocXSL, CoDocResult: CoDomDocument; <span>// Objekt XMLDomDocument</span> XMLDoc, XSLDoc, ResultDoc: DomDocument; <span>// HttpStr: String; - globální proměnná obsahující řetězec požadavku HTTP</span> <b>Začít</b> XMLDoc: = coDocXML.Create; XMLDoc.LoadXML (HttpStr); <span>// získat adresu kořenového prvku</span> r: = Doc.Get_documentElement; <span>// získat hodnotu prvku</span> FNode: = r.SelectSingleNode ("// TypeDocument"); <span>// získat hodnotu atributu id = "Objednávka"</span> FileName: = FNode.GetAttibute ("id"); <span>// a vytvoření názvu souboru Order.xsl</span> FileName: = FileName + ". Xsl"; <span>// vytvoření dokumentu XSLDoc</span> XSLDoc: = coDocXSL.Create; XSLDoc.LoadXML (název souboru); <span>// vytvoření dokumentu XMLDoc</span> ResultDoc: = coDocResult.Create; <span>// nastavení režimu synchronního zpracování</span> ResultDoc.Set_async (false); <span>// nastavení kontroly analýzy</span> ResultDoc.validateOnParse: = true; <span>// analýza XMLDoc pomocí šablony XSL</span> XMLDoc.transformNodeToObject (XSLDoc, ResultDoc); <span>// proměnné Str je přiřazena textová hodnota</span> <span>// výsledného dokumentu.</span> Str: = ResultDoc.text; <span>// najít prvek</span> FNode: = r.SelectSingleNode ("// InvoiceNumber"); <span>// a získáme hodnotu prvku</span> parm: = FNode.text; <span>// zavře žádost o přístup</span> Query.Close; Dotaz.Text: = Str; <span>// přiřazení hodnoty parametru</span> Query.Params.AsString: = parm; <span>// vykoná požadavek</span> Query.ExecSQL; <b>konec;</b> <p>Celý vrchol analýzy spočívá v použití šablony XSL, která se generuje individuálně pro každý typ dokumentu. Výsledkem analýzy je řetězec dotazu SQL. Následně provedení vygenerovaného řetězce SQL dotazu provede potřebné změny v datech v DBMS.</p> <p>Výhodou použití analýzy pomocí šablony je také to, že získáte určitou flexibilitu dat a získáte úplnou nezávislost algoritmu na kódu programu. Níže je uveden text šablony XSL použité ke zpracování dokumentu typu ORDER:</p><p> <!-- файл Order.xsl --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:for-each select="//header">INSERT do TABREG (FROM, TO, TYPEDOC, body) VALUES (" <xsl:value-of select="from" />", "<xsl:value-of select="to" />", "<xsl:value-of select="TypeDocument/@id" />") </xsl:for-each> <xsl:for-each select="//item">VLOŽTE do ZBOŽÍ (číslo faktury, název, cena, kvalita) HODNOTY (": num", " <xsl:value-of select="name" />", "<xsl:value-of select="price" />", "<xsl:value-of select="quality" /> ") </xsl:for-each> </xsl:template> </xsl:stylesheet> </p><p>Při vysvětlení výše uvedeného příkladu je třeba poznamenat, že použití dvojice značek je formální povahy, protože po analýze musí výsledný dokument XML formálně obsahovat alespoň jeden uzel. Metoda ResultDoc.text přiřadí textovou hodnotu ResultDoc získaného během analýzy dokumentu XML. V tomto případě je hodnotou vše, co je orámováno dvojicí tagů a tzn. SQL dotaz, který jsme vygenerovali.</p> <p>Další vlastností psaní programu je třeba poznamenat možnost použití parametru SQL <b>: č.</b> Použití parametru zjednoduší text šablony xsl. Definice hodnoty odpovídajících prvků uzlů dokumentu XML je určena zpočátku výběrem podle názvu odpovídajícího uzlu, například:</p><h2>XSL na první pohled</h2> <p>XSL je zkratka odvozená od eXtensible Stylesheet Language, což je jazyk pro formátování šablon stylů (data XML). Jak můžete vidět v záhlaví, k formátování dat XML se používá jazyk XSL (eXtensible Stylesheet Language). Podle definice se W3C XSL skládá ze dvou částí:</p> <ul><li>XSLT - Transformace XSL. Jazyk používaný k transformaci nebo formátování (transformaci) dokumentů XML. S pomocí XSLT tak můžeme získat různé řezy množiny dat a formy prezentace dat.</li><li>Formátovací prvky. Tyto prvky zahrnují všechny typografické prvky dat poté, co byly zpracovány pomocí XSL. Používá se pouze pro generování HTML stránek.</li> </ul><p>Pomocí XSLT můžeme vybrat potřebná data z XML souboru a uspořádat je do podoby pro prezentaci uživateli. V našem případě jsme například transformovali XML data ve formě SQL dotazu. Klasickým využitím XSL je obvykle formátování dat ve formě HTML stránek nebo vzácněji ve formě RTF souborů.</p> <p>XSL soubor popisuje šablonu, podle které bude provedena transformace XML dat. Vrátíme-li se k xsl šablonám, lze v XSLT rozlišit následující prvky (směrnice):</p> <table cellspacing="0" cellpadding="4" width="500" border="1"><tbody><tr><td valign="top" width="31%"> <b>direktivy XSL</b> </td><th align="middle" width="69%"> <b>popis</b> </th> </tr><tr><td>xsl: použít šablony</td> <td>Direktiva označující použití odpovídajících šablon pro atribut select = "název šablony"</td> </tr><tr><td>xsl: atribut</td> <td>vytvoří strom atributů a přidá jej do výstupního prvku, název parametru = "název atributu", jmenný prostor je URI jmenného prostoru (prefix jmenného prostoru)</td> </tr><tr><td>xsl: šablona volání</td> <td>volá šablonu, název atributu = "URI do šablony"</td> </tr><tr><td>xsl: vyberte si <br>xsl: kdy <br>xsl: jinak</td> <td>výběr podle podmínky xsl: when expr = "vyhodnocení výrazu ve skriptu", <br>jazyk = "jméno-jazyka" <br>test = "vyhodnocený výraz"</td> </tr><tr><td>xsl: komentář</td> <td>vygeneruje komentář ve výstupním dokumentu</td> </tr><tr><td>xsl: kopírovat <br>xsl: kopie</td> <td>zkopíruje aktuální uzel do výstupního zdroje nebo vloží fragment dokumentu do uzlu, kde atribut select = "název zdrojového uzlu"</td> </tr><tr><td>xsl: prvek</td> <td>vytvoří výstupní prvek podle názvu, název atributu = "název prvku", jmenný prostor = "odkaz na jmenný prostor uri"</td> </tr><tr><td>xsl: pro každého</td> <td>znovu použije šablonu na všechny uzly seznamu uzlů, atribut select určuje seznam uzlů</td> </tr><tr><td>xsl: pokud</td> <td>kontrola stavu, nastavená atributem test jako výraz</td> </tr><tr><td>xsl: zahrnout</td> <td>obsahuje externí šablonu, atribut href = "odkaz URI"</td> </tr><tr><td>xsl: výstup</td> <td>určuje výstup, atribut metody může být "xml", "html" nebo "text"</td> </tr><tr><td>xsl: param</td> <td>určuje hodnotu parametrů, název atributu = "název parametru", select = "hodnota"</td> </tr><tr><td>xsl: instrukce pro zpracování</td> <td>vytvoří instrukci zpracování, název atributu = "název procesu instrukce"</td> </tr><tr><td>xsl: řazení</td> <td>třídí sadu uzlů, atributy select = "název uzlu", datový typ = datový typ ("text" | "číslo" | Qname), pořadí = směr řazení ("vzestupně" | "sestupně")</td> </tr><tr><td>xsl: šablona stylů</td> <td>definuje dokument xsl šablony, je kořenovým prvkem pro XSLT</td> </tr><tr><td>xsl: šablona</td> <td>definuje xsl-šablonu, název atributu = "předpona URI k názvu šablony", match = "označení uzlu, na který je šablona aplikována"</td> </tr><tr><td>xsl: text</td> <td>generuje text do výstupního proudu, atribut disable-output-escaping = "ano" nebo "ne", označuje schopnost generovat znaky ESC</td> </tr><tr><td>xsl: hodnota-of</td> <td>vloží hodnotu vybraného uzlu jako text, atribut select = "ukazatel na uzel", ze kterého je hodnota převzata</td> </tr><tr><td>xsl: proměnná</td> <td>určuje hodnotu mezí proměnných, název atributu = "název proměnné", select = "výpočet hodnoty proměnné"</td> </tr><tr><td>xsl: s-param</td> <td>aplikuje parametr na šablonu, název atributu = "název parametru", select = výraz pro vyhodnocení aktuálního kontextu, výchozí hodnota "."</td> </tr></tbody></table><h2>Závěr</h2> <p>Nakonec je třeba poznamenat, že pomocí standardního analyzátoru XML <i>msxml.dll</i> není jediným nástrojem pro analýzu a tvorbu XML dokumentů. Například k vytvoření dokumentů XML efektivně používejte komponenty <b>TPageProduser</b> a <b>TableProduser</b>... Tento článek však pouze zdůrazňuje šíři a použitelnost modelu DOM v praxi.</p> <p>Autor bude velmi vděčný za vaši zpětnou vazbu k relevanci tématu, obecnému obsahu, stylu prezentace, stejně jako všechny další komentáře, které pomohou dále zlepšit kvalitu psaní sborníku článků a vydání knihy zabývající se téma praktické stránky používání XML dokumentů v e-commerce. Podrobnější informace o praktické stránce používání elektronických dokumentů lze nalézt na stránkách autora www.eDocs.al.ru Plánuje se také umístění zdrojových textů a příkladů na stránky autora.</p> <br> <br> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> </article> <div class="post-bottom"> <div class="post-share"> <script src="//yastatic.net/es5-shims/0.0.2/es5-shims.min.js"></script> <script src="//yastatic.net/share2/share.js"></script> <div class="ya-share2" data-services="vkontakte,facebook,odnoklassniki,moimir" data-counter=""></div> </div> </div> <div class='yarpp-related'> <div class="related-items"> <div class="headline">Nenašli jste odpověď na svou otázku? Podívejte se sem</div> <div class="items"> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/cs/upravlyaemaya-raspredelennaya-arhitektura-arhitektura-raspredelennoi-sistemy-upravleniya-na-osnove-reko.html"><img src="/uploads/e4c78289b8726a7f311fa0aabf5cf29e.jpg" width="120" height="120" alt="Architektura distribuovaného řídicího systému založeného na rekonfigurovatelném multi-pipeline výpočetním prostředí L-Net"прозрачные" распределенные файловые системы" class="related-item__image" / loading=lazy loading=lazy>Architektura distribuovaného řídicího systému založeného na rekonfigurovatelném multi-pipeline výpočetním prostředí L-Net „transparentní“ distribuované systémy souborů</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/cs/skanirovanie-i-otpravka-elektronnoi-pochty-na-hp-laserjet-m5025-stranica.html"><img src="/uploads/c614635382cdebd6920dbfa329f4789a.jpg" width="120" height="120" alt="Stránka pro odesílání e-mailů Vyplňte soubor relay_recipients adresami z Active Directory" class="related-item__image" / loading=lazy loading=lazy>Stránka pro odesílání e-mailů Vyplňte soubor relay_recipients adresami z Active Directory</a> <div class="related-item__comments"><span></span></div> </div> <div class="related-item"> <a class="related-item__title" href="https://appcube.ru/cs/pereklyuchenie-yazyka-na-klaviature-programma-propala-yazykovaya.html"><img src="/uploads/c5be3ecb817093adcd97d7fd3f79ec9f.jpg" width="120" height="120" alt="Chybějící jazyková lišta ve Windows - co dělat?" class="related-item__image" / loading=lazy loading=lazy>Chybějící jazyková lišta ve Windows - co dělat?</a> <div class="related-item__comments"><span></span></div> </div> </div> </div> </div> <div style="text-align: center; margin-top: 15px; margin-bottom: 15px; " id="vanna-1965575812"><div class="adsense"><script type="text/javascript">ga_1();</script></div></div> </main> <aside class="sidebar"> <div class="advices" data-theme="vannapedia_v.3"> <div class="headline"></div> <div class="advices-content"> <img src="/uploads/d3c9c835a316a04f113cf710a2a6243c.jpg" width="120" height="120" alt="Spuštění makra Způsoby spouštění maker" class="advices__image" / loading=lazy loading=lazy> <div class="advices__title" data-id="3334"><a href="https://appcube.ru/cs/sozdanie-i-ispolzovanie-makrokomand-vypolnenie-makrosa-sposoby.html">Spuštění makra Způsoby spouštění maker</a></div> </div> </div> <div class="vk-widget" id="text-3"> <div class="textwidget"><script type="text/javascript" src="//vk.com/js/api/openapi.js?130"></script> <div id="vk_groups"></div> </div> </div> <div class="sidebar-questions"> <div class="headline">Nový</div> <ul> <li><a href="https://appcube.ru/cs/oformlenie-listingov-programm-listing-osnovnoi-programmy-chto-takoe.html" >Výpis hlavního programu Co je to výpis v programování</a></li> <li><a href="https://appcube.ru/cs/ustanovlenie-svyazei-mezhdu-sushchnostyami-proektirovanie-modeli-v-erwin-erwin.html" >Návrh modelu v ERWin Erwin Příklady</a></li> <li><a href="https://appcube.ru/cs/soobshchenie-vasha-tranzakciya-uspeshno-zavershena-chto-takoe-tranzakciya-po.html" >Co je transakce bankovní kartou</a></li> <li><a href="https://appcube.ru/cs/rukovodstvo-po-bystromu-vyboru-ssylki-na-skachivanie-besplatnyh.html" >Průvodce rychlým výběrem (odkazy na stažení bezplatných programů pro výměnu a úpravu ikon) Stáhněte si program pro tvorbu ico</a></li> <li><a href="https://appcube.ru/cs/programma-dlya-ochistki-istorii-kompyutera-udalenie-istorii.html" >Smazání historie prohlížení na internetu</a></li> <li><a href="https://appcube.ru/cs/kak-sozdat-svoi-komiks-sozdanie-komiksov-onlain-programma-gde-est.html" >Vytvářejte komiksy online Program s komiksy</a></li> </ul> </div> <div class="section"> <div id="macire1" style="height:500px;width:240px;" align="center"></div> </div> <div class="section"> <div class="headline">Populární články</div> <ul class="sidebar-posts"> <li><a href="https://appcube.ru/cs/bazovaya-zashchita-pk-kakoi-antivirus-vybrat-ukraincy-otkazyvayutsya.html"><img src="/uploads/8b27640486c2e86bdd989505ace23fdf.jpg" width="80" height="80" alt="Jaký antivirus zvolit: Ukrajinci odmítají ruský software Hackeři nespí" / loading=lazy loading=lazy>Jaký antivirus zvolit: Ukrajinci odmítají ruský software Hackeři nespí</a></li> <li><a href="https://appcube.ru/cs/osnovnye-komandy-postgresql-osnovnye-komandy-postgresql-poisk-i.html"><img src="/uploads/fb3321549c16f1aedad4133f0038b115.jpg" width="80" height="80" alt="Základní příkazy PostgreSQL Vyhledání a změna umístění klastrové instance" / loading=lazy loading=lazy>Základní příkazy PostgreSQL Vyhledání a změna umístění klastrové instance</a></li> <li><a href="https://appcube.ru/cs/kanal-sredizemnoe-i-krasnoe-more-sueckii-kanal-granica-mezhdu-dvumya.html"><img src="/uploads/db9d7a789a0ed701639e7e7630ff91ee.jpg" width="80" height="80" alt="Suezský průplav – hranice mezi dvěma kontinenty" / loading=lazy loading=lazy>Suezský průplav – hranice mezi dvěma kontinenty</a></li> </ul> </div> <div class="section"> <div class="headline">Novinka na webu</div> <ul class="sidebar-posts sidebar-photo"> <li><a href="https://appcube.ru/cs/zaregistrirovannye-19-oktyabrya-v-odnoklassnikah-odnoklassniki.html">Odnoklassniki: Registrace a vytvoření profilu</a></li> <li><a href="https://appcube.ru/cs/e-yavlyaetsya-e-funkcii-e-vyrazheniya-cherez-trigonometricheskie.html">E je. E (funkce E). Výrazy z hlediska goniometrických funkcí</a></li> <li><a href="https://appcube.ru/cs/podrobnyi-katalog-socialnyh-setei-socseti-rossii-seichas-v-soc.html">Sociální sítě Ruska Nyní v sociálních sítích</a></li> <li><a href="https://appcube.ru/cs/neostorozhnyi-foros-otkryt-levoe-menyu-foros-put-ot-aeroporta.html">Otevřete levé menu foros</a></li> <li><a href="https://appcube.ru/cs/analitik-tv-na-yutube-videoanalitika-v-sistemah-videonablyudeniya.html">Video analytika ve video monitorovacích systémech</a></li> </ul> </div> </aside> </div> <footer class="footer"> <nav class="footer__nav"><ul><li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1219"><a href="https://appcube.ru/cs/">Nový</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6692"><a href="https://appcube.ru/cs/pyat-sposobov-proyasnit-situaciyu-deistvennye-uprazhnenie.html">Akční cvičení k vyjasnění a změně situace Vyjasnění situace</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6691"><a href="https://appcube.ru/cs/tatarskaya-klaviatura-dlya-android-download-tatarskaya-klaviatura-for-pc-kak.html">Stáhněte si Tatar Keyboard pro PC Jak psát dopisy v tatarštině</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6689"><a href="https://appcube.ru/cs/procedury-v-paskale-prezentaciya-procedury-i-funkcii-v-paskale.html">Procedury a funkce v Pascalu</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6688"><a href="https://appcube.ru/cs/sreda-programmirovaniya-paskal-avs-prezentaciya-yazyk-programmirovaniyaabc-pascal-prezentaciya-k-uroku.html">Prezentace programovacího jazyka ABC Pascal na lekci informatiky a ICT na dané téma</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1230"><a href="https://appcube.ru/cs/">Oblíbený</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6687"><a href="https://appcube.ru/cs/prezentaciya-po-biologii-na-temu-virusy-i-fagi-10-klass-prezentaciya.html">Biologická prezentace na téma "Viry a fágy" (10. stupeň) Typování fágů S</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6686"><a href="https://appcube.ru/cs/chto-takoe-rastrovaya-grafika-i-gde-e-primenenie-rastrovaya-grafika-obshchie.html">Rastrová grafika, obecné informace - přednáška Pojem rastrového obrázku</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6685"><a href="https://appcube.ru/cs/prezentaciya-na-temu-pamyat-kompyutera-vnutrennyaya-pamyat.html">Vnitřní paměť počítače Disky Blu-ray s vysokou hustotou</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6684"><a href="https://appcube.ru/cs/postoyannyi-elektricheskii-tok-ponyatie-ob-elektricheskom-toke.html">Prezentace o fyzice "Elektrický proud v různých prostředích" Světelná prezentace na téma elektrický proud</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6683"><a href="https://appcube.ru/cs/razrabotka-uroka-i-prezentaciya-po-okruzhayushchemu-miru-pochemu-listya.html">Aneb role zelených listů pro rostliny a lidi“</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6682"><a href="https://appcube.ru/cs/pochemu-listya-zelenye-prezentaciya-prezentaciya-pochemu-rasteniya-zelenye.html">Prezentace, proč jsou rostliny zelené</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6680"><a href="https://appcube.ru/cs/veb-kvest-kak-sposob-aktivizacii-uchebnoi-deyatelnosti-uchashchihsya.html">Web quest jako způsob zkvalitnění vzdělávacích aktivit studentů Tvorba web questů</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6679"><a href="https://appcube.ru/cs/statisticheskaya-obrabotka-dannyh-i-ee-osobennosti-prezentaciya-na.html">Prezentace na téma "prvky statistického zpracování dat" Hlavní cíle studia prvků statistiky</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-1236"><a href="https://appcube.ru/cs/">Doporučeno</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6678"><a href="https://appcube.ru/cs/istoriya-sozdaniya-dvoichnogo-kodirovaniya-prezentaciya-dvoichnoe.html">Binární kódování Informace a informační procesy</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6677"><a href="https://appcube.ru/cs/ustanovka-plansheta-apple-ipad-v-avtomobil-derzhateli-dlya-ipad-ipad-air-ipad.html">Držáky na iPad, iPad Air, iPad mini do auta s montáží do CD slotu, na palubní desku, na hlavovou opěrku Držáky do auta na iPad mini</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6676"><a href="https://appcube.ru/cs/zalipaet-knopka-gromkosti-na-telefone-lyuft-knopok-gromkosti-i-vklyucheniya-na.html">Vůle tlačítek hlasitosti a napájení na iPhone - manželství nebo ne?</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6675"><a href="https://appcube.ru/cs/setevaya-karta-ne-vidit-kabel-sposoby-resheniya-problemy.html">Síťová karta nevidí kabel: pokyny k řešení problému Co dělat, když nefunguje internetový kabel</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6674"><a href="https://appcube.ru/cs/mobilnoe-prilozhenie-lenta-gipermarket-skachat-na-aifon-stocard.html">StoCard a Wallet: slevové karty z aplikace</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6672"><a href="https://appcube.ru/cs/kak-delaetsya-skrinshoty-na-aipade-kak-sdelat-skrinshot-na-iphone.html">Jak pořídit snímek obrazovky na iPhone, iPad nebo iPod pěti způsoby Jak na to</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6671"><a href="https://appcube.ru/cs/znakomstva-bez-registracii-premium-i-vip-akkauntov-smski-molodoi-i-besplatnyi.html">Smski: mladý a svobodný</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6670"><a href="https://appcube.ru/cs/svetofor-s-dvumya-krasnymi-signaly-svetofora-pravila-dorozhnogo.html">Semafor se dvěma červenými</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-6898"><a href="https://appcube.ru/cs/">O webu</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6900"><a href="">O webu</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6901"><a href="">Reklama na webu</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-6902"><a href="">Kontakty</a></li> </ul> </li> </ul></nav> <div class="footer-bottom"> <div class="footer-left"> <div class="foot__logo"> <div class="footer__logo-sitename">appcube.ru <span>ru</span></div> </div> <style> .foot__logo { min-height: 35px; margin: 0 0 11px -79px; padding: 9px 0 0 79px; text-decoration: none; } </style> <p>© 2021 Všechna práva vyhrazena</p> <p>Web o počítačích</p> <ul class="footer-bottom__nav"> <li><a href="" >Reklama na projektu</a></li> </ul> </div> <div class="footer-buttons"> </div> <ul class="footer__soc"> <li><a href="http://vk.com/" target="_blank" class="vk">V kontaktu s</a></li> <li>spolužáci</li> <li><a href="http://www.facebook.com/" target="_blank" class="fb">Facebook</a></li> <li><a href="https://twitter.com/" target="_blank" class="twi">Cvrlikání</a></li> </ul> <div class="footer-right"> <div class="footer__note"></div> <div class="footer__counters" id="text-2"> <div class="textwidget"></div> </div> </div> </div> </footer> </div> </div> <link rel='stylesheet' id='wp-lightbox-bank.css-css' href='/wp-content/plugins/wp-lightbox-bank/assets/css/wp-lightbox-bank.css?ver=4.8.3' type='text/css' media='all' /> <script type='text/javascript' src='https://appcube.ru/wp-content/themes/vannapedia_v.3/js/scripts.js'></script> <script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=4.8.3'></script> <script type='text/javascript' src='/assets/scripts1.js'></script> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "smooth_scroll":"1"} ; /* ]]> */ </script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript'> var q2w3_sidebar_options = new Array(); q2w3_sidebar_options[0] = { "sidebar" : "sidebar-fixed", "margin_top" : 10, "margin_bottom" : 0, "stop_id" : "respond", "screen_max_width" : 0, "screen_max_height" : 0, "width_inherit" : false, "refresh_interval" : 1500, "window_load_hook" : false, "disable_mo_api" : false, "widgets" : ['text-4'] } ; </script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/q2w3-fixed-widget/js/q2w3-fixed-widget.min.js?ver=5.0.4'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.8.3'></script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/wp-lightbox-bank/assets/js/wp-lightbox-bank.js?ver=4.8.3'></script> <script type='text/javascript' src='https://appcube.ru/wp-content/plugins/akismet/_inc/form.js?ver=4.0'></script> </body> </html>