Esercitazione XML

XML CASA Introduzione XML XML Come usare Albero XML Sintassi XML Elementi XML Attributi XML Spazi dei nomi XML Visualizzazione XML Richiesta HTTP XML Analizzatore XML XML DOM XPath XML XML XSLT XQuery XML XML XLink Validatore XML DTD XML Schema XML Server XML Esempi XML Quiz XML Certificato XML

XML AJAX

Introduzione AJAX AJAX XMLHttp Richiesta AJAX Risposta dell'AJAX File XML AJAX AJAX PHP AJAX ASP Database AJAX Applicazioni AJAX Esempi AJAX

XML DOM

DOM Introduzione Nodi DOM Accesso DOM Informazioni sul nodo DOM Elenco dei nodi DOM DOM attraversando Navigazione DOM DOM Ottieni valori Nodi di modifica DOM DOM Rimuovere i nodi DOM Sostituisci nodi DOM Crea nodi DOM Aggiungi nodi Clonazione dei nodi DOM Esempi DOM

Esercitazione XPath

Introduzione a XPath Nodi XPath Sintassi XPath Assi XPath Operatori XPath Esempi di XPath

Esercitazione XSLT

Introduzione a XSLT Lingue XSL Trasformazione XSLT XSLT <modello> XSLT <valore-di> XSLT <per-ciascuno> XSLT <ordina> XSLT <se> XSLT <scegli> Applicare XSLT XSLT sul Cliente XSLT sul server XSLT Modifica XML Esempi XSLT

Esercitazione XQuery

Introduzione a XQuery Esempio XQuery XQuery FLWOR XQuery HTML Termini di XQuery Sintassi XQuery Aggiungi XQuery XQuery Seleziona Funzioni XQuery

DTD XML

Introduzione alla DTD Blocchi di costruzione DTD Elementi DTD Attributi DTD Elementi DTD vs Attr Entità DTD Esempi di DTD

Schema XSD

Introduzione all'XSD XSD Come fare per XSD <schema> Elementi XSD Attributi XSD Restrizioni XSD

Complesso XSD

Elementi XSD XSD vuoto Solo elementi XSD Solo testo XSD XSD misto Indicatori XSD XSD <qualsiasi> XSD <qualsiasi attributo> Sostituzione XSD Esempio XSD

Dati XSD

Stringa XSD Data XSD Numerico XSD XSD Varie Riferimento XSD

Servizi Web

Servizi XML XML WSDL SAPONE XML XML RDF RSS XML

Riferimenti

Tipi di nodi DOM Nodo DOM Elenco nodi DOM DOM NamedNodeMap Documento DOM Elemento DOM Attributo DOM Testo DOM DOM CDATA Commento DOM DOM XMLHttpRichiesta Analizzatore DOM Elementi XSLT Funzioni XSLT/XPath

Sapone XML


  • SOAP sta per Simple O bject A ccess P rotocol
  • SOAP è un protocollo di comunicazione dell'applicazione
  • SOAP è un formato per inviare e ricevere messaggi
  • SOAP è indipendente dalla piattaforma
  • SOAP è basato su XML
  • SOAP è una raccomandazione del W3C

Perché SAPONE?

È importante che le applicazioni Web siano in grado di comunicare su Internet.

Il modo migliore per comunicare tra le applicazioni è tramite HTTP, poiché HTTP è supportato da tutti i browser e server Internet. SOAP è stato creato per raggiungere questo obiettivo.

SOAP fornisce un modo per comunicare tra applicazioni in esecuzione su diversi sistemi operativi, con diverse tecnologie e linguaggi di programmazione.


Blocchi di costruzione del SAPONE

Un messaggio SOAP è un normale documento XML contenente i seguenti elementi:

  • Un elemento Envelope che identifica il documento XML come messaggio SOAP
  • Un elemento Header che contiene informazioni sull'intestazione
  • Un elemento Body che contiene informazioni sulla chiamata e sulla risposta
  • Un elemento Fault contenente errori e informazioni sullo stato

Tutti gli elementi sopra sono dichiarati nello spazio dei nomi predefinito per la busta SOAP:

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

e lo spazio dei nomi predefinito per la codifica SOAP e i tipi di dati è:

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


Regole di sintassi

Ecco alcune importanti regole di sintassi:

  • Un messaggio SOAP DEVE essere codificato utilizzando XML
  • Un messaggio SOAP DEVE utilizzare lo spazio dei nomi SOAP Envelope
  • Un messaggio SOAP NON deve contenere un riferimento DTD
  • Un messaggio SOAP NON deve contenere istruzioni di elaborazione XML


Messaggio di sapone scheletro

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

L'elemento busta SOAP

L'elemento SOAP Envelope richiesto è l'elemento radice di un messaggio SOAP. Questo elemento definisce il documento XML come un messaggio SOAP.

Esempio

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

Lo spazio dei nomi xmlns:soap

Notare lo spazio dei nomi xmlns:soap nell'esempio sopra. Dovrebbe sempre avere il valore di: "http://www.w3.org/2003/05/soap-envelope/".

Lo spazio dei nomi definisce la busta come busta SOAP.

Se viene utilizzato uno spazio dei nomi diverso, l'applicazione genera un errore ed elimina il messaggio.


L'attributo encodingStyle

L'attributo encodingStyle viene utilizzato per definire i tipi di dati utilizzati nel documento. Questo attributo può apparire su qualsiasi elemento SOAP e si applica al contenuto dell'elemento ea tutti gli elementi figlio.

Un messaggio SOAP non ha una codifica predefinita.

Sintassi

soap:encodingStyle="URI"

Esempio

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

L'elemento di intestazione SOAP

L'elemento opzionale SOAP Header contiene informazioni specifiche dell'applicazione (come autenticazione, pagamento, ecc.) sul messaggio SOAP.

Se l'elemento Header è presente, deve essere il primo elemento figlio dell'elemento Envelope.

Nota: tutti gli elementi figlio immediati dell'elemento Header devono essere qualificati per lo spazio dei nomi.

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

L'esempio sopra contiene un'intestazione con un elemento "Trans", un attributo "mustUnderstand" con un valore di 1 e un valore di 234.

SOAP definisce tre attributi nello spazio dei nomi predefinito. Questi attributi sono: mustUnderstand, attore e encodingStyle.

Gli attributi definiti nell'intestazione SOAP definiscono come un destinatario deve elaborare il messaggio SOAP.


L'attributo mustUnderstand

L'attributo SOAP mustUnderstand può essere utilizzato per indicare se una voce di intestazione è obbligatoria o facoltativa per l'elaborazione da parte del destinatario.

Se aggiungi mustUnderstand="1" a un elemento figlio dell'elemento Header, indica che il destinatario che elabora l'Header deve riconoscere l'elemento. Se il ricevitore non riconosce l'elemento fallirà durante l'elaborazione dell'intestazione.

Sintassi

soap:mustUnderstand="0|1"

Esempio

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

L'attributo attore

Un messaggio SOAP può viaggiare da un mittente a un destinatario passando diversi endpoint lungo il percorso del messaggio. Tuttavia, non tutte le parti di un messaggio SOAP possono essere destinate all'endpoint finale, ma possono essere destinate a uno o più endpoint sul percorso del messaggio.

L'attributo attore SOAP viene utilizzato per indirizzare l'elemento Header a un endpoint specifico.

Sintassi

soap:actor="URI"

Esempio

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

L'attributo encodingStyle

L'attributo encodingStyle viene utilizzato per definire i tipi di dati utilizzati nel documento. Questo attributo può apparire su qualsiasi elemento SOAP e si applicherà al contenuto di quell'elemento ea tutti gli elementi figlio.

Un messaggio SOAP non ha una codifica predefinita.

Sintassi

soap:encodingStyle="URI"

L'elemento del corpo SAPONE

L'elemento SOAP Body richiesto contiene il messaggio SOAP effettivo destinato all'endpoint finale del messaggio.

Gli elementi figlio immediati dell'elemento SOAP Body possono essere qualificati per lo spazio dei nomi.

Esempio

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

L'esempio sopra richiede il prezzo delle mele. Si noti che gli elementi m:GetPrice e Item sopra sono elementi specifici dell'applicazione. Non fanno parte dello spazio dei nomi SOAP.

Una risposta SOAP potrebbe assomigliare a questa:

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


L'elemento di errore del SOAP

L'elemento opzionale SOAP Fault viene utilizzato per indicare i messaggi di errore.

L'elemento SOAP Fault contiene gli errori e le informazioni sullo stato per un messaggio SOAP.

Se è presente un elemento Fault, deve apparire come elemento figlio dell'elemento Body. Un elemento Fault può apparire solo una volta in un messaggio SOAP.

L'elemento SOAP Fault ha i seguenti sottoelementi:

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

Codici di errore del SOAP

I valori del codice di errore definiti di seguito devono essere utilizzati nell'elemento codice di errore quando si descrivono i guasti:

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

Il protocollo HTTP

HTTP comunica su TCP/IP. Un client HTTP si connette a un server HTTP tramite TCP. Dopo aver stabilito una connessione, il client può inviare un messaggio di richiesta HTTP al server:

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

Il server quindi elabora la richiesta e invia una risposta HTTP al client. La risposta contiene un codice di stato che indica lo stato della richiesta:

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

Nell'esempio sopra, il server ha restituito un codice di stato di 200. Questo è il codice di successo standard per HTTP.

Se il server non è stato in grado di decodificare la richiesta, potrebbe aver restituito qualcosa del genere:

400 Bad Request
Content-Length: 0

Rilegatura del SAPONE

La specifica SOAP definisce la struttura dei messaggi SOAP, non il modo in cui vengono scambiati. Questa lacuna è colmata da ciò che viene chiamato "SOAP Bindings". I binding SOAP sono meccanismi che consentono di scambiare efficacemente i messaggi SOAP utilizzando un protocollo di trasporto.

La maggior parte delle implementazioni SOAP fornisce collegamenti per protocolli di trasporto comuni, come HTTP o SMTP.

HTTP è sincrono e ampiamente utilizzato. Una richiesta HTTP SOAP specifica almeno due intestazioni HTTP: Content-Type e Content-Length.

SMTP è asincrono e viene utilizzato in ultima istanza o in casi particolari.

Le implementazioni Java di SOAP di solito forniscono un'associazione specifica per il protocollo JMS (Java Messaging System).


Tipo di contenuto

L'intestazione Content-Type per una richiesta e una risposta SOAP definisce il tipo MIME per il messaggio e la codifica dei caratteri (opzionale) utilizzata per il corpo XML della richiesta o della risposta.

Sintassi

Content-Type: MIMEType; charset=character-encoding

Esempio

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

Contenuto-lunghezza

L'intestazione Content-Length per una richiesta e una risposta SOAP specifica il numero di byte nel corpo della richiesta o della risposta.

Sintassi

Content-Length: bytes

Esempio

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

Un esempio di sapone

Nell'esempio seguente, una richiesta GetStockPrice viene inviata a un server. La richiesta ha un parametro StockName e un parametro Price che verrà restituito nella risposta. Lo spazio dei nomi per la funzione è definito in "http://www.example.org/stock".

Una richiesta di SAPONE:

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>

La risposta di 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>