機械翻訳について

拡張SQLおよびXSL関数

「パブリッシャ」は、RTFテンプレートで使用する一連のSQLおよびXSL関数を拡張しました。

これらの拡張関数の構文は次のとおりです

<?xdofx:expression?>

拡張SQL関数または

<?xdoxslt:expression?>

拡張XSL関数用。

xdofx文とXSL式を同じコンテキストに混在させることはできません。 たとえば、FIRST_NAMEとLAST_NAMEの2つの要素があり、30文字のフィールドに連結し、"x"という文字でフィールドを右に埋めたとします。 次を使用できませんでした:

<?xdofx:rpad(concat(FIRST_NAME,LAST_NAME),30, 'x')?>

これは、concatがXSL式であるためです。 かわりに、次を使用できます:

<?xdofx:rpad(FIRST_NAME||LAST_NAME),30,'x')?>

次の表に、サポートされている関数を示します:

SQL文またはXSL式 使用方法 説明

2+3

<?xdofx:2+3?>

加算

2-3

<?xdofx:2-3?>

減算

2*3

<?xdofx:2*3?>

乗算

2 div 3

<?xdofx:2 div 3?>

除算

2**3

<?xdofx:2**3?>

指数

3||2

<?xdofx:3||2?>

連結

sdiv()

<?xdoxslt:sdiv(num1,num2, string)?>

ファンクションの結果が数字でない場合、指定した値を返します(NaN)。 示されている構文では、num1は除算、num2は除数、文字列はNaNが返された場合に返される値です。

次に例を示します。

<?xdoxslt:sdiv(10,0, '0')?>は'0'になります

<?xdoxslt:sdiv(10,0, 'None')?>はなしになります。

lpad()

<?xdofx:lpad('aaa',10,'.')?>

文字列の左側を特定の文字セットでパッドします。 lpad関数の構文は次のとおりです: lpad(string1,padded_length,[pad_string]) string1は、文字をパディングする文字列(左側)です。padded_lengthは、返される文字数です。pad_stringは、string1の左側にパディングされる文字列です。

rpad()

<?xdofx:rpad('aaa',10,'.')?>

文字列の右側を特定の文字セットでパディングします。 rpad関数の構文は次のとおりです: rpad(string1,padded_length,[pad_string]).string1は、文字をパディングする文字列(右側)です。padded_lengthは、返される文字数です。pad_stringは、string1の右側にパディングされる文字列です

trim()

<?xdoxslt:trim(' a ')?>

文字列内のスペースを削除します。 切り捨てるテキストを入力すると、切り捨てられたテキストが返されます。

ltrim()

<?xdoxslt:ltrim(' a ')?>

文字列の先頭のスペースを削除します。

rtrim()

<?xdoxslt:rtrim(' a ')?>

文字列内の末尾の空白を削除します。

truncate()

<?xdoxslt:truncate ( number [, integer ] )?>

小数点の右側のinteger桁に切り捨てられた「電話番号」を返します。 integerを省略すると、「電話番号」は整数値全体に切り捨てられます。小数点の左側の値を切り捨てるには、integerを負の値にできます。integerは整数である必要があります。 例 : <?xdoxslt:truncate(-2.3333)?>は -2を返します。例 : <?xdoxslt:truncate(2.7777, 2)?>は2.77を返します。例 : <?xdoxslt:truncate(27.7777, -1)?>は20を返します

replicate()

<?xdoxslt:replicate('string', integer)?>

指定された文字列を指定された回数レプリケートします。 例 : <?xdoxslt:replicate('oracle', 3)?>はoracleoracleoracleを返します

decode()

<?xdofx:decode('xxx','bbb','ccc','xxx','ddd')?>

IF-THEN-ELSE文の機能を使用します。 デコード関数の構文は次のとおりです: decode(expression, search, result [,search, result]...[, default]) 「式」は比較する値です。「検索」は式と比較される値です。「結果」は、式が検索と等しい場合に返される値です。一致が見つからない場合は「デフォルト」が返されます。

instr()

<?xdofx:instr('abcabcabc','a',2)?>

文字列内の部分文字列のロケーションを返します。 インストゥルメント関数の構文は次のとおりです: instr(string1,string2,[start_position],[nth_appearance]) string1は検索する文字列です。string2は、string1で検索する部分文字列です。start_positionは、検索が開始されるstring1内の位置です。 文字列内の最初の位置は1です。 start_positionが負の場合、関数はstring1の末尾からstart_positionの文字数をカウントし、string1の先頭まで検索します。「外観」は、string2のn番目の外観です。

substr()

<?xdofx:substr('abcdefg',2,3)?>

文字列から部分文字列を抽出します。 部分関数の構文は次のとおりです: substr(string, start_position, length) stringはソース文字列です。start_positionは抽出の位置です。 文字列内の最初の位置は常に1です。「長さ」は、抽出する文字数です。

left()

<?xdoxslt:left('abcdefg', 3)?>

指定された文字数を文字列の左側から抽出します。 構文はleft(string, Numchars)です。たとえば、<?xdoxslt:left('abcdefg', 3)?>はabcを返します

right()

<?xdoxslt:right('abcdefg', 3)?>

指定された文字数の文字列を文字列の右側から抽出します。 構文はright(string, Numchars)です。たとえば、<?xdoxslt:right('abcdefg', 3)?>はefgを返します

replace()

<?xdofx:replace(name,'John','Jon')?>

文字列内の文字シーケンスを別の文字セットに置き換えます。 replace関数の構文は次のとおりです: replace(string1,string_to_replace,[replacement_string]) string1は、一連の文字を別の文字セットに置き換える文字列です。string_to_replaceは、string1で検索される文字列です。replacement_stringはオプションです。 string1では、string_to_replaceのすべての出現箇所がreplacement_stringに置き換えられます。

to_number()

<?xdofx:to_number('12345')?>

オプションの書式モデルfmtで指定された書式の数値を含むCHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の値から、NUMBERデータ型の値に変換します。

format_number()

<?xdoxslt:format_number(12345, n, $_XDOLOCALE)?>

数値を文字列に変換し、$_XDOLOCALEで指定されたロケールに従って数値を書式設定し、Javaのデフォルト記号を使用してnで指定された小数点以下の桁数に書式設定します。 次に例を示します : <?xdoxslt:format_number(-12345, 2, 'fr-FR')?>は -12 345,00を返します

format_number()

<?xdoxslt:format_number(12345, n, s1, s2,$_XDOLOCALE)?>

数値を文字列に変換し、指定されたセパレータを使用: 千のセパレータの場合はs1、小数セパレータの場合はs2。 次に例を示します : <?xdoxslt:format_number(12345, 2, 'g', 'd', $_XDOLOCALE)?>は12g345d00を返します

pat_format_number()

<?xdoxslt:pat_format_number(12345, '##,##0.00', $_XDOLOCALE)?>

指定されたパターンでフォーマットされた数値を返します。 次に例を示します : <?xdoxslt:pat_format_number(12345, '##,##0.00', $_XDOLOCALE)?>は12、345.00を返します

to_char()

<?xdofx:to_char(value [,fmt])?>

オプションの数値書式「ファム」を使用して、値(文字、日付または数値)をVARCHAR2データ型に変換します。

たとえば、<?xdofx:to_char(emp_id)?>は、従業員IDを文字列形式で返します。

たとえば、<?xdofx:to_char(SYSDATE, 'dd-mm-yyyy')?>は、現在の日付をdd-mm-yyyy形式で返します。

to_date()

<?xdofx:to_date ( char [, fmt [, 'nlsparam']] )

CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の文字をDATEデータ型の値に変換します。 「ファム」は、「文字」の書式を指定する日付書式です。 「ファム」を省略した場合、「文字」はデフォルトの日付書式である必要があります。 「ファム」がJの場合、Julianの場合、「文字」は整数である必要があります。

format_date()

<?xdoxslt:format_date(./AnyDate,'yyyy-MM-dd','MM/dd/yyyy', $_XDOLOCALE, $_XDOTIMEZONE)?>

ある書式で日付を読み取り、別の書式で作成します。

sysdate()

<?xdofx:sysdate()?>

現在の日時をXML標準日付書式で返します(例: : 1997-07-16T19:20:30.45+01:00). 戻り値のデータ型はDATEです。 この関数には引数は必要ありません。 レポート出力でsysdateを適切に書式設定する方法の詳細は、「レポートでのシステム日付(sysdate)の表示」を参照してください。

current_date()

<?xdoxslt:current_date($_XDOLOCALE, $_XDOTIMEZONE)?>の例 : <?xdoxslt:current_date('ja-JP', 'Asia/Tokyo')?>

指定されたロケールおよびタイムゾーンの現在の日付をyyyy-MM-dd形式で返します。 この関数はグレゴリオ暦のみをサポートしています。

current_time()

<?xdoxslt:current_time($_XDOLOCALE, $_XDOTIMEZONE)?>の例 : <?xdoxslt:current_time('ja-JP', 'Asia/Tokyo')?>

指定されたロケールおよびタイムゾーンの現在の時間を返します。 この関数はグレゴリオ暦のみをサポートしています。

maximum_date()

<?xdoxslt:maximum_date(ELEMENT_NAME)?>

セット内の要素の最大数を返します。 要素の日付値は、"yyyy-MM-dd"または"yyyy-MM-dd'T'HH:mm:ss"フォーマットである必要があります。 戻り値は、1970年1月1日00:00:00 GMT以降のミリ秒を表す数値です。 この数値は、millis_to_date()関数を使用して日付に戻すことができます。

minimum_date()

<?xdoxslt:minimum_date(ELEMENT_NAME)?>

セット内の要素の最小値を返します。 要素の日付値は、"yyyy-MM-dd"または"yyyy-MM-dd'T'HH:mm:ss.ms"の書式である必要があります。 戻り値は、1970年1月1日00:00:00 GMT以降のミリ秒を表す数値です。 この数値は、millis_to_date()関数を使用して日付に戻すことができます。

millis_to_date()

<?xdoxslt:millis_to_date(number)?>

日付値を変換します。これは、1970年1月1日00:00:00 GMTからのミリ秒を表す数値で、"yyyy-MM-dd'T'HH:mm:ss.ms+00:00"の書式に変換します。 format_date()関数を使用すると、書式設定された日付値をレポートに表示する必要な日付書式にさらに変換できます。

date_to_millis()

<?xdoxslt:date_to_millis(date)?>

"yyyy-MM-dd"または"yyyy-MM-dd'T'HH:mm"形式の日付値を、1970年1月1日00:00:00 GMTからのミリ秒を表す数値に変換します。

minimum()

<?xdoxslt:minimum(ELEMENT_NAME)?>

セット内の要素の最小値を返します。

date_diff()

<?xdoxslt:date_diff('y', 'YYYY-MM-DD', 'YYYY-MM-DD', $_XDOLOCALE, $_XDOTIMEZONE)?>

この関数は、指定されたロケールの2つの日付の差を取得するためのメソッドを提供します。 日付は"yyyy-MM-dd"書式にする必要があります。 この関数はグレゴリオ暦のみをサポートしています。 構文は次のとおりです : <?xdoxslt:date_diff('format', 'YYYY-MM-DD', 'YYYY-MM-DD', $_XDOLOCALE, $_XDOTIMEZONE)?>ここで、formatは差異を計算する時間値です。 有効な値は次のとおりです:

  • y - 年

  • m - 月

  • w - 週

  • d - 日

  • h - 時間

  • mi - 分

  • s - 秒

  • ms - ミリ秒

例 : <?xdoxslt:date_diff('y', '2000-04-08', '2001-05-01', $_XDOLOCALE, $_XDOTIMEZONE)?>

1を返します

例 : <?xdoxslt:date_diff('m', '2001-04-08', '2000-02-01', $_XDOLOCALE, $_XDOTIMEZONE)?>

-14を返します

例 : <?xdoxslt:date_diff('d', '2006-04-08', '2006-04-01', $_XDOLOCALE, 'America/Los_Angeles')?>

-7を返します

sec_diff()

<?xdoxslt:sec_diff('2000-04-08T20:00:00', '2000-04-08T21:00:00', $_XDOLOCALE, $_XDOTIMEZONE?>

指定されたロケールの2つの日付の差分を秒数で返します。 日付は"yyyy-MM-dd'T'HH:mm:ss"である必要があります。 この関数はグレゴリオ暦のみをサポートしています。 例 : <?xdoxslt:sec_diff('2000-04-08T20:00:00', '2000-04-08T21:00:00', $_XDOLOCALE, $_XDOTIMEZONE?>は3600を返します

get_day

<?xdoxslt:get_day('2000-04-08', $_XDOLOCALE)?>

指定されたロケールでyyyy-MM-dd形式の日付値を返します。 この関数はグレゴリオ暦のみをサポートしています。 例 : <?xdoxslt:get_day('2000-04-08', $_XDOLOCALE)?>は8を返します

get_month

<?xdoxslt:get_month('2000-04-08', $_XDOLOCALE)?>

指定されたロケールでyyyy-MM-dd形式の日付値を返します。 この関数はグレゴリオ暦のみをサポートしています。 例 : <?xdoxslt:get_month('2000-04-08', $_XDOLOCALE)?>は4を返します

get_year

<?xdoxslt:get_year('2000-04-08', $_XDOLOCALE)?>

指定されたロケールで、日付の年値をyyyy-MM-dd形式で返します。 この関数はグレゴリオ暦のみをサポートしています。 例 : <?xdoxslt:get_year('2000-04-08', $_XDOLOCALE)?>は2000を返します

month_name

<?xdoxslt:month_name(1, 0, $_XDOLOCALE)?>

指定されたロケールで月の名前を返します。 この関数はグレゴリオ暦のみをサポートしています。 この関数の構文は次のとおりです : <?xdoxslt:month_name(month, [abbreviate?], $_XDOLOCALE)?>ここで、monthは月の数値(January = 1)で、[abbreviate?]は省略なしの場合は0、省略する場合は1です。 例 : <?xdoxslt:month_name(12, 1, 'fr-FR')?>はdecを返します。 例" <?xdoxslt:month_name(1, 0, $_XDOLOCALE)?>は1月を返します

最大

<?xdoxslt:maximum(ELEMENT_NAME)?>

セット内の要素の最大数を返します。

abs

<?xdoxslt:abs(-123.45)?>

入力した数値の絶対値を返します。 例 : <?xdoxslt:abs(-123.45)?>戻り値 : 123.45

chr

<?xdofx:chr(n)?>

データベース文字セットまたは各国語文字セットのいずれかで、nに相当するバイナリを持つ文字を返します。

ceil()

<?xdofx:ceil(n)?>

n以上の最小の整数を返します。

floor()

<?xdofx:floor(n)?>

n以下の最大の整数を返します。

round (SQL関数)

<?xdofx:round ( number [, integer ] )?>

小数点の右側のinteger桁に丸められた「電話番号」を返します。 integerを省略すると、「電話番号」は0桁に丸められます。小数点の左側の桁を切り捨てるには、integerを負にすることができます。integerは整数にする必要があります。 例 : <?xdofx:round (2.777)?>は3つの例を返します : <?xdofx:round (2.777, 2)?>は2.78を返します

round (XSLT関数)

<?xdoxslt:round ( number [, integer ] )?>

小数点の右側のinteger桁に丸められた「電話番号」を返します。 integerを省略すると、「電話番号」は0桁に丸められます。小数点の左側の桁を切り捨てるには、integerを負にすることができます。integerは整数にする必要があります。 例 : <?xdoxslt:round (2.777)?>は3つの例を返します : <?xdoxslt:round (2.777, 2)?>は2.78を返します

lower()

<?xdofx:lower (char)?>

すべての文字を小文字にして「文字」を返します。「文字」には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかのデータ型を指定できます。 戻り値はcharと同じデータ型です。

upper()

<?xdofx:upper(char)?>

すべての文字を大文字にして「文字」を返します。「文字」には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかのデータ型を指定できます。 戻り値は、「文字」と同じデータ型です。

length

<?xdofx:length(char)?>

「文字」の長さを返します。 LENGTHは、入力文字セットで定義された文字を使用して長さを計算します。

greatest

<?xdofx:greatest ( expr [, expr]... )?>

exprsのリストの最大値を返します。 最初のexprs以降のすべてのexprsは、比較の前に最初のexprのデータ型に暗黙的に変換されます。

least

<?xdofx:least ( expr [, expr]... )?>

exprsのリストの最小値を返します。 最初のexprs以降のすべてのexprsは、比較の前に最初のexprのデータ型に暗黙的に変換されます。

next_element

<?xdoxslt:next_element(current-group(),.,'<element-name>')?>

現在のグループ内の次の要素を返します。 指定された要素の後に発生する要素を返します。 次に例を示します : <?xdoxslt:next_element(current-group(),.,'employee')?>は、"employee"の後に現在のグループで発生する要素を返します。

prev_element

<?xdoxslt:prev_element(current-group(),..,'<element-name')?>

現在のグループの前の要素を返します。 指定された要素の前に出現する要素を返します。 次に例を示します : <?xdoxslt:prev_element(current-group(),.,'employee')?>は、"employee"の前に現在のグループにある要素を返します。

set_array

<?xdoxslt:set_array($_XDOCTX, '<name of hash table>', n, '<value>')?>

ハッシュ表の値を設定します。 構文は<?xdoxslt:set_array($_XDOCTX, '<name of hash table>', n, '<value>')?>で、コンテキストの設定には$_XDOCTXが必要です。<name of hash table>は、表nに指定する名前です。ハッシュ表の索引<value>は、ハッシュ表に設定する値です。 次に例を示します : <?xdoxslt:set_array($_XDOCTX, 'Employee', 2, 'Jones')?>次のget_arrayを参照してください。

get_array

<?xdoxslt:get_array($_XDOCTX, '<name of hash table>', n)?>

ハッシュ表の指定された索引の値を返します。 構文は<?xdoxslt:get_array($_XDOCTX, '<name of hash table>', n)?>です。ここで、$_XDOCTXはコンテキストの設定に必要で、<name of hash table>は表に対して指定した名前で、set_array nは返される要素のインデックス値です。 たとえば、前述のset_arrayの例とともに使用すると、<?xdoxslt:get_array($_XDOCTX, 'Employee', 2)?>はJonesを返します

register_replace_string

<?xdoxslt:register_replace_string($_XDOCTX, '<string_to_be_replaced>', '<replacement_string>')?>

<string_to_be_replaced><replacement_string>に登録します。 <replacement_string>を登録した後、normalize_string関数を使用して<replacement_string>を出力します。

たとえば、 'áàâäéèêëíìîïóòôöúùûü'文字列を'aaaaeeeeiiiioooouuuu'文字列で置換し、置換文字列を出力する場合は、最初にregister_replace_string関数を使用し、次にnormalize_string関数を使用します。

  1. 置換文字列を登録します。

    <?xdoxslt:register_replace_string($_XDOCTX, 'áàâäéèêëíìîïóòôöúùûü', 'aaaaeeeeiiiioooouuuu')?>

  2. 置換文字列を出力します。

    <?xdoxslt:normalize_string($_XDOCTX, 'áàâäéèêëíìîïóòôöúùûü')?>

    出力: aaaaeeeeiiiioooouuuu

次の表に、サポートされている組合せ関数を示します。

SQL文 使用方法

(2+3/4-6*7)/8

<?xdofx:(2+3/4-6*7)/8?>

lpad(substr('1234567890',5,3),10,'^')

<?xdofx:lpad(substr('1234567890',5,3),10,'^')?>

decode('a','b','c','d','e','1')||instr('321',1,1)

<?xdofx:decode('a','b','c','d','e','1')||instr('321',1,1)?>

数値から単語への変換

この関数を使用すると、RTFテンプレート出力の単語に数値を変換できます。

これは小切手印刷の一般的な要件です。

to_check_number()関数の構文:

<?xdofx:to_check_number(amount, precisionOrCurrency, caseType, decimalStyle)?>

次の表では、関数の属性について説明します。

属性 説明 有効な値

amount

変換する番号。

いずれかの数字

precisionOrCurrency

この属性には、精度(小数点以下の桁数)または通貨コード(小数点以下の桁数)を指定できます。 通貨コードでは、出力に通貨記号は生成されません。

2などの整数、または'USD'などの通貨コード。

caseType

出力のケース・タイプ。

有効な値は次のとおりです: 'CASE_UPPER', 'CASE_LOWER', 'CASE_INIT_CAP'

decimalStyle

小数部エリアの出力タイプ。

有効な値は次のとおりです: 'DECIMAL_STYLE_FRACTION1', 'DECIMAL_STYLE_FRACTION2', 'DECIMAL_STYLE_WORD'

小切手番号をインドの採番形式で出力するには、to_check_numberのかわりにtoCheckNumberIN関数を使用します。

次の表に、RTFテンプレートに入力された関数例と返された出力を示します。

RTFテンプレート・エントリ 返された出力

<?xdofx:to_check_number(12345.67, 2)?>

Twelve thousand three hundred forty-five and 67/100

<?xdofx:to_check_number(12345.67, 'USD')?>

Twelve thousand three hundred forty-five and 67/100

<?xdofx:to_check_number(12345, 'JPY', 'CASE_UPPER')?>

TWELVE THOUSAND THREE HUNDRED FORTY-FIVE

<?xdofx:to_check_number(12345.67, 'EUR', 'CASE_LOWER', 'DECIMAL_STYLE_WORDS')?>

twelve thousand three hundred forty-five and sixty-seven

<?xdofx:to_check_number(43526152,'INR','CASE_UPPER','DECIMAL_STYLE_WORDS')?> FORTY-THREE MILLION FIVE HUNDRED TWENTY-SIX THOUSAND ONE HUNDRED FIFTY-TWO
<?xdoxslt:toCheckNumberIN(43526152,'INR','CASE_UPPER','DECIMAL_STYLE_WORDS')?> FOUR CRORES THIRTY FIVE LAKHS TWENTY SIX THOUSAND ONE HUNDRED FIFTY TWO