Appendix A. HTTP Problems and XML (HTTP 問題と XML)
一部の HTTP ベースの API は XML [W3C.REC-xml-20081126] を主要な形式規約として使用します。そのような API は、この附属書で定義された形式を使用して問題詳細を表現できます。
XML 形式の RELAX NG スキーマ [ISO-19757-2] は以下のとおりです。このスキーマはドキュメントとしてのみ意図されており、XML 形式のすべての制約をキャプチャする規範的なスキーマではないことに注意してください。また、選択されたスキーマ言語の機能に応じて、他の XML スキーマ言語を使用して同様の制約セットを定義することも可能です。
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 })*
この形式のメディアタイプは application/problem+xml です。
拡張配列とオブジェクトは、子要素を含む要素をオブジェクトを表すものとみなすことによって XML 形式にシリアル化されます。ただし、i という名前の子要素のみを含む要素は配列と見なされます。例えば、上記の例は XML では次のように表示されます:
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>
この形式は XML 名前空間を使用することに注意してください。これは主に他の XML ベースの形式に埋め込むことを可能にするためです。他の名前空間の要素または属性で拡張できるまたは拡張すべきであることを意味するものではありません。RELAX NG スキーマは、XML 形式で使用される 1 つの名前空間からの要素のみを明示的に許可します。すべての拡張配列とオブジェクトは、その名前空間のみを使用して XML マークアップにシリアル化されなければなりません (MUST)。
XML 形式を使用する場合、参照される XSLT コード [W3C.REC-xml-stylesheet-20101028] を使用して XML を変換するようクライアントに指示する XML 処理命令を XML に埋め込むことが可能です。このコードが XML を (X)HTML に変換している場合、XML 形式を提供することが可能であり、変換を実行できるクライアントは、クライアントでレンダリングおよび表示される人間に優しい (X)HTML を表示します。この方法を使用する場合、XSLT コードを実行できるクライアントの数を最大化するために XSLT 1.0 を使用することをお勧めします。