![]() | |
Sun™ Identity Manager 8.0 リソースリファレンス |
第 2 章
AttrParse オブジェクトの実装AttrParse オブジェクトは、ユーザーリストの解析に使用される文法をカプセル化します。これは主に、一度に 1 画面分のデータを受け取って目的の結果に解析するための、メインフレームベースのリソースアダプタで使用されます (この技術はスクリーンスクレーピングとも呼ばれる)。シェルスクリプトアダプタとスクリプトゲートウェイアダプタでも、getUser アクションと getAllUsers アクションで AttrParse が使用されます。
AttrParse オブジェクトを使用するアダプタでは、画面が Java 文字列としてモデル化されます。AttrParse オブジェクトのインスタンス化には、1 つ以上のトークンが含まれます。各トークンによって画面の各部分が定義されます。これらのトークンは、画面の文字列をトークン化して、アダプタがユーザーリストからユーザープロパティーを検索できるようにするために使用されます。
ユーザーリストの解析後、AttrParse からユーザー属性名と値のペアのマップが返されます。
設定AttrParse オブジェクトは、ほかのすべての Identity Manager オブジェクトと同じように、持続的記憶領域の XML に直列化されます。そのため、AttrParse オブジェクトを、顧客の環境の相違をサポートするように設定できます。たとえば、ACF2 メインフレームのセキュリティーシステムは、多くの場合、追加のフィールドやフィールド長を含むようにカスタマイズされます。AttrParse オブジェクトはリポジトリにあるため、それらの相違に対応するための変更や設定が可能であり、カスタムアダプタを作成する必要がありません。
すべての Identity Manager 設定オブジェクトと同じように、変更するオブジェクトをコピーして名前を変更してから、変更するようにしてください。
Identity Manager に付属する AttrParse オブジェクトの例については、sample¥attrparse.xml ファイルを参照してください。このファイルには、スクリーンスクレーピングアダプタで使用されるデフォルトの AttrParse オブジェクトのリストが記載されています。
AttrParse 要素とトークンAttrParse 要素
ヨウソ AttrParse 要素は、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 の文法に適合します。 記号は空白文字を表します。
gwashington123ABCDGeorgeWashingtonPhonenumber:123-1234
alincolnXYZAbrahamLincolnPhonenumber: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 トークンだけです。
ヘッダー内の各名前は、リソースアダプタのスキーママップのリソースユーザー属性と同じ名前にします。ヘッダー内の文字列がリソースユーザー属性名と一致しない場合、後続データ行内の対応する位置にある名前と値は無視されます。
属性
データ
なし
例
次の例では、accountId を、アカウント ID に使用される値とみなします。空白と引用符は値から削除されます。
<collectCsvHeader idHeader='accountId' delim=',' trim='true' unQuote='true'/>
collectCsvLines トークン
collectCvsLines トークンは、コンマ区切り値 (CSV) ファイル内の行を解析します。このトークンの前に collectCvsHeader トークンを呼び出しておきます。
このトークンを使用できるアダプタは、スクリプトゲートウェイアダプタだけです。このアダプタで使用できる属性を決定するトークンは、collectCsvHeader トークンと collectCsvLines トークンだけです。
属性
次の属性のいずれかが指定されていない場合、その値は、前に発行された collectCsvHeader トークンから継承されます。
データ
なし
例
次の例は、値から空白と引用符を削除します。
<collectCsvLines trim='yes' unQuote='yes'/>
eol トークン
eol トークンは、行末文字 (¥n) と一致します。解析位置は、次の行の最初の文字に進められます。
属性
なし
データ
なし
例
例 次のトークンは、行末文字と一致します。
<eol/>
flag トークン
flag トークンは、多くの場合、アカウントプロパティーを定義するフラグがユーザーアカウントに存在するかどうかを判定するために opt トークン内で使用されます。このトークンは、指定された文字列を検索します。そのテキストが見つかると、AttrParse は boolean 型の true を属性に代入し、そのエントリを属性マップに追加します。
解析位置は、一致したテキストのあとの最初の文字に進められます。
属性
データ
検索するテキスト。
例
int トークン
int トークンは、整数型のアカウント属性をキャプチャーします。属性名と整数値がアカウント属性マップに追加されます。解析位置は、その整数のあとの最初の文字に進められます。
属性
データ
なし
例
- 次のトークンは、6 桁の整数を検索し、その桁数の整数値を SALARY 属性の属性値マップに追加します。
<int name='SALARY' len='6'/>
値 010250 が見つかった場合、AttrParse は SALARY=10250 を値マップに追加します。
- 次のトークンは、任意の桁数を検索し、その整数値を 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 トークンは、スキップできる画面領域や、解析するユーザーに関する有用な情報が含まれていない画面領域をトークン化します。解析位置は、スキップされた文字のあとの最初の文字に進められます。
属性
データ
なし
例
次の例では、最初のトークンは 17文字をスキップし、2 番目のトークンは 1 文字だけスキップします。
<skip len='17'/>
<skip len='1'/>skipLinesUntil トークン
skipLinesUntil トークンは、指定した文字列が minCount で指定した数以上見つかるまで、入力行をスキップします。
属性
データ
なし
例
次のトークンは、2 つのコンマが含まれている行の次の行まで前方にスキップします。解析位置は、その行の最初の文字になります。
<skipLinesUntil token=',' minCount='2'/>
skipToEol トークン
skipToEol トークンは、現在の解析位置から現在の行の終わりまでのすべての文字をスキップします。解析位置は、次の行の最初の文字に進められます。
属性
なし
データ
なし
例
次のトークンは、現在の行の終わりまですべての文字をスキップします。解析位置は、次の行の最初の文字になります。
<skipToEol/>
skipWhitespace トークン
skipWhitespace トークンは、任意の数の空白文字をスキップするために使用されます。このシステムでは、Java の空白定義が使用されます。解析位置は、空白以外の最初の文字に進められます。
属性
なし
データ
なし
例
次のトークンは、現在の解析位置ですべての空白をスキップします。
<skipWhitespace/>
str トークン
str トークンは、文字列型のアカウント属性をキャプチャーします。属性名と文字列値がアカウント属性マップに追加されます。解析位置は、その文字列のあとの最初の文字に進められます。
属性
データ
なし
例
- 次のトークンは、長さが 21 文字の文字列を検索し、前後の空白を削除します。
<str name='NAME' trim='true' len='21'/>
[space][space]George Washington[space][space] という文字列があった場合、AttrParse は NAME="George Washington" をアカウント属性マップに追加します。
- 次のトークンは、) (右括弧) で終わる任意の長さの文字列を検索します。
<str name='STATISTICS.SEC-VIO' term=')' />
2 - Monday, Wednesday - )text という文字列の場合、AttrParse は STATISTICS.SEC-VIO="2 - Monday, Wednesday - " をアカウント属性マップに追加します。
- 次のトークンは、現在の解析位置から現在の行の終わりまで、空白文字で区切られた単語のリストを検索します。
<str name='GROUP' multi='true' delim=' ' trim='true'/>
Group1 Group2 newGroup lastGroup¥n という文字列があった場合、AttrParse はグループ名文字列のリスト {Group1, Group2, newGroup, lastGroup} を GROUP 属性のアカウント属性マップに追加します。
- 次のトークンも、同じような機能を果たしますが、アカウント属性マップが、次のようにコロン (:) で連結される点が前の例と異なります。GROUP={Group1:Group2:newGroup:lastGroup}
<str name='GROUP' multi='true' delim=' ' trim='true' append='true' appendSeperator=':' />
t トークン
t トークンは、テキストをトークン化するために使用されます。通常は、スクリーンスクレーピング中にラベルを認識し、解析している画面上の場所に関する知識を提供するために使用されます。解析位置は、一致したテキストのあとの最初の文字に進められます。構文解析部は常に、テキスト行内の左から右に進行します。
属性
属性
説明
offset
トークンのテキストを検索する前にスキップする文字数。offset には次の値を指定できます。
termToken
このトークンの解析を停止することを示す文字列。解析位置は、termToken 文字列のあとの文字になります。
termToken 属性は、offset 属性が負の値 (-1) の場合にのみ使用できます。
データ
検索するテキスト
例
- 次のトークンは、現在の解析位置で Address Line 1:[space] を検索します。
<t offset='-1'>Address Line 1: </t>
- 次のトークンは、現在の解析位置で xxZip Code:[space] を検索します。xx は、空白文字を含む任意の 2 文字です。
<t offset='2'>Zip Code: </t>
- 次のトークンは、現在の解析位置で Phone:[space] を検索します。AttrParse は、Employee ID という文字列を最初に見つけると、エラーを生成します。
<t offset='-1' termToken='Employee ID'>Phone: </t>