<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>排他的 XML 正準化仕様 (大文字)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> 
<dfn><ruby>排他的<rt>はいたてき</rt><rt xml:lang="en">Exclusive</rt></ruby> XML <ruby>正準化<rt>せいじゅんか</rt><rt xml:lang="en">Canonicalization</rt></ruby></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>の一種の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準形</anchor>を作成する方法を規定した仕様です。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準XML</anchor> 仕様により <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>の一部分の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準形</anchor>を作成すると、
その外側の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間宣言</anchor>や <code class="XMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">xml</anchor>:<var>*</var></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">継承</anchor>されるため、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">電子署名</anchor>など一部の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>で不都合が生じていました。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化</anchor>仕様による<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準形</anchor>の作成方法を使えば、
このような影響を排除できます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 仕様書:<ul><li><cite>Exclusive XML Canonicalization Version 1.0</cite> <ul><li>最新版
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/xml-exc-c14n/">http://www.w3.org/TR/xml-exc-c14n/</anchor-external></li></ul><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<cite xml:lang="en">Exclusive XML Canonicalization Version 1.0</cite>, <time>2018-10-09T13:20:56.000Z</time>, <time>2021-05-18T01:02:53.020Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/">https://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/</anchor-external><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正誤表</anchor>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/2002/07/xml-exc-c14n-errata">http://www.w3.org/2002/07/xml-exc-c14n-errata</anchor-external></li></ul></li></ol></li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <strong>応用</strong></p><p>排他的 XML 正準化が想定している<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準XML</anchor> と似ていますが、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> 
的文脈が変わり得るものです。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">排他的 XML 正準化 1.0 1.2</src></p><p>例えば、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">署名</anchor>のために別の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の中にある<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>片を入れると、
その入れた中身にまで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間宣言</anchor>が適用されてしまうので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準XML</anchor> では中身だけ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準化</anchor>しても、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間宣言</anchor>まで含まれてしまいます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化</anchor>はこの問題に対処するために開発されました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 例えば、<pre class="XML example code">   <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="n1:elem1 xmlns:n1=&quot;http://b.example&quot;">n1:elem1 xmlns:n1=&quot;http://b.example&quot;</anchor-external>
       content
   &lt;/n1:elem1&gt;</pre>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">封筒</anchor>に包み、<pre class="XML example code">   <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="n0:pdu xmlns:n0=&quot;http://a.example&quot;">n0:pdu xmlns:n0=&quot;http://a.example&quot;</anchor-external>
      <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="n1:elem1 xmlns:n1=&quot;http://b.example&quot;">n1:elem1 xmlns:n1=&quot;http://b.example&quot;</anchor-external>
          content
      &lt;/n1:elem1&gt;
   &lt;/n0:pdu&gt;</pre>とした<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>を転送したとします。転送先で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">封筒</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容</anchor>を
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">式</anchor><pre class="XPath example code">(//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1]</pre>で選択し、 (素の) <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準XML</anchor>
化すると、<pre class="XML example code">   <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="n1:elem1 xmlns:n0=&quot;http://a.example&quot; xmlns:n1=&quot;http://b.example&quot;">n1:elem1 xmlns:n0=&quot;http://a.example&quot; xmlns:n1=&quot;http://b.example&quot;</anchor-external>
       content
   &lt;/n1:elem1&gt;</pre>のようになります。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">排他的 XML 正準化 1.0 2.1</src>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">封筒</anchor>のための<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間</anchor>が残ってしまいます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化</anchor>すると、<pre class="XML example code">   <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="n1:elem1 xmlns:n1=&quot;http://b.example&quot;">n1:elem1 xmlns:n1=&quot;http://b.example&quot;</anchor-external>
       content
   &lt;/n1:elem1&gt;</pre>となります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <strong>制約</strong></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準XML</anchor> と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化</anchor>の違いは、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化</anchor>の利点 (というか目的)
であると同時に、欠点でもあります。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化</anchor>には2つの欠点があります。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">排他的 XML 正準化 1.0 1.3</src><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書部分集合</anchor>の外 (かつ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">祖先</anchor>) の
<code class="XMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">xml</anchor>:<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lang</anchor></code>、
<code class="XMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">xml</anchor>:<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">space</anchor></code>、
<code class="XMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">xml</anchor>:<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">base</anchor></code>
は (本来<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">継承</anchor>されますが) 失われます。
予め<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書部分集合</anchor>内の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>に明示しておくしかありません。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書部分集合</anchor>の外 (かつ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">祖先</anchor>) で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>されている、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">可視的利用</anchor>されていない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>の関連付けは失われます。
例えば <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">式</anchor>でしか使われていない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">宣言</anchor>は失われます。
予め<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書部分集合</anchor>内の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>に明示しておくか、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">包括的名前空間接頭辞並び</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前空間接頭辞</anchor>を含めておく必要があります。</li></ul></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>排他的 XML 正準化 (小文字)</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end></p><blockquote><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用語</anchor><dfn><ruby>排他的<rt>exclusive</rt></ruby> XML <ruby>正準化<rt>せいじゅんか</rt><rt xml:lang="en">canonicalization</rt></ruby></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書部分集合</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化法</anchor>を適用する処理を指します。</p></blockquote><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">出典: <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="IW" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="XC14N:&quot;#def-exclusive-XML-canonicalization&quot;">IW:XC14N:&quot;#def-exclusive-XML-canonicalization&quot;</anchor-external></comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <strong>識別</strong></p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XMLデジタル署名</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML暗号化</anchor>の
<code class="XMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Transform</anchor></code> や
<code class="XMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CanonicalizationMethod</anchor></code>
には、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化</anchor>を表す次の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor>
を指定できます <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">排他的 XML 正準化 1.0 4.</src>:</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">http://www.w3.org/2001/10/xml-exc-c14n#</anchor></code>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">注釈</anchor>なし)</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">http://www.w3.org/2001/10/xml-exc-c14n#WithComments</anchor></code>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">注釈</anchor>あり)</li></ul><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準XML</anchor> と同様、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">注釈宣言</anchor>を残すか否かで2種類あります。</comment-p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">包括的名前空間接頭辞並び</anchor><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>は、
<code class="XMLe" xml:lang="en"><qn xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">InclusiveNamespaces</anchor><nsuri><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">http://www.w3.org/2001/10/xml-exc-c14n#</anchor></nsuri></qn></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>で指定できます。</p></section><section><h1>歴史</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <cite xml:lang="en">rfc3741</cite>, <time>2021-05-18T01:00:39.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://datatracker.ietf.org/doc/html/rfc3741">https://datatracker.ietf.org/doc/html/rfc3741</anchor-external><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <cite>RFC Errata Report » RFC Editor</cite>, <time>2021-05-18T01:02:21.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/errata_search.php?rfc=3741&amp;rec_status=0">https://www.rfc-editor.org/errata_search.php?rfc=3741&amp;rec_status=0</anchor-external></li></ul></li></ul></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RDF/XML</anchor> (2004年版) と <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RDFa 1.1</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rdf:XMLLiteral</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">直列化</anchor>のために<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">排他的XML正準化1.0</anchor> を使っています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RDF 1.1</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RDF/XML</anchor> は使っていません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <cite xml:lang="en">SAML Specifications | SAML XML.org</cite>
( (<time>2014-09-02 22:28:44 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://saml.xml.org/saml-specifications">http://saml.xml.org/saml-specifications</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <cite xml:lang="en">rfc4154</cite>, <time>2021-07-14T04:02:46.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://datatracker.ietf.org/doc/html/rfc4154#section-5.8.1">https://datatracker.ietf.org/doc/html/rfc4154#section-5.8.1</anchor-external></p></section></body></html>