Samouczek XML

Strona główna XML Wprowadzenie do XML XML Jak używać Drzewo XML Składnia XML Elementy XML Atrybuty XML Przestrzenie nazw XML Wyświetlacz XML Żądanie HTTP XML Parser XML XML DOM XML XPath XML XSLT XML XQuery XML XLink Walidator XML XML DTD Schemat XML Serwer XML Przykłady XML Quiz XML Certyfikat XML

XML AJAX

Wprowadzenie do AJAX AJAX XMLHttp Żądanie AJAX Odpowiedź AJAX Plik XML AJAX AJAX PHP ASP AJAX Baza danych AJAX Aplikacje AJAX Przykłady AJAX

XML DOM

Wprowadzenie do DOM Węzły DOM Dostęp do DOM Informacje o węźle DOM Lista węzłów DOM Przechodzenie DOM Nawigacja DOM DOM Uzyskaj wartości Zmiana węzłów DOM DOM Usuń węzły DOM Zamień węzły DOM Utwórz węzły DOM Dodaj węzły Węzły klonowania DOM Przykłady DOM

Samouczek XPath

Wprowadzenie do XPath Węzły XPath Składnia XPath Osie XPath Operatorzy XPath Przykłady XPath

Samouczek XSLT

Wprowadzenie XSLT Języki XSL Transformacja XSLT XSLT <szablon> XSLT <wartość-z> XSLT <dla każdego> XSLT <sortuj> XSLT <jeśli> XSLT <wybierz> XSLT Zastosuj XSLT na kliencie XSLT na serwerze XSLT Edytuj XML Przykłady XSLT

Samouczek XQuery

Wprowadzenie do XQuery Przykład XQuery XQuery FLWOR XQuery HTML Warunki XQuery Składnia XQuery XQuery Dodaj XQuery Wybierz Funkcje XQuery

XML DTD

Wprowadzenie do DTD Bloki konstrukcyjne DTD Elementy DTD Atrybuty DTD Elementy DTD a Attr Jednostki DTD Przykłady DTD

Schemat XSD

Wprowadzenie do XSD XSD Jak to zrobić XSD <schemat> Elementy XSD Atrybuty XSD Ograniczenia XSD

Kompleks XSD

Elementy XSD XSD Pusty Tylko elementy XSD Tylko tekst XSD Mieszane XSD Wskaźniki XSD XSD <dowolny> XSD <dowolnyAtrybut> Zastąpienie XSD Przykład XSD

Dane XSD

XSD ciąg Data XSD Numeryczne XSD XSD Różne Odniesienie XSD

Usługi internetowe

Usługi XML XML WSDL MYDŁO XML XML RDF XML RSS

Bibliografia

Typy węzłów DOM Węzeł DOM Lista węzłów DOM DOM NamedNodeMap Dokument DOM Element DOM Atrybut DOM Tekst DOM DOM CDATA Komentarz DOM DOM XMLHttpRequest Analizator DOM Elementy XSLT Funkcje XSLT/XPath

Mydło XML


  • SOAP oznacza S imple Object Access Protocol _ _
  • SOAP to protokół komunikacyjny aplikacji
  • SOAP to format do wysyłania i odbierania wiadomości
  • SOAP jest niezależny od platformy
  • SOAP jest oparty na XML
  • SOAP jest rekomendacją W3C

Dlaczego MYDŁO?

Ważne jest, aby aplikacje internetowe mogły komunikować się przez Internet.

Najlepszym sposobem komunikacji między aplikacjami jest HTTP, ponieważ HTTP jest obsługiwany przez wszystkie przeglądarki internetowe i serwery. SOAP został stworzony, aby to osiągnąć.

SOAP zapewnia sposób komunikacji między aplikacjami działającymi w różnych systemach operacyjnych, z różnymi technologiami i językami programowania.


Bloki konstrukcyjne SOAP

Komunikat SOAP to zwykły dokument XML zawierający następujące elementy:

  • Element Koperta, który identyfikuje dokument XML jako wiadomość SOAP
  • Element Header, który zawiera informacje nagłówka
  • Element Body zawierający informacje o wezwaniach i odpowiedziach
  • Element Fault zawierający informacje o błędach i statusie

Wszystkie powyższe elementy są zadeklarowane w domyślnej przestrzeni nazw dla koperty SOAP:

http://www.w3.org/2003/05/koperta-mydlana/

a domyślna przestrzeń nazw dla kodowania SOAP i typów danych to:

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


Zasady składni

Oto kilka ważnych zasad składni:

  • Wiadomość SOAP MUSI być zakodowana przy użyciu XML
  • Wiadomość SOAP MUSI używać przestrzeni nazw SOAP Envelope
  • Wiadomość SOAP NIE może zawierać odniesienia do DTD
  • Wiadomość SOAP NIE może zawierać instrukcji przetwarzania XML


Szkielet SOAP Wiadomość

<?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 koperty z mydłem

Wymagany element Koperta SOAP jest elementem głównym komunikatu SOAP. Ten element definiuje dokument XML jako komunikat SOAP.

Przykład

<?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>

xmlns:przestrzeń nazw mydła

Zwróć uwagę na przestrzeń nazw xmlns:soap w powyższym przykładzie. Powinien zawsze mieć wartość: „http://www.w3.org/2003/05/soap-envelope/”.

Przestrzeń nazw definiuje kopertę jako kopertę SOAP.

Jeśli używana jest inna przestrzeń nazw, aplikacja generuje błąd i odrzuca komunikat.


Atrybut kodowaniaStyle

Atrybut kodowanieStyle służy do definiowania typów danych używanych w dokumencie. Ten atrybut może pojawić się w dowolnym elemencie SOAP i dotyczy zawartości elementu oraz wszystkich elementów podrzędnych.

Komunikat SOAP nie ma domyślnego kodowania.

Składnia

soap:encodingStyle="URI"

Przykład

<?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>

Element nagłówka SOAP

Opcjonalny element SOAP Header zawiera informacje specyficzne dla aplikacji (takie jak uwierzytelnianie, płatność itp.) dotyczące komunikatu SOAP.

Jeśli element Header jest obecny, musi to być pierwszy element podrzędny elementu Envelope.

Uwaga: Wszystkie bezpośrednie elementy podrzędne elementu Header muszą być kwalifikowane w przestrzeni nazw.

<?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>

Powyższy przykład zawiera nagłówek z elementem „Trans”, atrybutem „mustUnderstand” o wartości 1 i wartości 234.

SOAP definiuje trzy atrybuty w domyślnej przestrzeni nazw. Te atrybuty to: mustUnderstand, aktor i encodingStyle.

Atrybuty zdefiniowane w nagłówku SOAP określają, jak odbiorca powinien przetwarzać komunikat SOAP.


Atrybut musi zrozumieć

Atrybut SOAP mustUnderstand może służyć do wskazania, czy wpis nagłówka jest obowiązkowy, czy opcjonalny dla odbiorcy do przetworzenia.

Jeśli dodasz mustUnderstand="1" do elementu podrzędnego elementu Header, oznacza to, że odbiorca przetwarzający Header musi rozpoznać element. Jeśli odbiornik nie rozpozna elementu, nie powiedzie się podczas przetwarzania nagłówka.

Składnia

soap:mustUnderstand="0|1"

Przykład

<?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>

Aktor Atrybut

Komunikat SOAP może podróżować od nadawcy do odbiorcy, przekazując różne punkty końcowe na ścieżce komunikatu. Jednak nie wszystkie części komunikatu SOAP mogą być przeznaczone dla ostatecznego punktu końcowego, zamiast tego mogą być przeznaczone dla jednego lub większej liczby punktów końcowych na ścieżce komunikatu.

Atrybut aktor SOAP służy do adresowania elementu Header do określonego punktu końcowego.

Składnia

soap:actor="URI"

Przykład

<?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>

Atrybut kodowaniaStyle

Atrybut kodowanieStyle służy do definiowania typów danych używanych w dokumencie. Ten atrybut może pojawić się w dowolnym elemencie SOAP i będzie miał zastosowanie do zawartości tego elementu oraz wszystkich elementów podrzędnych.

Komunikat SOAP nie ma domyślnego kodowania.

Składnia

soap:encodingStyle="URI"

Mydło Body Element

Wymagany element treści SOAP zawiera rzeczywisty komunikat SOAP przeznaczony dla ostatecznego punktu końcowego komunikatu.

Bezpośrednie elementy podrzędne elementu treści SOAP mogą być kwalifikowane w przestrzeni nazw.

Przykład

<?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>

Powyższy przykład żąda ceny jabłek. Zauważ, że elementy m:GetPrice i Item powyżej są elementami specyficznymi dla aplikacji. Nie są częścią przestrzeni nazw SOAP.

Odpowiedź SOAP może wyglądać mniej więcej tak:

<?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>


Element błędu SOAP

Opcjonalny element SOAP Fault służy do wskazywania komunikatów o błędach.

Element SOAP Fault zawiera informacje o błędach i stanie dla komunikatu SOAP.

Jeśli element Fault jest obecny, musi pojawić się jako element podrzędny elementu Body. Element Fault może pojawić się tylko raz w komunikacie SOAP.

Element SOAP Fault ma następujące elementy podrzędne:

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

Kody błędów SOAP

Wartości kodu błędu zdefiniowane poniżej muszą być używane w elemencie kodu błędu podczas opisywania błędów:

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

Protokół HTTP

HTTP komunikuje się przez TCP/IP. Klient HTTP łączy się z serwerem HTTP za pomocą protokołu TCP. Po nawiązaniu połączenia klient może wysłać do serwera komunikat żądania HTTP:

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

Serwer następnie przetwarza żądanie i wysyła odpowiedź HTTP z powrotem do klienta. Odpowiedź zawiera kod statusu, który wskazuje status żądania:

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

W powyższym przykładzie serwer zwrócił kod stanu 200. Jest to standardowy kod sukcesu dla HTTP.

Jeśli serwer nie mógł zdekodować żądania, mógł zwrócić coś takiego:

400 Bad Request
Content-Length: 0

Wiązanie SOAP

Specyfikacja SOAP definiuje strukturę komunikatów SOAP, a nie sposób ich wymiany. Tę lukę wypełniają tzw. „wiązania SOAP”. Powiązania SOAP to mechanizmy, które umożliwiają efektywną wymianę komunikatów SOAP za pomocą protokołu transportowego.

Większość implementacji protokołu SOAP zapewnia powiązania dla popularnych protokołów transportowych, takich jak HTTP lub SMTP.

HTTP jest synchroniczny i szeroko stosowany. Żądanie SOAP HTTP określa co najmniej dwa nagłówki HTTP: Content-Type i Content-Length.

SMTP jest asynchroniczny i jest używany w ostateczności lub w szczególnych przypadkach.

Implementacje protokołu SOAP w języku Java zwykle zapewniają określone powiązanie dla protokołu JMS (Java Messaging System).


Typ zawartości

Nagłówek Content-Type żądania i odpowiedzi SOAP definiuje typ MIME wiadomości i kodowanie znaków (opcjonalnie) używane w treści XML żądania lub odpowiedzi.

Składnia

Content-Type: MIMEType; charset=character-encoding

Przykład

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

Długość treści

Nagłówek Content-Length dla żądania i odpowiedzi SOAP określa liczbę bajtów w treści żądania lub odpowiedzi.

Składnia

Content-Length: bytes

Przykład

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

Przykład mydła

W poniższym przykładzie żądanie GetStockPrice jest wysyłane do serwera. Żądanie zawiera parametr StockName oraz parametr Price, który zostanie zwrócony w odpowiedzi. Przestrzeń nazw funkcji jest zdefiniowana w „http://www.example.org/stock”.

Żądanie 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>

Odpowiedź 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>