気の向くままに辿るIT/ICT/IoT
XSLT

【Serialization / シリアライゼーション】XSLT 2.0/XSL Transformations Version2.0/Extensible Stylesheet Language Transformations Version2.0

ホーム前へ次へ
XSLTのシリアライゼーションとは?

【Serialization / シリアライゼーション】XSLT 2.0/XSL Transformations Version2.0/Extensible Stylesheet Language Transformations Version2.0

XSLT 2.0シリアライゼーション

 W3C勧告XSLTバージョンXSLT 2.0の「Sorting / 並べ替え・ソート」

 XSL Transformations (XSLT) Version 2.0 / W3C Recommendation 23 January 2007の目次に沿った日本語訳です。

 当サイト管理人が2009年04月、意訳したものですが、構文解釈の違いや翻訳の違いが含まれるかもしれません。正式文書はW3C 各種仕様書(英語版)である事を予めご了承ください。

<< 19. 最終結果ツリー / Final Result Trees

XSLT 2.0シリアライゼーション目次


20 シリアライゼーション / Serialization
 20.1 文字マップ Character Maps
 20.2 出力エスケープを利用不可能にする Disabling Output Escaping

20 シリアライゼーション

プロセッサは、オクテットのシーケンスとして最終結果ツリーを出力する場合がありますが、 そうする事が出来る事を要求されるわけではありません(参照:21 一致)。 スタイルシート作者は、結果ツリーをどのようにシリアライズしたいのかを明記する為の xsl:output 宣言の利用が可能です。 もし、プロセッサが、最終結果ツリーをシリアライズする場合には、それは、これらの宣言によって記述したようにそうしなければいけません

シリアライザーの出力を管理する規則は、[XSLT と XQuery シリアライゼーション]で定義されます。 シリアライゼーションは、シリアライゼーションパラメータの番号を利用して操作されます。 これらのシリアライゼーションパラメータの値は、 xsl:outputxsl:result-documentxsl:character-map 宣言を利用してスタイルシート内で設定される場合があります。

<!-- カテゴリ:宣言 -->
<xsl:output
  name? = qname
  method? = "xml" | "html" | "xhtml" | "text" | qname-but-not-ncname
  byte-order-mark? = "yes" | "no"
  cdata-section-elements? = qnames
  doctype-public? = string
  doctype-system? = string
  encoding? = string
  escape-uri-attributes? = "yes" | "no"
  include-content-type? = "yes" | "no"
  indent? = "yes" | "no"
  media-type? = string
  normalization-form? = "NFC" | "NFD" | "NFKC" |
"NFKD" | "fully-normalized" | "none" | nmtoken
  omit-xml-declaration? = "yes" | "no"
  standalone? = "yes" | "no" | "omit"
  undeclare-prefixes? = "yes" | "no"
  use-character-maps? = qnames
  version? = nmtoken />

xsl:output 宣言は、オプションです; もし、利用した場合には、それは、常にスタイルシートモジュール内で top-level 要素として現れなければいけません

スタイルシートは、多種多様な xsl:output 宣言を含む場合、 そしてまた、 xsl:output 宣言をも含むスタイルシートモジュールを含むか、または、取り込む場合があります。 xsl:output 宣言の名前は、もしあれば、その name 属性の値です。

[定義:  スタイルシートにある全ての xsl:output 宣言は、名前付き出力定義にまとめられる同じ名前を共有します; 存在しない名前を持つそれらは、単独の名無し出力定義にまとめられます。 ]

スタイルシートは、常に、名無し出力定義を含みます; 名無し xsl:output 宣言の欠如では、もし、スタイルシートが、 存在しない属性を持っている xsl:output 宣言を含んだ場合には、 名無し出力定義は、利用されるであろうそれと同等です。

名前付き出力定義は、 その名前が、 xsl:result-document 要素の中で利用した format 属性とマッチする際に利用されます。 名無し出力定義は、 xsl:result-document 要素が、 format 属性を省略する際に利用されます。 それはまた、暗黙の xsl:result-document 要素の欠如の中で暗黙のうちに作成される 最終結果ツリーをシリアライズする際に利用されます。

出力定義を作り上げる全ての xsl:output 要素は、有効にマージされます。 値が、 namespace-sensitive であるそれらの属性において、マージは、語彙的なQNameが、 拡張QNameに変換された後に行われます。 cdata-section-elements 属性においては、その出力定義は、 xsl:output 宣言を構成する全てから得られる値の結合を利用します。 use-character-maps 属性においては、その出力定義は、取り込み優先度、 または、 いくつかが同じ取り込み優先度を持つ場合には、宣言指定内で増加の命令にあるそれらを受け取っている xsl:output 宣言を構成する全てから得られる拡張QName 値のシーケンスの結合を利用します。 他の属性においては、その出力定義は、 最も高い取り込み優先度を伴う xsl:output 宣言から得られる属性の値を利用します。

[ERR XTSE1560] もし、出力定義にある2つの xsl:output 宣言が、 より高い取り込み優先度と同じ属性において明快な値を記述する同じ出力定義内に その他の xsl:output 宣言がある場合を除き、 同等ではない属性の値を伴う( cdata-section-elementsuse-character-maps ではない)同じ属性において明快な値を明記する場合には、 それは、静的エラーです。

もし、固有の属性における値を明記する 出力定義内に xsl:output 宣言がない場合には、 その一致しているシリアライゼーションパラメータは、既定値を受け取ります。 既定値は、選んだ出力メソッドに依存します。

いくつかのシリアライゼーションパラメータがあり、いくつかの出力メソッドに適用しますが、他には(適用)しません。 例えば、 indent 属性は、 text 出力メソッドにおいては効果がありません。 もし、値が、出力メソッドに適用できない属性を提供される場合には、その値は、シリアライザーを通過されません。 プロセッサは、このような属性の値を妥当性検証する場合がありますが、そうする事を要求されるわけではありません。

手法は、変換を操作するAPIを利用して、優先される xsl:output 宣言の属性、または、変更される既定値を許容する場合があります

シリアライズされる最終結果ツリーへの位置(格納ファイル内、または、別の場所かどうか)は、 implementation-definedです。 (慣例においては、 implementation-defined APIを利用して操作されるという意味である場合があります)。 しかしながら、これらの位置は、2つの最終結果ツリーが、 両方が共に xsl:result-document 命令の href 属性にある相対URIを利用して (暗黙のうちに、または、明示的に)作成される場合には、これらの相対URIは、その他の1つのツリーから参照を構築する為に利用される場合があり、 そしてまた、このような参照は、両方の結果ツリーがシリアライズされる際には、妥当なままでなければならないという制約を満たさなければいけません

xsl:output 要素における method 属性は、 出力となる最終結果ツリーにおいて利用される為にある全般的なメソッドを識別します。

[ERR XTSE1570] その値は、(もし、存在する場合には、)妥当なQNameにしなければいけません。 もし、そのQNameが、前置詞を持っていない場合には、 それは、[XSLT と XQuery シリアライゼーション]で記述したメソッドを識別し、そしてまた、 xmlhtmlxhtml 、または、 text の1つにしなければいけません。 もし、QNameが前置詞を持つ場合には、QNameは、 5.1 適格な名前で記述したように、拡張QNameに拡張されます; その拡張QNameは、出力メソッドを識別します;このケースにおける振る舞いはこの文書によって記述されるわけではありません。

method 属性における既定は、シリアライズされているツリーの内容に依存し、そしてまた、次に続くように選ばれます。 もし、最終結果ツリーの文書ノードが、子要素を持つ場合、そしてまた、 ホワイトスペース文字列だけを含む結果ツリーの文書ノードの最初の子要素に先行しているいくつかのテキストノードを持つ場合には、(以下列挙):

  • もし、この最初の子要素の拡張QNameが、(小文字においては、)ローカル部分 html と 名前空間 URI http://www.w3.org/1999/xhtml を持つ場合には、その既定出力メソッドは、普通はxhtml です。 しかしながら、もし、主要なスタイルシートモジュールxsl:stylesheet 要素の version 属性が、値 1.0 を持つ場合、そしてまた、 もし、その結果ツリーが、( xsl:result-document 命令によって明快にではなく)暗黙のうちに生成される場合には、 このシチュエーションにある既定出力メソッドは、 xml です。

  • もし、この最初の子要素の拡張QNameが、(大文字・小文字のいくつかの組み合わせでは、) ローカル部分 html とNullの名前空間 URIを持つ場合には、その既定出力メソッドは、 html です。

他の全てのケースではその既定出力メソッドは、 xml です。

もし、選択した出力定義が、 method 属性を含んでいない場合には、その既定出力メソッドが利用されます。

xsl:output における他の属性は、出力メソッドにおけるパラメータを提供します。 次に続く属性は、(以下を)許容されます:

  • encoding 属性の値は、シリアライゼーションメソッドに encoding パラメータの値を提供します。 その既定値は、implementation-definedですが、 xmlxhtml メソッドのケースでは、それは、 UTF-8 、または、 UTF-16 のいずれかにしなければいけません

  • byte-order-mark 属性は、ファイルの開始位置で[ byte order mark ](バイトオーダーマーク)が書かれるかどうかを定義します。 もし、その値 yes が記述される場合には、[ byte order mark ]が書かれます; もし、 no が記述される場合には、[ byte order mark ]が書かれません。 その既定値は、利用したエンコード方式に依存します。 もし、そのエンコード方式が UTF-16 である場合には、その既定は yes です; UTF-8 においては、それは、implementation-definedであり、そしてまた、 他の全てのエンコード方式においては、それは no です。 [ byte order mark ]の値は、高い[ order byte ]が、低い[ order byte ]の前後いずれに書かれるかを示します; 実際に利用した[ byte order ]は、選択したエンコード方式によって定義される場合を除き、implementation-dependentです

  • cdata-section-elements 属性は、QNameのホワイトスペースで区切られたリストです。 その既定値は、カラのリストです。 それらが現れる xsl:output 宣言におけるスコープ内名前空間宣言を利用してこれらの名前として拡張した後、 この名前のリストは、シリアライゼーションメソッドに cdata-section-elements パラメータの値を提供します。 前置詞なしの名前のケースでは、( xmlns="uri" を利用して宣言した名前空間である)その既定名前空間が利用されます。

    注釈:

    これは、スタイルシートの中で利用した他のほとんどのQNameにおける規則とは異なります。 その理由は、これらの名前が、結果文書にある要素を参照するということであり、それゆえに、次に続くリテラル結果要素の名前の時と同じ変換、または、 xsl:elementname 属性の時と同じ変換であるからです。

  • doctype-system 属性の値は、シリアライゼーションメソッドに doctype-system パラメータの値を提供します。 既定によって、そのパラメータが提供されるわけではありません。

  • doctype-public 属性の値は、シリアライゼーションメソッドに doctype-public パラメータの値を提供します。 既定によって、そのパラメータが提供されるわけではありません。

  • escape-uri-attributes 属性の値は、シリアライゼーションメソッドに escape-uri-attributes パラメータの値を提供します。 その既定値は、 yes です。

  • include-content-type 属性の値は、シリアライゼーションメソッドに include-content-type パラメータの値を提供します。 その既定値は、 yes です。

  • indent 属性の値は、シリアライゼーションメソッドに indent パラメータの値を提供します。 その既定値は、 htmlxhtml 出力メソッドのケースでは、 yes であり、 xml 出力メソッドのケースでは、 no です。

  • media-type 属性の値は、シリアライゼーションメソッドに media-type パラメータの値を提供します。 その既定値は、 xml 出力メソッドのケースでは、 text/xmlhtmlxhtml 出力メソッドのケースでは、 text/html そして、 text 出力メソッドのケースでは、 text/plain です。

  • normalization-form 属性の値は、シリアライゼーションメソッドに normalization-form パラメータの値を提供します。 値が、[implementation-defined]標準形式を明記する normalization-form 属性において一つ一つ列挙されたそれらの内の1つではなく、 NMTOKEN である; このケースにおける振る舞いは、この文書によって記述されるわけではありません。 その既定値は、 none です。

  • omit-xml-declaration 属性の値は、シリアライゼーションメソッドに omit-xml-declaration パラメータの値を提供します。 その既定値は、 no です。

  • standalone 属性の値は、シリアライゼーションメソッドに standalone パラメータの値を提供します。 その既定値は、 omit です; これが意味するところは、それは、存在しない standalone 属性が、XML 宣言に含まれるということです。

  • undeclare-prefixes 属性は、生成が、 method="xml"version="1.1" (または、後者)を伴い出力される際に限り、関連します。 それは、子要素が、その親要素の名前空間ノードと同じ(名前空間前置詞の)名前を伴う存在しない名前空間ノードを持つ際に、 (形式 xmlns:foo="" の)宣言していない名前空間が、出力されるべきかどうかを定義します。. その既定値は、 no です:これが意味するところは、その名前空間未宣言は、結果となるXMLが再度解析される際にその効果を持つそれは出力されず、 新しいツリーが、シリアライゼーション前のオリジナルツリーに存在していなかった子要素上に名前空間ノードを含む場合があるという事です。

  • use-character-maps 属性は、この出力定義を結合する中で利用される名前付き文字列マップのリストを提供します。 この属性が利用される方法は、20.1 文字列マップで記述されます。 その既定値は、カラのリストです。

  • version 属性の値は、シリアライゼーションメソッドに version パラメータの値を提供します。 許容した値のセットと既定値は、implementation-definedです。 シリアライゼーションエラーは、もし、要求したバージョンが手法によってサポートされない場合に報告されるでしょう。

もし、プロセッサがシリアライゼーションを実行する場合には、それは、出現するいくつかの回復不能なシリアライゼーションエラーをシグナル出力しなければいけません。 これらは、回復されない動的エラーと同じ効果を持ちます: それは、プロセッサは、エラーを出力しなければならず、変換が成功していたかのように終了してはいけないという事です。

20.1 文字列マップ

[定義:  文字マップ(character map)は、シリアライゼーションしている文字列として記述した文字列によって代用される最終結果ツリーにある テキスト、または、属性 ノードに現れている明記する文字を許容します。 ] 文字列マップの効果は、[XSLT と XQuery シリアライゼーション]の中で定義されます。

シリアライザーにパラメータとして提供した文字列マップは、選択した出力定義における xsl:output 宣言から参照した xsl:character-map 要素から決められます。

その xsl:character-map 要素は、 xsl:stylesheet 要素の子として 出現する場合がある宣言です。

<!-- カテゴリ:宣言 -->
<xsl:character-map
  name = qname
  use-character-maps? = qnames>
  <!-- Content: (xsl:output-character*) -->
</xsl:character-map>

その xsl:character-map 宣言は、名前と文字マッピングのセットを伴う文字マップを宣言します。 文字マッピングは、xsl:character-map 要素内で直接、または、更に先の use-character-maps 属性の中で参照した文字列マップ内の いずれかに含んだ xsl:output-character 要素という意味で記述されます。

要求した name 属性は、文字マップにおける名前を提供します。 文字マップが、出力定義、または、その他の文字マップによって利用される際に、 最も高い取り込み優先度を伴う文字マップが利用されます。

[ERR XTSE1580] もし、スタイルシートが、2つ以上同じ名前と同じ取り込み優先度を含む場合には、 同じ名前とより高い取り込み優先度を伴うその他の文字マップをも含む場合を除き、それは、静的エラーです。

付加的な use-character-maps 属性は、この文字マップに含まれる更に先の文字列マップの名前を列挙します。

[ERR XTSE1590] もし、 xsl:output 、または、 xsl:character-map 要素use-character-maps 属性にある名前が、スタイルシートにある いくつかの xsl:character-mapname属性とマッチしない場合には、 それは、静的エラーです。

[ERR XTSE1600] もし、文字マップがそれ自身を直接、または、 use-character-maps 属性にある名前経由で間接的に参照する場合には、それは、静的エラーです。

仮に、同じ文字マップが直接または、間接的に一回以上参照されるという場合は、エラーではありません。

出力定義は、 その use-character-maps 属性経由で参照した文字列マップの再帰的な拡張後、同じ文字においていくつかのマッピングを含む場合があります。 このシチュエーションでは、最後の文字マッピングが優先権を取得します。 命令の確立の為に、次に続く規則が利用されます:

  • 単独の xsl:character-map 要素の中では、 use-character-maps 属性の中で参照した文字列マップ内に定義した文字は、 子 xsl:output-character 要素の中で定義した文字の前に考慮されます。

  • 単独の use-character-maps 属性内で参照した文字列マップは、それらがその属性内で列挙されている命令の中で考慮されます。 文字マップを depth-first: ごとに参照される拡張は、次の1つが考慮される前に完全に拡張されます。

  • 同じ xsl:character-map要素の子として現れている 2つの xsl:output-character要素は、文書命令の中で考慮されます。

xsl:output-character 要素は、次に続くように定義されます:

<xsl:output-character
  character = char
  string = string />

シリアライザーへのパラメータとして通過される文字マップは、 string 属性で記述した文字列への character 属性で記述した文字列におけるマッピングを含みます。

文字マッピングは、20.2 出力エスケープを使用不可にするで明記したように利用不可となっている出力エスケープにおける文字列に適用するものではありません。

もし、文字がマップされる場合には、それは、エスケープしている XML 、または、 HTML に委ねられません。

例:生成する非XML出力への文字マップを利用する

文字マップは、フォーマットの中で生成が出力をシリアライズした時に有益となる事ができ、 HTML 、または、 XML に似ていますが、厳密には一致しません。 例えば、出力が、JSPページである場合には、それらは出力を生成する必要があるかもしれません:

<jsp:setProperty name="user" property="id" value='<%= "id" + idValue %>'/>

たとえ、この出力が整形式XML、または、 HTMLではないとしても、それは、 Java Server Pages (JSP) の中では妥当(有効)です。 これは、(いくつかの他の目的においては必要とされない)文字列 <%%>" を表示する為に3つのUnicode文字を領域確保する事によって達成する事が可能です。 例えば、:

<xsl:character-map name="jsp">
	<xsl:output-character character="≪" 文字列="&lt;%"/>	 
	<xsl:output-character character="≫" 文字列="%&gt;"/>
	<xsl:output-character character="§" 文字列='"'/>
</xsl:character-map>

この文字マップが xsl:output 宣言の中で参照される際には、 その要求した出力は、スタイルシートの中で次に続けて書く事によって作成される事が可能です:

<jsp:setProperty name="user" property="id" value='≪= §id§ + idValue ≫'/>

この作業は、アポストロフィ、または、クォーテーションマークが、文字列マップの利用によって属性値の一部として生成される際に、 シリアライザーが属性値を囲むデリミタ(区切り)の(どこでも可能な)他の選択を利用するだろうという前提です

 

例:各種の要素から成る文字マップを構築する

次に続く例は、一般的な慣習に従うモジュール内で構築した各種の要素から成る文字マップを例示します:

<xsl:output name="htmlDoc" use-character-maps="htmlDoc" />
<xsl:character-map name="htmlDoc"
	use-character-maps="html-chars doc-entities windows-format" />
	
<xsl:character-map name="html-chars"
	use-character-maps="latin1 ..." />
<xsl:character-map name="latin1">
	<xsl:output-character character="&#160;" string="&amp;nbsp;" />
	<xsl:output-character character="&#161;" string="&amp;iexcl;" />
	...
</xsl:character-map>
<xsl:character-map name="doc-entities">
	<xsl:output-character character="&#xE400;" string="&amp;t-and-c;" />
	<xsl:output-character character="&#xE401;" string="&amp;chap1;" />
	<xsl:output-character character="&#xE402;" string="&amp;chap2;" />
	...
</xsl:character-map>
<xsl:character-map name="windows-format">
	<!-- newlines as CRLF -->
	<xsl:output-character character="&#xA;" string="&#xD;&#xA;" />
	<!-- tabs as three spaces -->
	<xsl:output-character character="&#x9;" string="	 " />
	<!-- images for special characters -->
	<xsl:output-character character="&#xF001;"
		文字列="&lt;img src='special1.gif' /&gt;" />
	<xsl:output-character character="&#xF002;"
		文字列="&lt;img src='special2.gif' /&gt;" />
	...
</xsl:character-map>

20.2 出力エスケープを使用不可にする

普通、 XML 、 HTML 、または、 XHTML 出力メソッドを利用する際には、シリアライザーは、テキストノードを出力する際、 &< のような特殊文字をエスケープするでしょう。 これは、出力が整形式である事を保証します。 しかしながら、それは、時には、ほとんど出力を生成する事が可能な利便性がありますが、実際のところ整形式XMLではありません; 例えば、その出力は、順次的な非XML専用処理によって整形式XMLに変換される事を意図される状況において不都合な・有害な形式(ill-formed)断片を含む場合があります。 この根拠において、XSLT は、出力エスケープを使用不可にする為のメカニズムを定義します。

この特性は、非推奨(deprecated)です。

これは、付加的な特性です: それは、手法シリアライゼーションオプションが、出力エスケープをする事を使用不可能にする能力を要求するべきであり、 そしてまた、この特性を要求する存在しない一致レベルがあるというXSLTプロセッサを要求されません。

この特性は、[XSLT と XQuery シリアライゼーション]で記述したシリアライザーへの拡張を要求します。 概念は、最終結果ツリーは、テキストノードにある文字ごとに結び付けた付加的な boolean プロパティ disable-escaping を提供します。 このプロパティが設定される場合には、 &< のような特殊文字列をエスケープするシリアライザーの通常動作は、抑制されます。

xsl:value-of 、または、 xsl:text 要素は、 disable-output-escaping 属性を持つ場合があります; その許容した値は、 yes 、または、 no です。 既定は no です;もし、その値が yes である場合には、 xsl:value-of 、または、 xsl:text 要素を評価する事によって生成したテキストノードにあるそれぞれの文字は、 disable-output プロパティセットを持つべきです。

例:出力エスケープ使用不可

例えば、

<xsl:text disable-output-escaping="yes">&lt;</xsl:text>

は、単独の文字 < を生成すべきです。

もし、出力エスケープが、一時的な出力状態が、出力エスケープを利用不可とする要求が無視される効果の中にある際に評価した xsl:value-of 、または、 xsl:text 命令において利用不可とされます。

もし、出力エスケープが、 cdata-section-elements の中で要素が列挙される事から CDATA セクションを利用して出力されるのが通常である要素にあるテキストにおいて利用不可とされる場合には、 その関連するテキストは、 CDATA セクションに含まれないでしょう。 効果では、 CDATA は、エスケープメカニズムの代替手段として扱われ、それは、 disable-output-escaping オプションによって利用不可とされます。

例:出力エスケープと CDATA の相互作用

例えば、もし、
<xsl:output cdata-section-elements="title"/>
が記述される場合には、次に続く命令:

<title>
	<xsl:text disable-output-escaping="yes">
		This is not &lt;hr/&gt; good coding practice
	</xsl:text>
</title>

は、(以下の)出力を生成すべきです:

<title><![CDATA[This is not ]]><hr/><![CDATA[ good coding practice]]></title>

disable-output-escaping 属性は、 xml 出力メソッドを伴うのと同様に、 html 出力メソッドを伴って利用される場合があります。 text 出力メソッドは、いくつかの出力エスケープを実行しないことで disable-output-escaping 属性を無視します。

プロセッサは、最終結果ツリーが出力される方法を操作する場合には、単に出力エスケープを利用可能にするでしょう。 これは、常にそのケースにならない場合があります。 例えば、その結果ツリーは、出力されているその他の XSLT 変換の代わりにおいてソースツリーとして利用される場合があります。 出力エスケープを利用不可にする事がサポートされるかどうか(そして、どのような環境下で(サポートされるかどうか))は、 implementation-definedです。

[ERR XTRE1620] もし、出力エスケープを明記する xsl:value-of 、または、 xsl:text 命令が、利用不可とされ、 手法がこれをサポートしない場合には、それは、回復可能な動的エラーです。 付加的な回復動作は、 disable-output-escaping 属性を無視する事です。

[ERR XTRE1630] もし、出力エスケープを明記する xsl:value-of 、または、 xsl:text 命令が、 シリアライズされていない最終結果ツリーに書き込む際に利用不可とされる場合には、 それは、回復可能な動的エラーです。 付加的な回復動作は、 disable-output-escaping 属性を無視する事です。

もし、出力エスケープが、出力において利用されるプロセッサのエンコード方式にある表示ではない文字を利用不可とする場合には、 出力エスケープを利用不可とする要求は、その文字との関連が無視されます。

出力エスケープを使用不可にする事が、全ての手法と整形式ではないXMLにある可能な結果を伴う作業をしない場合がある事から、 それは、代替手段が存在しない時にのみ利用されるべきです。

注釈:

シリアライゼーション中の利用において文字列マップを定義する事の利便性は、20.1 文字マップで明記したように、 同様の難しさなく、出力エスケープを利用不可にする事が事前に要求されるという多くのシチュエーションで利用される事が可能な代替メカニズムとして生じています。 (=シリアライゼーション中の利用において文字列マップを定義する事は、多くのシチュエーションで利用される事が可能な代替メカニズムとして利便性を生み出しています。)

21. 一致 / Conformance >>


ホーム前へ次へ