Výukový program XML

XML HOME Úvod do XML XML Jak používat XML strom Syntaxe XML Prvky XML Atributy XML Jmenné prostory XML Zobrazení XML XML HttpRequest XML Parser XML DOM XML XPath XML XSLT XML XQuery XML XLlink XML Validator XML DTD Schéma XML XML server Příklady XML XML kvíz XML certifikát

XML AJAX

Úvod do AJAX AJAX XMLHttp Požadavek AJAX Odpověď AJAX Soubor XML AJAX AJAX PHP AJAX ASP Databáze AJAX Aplikace AJAX Příklady AJAX

XML DOM

Úvod do DOM DOM uzly Přístup k DOM Informace o uzlu DOM Seznam uzlů DOM DOM Traversing Navigace DOM DOM získat hodnoty DOM změnit uzly DOM Remove Nodes DOM nahradit uzly DOM Vytvořte uzly DOM Přidat uzly Klonovací uzly DOM Příklady DOM

Výukový program XPath

Úvod do XPath Uzly XPath Syntaxe XPath osy XPath Operátoři XPath Příklady XPath

Kurz XSLT

Úvod do XSLT Jazyky XSL Transformace XSLT XSLT <šablona> XSLT <hodnota-of> XSLT <pro každého> XSLT <sort> XSLT <if> XSLT <vyberte> Použít XSLT XSLT u klienta XSLT na serveru XSLT Úprava XML Příklady XSLT

Výukový program XQuery

Úvod do XQuery Příklad XQuery XQuery FLWOR HTML XQuery Podmínky XQuery Syntaxe XQuery Přidat XQuery XQuery Select Funkce XQuery

XML DTD

Úvod do DTD Stavební bloky DTD DTD prvky Atributy DTD DTD Elements vs Attr DTD entity Příklady DTD

XSD schéma

Úvod do XSD XSD Jak na to XSD <schéma> XSD prvky XSD atributy Omezení XSD

XSD komplex

XSD prvky XSD Prázdné Pouze prvky XSD Pouze text XSD XSD smíšené XSD indikátory XSD <libovolné> XSD <jakýkoliAtribut> Náhrada XSD Příklad XSD

XSD data

XSD řetězec Datum XSD Číselné XSD XSD Různé XSD reference

Webové služby

Služby XML XML WSDL XML SOAP XML RDF XML RSS

Reference

Typy uzlů DOM Uzel DOM DOM NodeList DOM NamedNodeMap Dokument DOM Prvek DOM Atribut DOM Text DOM DOM CDATA Komentář DOM DOM XMLHttpRequest DOM Parser Prvky XSLT Funkce XSLT/XPath

XML mýdlo


  • SOAP je zkratka pro S imple O bject A ccess P rotocol
  • SOAP je aplikační komunikační protokol
  • SOAP je formát pro odesílání a přijímání zpráv
  • SOAP je nezávislý na platformě
  • SOAP je založen na XML
  • SOAP je doporučení W3C

Proč SOAP?

Pro webové aplikace je důležité, aby mohly komunikovat přes internet.

Nejlepší způsob komunikace mezi aplikacemi je přes HTTP, protože HTTP podporují všechny internetové prohlížeče a servery. SOAP byl vytvořen, aby toho dosáhl.

SOAP poskytuje způsob komunikace mezi aplikacemi běžícími na různých operačních systémech, s různými technologiemi a programovacími jazyky.


Stavební bloky SOAP

Zpráva SOAP je běžný dokument XML obsahující následující prvky:

  • Element Envelope, který identifikuje dokument XML jako zprávu SOAP
  • Prvek záhlaví, který obsahuje informace záhlaví
  • Element Body, který obsahuje informace o volání a odpovědi
  • Element Fault obsahující chyby a informace o stavu

Všechny výše uvedené prvky jsou deklarovány ve výchozím jmenném prostoru pro obálku SOAP:

http://www.w3.org/2003/05/soap-envelope/

a výchozí jmenný prostor pro kódování SOAP a datové typy je:

http://www.w3.org/2003/05/soap-encoding


Pravidla syntaxe

Zde jsou některá důležitá pravidla syntaxe:

  • Zpráva SOAP MUSÍ být kódována pomocí XML
  • Zpráva SOAP MUSÍ používat jmenný prostor SOAP Envelope
  • Zpráva SOAP NESMÍ obsahovat odkaz na DTD
  • Zpráva SOAP NESMÍ obsahovat instrukce pro zpracování XML


Zpráva Skelet SOAP

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

Element obálky SOAP

Požadovaný prvek SOAP Envelope je kořenovým prvkem zprávy SOAP. Tento prvek definuje dokument XML jako zprávu SOAP.

Příklad

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

Jmenný prostor xmlns:soap

Všimněte si jmenného prostoru xmlns:soap ve výše uvedeném příkladu. Vždy by měl mít hodnotu: „http://www.w3.org/2003/05/soap-envelope/“.

Jmenný prostor definuje obálku jako SOAP obálku.

Pokud je použit jiný jmenný prostor, aplikace vygeneruje chybu a zprávu zahodí.


Atribut encodingStyle

Atribut encodingStyle se používá k definování datových typů použitých v dokumentu. Tento atribut se může objevit na libovolném prvku SOAP a vztahuje se na obsah prvku a všechny podřízené prvky.

Zpráva SOAP nemá žádné výchozí kódování.

Syntax

soap:encodingStyle="URI"

Příklad

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

Prvek záhlaví SOAP

Volitelný prvek záhlaví SOAP obsahuje informace specifické pro aplikaci (jako je ověření, platba atd.) o zprávě SOAP.

Pokud je přítomen prvek Záhlaví, musí to být první podřízený prvek prvku Obálka.

Poznámka: Všechny bezprostřední podřízené prvky prvku Header musí být kvalifikované pro jmenný prostor.

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

Výše uvedený příklad obsahuje záhlaví s prvkem „Trans“, atribut „mustUnderstand“ s hodnotou 1 a hodnotou 234.

SOAP definuje tři atributy ve výchozím jmenném prostoru. Tyto atributy jsou: mustUnderstand, herec a encodingStyle.

Atributy definované v hlavičce SOAP definují, jak by měl příjemce zpracovat zprávu SOAP.


Atribut mustUnderstand

Atribut SOAP mustUnderstand lze použít k označení, zda je záznam záhlaví pro příjemce povinný nebo volitelný.

Pokud přidáte mustUnderstand="1" k podřízenému prvku prvku Header, znamená to, že příjemce zpracovávající záhlaví musí prvek rozpoznat. Pokud přijímač nerozpozná prvek, selže při zpracování záhlaví.

Syntax

soap:mustUnderstand="0|1"

Příklad

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

Atribut herce

Zpráva SOAP může cestovat od odesílatele k příjemci průchodem různých koncových bodů podél cesty zprávy. Ne všechny části zprávy SOAP však mohou být určeny pro konečný koncový bod, místo toho může být určena pro jeden nebo více koncových bodů na cestě zprávy.

Atribut aktéra SOAP se používá k adresování prvku Header ke konkrétnímu koncovému bodu.

Syntax

soap:actor="URI"

Příklad

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Header>
  <m:Trans xmlns:m="https://www.w3schools.com/transaction/"
  soap:actor="https://www.w3schools.com/code/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

Atribut encodingStyle

Atribut encodingStyle se používá k definování datových typů použitých v dokumentu. Tento atribut se může objevit na libovolném prvku SOAP a bude se vztahovat na obsah tohoto prvku a všechny podřízené prvky.

Zpráva SOAP nemá žádné výchozí kódování.

Syntax

soap:encodingStyle="URI"

Element těla SOAP

Požadovaný prvek SOAP Body obsahuje skutečnou zprávu SOAP určenou pro konečný koncový bod zprávy.

Bezprostřední podřízené prvky prvku SOAP Body mohou být kvalifikované pro jmenný prostor.

Příklad

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="https://www.w3schools.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

Výše uvedený příklad požaduje cenu jablek. Všimněte si, že výše uvedené prvky m:GetPrice a Item jsou prvky specifické pro aplikaci. Nejsou součástí jmenného prostoru SOAP.

Odpověď SOAP by mohla vypadat nějak takto:

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


Prvek chyby SOAP

Volitelný prvek SOAP Fault se používá k označení chybových zpráv.

Element Fault SOAP uchovává chyby a informace o stavu pro zprávu SOAP.

Pokud je přítomen prvek Fault, musí se objevit jako podřízený prvek prvku Body. Element Fault se může ve zprávě SOAP objevit pouze jednou.

Prvek chyby SOAP má následující dílčí prvky:

Sub Element Description
<faultcode> A code for identifying the fault
<faultstring> A human readable explanation of the fault
<faultactor> Information about who caused the fault to happen
<detail>

Holds application specific error information related to the Body element

Chybové kódy SOAP

Níže definované hodnoty chybového kódu musí být použity v prvku chybového kódu při popisu poruch:

Error Description
VersionMismatch Found an invalid namespace for the SOAP Envelope element
MustUnderstand An immediate child element of the Header element, with the mustUnderstand attribute set to "1", was not understood
Client The message was incorrectly formed or contained incorrect information
Server There was a problem with the server so the message could not proceed

Protokol HTTP

HTTP komunikuje přes TCP/IP. HTTP klient se připojuje k HTTP serveru pomocí TCP. Po navázání spojení může klient odeslat na server zprávu HTTP požadavku:

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

Server poté požadavek zpracuje a odešle HTTP odpověď zpět klientovi. Odpověď obsahuje stavový kód, který označuje stav požadavku:

200 OK
Content-Type: text/plain
Content-Length: 200

Ve výše uvedeném příkladu server vrátil stavový kód 200. Toto je standardní kód úspěchu pro HTTP.

Pokud server nemohl dekódovat požadavek, mohl vrátit něco takového:

400 Bad Request
Content-Length: 0

SOAP vazba

Specifikace SOAP definuje strukturu zpráv SOAP, nikoli způsob jejich výměny. Tato mezera je vyplněna tím, co se nazývá „SOAP Bindings“. Vazby SOAP jsou mechanismy, které umožňují efektivní výměnu zpráv SOAP pomocí transportního protokolu.

Většina implementací SOAP poskytuje vazby pro běžné transportní protokoly, jako je HTTP nebo SMTP.

HTTP je synchronní a široce používaný. Požadavek SOAP HTTP specifikuje alespoň dvě HTTP hlavičky: Content-Type a Content-Length.

SMTP je asynchronní a používá se v krajním případě nebo ve zvláštních případech.

Java implementace SOAP obvykle poskytují specifickou vazbu pro protokol JMS (Java Messaging System).


Typ obsahu

Záhlaví Content-Type pro požadavek a odpověď SOAP definuje typ MIME pro zprávu a kódování znaků (volitelné) použité pro tělo XML požadavku nebo odpovědi.

Syntax

Content-Type: MIMEType; charset=character-encoding

Příklad

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Obsah-délka

Záhlaví Content-Length pro požadavek a odpověď SOAP určuje počet bajtů v těle požadavku nebo odpovědi.

Syntax

Content-Length: bytes

Příklad

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

Příklad SOAP

V níže uvedeném příkladu je na server odeslán požadavek GetStockPrice. Požadavek má parametr StockName a parametr Cena, které budou vráceny v odpovědi. Jmenný prostor pro funkci je definován v „http://www.example.org/stock“.

Žádost SOAP:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

Odpověď SOAP:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>