DirXMLが渡すパラメータの使用

DirXMLエンジンは、スタイルシートで使用できる次のパラメータをルールスタイルシートに渡します。DirXML 1.1では、クエリプロセッサパラメータがschema mapping (スキーママッピング)ルール、input transformation (入力変換)ルール、およびoutput transformation (出力変換)ルールに渡されるようになっています。コマンドプロセッサパラメータはすべてのルールに渡されます。

これらのパラメータを使用するには、スタイルシートに次の行を含めます。

<xsl:param name="fromNds"/>
<xsl:param name="srcQueryProcessor"/>
<xsl:param name="destQueryProcessor"/>
<xsl:param name="srcCommandProcessor"/>
<xsl:param name="destCommandProcessor"/>

DirXML 1.1では、プロセッサは、クエリまたはコマンド要素を最高レベル要素として受け入れ、必要に応じて<input>および<nds>で折り返します。

クエリおよびコマンドパラメータをスキーママッピングルールで使用する場合、入力変換ルールおよび出力変換ルールには次の制限が適用されます。

  1. アプリケーションシムによって発行されるクエリは、アプリケーションシムが使用できる形式でなければなりません。つまり、スキーマ名がアプリケーションネームスペース内に存在し、クエリはシムがネイティブに使うXMLボキャブラリに従う必要があります。関連付けリファレンスはクエリに追加されません。
  2. アプリケーションシムからの応答は、シムによって返された形式になります。変更やスキーママッピングは実行されておらず、関連付けリファレンスも解決されていません。
  3. NDSに発行されるクエリは、NDSが使用できる形式でなければなりません。つまり、スキーマ名がNDSネームスペース内に存在し、クエリはXDSでなければなりません。関連付けリファレンスは解決されません。
  4. アプリケーションシムからの応答は、シムによって返された形式になります。変更やスキーママッピングは実行されていません。


クエリプロセッサ

クエリプロセッサの使用は、拡張関数のNovell XSLT実装により異なります。クエリを作成するには、XdsQueryProcessorインタフェースのネームスペースを宣言する必要があります。これを行うには、次の行をスタイルシートの<xsl:stylesheet>または<xsl:transform>要素に追加します。

xmlns:query="http://www.novell.com/nxsl/java/com.novell.nds.dirxml.driver.XdsQueryProcessor"

次の例は、クエリプロセッサの1つを使用しています(極端に長い行は折り返されているので、<で始まっていません)。

<!-- Query object name queries NDS for the passed object --> 
<!-- name.Ideally, this would not depend on "CN":to do -->
<!-- this, add another parameter that is the name of the -->
<!-- naming attribute.-->

<xsl:template name="query-object-name">
<xsl:param name="object-name"/>

<!-- build an xds query as a result tree fragment -->
<xsl:variable name="query">
<nds ndsversion="8.5" dtdversion="1.0">
<input>
<query>
<search-class class-name="{ancestor-or-self:
:add/@class-name}"/>

<!-- NOTE:depends on CN being the naming attribute -->
<search-attr attr-name="CN">
<value><xsl:value-of select="$object-name"/
></value>
</search-attr>
<!-- put an empty read attribute in so that we don't get -->
<!-- the whole object back -->
<read-attr/>
</query>
</input>
</nds>
</xsl:variable>

<!-- query NDS -->
<xsl:variable name="result" select="query:query($destQuery
Processor,$query)"/>

<!-- return an empty or non-empty result tree fragment -->
<!-- depending on result of query -->
<xsl:value-of select="$result//instance"/>
</xsl:template>


コマンドパラメータ

作成ルールによって追加されたデフォルト属性をチャネルにライトバックできるようにするために、作成ルールの<required-attr>要素に、write-backという名前の新しいXMLの属性が追加されました。この属性が存在していてtrueに設定されている場合、作成ルールはsrcCommandProcessorを変更コマンドとともに呼び出し、デフォルト値をソースにライトバックします。

次の例は、コマンドパラメータを使用して、ライトバック処理を行います。

<?xml version="1.0"?> 
<xsl:transform
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cmd="http://www.novell.com/nxsl/java
com.novell.nds.dirxml.driver.XdsCommandProcessor"
>
<xsl:param name="srcCommandProcessor"/>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="add">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>

<!-- on a user add, add Engineering department to the source object -->
<xsl:variable name="dummy">
<modify class-name="{@class-name} "dest-dn="{@src-dn}">
<xsl-copy-of select="association"/>
<modify-attr attr-name="OU">
<add-value>
<value type="string">Engineering</value>
</add-value>
</modify-attr>
</modify>
</xsl:variable>
<xsl:variable name="dummy2"
select="cmd:execute($srcCommandProcessor, $dummy)"/>
</xsl:template>

</xsl:transform>