ヘッダーをスキップ
Oracle Access Managerカスタマイズ・ガイド
10g(10.1.4.2.0)
E05807-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

A XMLの背景

この付録では、このマニュアルの主要な章に記載された項目の説明や例を理解するために役立つ、XML、XMLスキーマおよびXSLTの概要を示します。

この情報に関する詳細な説明と仕様は、次のサイトでXML、XML SchemaおよびXSLに関する項目を参照してください。

www.ww3.org

XMLのドキュメントは、次のサイトを参照してください。

http://www.w3.org/XML/

XML Schemaのドキュメントは、次のサイトを参照してください。

http://www.w3.org/XML/Schema

XML Schema構文に関するチュートリアルは、次のサイトで入手できます。

http://www.w3.org./TR/xmlschema-0

XSLおよびXSLTのドキュメントは、次のWebサイトを参照してください。

http://www.w3.org/Style/XSL/

http://www.w3.org/TR/xslt

テンプレートの優先順位については、次の資料が参考になります。

http://www.vbip.com/books/1861003323/chapter_3323_09.asp

A.1 XML

XMLは、eXtensible Markup Languageの略語です。XMLは、文書を複数の部分に分割し、それらの部分を識別するタグを定義するルール・セットです。これらのタグによって構文が定義されます。構文をXSLスタイルシートと合せて使用すると、文書を再構成できます。

定義するタグはXMLルールに準拠している必要がありますが、その内容と配置は開発者が自由に決定できます。特定の文書を表すように配置されたXMLテキストのファイルは、XMLアプリケーションと呼ばれます。Oracle Access ManagerのOutputXMLは、Oracle Access Managerページをブラウザに表示するHTMLを作成するように設計されたXMLアプリケーションです。

また、Oracle Access Managerでは、その動作を制御するいくつかのパラメータを提供するための構造化された方法として、XMLを使用しています。これはOutputXMLでの使用方法とは異なりますが、アプリケーションがはるかに短いこと、またXML構文ルールにも従っていることから、これらのファイルも一例といえます。たとえば、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エディタでも、ファイルはこのように表示されます。

このファイルでは、次の部分が重要です。

<ParamsCtlg xmlns="http://www.oblix.com"
      CtlgName="frontpageadminparams">

すべての整形式XMLアプリケーションにおいて、最初の行はXML宣言です。Internet Explorerおよび一部のエディタでは、この行が存在しない場合、ファイルは整形済XMLとして表示されません。先頭と末尾の?は、これをXML処理命令とするものです。version="1.0"は属性です。属性は、等記号で区切られた名前と値のペアであり、命令の追加情報を提供します。現在、XMLのバージョンは1つしかありません。

ParamsCtlgは、XMLアプリケーションの最初の要素の定義を開始するタグです。定義は、対応する終了タグで終わります。次のようにタグ名の前に/が使用される以外、形式は同じです。

</ParamsCtlg>

開始タグと終了タグの間の内容は、要素ParamsCtlgを定義しています。この中に、要素CompoundListがネストされています。またこの要素の中にも要素がネストされます(同じように続きます)。重要な属性はxmlnsで、XML namespaceを表します。これは、この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は、アプリケーションのルート・ノードです。ルート・ノードは、XML処理命令の直後に指定された要素名です。その他の要素はすべて、このノード内にネストされます。ノードの例として他に、ParamsCtlg/CompoundListおよびParamsCtlg/CompoundList/SimpleListがあります。

A.2 XMLスキーマ

XMLスキーマは、XMLアプリケーションの内容を示し、記述するものです。次のリストでは、Oracle Access Managerのスキーマ定義ファイル内に存在する要素のいくつかを、各要素の最初の数文字に基づいて説明しています。このリストは、完全なXML Schema構文を説明することを意図したものではありません。これについては、対応する参照先サイトを参照してください。

: :は、定義される要素の本体の中に存在し、その要素の属性を定義します。通常存在する定義には、次のものがあります。

xsd:choice: 他の要素のリストの前に置かれ、それらの要素のうち1つのみが許可されることを示します。選択そのものは、minOccursおよびmaxOccursの値に従って0回または複数回行うことができます。minOccursの値は、この要素をリスト内に指定できる最小回数です。値が0の場合、リスト内でその要素はオプションです。maxOccursの値は、要素をリスト内に指定できる最大回数です。Unboundedの値は、制限がないことを意味します。

xsd:complexType: 多くの場合、定義される要素の本体の中に使用され、この要素に他の要素が含まれることを意味します。

xsd:element name="xxxx": 宣言し、続いてその本体の中で、要素xxxxを記述する情報のカテゴリを完全に定義します。スキーマ・ファイル内のこのインスタンスのほとんどは、要素の本体の提供に進み、サブ要素から要素を構築します。数は少ないですが、たとえばdisplaytype.xsdファイル内のObTextMesageなどには、本体がありません。このような場合は、タイプを使用して要素のデータ型を即時に指定します。

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定義が続きます。

使用可能なデータ型には、次のものがあります。

すべてのXMLスキーマ要素は、oblixというルート要素の中に定義されます。表A-1に、component_profile.xsd内の初期定義から始まる、oblixのusc_profile.xsd定義のスキーマを示します。この表では、oblixから2ノード・レベルまでのスキーマのみを示していますが、スキーマ全体はさらに深いレベルまであります。Oracle Access Managerによって表示(「ID」)プログラムに対して提供される純粋なOutputXMLのみを調べると、この情報がこの順序で示されています。

表A-1 スキーマ・レベル

レベル1 レベル2

ObProfile(component_profile.xsd内に定義)

ObPanel

.

ObHeaderPanel

.

ObRequestInfo

.

ObScripts

.

ObForm

.

ObDisplay

.

ObTextMessage

.

Obbutton

.

ObStatus

ObNavBar(navbar.xsd内に定義)

ObRequestInfo

.

ObScripts

.

ObMisc

.

ObApps

.

ObApplication

.

ObFunctionButtons

.

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の文字列(他の要素は含まれない)


A.3 XSLおよびXSLT

XSLは、eXtensible Style Languageの略語です。この言語で記述されたファイルは、XSLTとともに使用されて文書を作成します。XSLファイル自体は、整形式のXML文書です。この言語は、テンプレートの使用に大きく依存しています。テンプレートは、XSLトランスフォーマに対する命令セットで、XML内の特定のノードについて出力として生成する内容をXSLトランスフォーマに指示します。

XSLTはXSL Transformationの略語です。これは、XMLアプリケーションとXSLスタイルシートを結合して文書を作成するプロセスです。

A.3.1 汎用構文

次のリストでは、アイデンティティ・システムのスタイルシート・ファイル内に存在する要素のいくつかを、各要素の最初の数文字に基づいて説明しています。このリストは、完全なXSL構文を説明することを意図したものではありません。これについては、対応する参照先サイトを参照してください。


注意:

Oracle Access ManagerのXSLファイルでは、<xsl:で始まる行はXSLトランスフォーマへの命令です。その他の行はすべて、逐語的にHTML出力に書き込まれるHTMLテキストです。

xsl:apply-templates select="xxxx": xsl:template-matchを使用してトランスフォーマがXML内のノードに配置されると、この要素は、処理対象となるサブノードまたはサブ・サブノードを識別します。選択されたノード内のサブ・サブノードを、ネストされた構造を提供することによって指し示します(例: xsl:apply-templates="xxxx/yyyy"。ここで、yyyyはxxxx内にネストされているノードです。)選択オプションを省略した場合は、一致するノードの下のすべてのサブノードに対してテンプレートが処理されます。

トランスフォーマは、各サブノードを名前で特定し、スタイルシート全体でその名前に最も近い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の場合は、最初の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": 書式設定済の整数を出力に挿入する場合に使用されます。Oracle Access Managerのスタイルシートでは、1から始まるリスト内のノードの位置を示すposition()関数が式で使用されることがよくあります。

xsl:otherwise: xsl:chooseの下の要素のリスト内の、xsl:whenに続く最後の要素。xsl:whenのいずれもtrueでない場合は、この要素が適用されます。

xsl:template match="xxxx":: トランスフォーマに対して、XMLデータ内のxxxxという名前のノードを指し示します。サブノードを、ネストされた構造を提供することによって指し示します(例: xsl:template-match="xxxx/yyyy"。ここで、yyyyはxxxx内にネストされたノードです。)このサブノードの後に、1つ以上のxsl:apply-templatesを使用します。使用しない場合、XMLデータの変換は実行されません。

xsl:template name="xxxx": xsl:call-template="xxxx"が使用されている場合に適用される名前付きテンプレートを作成します。

xsl:value-of select="expression": 式で指定された値を出力に挿入します。

xsl:when test="expression": 選択を可能にします。式がブールのtrueに評価されると、xsl:when要素の内容が実行されます。それ以外の場合、この要素は実行されません。通常、xsl:choose要素の下に複数のxsl:when要素がネストされています。

A.3.1.1 式の構文

このリストも、Oracle Access ManagerのXSLファイルの理解を助けることを目的としたものであり、これよりはるかに長いリストの一部にすぎません。式には、いくつかの種類があります。

  • ノード・セット: ノード・セットは、xxxx/yyyy/zzzzという形式の、ネストされた要素のセットです。要素zzzzは要素yyyy内にネストされており、要素yyyyは要素xxxx内にネストされているという意味です。ノード・セットがテストの式として使用されている場合、ネストされたセットがXML内に存在していれば、テストはtrueです。それ以外の場合はfalseです。

    さらに、これはxxxx/yyyy/zzzz[@attribute = a value]という形式で使用できます。これは、要素zzzzの属性の値を参照することを示します。属性が指定された値を持つ場合、式はtrueです。それ以外の場合はfalseです。

  • 文字列の内容: 次のような形式がその1つです。

    <xsl:value-of select="@attribute" />

    これは、属性の値を返すことを意味します。

    他に次のような形式もあります。

    <xsl:if test="@attribute">

    属性が要素に対して有効であり、非NULL値を持っていれば、この式はtrueです。

  • 数値の内容: この場合、式の結果は数字になります。たとえば、次のような形式です。

    <xsl:number value="position()-1">

    この結果、要素リスト内の現在の要素の位置よりも1少ない数字になります。

A.3.1.2 クライアント側の変換

スタイルシートのクライアント側の処理は、Microsoft Internet Explorer(IE)5.5以上でのみサポートされています。それ以前のバージョンのIEでは、パッチをインストールする必要があります。

クライアント側の変換を設定する手順

  1. 最新のmsxmlパッチをインストールします。

    これはmsxml3.0以上である必要があります。次の場所から入手できます。

    http://download.microsoft.com/downloads/
    
  2. msxml用の登録ツールをインストールします。

    これは次の場所から入手できます。

    http://msdn.microsoft.com/msdn-files/027/001/469/xmlinst.exe

  3. 次のコマンド・シーケンスを入力します。

    xmlinst -u
    regsvr32 -u coreid
    msxml.dll
     regsvr32 msxml3.dll
    xmlinst
    
  4. 制御パラメータを変更します。

    $Identity_install_dir/identity/oblix/apps/common/bin/globalparams.xmlパラメータ・ファイル内で、OutputFormatの値をデフォルトからxmlに変更します。

  5. アイデンティティ・サーバーを再起動します。

  6. 変更を確認します。

この変更内容が実際に反映されているかどうかを確認するには、Internet Explorer 5ブラウザを使用してアイデンティティ・システムに入ります。ソースを表示すると、HTMLではなくXMLが表示されます。

A.3.1.3 Oracle Access ManagerのXSL変換の制限

Oracle Access Managerには、組込みのXML変換プロセッサが備わっています。このプロセッサは、(すべてではないが)ほとんどのXSLT標準を実装します。Oracle Access Managerバージョンに適用される情報を、次にいくつか示します。

  • プロセッサは、生成するXMLファイル内に

    <?xml version="1.0" ?>

    という宣言行を挿入しません。インデントされたXML表示を確認するためにこれが必要な場合は、スタイルシートにこの行を挿入する必要があります。

  • プロセッサは、ソートでのUTF文字をサポートしていません。ソートでUTF文字を使用しようとすると、エラー・レポートが生成されます。

  • プロセッサのスタックの深さは5298に制限されています。再帰的テンプレートをこれより深くすることはできません。

  • プロセッサでは、その出力がブラウザによって使用されることを想定しており、HTMLフォーマッタを使用して出力を書式設定します。

  • プロセッサは主に、パフォーマンスが重要となる本番環境で使用することを意図されています。スタイルシートの構文のチェックは最小限しか行われません。不正な構文があると、プロセッサはクラッシュすることがあります。本番環境では、内容が検証された既知のスタイルシートのみを使用する必要があります。検証ツールのリストは、「XSL検証」を参照してください。

  • XMLに埋め込まれたスタイルシートはサポートされていません。

  • 次のコマンドに対する完全サポートは(場合によっては部分的なサポートも)提供されていません。これらのコマンドを使用する必要がある場合は、スタイルシートを本番に適用する前に、結果を再度チェックしてください。

  • XSL:format-number

  • XSL:output

  • XSL:document

  • XSL:namespace

  • XSL:comment

  • XSL:format

  • XSL:processing instruction

  • XSL:sort: case order

  • XSL: id

詳細は、「便利なツール」を参照してください。