Appendix A. HTTP Problems and XML (Problèmes HTTP et XML)
Certaines API basées sur HTTP utilisent XML [W3C.REC-xml-20081126] comme convention de format principal. De telles API peuvent exprimer les détails du problème en utilisant le format défini dans cette annexe.
Le schéma RELAX NG [ISO-19757-2] pour le format XML est le suivant. Gardez à l'esprit que ce schéma n'est destiné qu'à la documentation et non comme un schéma normatif qui capture toutes les contraintes du format XML. De plus, il serait possible d'utiliser d'autres langages de schéma XML pour définir un ensemble similaire de contraintes (en fonction des fonctionnalités du langage de schéma choisi).
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 })*
Le type de média pour ce format est application/problem+xml.
Les tableaux et objets d'extension sont sérialisés dans le format XML en considérant qu'un élément contenant un ou plusieurs enfants représente un objet, sauf pour les éléments qui ne contiennent que des éléments enfants nommés i, qui sont considérés comme des tableaux. Par exemple, l'exemple ci-dessus apparaît en XML comme suit :
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>
Notez que ce format utilise un espace de noms XML. Ceci est principalement pour permettre de l'intégrer dans d'autres formats basés sur XML ; cela n'implique pas qu'il peut ou doit être étendu avec des éléments ou des attributs dans d'autres espaces de noms. Le schéma RELAX NG n'autorise explicitement que les éléments de l'unique espace de noms utilisé dans le format XML. Tous les tableaux et objets d'extension doivent (MUST) être sérialisés dans le balisage XML en utilisant uniquement cet espace de noms.
Lors de l'utilisation du format XML, il est possible d'incorporer une instruction de traitement XML dans le XML qui instruit les clients de transformer le XML, en utilisant le code XSLT référencé [W3C.REC-xml-stylesheet-20101028]. Si ce code transforme le XML en (X)HTML, alors il est possible de servir le format XML, et pourtant avoir des clients capables d'effectuer la transformation afficher du (X)HTML convivial qui est rendu et affiché au niveau du client. Notez que lors de l'utilisation de cette méthode, il est conseillé d'utiliser XSLT 1.0 afin de maximiser le nombre de clients capables d'exécuter le code XSLT.