この付録では、このガイドの主要な章における説明や例を理解するために必要な、XML、XMLスキーマおよびXSLTの概要を示します。この付録の内容は次のとおりです。
XMLとはExtensible Markup Languageの略語です。これは、ドキュメントを複数の部分に分解し、ドキュメントの各部分を識別するタグを定義する一連のルールです。こうしたタグで定義した構文をXSLスタイルシートと併用すると、ドキュメントの再構築が可能になります。
定義するタグはXMLルールに従っている必要がありますが、タグのコンテンツや配置は開発者が自由に決められます。特定のドキュメントを表すように配置されているXMLテキストのファイルは、XMLアプリケーションと呼ばれます。Oracle Access ManagerのOutputXMLは、XMLアプリケーションの1つです。これはHTMLの作成を目的としたもので、作成されたHTMLによってブラウザにアイデンティティ・システムが表示されます。
Oracle Access Managerではまた、その操作を制御する一部のパラメータを指定するために、構造的な手段としてXMLが使用されます。これはOutputXMLとは使用方法が異なりますが、こちらの方がアプリケーションがかなり短く、またXMLの構文ルールに従っている点では同じであるため、この種のファイルの1つを例として示します。たとえば、frontpageadminparams.xmlの内容は次のとおりです。
<?xml version="1.0" ?> <ParamsCtlg xmlns="http://www.oblix.com" CtlgName="frontpageadminparams"> <CompoundList ListName=""> <SimpleList> <NameValPair ParamName="top_frame" Value="_top" /> <NameValPair ParamName="top_main_frame" Value="main_frame" /> <NameValPair ParamName="min_location_area" Value="400" /> </SimpleList> </CompoundList> </ParamsCtlg>
タグのレベルをインデントで表したこの表示方法は、Microsoft Internet Explorerの自動機能です。XMLエディタでも同様に、この方法でファイルを示します。
このファイルの重要な部分を次にいくつか説明します。
<?xml version="1.0" ?>
これはXML宣言で、整形式XMLアプリケーションでは最初の行になります。Internet Explorerや一部のエディタでは、ファイルにこの行がないとXML形式として表示されません。初めと終わりの?は、これをXML処理命令とするために指定するものです。version="1.0"は、属性です。属性は等号で区切られた名前と値のペアであり、これは命令に対して追加情報を提供するものです。ここではXMLのバージョン1つのみが指定されています。
<ParamsCtlg xmlns="http://www.oblix.com" CtlgName="frontpageadminparams">
<ParamsCtlg>
はタグであり、ここからこのXMLアプリケーションの最初の要素を定義する部分が始まります。定義は対になっている終了タグで終了します。終了タグはほぼ同様の形式ですが、タグ名の前に/が使用されます。
</ParamsCtlg>
開始タグと終了タグの間のすべての記述内容により、ParamsCtlg要素が定義されます。この要素内にはCompoundList要素がネストされ、さらにその中には複数の要素がネストされています。ここで重要な属性はxmlnsです。この属性はXMLの名前空間を表し、このXMLアプリケーションの所有者や可能性のある参照ソースがここに指定されます。ここでは、このアプリケーションの作成者としてオラクル社が指定されています。
この要素は、厳密な形式で記述するとこのようになります。
<NameValPair ParamName="top_frame" Value="_top" /> <NameValPair> ParamName="top_frame" Value="_top" </NameValPair>
しかし、このように定義が短い場合、XMLのルールでは短縮形の終了タグを使用できます。/>の部分が、直前の開始タグに対応する終了タグを表します。
ParamName="top_frame"属性およびValue="_top"属性はファイルの有効なコンテンツで、Oracle Access Managerで使用される変数名とその値です。
スタイルシートを使用するアプリケーションには欠かせない重要な概念に、ノードがあります。ノードとはXMLアプリケーション内のレベルのことであり、一連の要素を書き連ねた状態において、ネストされた要素内で各要素が一意に示す位置で表されるものです。たとえば、このアプリケーションではParamsCtlgがルート・ノードです。ルート・ノードとは、1つ以上のXML処理命令の直後にある要素の名前で、他の要素はすべてこの中にネストされます。この他、ParamsCtlg/CompoundListやParamsCtlg/CompoundList/SimpleListもノードの実例です。
XMLアプリケーションのコンテンツはXMLスキーマによって記述されます。次のリストで、スキーマ定義ファイル内に出現する要素の一部を、各要素の初めの数文字を基に説明します。これはXMLスキーマ構文のすべてを説明するものではありません。すべての構文の詳細は、参考サイトを参照してください。
xsd:attribute: 定義されている要素の本体内部に出現し、その要素に属する属性を定義します。通常、この定義は次の部分からなります。
name="xxxx": 属性の名前です。
type="yyyy": 属性のデータ型。後述のリストを参照してください。
use="required": 属性が出力に必須である場合にのみ出現します。
value="zzzz": 属性が固定値をとる場合にのみ出現します。
xsd:choice: 他の要素からなるリストの前に配置され、リストされた要素のうち1つのみが許可されます。リストの選択肢自体はゼロから複数回にわたって指定でき、minOccursおよびmaxOccursの値で制御します。minOccursの値は、当該要素のリスト内での最小出現回数です。この値がゼロの場合、リスト内でその要素はオプションになります。maxOccursの値は、当該要素のリスト内での最大出現回数です。Unboundedという値が指定されている場合には制限はありません。
xsd:complexType: ほとんどの場合、定義されている要素の本体内部で使用され、当該要素に他の要素が含まれることを示します。
xsd:element name="xxxx": xxxx要素を記述する情報カテゴリを完全に定義することを宣言し、本体内部で定義を開始します。スキーマ・ファイル内のこのインスタンスの大部分は要素の本体の開始を表し、またこれによってサブ要素が要素にまとめられます。たとえばdisplaytype.xsdファイルのObTextMesageなど、本文を持たない例がありますが、この場合、typeを使用して要素のデータ型を直接指定します。
xsd:element ref="xxxx": ほとんどの場合、要素を定義する本体の一部であるリスト内にサブ要素を含める際、そのサブ要素名の指定に使用します。参照先の要素は他の場所に定義されています。この要素にはminOccursおよびmaxOccursが含まれることもあります。
xsd:enumeration: 使用できる値のリストを示します。
xsd:include schemalocation="xxxx": 追加のXMLスキーマ情報を含むファイルを指定する要素です。指定されたファイルは現在のファイルのインライン指定として扱われます。
xsd:restriction base="xxxx": 定義されているデータ型で使用する値のパターンを定義します。xsd:simpletypeを参照してください。Oracle Access ManagerではNMTOKENという制限ベースが使用されます。つまり値は有効なXML文字列であり、空白が含まれません。
xsd:sequence: 別の要素内にあるサブ要素のリストの前に配置され、サブ要素がある場合にはリストされた順に出現することを示します。
xsd:simpletype: データ型の定義を開始します。通常、この後にはxsd:restrictionが定義されます。
使用できるデータ型には次があります。
xsd:boolean: 許容値はtrue/falseまたは1/0です。
xsd:date: 許容値はYYYY-MM-DD形式の日付です(この他にも多数のデータ型を指定できます)。
xsd:decimal: 許容値は10進数です(この他の数値型も指定できます)。
xsd:string: 許容値は一連の文字からなる文字列です。
xsd:time: 許容値はhh:mm:ss.sss形式の時刻です。
xsd:uri-reference: 許容値はURLです。
OracleのXMLスキーマはすべてoblixというルート要素内に定義されます。次の表に、oblixのusc_profile.xsdを定義するスキーマをcomponent_profile.xsdの冒頭の定義から示します。この表では、oblixから2ノード・レベル下までのスキーマのみを示しますが、完全なスキーマにはさらに深いレベルもあります。表示プログラム(ID)用にアイデンティティ・システムに付属している、ピュアOutputXMLを確認すると、この情報が次の順番で示されています。
レベル1 | レベル2 |
---|---|
ObProfile (component_profile.xsd内に定義) |
ObPanel |
ObHeaderPanel |
|
ObRequestInfo |
|
ObScripts |
|
ObForm |
|
ObDisplay |
|
ObTextMessage |
|
ObButton |
|
ObStatus |
|
ObNavBar (navbar.xsd内に定義) |
ObRequestInfo |
ObScripts |
|
ObMisc | |
ObApps |
|
ObApplication |
|
ObFunctionsButtons |
|
ObStatus |
|
ObSearchForm (searchform.xsd内に定義) |
ObHelpContext |
ObRequestInfo |
|
ObScripts |
|
ObForm |
|
ObDisplay |
|
ObButton |
|
ObAdvancedSearch |
|
ObSearchRow |
|
ObStatus |
|
ObApplicationFunc (navbar.xsd内に定義) |
ObFunctions |
ObRequestInfo |
|
ObStatus |
|
ObStatus (component_basic.xsd内に定義) |
xsd:stringタイプの文字列。これ以外の要素は含まれない。 |
XSLとはExtensible Style Languageの略語です。この言語で記述されたファイルは、XSLTとともに、ドキュメントの作成に使用されます。XSLファイル自体は整形式XML文書です。この言語はテンプレートの使用に大きく依存します。テンプレートとは、XSLトランスフォーマに対し、XML内の特定のノードの出力として何を生成するかを示す一連の命令のことです。
XSLTとはXSL Transformationの略語です。これは、XMLアプリケーションをXSLスタイルシートと組み合せて、ドキュメントを作成するためのプロセスです。
次のリストに、アイデンティティ・システムのスタイル・シート・ファイル内に出現する要素の一部を、各要素の初めの数文字を基に説明します。これはXSLT構文のすべてを説明するものではありません。すべての構文の詳細は、参考サイトを参照してください。
注意: XSLファイルにおいて、<xsl:から始まる行は、XSLトランスフォーマに対する命令です。それ以外のすべては、HTML出力に逐語的に書き込まれるHTMLテキストです。 |
xsl:apply-templates select="xxxx": トランスフォーマがXML内のあるノードの位置に達すると、処理対象とするサブノード、またはサブノードのサブノードがこの要素によりxsl:template-matchを使用して特定されます。選択したノード内のサブノードのサブノードを指し示すには、xsl:apply-templates="xxxx/yyyy"selectオプションを省略した場合は、一致するノード下にあるすべてのサブノードのテンプレートが処理されます。
トランスフォーマは、各サブノードを名前から特定し、その後、その名前に一致する最適なxsl:templateをスタイルシート全体から検索して、どのテンプレートを使用するかを決定します。一致は通常、ネスト構造のリストで最後に記述されているノードを対象として検討されます。前述の例では、yyyyが最後のノードです。一致したノードに対する命令はただちに適用されます。
xsl:attribute name="string": 文字列で指定されたテキストを出力に挿入します。
xsl:call-template name="xxxx": テンプレートxxxxで必要とされる変換をただちに実行します。呼び出されるテンプレートはxsl:template name="xxxx"という構文を使用して指定されます。
xsl:choose: 変換候補のリストの前に配置されます。それぞれの変換候補はxsl:when要素で示されます。どのxsl:when要素も適用されない場合、xsl:otherwise要素で対応します。複数のxsl:when要素がtrueの場合は、そのうちの最初のxsl:when要素のみが適用されます。
xsl:for-each select="xxxx": この要素内の記述を、出現するすべてのxxxxに適用します。
xsl:if test="expression": 選択を作成可能にします。式がブールのtrueと評価された場合、xsl:if要素内の記述が実行されます。それ以外の場合は実行されません。式の構文は後述の段落で説明します。
xsl:include href ="xxxx": 追加のXSLスタイルシート情報を含むファイルを指定する要素です。指定されたファイルは現在のファイルのインライン指定として扱われます。
xsl:number value="expression": 整数の形式を出力に挿入するために使用されます。アイデンティティ・システムのスタイルシートでは、多くの場合、式部分にリスト内の1から始まるノードの位置を示すposition()関数が使用されます。
xsl:otherwise: xsl:choose下にリストされた要素のうち、一連のxsl:whenに続いて最後に配置される要素であり、どのxsl:whenもtrueでない場合に適用されます。
xsl:template match="xxxx": トランスフォーマに対してXMLデータ内のxxxxというノードを指し示します。サブノードを指し示すには、xsl:template-match="xxxx/yyyy"この要素は1つ以上のxsl:apply-templateを指定した後に配置する必要があります。指定がない場合、XMLデータは変換されません。
xsl:template name="xxxx": xsl:call-template="xxxx"が使用されるときに適用される名前付きのテンプレートが作成されます。
xsl:value-of select="expression": 式で指定された値を出力に挿入します。
xsl:when test="expression": 選択を可能にします。式がブールのtrueと評価された場合、xsl:when要素内の記述が実行されます。それ以外の場合は実行されません。通常、複数のxsl:when要素がxsl:choose要素の下にネストされます。
ここで紹介する内容もまた、数多くのリストの一部にすぎず、Oracle Access ManagerのXSLファイルを説明することを目的としたものです。次のように、式にはいくつかの種類があります。
ノード・セット
ノード・セットとは、ネストされた要素のセットをxxxx/yyyy/zzzzの形式で記述したものです。zzzz要素はyyyy要素内にネストされ、yyyy要素はxxxx要素内にネストされていることを示します。ノード・セットがテストの式として使用されている場合、そのテストはネストされているセットがXML内にある場合はtrue、ない場合はfalseとなります。
さらに、ノード・セットはxxxx/yyyy/zzzz[@attribute =値]という形式で使用されることもあります。これは、zzzz要素に属する属性の値について確認することを示しています。この式は、その属性が指定の値を持つ場合はtrue、持たない場合はfalseとなります。
文字列コンテンツ
1つには次のような形式をとります。
<xsl:value-of select="@attribute" />
これは、属性の値を戻すことを示します。
この他に、次のような例もあります。
<xsl:if test="@attribute">
これは、属性が当該要素において有効で、かつNULL以外の値の場合にtrueとなります。
数値コンテンツ
数値コンテンツが指定された場合、式は数値へと変換されます。次に例を示します。
<xsl:number value="position()-1">
この式からは、要素のリスト内における現在の要素の位置よりも1つ少ない数値が得られます。
クライアント側でのスタイルシートの処理は、Microsoft Internet Explorer(IE)5.0以上でのみサポートされています。これより前のバージョンのIEでは、パッチのインストールが必要です。
msxmlの最新のパッチをインストールします。
msxmlの登録ツールをインストールします。
これは次の場所から入手できます。
http://msdn.microsoft.com/msdn-files/027/001/469/xmlinst.exe
次の一連のコマンドを入力します。
xmlinst -u regsvr32 -u msxml.dll regsvr32 msxml3.dll xmlinst
制御パラメータを変更します。
$Identity_install_dir/apps/common/bin/globalparams.xmlパラメータ・ファイル内の、OutputFormatの値をデフォルトからxmlに変更します。
アイデンティティ・サーバーを再起動します。
変更を確認します。
この変更が実際に行われたことを確認するには、Internet Explorer 5のブラウザでアイデンティティ・システムに入ります。
ソースの表示を実行すると、HTMLではなくXMLが表示されます。
Oracle Access Managerには、組込みのXSL変換プロセッサが付属しています。このプロセッサには、XSLT規格のほとんどが実装されています(すべてではありません)。現在のバージョンに適用される情報を次に示します。
このプロセッサには、生成するXMLファイル内に次のような宣言行を自動的に挿入する機能はありません。インデントされたXML表現の確認のためにこの行が必要な場合は、スタイルシート内に記述する必要があります。
<?xml version="1.0" ?>
このプロセッサでは、ソートでUTF文字がサポートされません。ソートを試行するとエラー・レポートが生成されます。
このプロセッサには、深さ5298までのスタック制限があり、再帰的テンプレートはこれよりも深くできません。
このプロセッサでは、出力はブラウザでの使用を想定されているため、HTMLフォーマッタでフォーマットされます。
このプロセッサは主に、パフォーマンスを重視する本番環境での使用を目的としています。このため、スタイルシートの構文チェックは最小限にとどめられています。きわめて不正な構文がある場合、プロセッサが失敗する可能性があります。このため本番環境では、コンテンツで検証済と確認されているスタイルシートのみを使用する必要があります。検証ツールは、『Oracle Access Managerカスタマイズ・ガイド』にリストされています。
XML内の埋込みスタイルシートはサポートされていません。
次の一連のコマンドは、一部サポートされていないか、まったくサポートされていません。これらのコマンドを使用する必要がある場合は、スタイルシートを本番環境に配置する前に、結果を十分チェックしてください。
XSL:format-number
XSL:output
XSL:document
XSL:namespace
XSL:comment
XSL:format
XSL:processing instruction
XSL:sort: case order
XSL: id
ここで紹介した情報の詳細な説明と仕様は、次のサイトで参照できます。
XML、XMLスキーマおよびXSLに関する情報を参照してください。
XMLに関するドキュメントは次のサイトで参照できます。
XMLスキーマに関するドキュメントは次のサイトで参照できます。
XMLスキーマ構文のチュートリアルは次のサイトで参照できます。
http://www.w3.org./TR/xmlschema-0
XSLおよびXSLTに関するドキュメントは次のサイトで参照できます。