次の例は、さまざまなポリシーを備えたECMAScriptファイルdemo.jsを使用しています。demo.jsファイルは、3つのECMAScript関数定義を含みます。
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関数を呼び出し、この関数は現在の値を文字列として返します。
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は、アクション内のスタイルシートを表示する入力ドキュメントです。
XSLTポリシーは、ECMAScript関数定義のXSLTスタイルシートへの埋め込みをデモンストレーションします。関数は文字列を大文字に変換します。
<!-- define ecmascript functions --><es:script>function uppercase(input){ return String(input).toUpperCase();}</es:script>
ファイルuppercase.xslは、ECMAScript関数をXSLTスタイルシートに定義します。ファイルuppercasetest.xmlは、アクション内のスタイルシートを表示する入力ドキュメントです。