Passa al contenuto principale

Appendix A. HTTP Problems and XML (Problemi HTTP e XML)

Alcune API basate su HTTP utilizzano XML [W3C.REC-xml-20081126] come convenzione di formato principale. Tali API possono esprimere i dettagli del problema utilizzando il formato definito in questa appendice.

Lo schema RELAX NG [ISO-19757-2] per il formato XML è il seguente. Tenere presente che questo schema è inteso solo come documentazione e non come schema normativo che cattura tutti i vincoli del formato XML. Inoltre, sarebbe possibile utilizzare altri linguaggi di schema XML per definire un insieme simile di vincoli (a seconda delle caratteristiche del linguaggio di schema scelto).

default namespace ns = "urn:ietf:rfc:7807"

start = problem

problem =
element problem {
( element type { xsd:anyURI }?
& element title { xsd:string }?
& element detail { xsd:string }?
& element status { xsd:positiveInteger }?
& element instance { xsd:anyURI }? ),
anyNsElement
}

anyNsElement =
( element ns:* { anyNsElement | text }
| attribute * { text })*

Il tipo di media per questo formato è application/problem+xml.

Gli array e gli oggetti di estensione vengono serializzati nel formato XML considerando un elemento contenente uno o più figli come rappresentante un oggetto, ad eccezione degli elementi che contengono solo elementi figlio denominati i, che sono considerati array. Ad esempio, l'esempio precedente appare in XML come segue:

HTTP/1.1 403 Forbidden
Content-Type: application/problem+xml
Content-Language: en

<?xml version="1.0" encoding="UTF-8"?>
<problem xmlns="urn:ietf:rfc:7807">
<type>https://example.com/probs/out-of-credit</type>
<title>You do not have enough credit.</title>
<detail>Your current balance is 30, but that costs 50.</detail>
<instance>https://example.net/account/12345/msgs/abc</instance>
<balance>30</balance>
<accounts>
<i>https://example.net/account/12345</i>
<i>https://example.net/account/67890</i>
</accounts>
</problem>

Si noti che questo formato utilizza un namespace XML. Questo serve principalmente per consentire di incorporarlo in altri formati basati su XML; non implica che possa o debba essere esteso con elementi o attributi in altri namespace. Lo schema RELAX NG consente esplicitamente solo elementi dall'unico namespace utilizzato nel formato XML. Tutti gli array e gli oggetti di estensione DEVONO (MUST) essere serializzati nel markup XML utilizzando solo quel namespace.

Quando si utilizza il formato XML, è possibile incorporare un'istruzione di elaborazione XML nell'XML che istruisce i client a trasformare l'XML, utilizzando il codice XSLT referenziato [W3C.REC-xml-stylesheet-20101028]. Se questo codice sta trasformando l'XML in (X)HTML, allora è possibile fornire il formato XML, e tuttavia avere client capaci di eseguire la trasformazione che visualizzano (X)HTML user-friendly che viene renderizzato e visualizzato sul client. Si noti che quando si utilizza questo metodo, è consigliabile utilizzare XSLT 1.0 al fine di massimizzare il numero di client capaci di eseguire il codice XSLT.