Sun Identity Manager 8.1 リソースリファレンス

第 49 章 AttrParse オブジェクトの実装

AttrParse オブジェクトは、ユーザーリストの解析に使用される文法をカプセル化します。これは主に、一度に 1 画面分のデータを受け取って、目的の解析結果を出力する必要がある、メインフレームベースのリソースアダプタで使用されます。この技術はスクリーンスクレーピングとも呼ばれます。シェルスクリプトアダプタとスクリプトゲートウェイアダプタでも、getUser アクションと getAllUsers アクションで AttrParse が使用されます。

AttrParse オブジェクトを使用するアダプタでは、画面が Java 文字列としてモデル化されます。AttrParse オブジェクトのインスタンス化には、1 つ以上のトークンが含まれます。各トークンによって画面の各部分が定義されます。これらのトークンは、画面の文字列をトークン化して、アダプタがユーザーリストからユーザープロパティーを検索できるようにするために使用されます。

ユーザーリストの解析後、AttrParse からユーザー属性名と値のペアのマップが返されます。

設定

AttrParse オブジェクトは、ほかのすべての Identity Manager オブジェクトと同じように、持続的記憶領域の XML に直列化されます。そのため、AttrParse オブジェクトを、顧客の環境の相違をサポートするように設定できます。たとえば、ACF2 メインフレームのセキュリティーシステムは、多くの場合、追加のフィールドやフィールド長を含むようにカスタマイズされます。AttrParse オブジェクトはリポジトリにあるため、それらの相違に対応するための変更や設定が可能であり、カスタムアダプタを作成する必要がありません。

すべての Identity Manager 設定オブジェクトと同じように、変更するオブジェクトをコピーして名前を変更してから、変更するようにしてください。

ProcedureAttrParse オブジェクトを編集する

  1. デバッグページで、「List Objects」ボタンの横にあるドロップダウンメニューから「AttrParse」を選択します。「List Objects」をクリックします。

  2. 利用可能なオブジェクトのリストから、編集するオブジェクトを選択します。

  3. 任意の XML エディタで、そのオブジェクトのコピー、編集、および名前の変更を行います。

  4. 「設定」ページで、「交換ファイルのインポート」を選択し、新しいファイルを Identity Manager にインポートします。

  5. リソースで、その AttrParse リソース属性の名前を新しい AttrParse 文字列の名前に変更します。

    Identity Manager に用意されている AttrParse オブジェクトの例については、sample\attrparse.xml ファイルを参照してください。このファイルには、スクリーンスクレーピングアダプタで使用されるデフォルトの AttrParse オブジェクトのリストが記載されています。

AttrParse 要素とトークン

AttrParse 要素

AttrParse 要素は、AttrParse オブジェクトを定義します。

属性

属性

説明

name

AttrParse オブジェクトを一意に定義します。この値は、アダプタの「リソースパラメータ」ページで指定されます。 

データ

ユーザーリストを解析する 1 つ以上のトークン。AttrParse オブジェクトでサポートされるトークンは次のとおりです。

次の例では、行の最初の 19 文字を読み取り、余分な空白を削除し、値としてのその文字列を USERID リソース属性に代入します。次に、5 つの空白文字をスキップし、NAME リソース属性を抽出します。この属性は最大 21 文字で、空白は削除されます。サンプルでは、「Phone number:」の文字列をチェックしています。電話番号が解析され、PHONE リソース属性に割り当てられます。電話番号は、「Phone number: 」の末尾の空白文字のあとから始まり、次に現れる空白文字で終わります。末尾の空白文字は削除されます。

<AttrParse name=’Example AttrParse’>
   <str name=’USERID’ trim=’true’ len=’19’/>
   <skip len=’5’/>
   <str name=’NAME’ trim=’true’ len=’21’/>
   <t offset=’-1’>Phone number: </t>
   <str name=’PHONE’ trim=’true’ term=’ ’/>
</AttrParse>

次の文字列は、このサンプル AttrParse の文法に適合します。・ 記号は空白文字を表しています。

gwashington123·····ABCD·George·Washington····Phone·number:·123-1234·
alincoln···········XYZ··Abraham·Lincoln······Phone·number:·321-4321·

1 番目の場合、解析後のユーザー属性マップには、次の内容が含まれます。

USERID=“gwashington123”, NAME=“George Washington”, PHONE=“123-1234”

同様に、2 番目のユーザー属性マップには次の内容が含まれます。

USERID=”alincoln”, NAME=”Abraham Lincoln”, PHONE=“321-4321”

テキストの残りの部分は無視されます。

collectCsvHeader トークン

collectCsvHeader トークンは、コンマ区切り (CSV) ファイルのヘッダーとして指定された行を読み取ります。

スクリプトゲートウェイアダプタとシェルスクリプトアダプタは、このトークンを使用します。collectCsvHeader および collectCsvLines トークンは、スクリプトゲートウェイアダプタが使用する唯一のトークンです。

ヘッダー内の各名前は、リソースアダプタのスキーママップのリソースユーザー属性と同じ名前にします。ヘッダー内の文字列がリソースユーザー属性名と一致しない場合、後続データ行内の対応する位置にある名前と値は無視されます。

属性

属性

説明

idHeader

アカウント ID とみなすヘッダーの値を指定します。この属性は省略可能ですが、指定することをお勧めします。指定されていない場合は、nameHeader 属性の値が使用されます。

nameHeader

ヘッダー内でアカウントの名前とみなす値を指定します。多くの場合、これは idHeader と同じ値です。 指定されていない場合は、idHeader の値が使用されます。この属性は省略可能ですが、指定することをお勧めします。

delim

省略可能です。ヘッダー内の値を区切る文字列。デフォルト値は , (コンマ) です。 

minCount

ヘッダーが有効であるためには、delim 属性で指定した文字列が少なくともいくつヘッダーに存在しなければならないかを指定します。

trim

省略可能です。true に設定されている場合、値の始めや終わりに空白があれば、それらの空白を削除します。デフォルトは false です。

unQuote

省略可能です。true に設定されている場合、値が引用符で囲まれていれば、引用符を削除します。デフォルトは false です。

データ

なし

次の例は、accountId をアカウント ID として使用する値に指定してします。空白および引用符は値から削除されます。

<collectCsvHeader idHeader=’accountId’ delim=’,’ trim=’true’ unQuote=’true’/>

collectCsvLines トークン

collectCvsLines トークンは、コンマ区切り (CSV) ファイルの行を解析します。このトークンの前に collectCvsHeader トークンを呼び出しておきます。

スクリプトゲートウェイアダプタとシェルスクリプトアダプタは、このトークンを使用します。collectCsvHeader および collectCsvLines トークンは、スクリプトゲートウェイアダプタが使用する唯一のトークンです。

属性

次の属性のいずれかが指定されていない場合、その値は、前に発行された collectCsvHeader トークンから継承されます。

属性

説明

idHeader

アカウント ID とみなす値を指定します。 

nameHeader

アカウントの名前とみなす値を指定します。 

delim

省略可能です。ヘッダー内の値を区切る文字列。デフォルト値は , (コンマ) です。 

trim

省略可能です。true に設定されている場合、値の始めや終わりに空白があれば、それらの空白を削除します。デフォルトは false です。

unQuote

省略可能です。true に設定されている場合、値が引用符で囲まれていれば、引用符を削除します。デフォルトは false です。

データ

なし

次の例は、値から空白と引用符を削除します。

<collectCsvLines trim=’yes’ unQuote=’yes’/>

eol トークン

eol トークンは、行末文字 (\n) に一致します。解析位置は、次の行の最初の文字に進められます。

属性

なし

データ

なし

次のトークンは行末文字に一致します。

<eol/>

flag トークン

flag トークンは、多くの場合、アカウントプロパティーを定義するフラグがユーザーアカウントに存在するかどうかを判定するために、opt トークン内で使用されます。このトークンは、指定された文字列を検索します。そのテキストが見つかると、AttrParse は boolean 型の true を属性に代入し、そのエントリを属性マップに追加します。

解析位置は、一致したテキストのあとの最初の文字に進められます。

属性

属性

説明

name

属性値マップで使用する属性の名前。この名前は、通常はリソースアダプタのスキーママップ上のリソースユーザー属性と同じですが、これは必要条件ではありません。 

offset

トークンのテキストを検索する前にスキップする文字数。offset には次の値を指定できます。 

  • 1 またはそれ以上の値を指定すると、指定された数の文字を移動してから、トークンのテキストを検索します。

  • 0 を指定すると、現在の解析位置でテキストを検索します。これはデフォルト値です。

  • -1 を指定すると、現在の解析位置でトークンのテキストを検索しますが、termToken 属性が存在する場合、解析位置は termToken 属性で指定された文字列までになります。

termToken

検索対象のテキストが存在しないことを示すインジケータとして使用する文字列。この文字列は、多くの場合、画面出力上の次の行の最初の単語またはラベルです。 

解析位置は、termToken 文字列のあとの文字になります。 

termToken 属性は、len 属性が負の値 (-1) の場合にのみ使用できます。 

データ

検索するテキスト。

Procedureflag トークンの例

  1. 次のトークンは、現在の解析位置で AUDIT を検索し、見つかった場合は、ユーザー属性マップに AUDIT_FLAG=true を追加します。


    <flag offset=’-1’ name=’AUDIT’>AUDIT_FLAG</flag>
  2. 次のトークンは、現在の解析位置で xxxxCICS を検索します。xxxx は、空白文字を含む任意の 4 文字です。この文字列が見つかった場合、AttrParse は CICS=true をユーザー属性マップに追加します。


    <flag offset=’4’ name=’CICS’>CICS</flag>

int トークン

int トークンは、整数型のアカウント属性をキャプチャーします。属性名と整数値がアカウント属性マップに追加されます。解析位置は、その整数のあとの最初の文字に進められます。

属性

属性

説明

name

属性値マップで使用する属性の名前。この名前は、通常はリソースアダプタのスキーママップ上のリソースユーザー属性と同じですが、これは必要条件ではありません。 

len

求める整数の正確な長さを示します。長さには次の値を指定できます。 

  • 1 またはそれ以上を指定すると、指定された数の文字をキャプチャーして、そのテキストが整数値であるかどうか、または noval 属性で指定された文字と一致するかどうかを調べます。

  • -1 を指定すると、次の文字が noval 属性と等しくないかぎり、現在の解析位置から始まるもっとも長い文字列を使用して解析します。これはデフォルト値です。

noval

省略可能です。属性が整数値を持っていないことを示す画面上のラベル。基本的には、これは null 値のインジケータです。解析位置は、noval 文字列のあとの最初の文字に進められます。

データ

なし

Procedureint トークンの例

  1. 次のトークンは、6 桁の整数を検索し、その桁数の整数値を SALARY 属性の属性値マップに追加します。


    <int name=’SALARY’ len=’6’/>

    010250 が見つかった場合、AttrParse は SALARY=10250 を値マップに追加します。

  2. 次のトークンは、任意の桁数を検索し、その整数値を AGE 属性の属性マップに追加します。


    <int name=’AGE’ len=’-1’ noval=’NOT GIVEN’/>

    たとえば、値 34 が見つかった場合、AGE=34 が属性マップに追加されます。NOT GIVEN という文字列の場合、値は AGE属性の属性マップに追加されません。

loop トークン

loop トークンは、トークンに含まれている要素を、入力がなくなるまで繰り返し実行します。

属性

なし

データ

一様ではありません。

次の例は、CSV ファイルの内容を読み取ります。

<loop>
   <skipLinesUntil token=’,’ minCount=’4’ />
   <collectCsvHeader idHeader=’accountId’ />
   <collectCvsLines />
</loop>

multiLine トークン

multiLine トークンは、複数の行で繰り返すパターンに一致します。次の行が multiLine の内部 AttrParse 文字列に一致する場合、解析後の出力はアカウント属性マップの最上位に追加されます。解析位置は、内部 AttrParse 文字列と一致しない最初の行に進められます。

属性

属性

説明

opt

内部 AttrParse 文字列が省略可能である可能性があることを示します。 

内部 AttrParse 文字列に一致する行がない可能性があることと、次のトークンによる解析を続行することを示します。 

データ

データ行を解析する任意の AttrParse トークン。

次の multiLine トークンは、GROUPS[space][space][space]= タグと、空白文字で区切られたグループリストが含まれている複数のグループ行を検索します。

<multiLine opt=’true’>
   <t>GROUPS[space][space][space]=</t>
   <str name=’GROUP’ multi=’true’ delim=’ ’ trim=’true’/>
   <skipToEol/>
</multiLine>

次の文字列が入力として読み取られた場合、AttrParse は GROUPS = {Group1,Group2,Group3,Group4} をアカウント属性マップに追加します。

GROUPS[space][space][space]= Group1[space]Group2\n
GROUPS[space][space][space]= Group3[space]Group4\n
Unrelated text...

opt トークン

opt トークンは、複数のトークンで構成される文字など、任意の複雑な文字列を解析します。検索トークンが存在する場合、内部 AttrParse 文字列を使用して画面の次の部分を解析します。任意セクションが存在する場合、解析位置は、任意セクションの末尾のあとの文字に進められます。それ以外の場合は、解析位置は変更されません。

属性

なし

データ

apMatch トークンと、それに続く AttrParse トークンで構成されます。

apMatch。オプションのセクションがあるかどうかを判定するためのトークンを含みます。apMatch は、opt トークン内だけで使用できるサブトークンです。apMatch トークンには、常にサブトークンとして flag トークンが含まれます。

AttrParse。画面の任意部分の解析方法を指定します。このバージョンの AttrParse 要素では、name 引数を使用しません。それ以外のすべてのトークンを含めることができます。

次の opt トークンは、CONSNAME= テキストトークンへの一致を探します。見つかった場合は、長さが 8 の文字列を解析して、空白を削除し、その文字列を NETVIEW.CONSNAME 属性のアカウント属性マップに追加します。

<opt>
   <apMatch>
      <t offset=’-1’> CONSNAME= </t>
   </apMatch>
   <AttrParse>
      <str name=’NETVIEW.CONSNAME’ len=’8’ trim=’true’ />
   </AttrParse>
</opt>

skip トークン

skip トークンは、スキップできる画面領域や、解析するユーザーに関する有用な情報が含まれていない画面領域をトークン化します。解析位置は、スキップされた文字のあとの最初の文字に進められます。

属性

属性

説明

len

画面上でスキップする文字数を示します。 

データ

なし

次の例では、最初のトークンは 17文字をスキップし、2 番目のトークンは 1 文字だけスキップします。

<skip len=’17’/>
<skip len=’1’/>

skipLinesUntil トークン

skipLinesUntil トークンは、指定した文字列が minCount で指定した数以上見つかるまで、入力行をスキップします。

属性

属性

説明

token

検索する文字列。 

minCount

必須の token 属性で指定された文字列のインスタンスの最小数。 

データ

なし

次のトークンは、2 つのコンマが含まれている行の次の行まで前方にスキップします。解析位置は、その行の最初の文字になります。

<skipLinesUntil token=’,’ minCount=’2’/>

skipToEol トークン

skipToEol トークンは、現在の解析位置から行の終わりまでのすべての文字をスキップします。解析位置は、次の行の最初の文字に進められます。

属性

なし

データ

なし

次のトークンは、現在の行の終わりまですべての文字をスキップします。解析位置は、次の行の最初の文字になります。

<skipToEol/>

skipWhitespace トークン

skipWhitespace トークンは、空白文字をスキップするために使用します。システムは、Java の空白文字の定義を使用します。解析位置は、空白以外の最初の文字に進められます。

属性

なし

データ

なし

次のトークンは、現在の解析位置ですべての空白をスキップします。

<skipWhitespace/>

str トークン

str トークンは、文字列のアカウント属性をキャプチャーします。属性名と文字列値がアカウント属性マップに追加されます。解析位置は、その文字列のあとの最初の文字に進められます。

属性

属性

説明

name

属性値マップで使用する属性の名前。この名前は、通常はリソースアダプタのスキーママップ上のリソースユーザー属性と同じですが、これは必要条件ではありません。 

len

求める文字列の正確な長さを示します。長さには次の値を指定できます。 

  • 1 またはそれ以上を指定すると、文字が noval 属性と等しくないかぎり、指定された数の文字がキャプチャーされます。

  • -1 を指定すると、次の文字が noval 属性と等しくないかぎり、現在の解析位置から次の空白文字までのすべての文字がキャプチャーされます。これは、デフォルトです。

term

文字列を解析していて、この属性で指定した値と一致する文字をキャプチャーしたら、この str トークンの解析を停止します。len 引数が 1 またはそれ以上の場合、str トークンは、長さ len に達するかまたは term 文字をキャプチャーするか、いずれか早い方の時点で終了します。

termToken

検索対象のテキストが存在しないことを示すインジケータとして使用する文字列。この文字列は、多くの場合、画面出力上の次の行の最初の単語またはラベルです。 

解析位置は、termToken 文字列のあとの文字になります。属性マップに追加される文字列は、termToken が見つかるまでのすべての文字になります。 

termToken 属性は、len 属性が負の値 (-1) の場合にのみ使用できます。 

trim

省略可能です。アカウント属性マップに追加する前に、戻り値または複数値 (multi 属性が指定されている場合) から空白を削除するかどうかを示す true または false の値。デフォルト値は false です。

noval

属性が文字列値を持っていないことを示す画面上のラベル。基本的には、これは null 値のインジケータです。解析位置は、noval 文字列のあとの最初の文字に進められます。

multiLine

文字列が画面の複数行にまたかるかどうかを示す true または false の値。

この属性は、len 属性が存在し、0 より大きい値が指定されている場合にのみ使用できます。multiLine が存在する場合、len 属性に指定された文字数が解析されるまで、行末文字はスキップされます。 

multi

得られた文字列が、さらに解析して各サブ値を検索する必要がある複数値属性であるかどうかを示す true または false の値。複数値は、appendSeparator を使用してまとめて追加するか、または値のリストに変換することができます。

delim

複数値文字列を解析するための区切り文字。この属性は、multi 属性が指定されている場合にのみ使用できます。 

これが指定されていない場合、複数値の str トークンは空白文字で区切られているとみなされます。

append

appendSeparator を使用して複数値をまとめて文字列に追加するかどうかを示す true または false の値。append が存在しない場合、複数値はアカウント属性値マップのリストに追加されます。この属性は、multi 属性と一緒に使用されます。

appendSeparator

append トークンの複数値を区切る文字列を示します。この属性は、append 属性が true に設定されている場合にのみ有効です。appendSeparator が存在しない場合、append 属性は区切り文字を使用しません。代わりに、複数値を連結して結果の文字列にします。

データ

なし

t トークン

t トークンは、テキストをトークン化するために使用します。通常は、スクリーンスクレーピング中にラベルを認識し、解析している画面上の場所に関する知識を提供するために使用されます。解析位置は、一致したテキストのあとの最初の文字に進められます。構文解析部は常に、テキスト行内の左から右に進行します。

属性

属性

説明

offset

トークンのテキストを検索する前にスキップする文字数。offset には次の値を指定できます。 

  • 1 またはそれ以上の値を指定すると、指定された数の文字を移動してから、トークンのテキストを検索します。

  • 0 を指定すると、現在の解析位置でテキストを検索します。これはデフォルト値です。

  • -1 を指定すると、現在の解析位置でトークンのテキストを検索しますが、termToken 属性が存在する場合、解析位置は termToken 属性で指定された文字列までになります。

termToken

このトークンの解析を停止することを示す文字列。解析位置は、termToken 文字列のあとの文字になります。 

termToken 属性は、offset 属性が負の値 (-1) の場合にのみ使用できます。 

データ

検索するテキスト