11.3 ポリシーを備えたECMAScriptsの例

次の例は、さまざまなポリシーを備えたECMAScriptファイルdemo.jsを使用しています。demo.jsファイルは、3つのECMAScript関数定義を含みます。

11.3.1 ECMAScript関数を呼び出すDirXMLスクリプトポリシー

DirXMLスクリプトポリシーは、ECMAScript関数getB64ImageFromURL()を呼び出すことによって、写真へのURLリファレンスである属性をBase64エンコード化写真データへ変換します。このポリシーは、入力変換または出力変換ポリシーとして使用できます。

関数は、URLからイメージを読み込み、コンテンツをBase64エンコード化文字列として返します。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE policy PUBLIC "policy-builder-dtd" "C:\Program Files\Novell\Designer\eclipse\plugins\com.novell.designer.idm.policybuilder_1.2.0.200612180606\DTD\dirxmlscript.dtd"><policy>	<rule>		<description>Reformat photo from URL to octet</description>		<conditions/>		<actions>			<do-reformat-op-attr name="photo">				<arg-value type="octet">					<token-xpath expression="es:getB64ImageFromURL(string($current-value))"/>				</arg-value>			</do-reformat-op-attr>		</actions>	</rule></policy>

機能: <static> String getB64ImageFromURL(<String> urlString)

パラメータ: urlString (イメージファイルのURL)

返される値: イメージのBase64エンコード化コンテンツ(またはエラーの場合は空の文字列)

ファイルReformatPhoto.xmlは、ECMAScript関数getB64ImageFromURLをDirXMLスクリプトポリシーから呼び出します。ファイルphototest.xmlは、アクション内のポリシーを表示するサンプル入力ドキュメントです。

図 11-7 写真の再フォーマットの例

ECMAScriptは、getB64ImageFromURL関数を呼び出し、この関数は現在の値を文字列として返します。

11.3.2 ECMAScript関数をドライバレベルで呼び出すXSLTポリシー

XSLTポリシーは、単一カンマ区切り値を複数値に分割するか、または複数の値を単一カンマ区切り値に結合します。XSLTポリシーは、ドライバレベルで定義され、入力変換または出力変換ポリシーとして使用できます。

メモ:DirXMLスクリプトは、分割および結合機能を備えていますが、 XSLTにはありません。このタイプの関数は、XSLTが分割および結合機能を持つことを許可します。

次の2つの関数があります。

参加

結合関数は、NodeSet内のノードのテキスト値を単一文字列に結合します。

<!--  template that joins the joinme attribute values into a single value --><xsl:template match="*[@attr-name='joinme']//*[value] | *[@attr-name='joinme'][value]">   <xsl:copy>      <xsl:apply-templates select="@*|node()[not(self::value)]"/>	   <value>    	  <xsl:value-of select="es:join(value)"/>	   </value>   </xsl:copy></xsl:template>

機能: <static> String join(<NodeSet> nodeSet, <string> delimiter)

パラメータ: nodeSet (入力NodeSet)および区切り記号((optional: default = none)で分割する区切り記号)

返される値: 区切り記号で分割された、nodeSet内のノードの文字列値の連結。

分割

分割関数は、文字列をNodeSetに分割します。

<!--  template that splits the splitme attribute values into multiple values --><xsl:template match="*[@attr-name='splitme']//value">     <xsl:for-each select="es:split(string(.))">	   <value>    	  <xsl:value-of select="."/>	   </value>     </xsl:for-each></xsl:template>

機能: <static> NodeSet split(<String> inputString, <String> delimiter)

パラメータ: inputString (分割するスクリプト)およびdelimiter ((optional: default = “,”)で分割する区切り記号)

返される値: テキストノードを含むNodeSet。

ファイルSplitJoin.xslは、XSLTスタイルシート内で結合または分割関数を呼び出します。 ファイルsplitjointest.xmlは、アクション内のスタイルシートを表示する入力ドキュメントです。

11.3.3 ECMAScript関数をスタイルシート内で呼び出すXSLTポリシー

XSLTポリシーは、ECMAScript関数定義のXSLTスタイルシートへの埋め込みをデモンストレーションします。関数は文字列を大文字に変換します。

<!-- define ecmascript functions --><es:script>function uppercase(input){	return String(input).toUpperCase();}</es:script>

ファイルuppercase.xslは、ECMAScript関数をXSLTスタイルシートに定義します。ファイルuppercasetest.xmlは、アクション内のスタイルシートを表示する入力ドキュメントです。