メインコンテンツまでスキップ

Appendix B. HTTP Problems and XML (HTTP 問題と XML)

XML [XML] を使用する HTTP ベースの API は, この付録で定義されている形式を使用して問題詳細を表現できます。

XML 形式の RELAX NG スキーマ [ISO-19757-2] は次のとおりです:

   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 })*

このスキーマは文書としてのみ意図されており, XML 形式のすべての制約を捕捉する規範的なスキーマではないことに注意してください。他の XML スキーマ言語を使用して, 類似の制約セットを定義することが可能です (選択したスキーマ言語の機能に依存します)。

この形式のメディアタイプは "application/problem+xml" です。

拡張配列とオブジェクトは, 子または子要素を含む要素をオブジェクトとして表すことによって XML 形式にシリアライズされます。ただし, "i" という名前の 1 つ以上の子要素のみを含む要素は配列と見なされます。例えば, 上記の例は 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 形式を使用する場合, 参照される XSL 変換 (XSLT) コード [XSLT] を使用して XML を変換するようクライアントに指示する XML 処理命令を XML に埋め込むことが可能です。このコードが XML を (X)HTML に変換している場合, XML 形式を提供することが可能ですが, 変換を実行できるクライアントは, クライアントでレンダリングおよび表示される人間に優しい (X)HTML を表示できます。この方法を使用する場合, XSLT コードを実行できるクライアントの数を最大化するために XSLT 1.0 を使用することをお勧めします。