IBM Content Analyzer Rule Editor Guide

This document contains proprietary information of IBM. This proprietary information is provided in accordance with the license conditions and is protected by copyright. Information contained in this document provides no warranties whatsoever for any products. Also, no descriptions provided in this document should be interpreted as product warranties. Depending on the system environment, the yen symbol may be displayed as the backslash symbol, or the backslash symbol may be displayed as the yen symbol.

© Copyright International Business Machines Corporation 2008. All rights reserved.

US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.

1 Introduction

This document describes how to use the IBM Content Analyzer Rule Editor.

1.1 Overview

The Rule Editor is a Web application that is used to create and edit rules in the format supported by IBM Content Analyzer. These rules can subsequently be used by Text Miner for mining information from the document collections. The rule editor is linked with the dictionary tree, and only supports operations on rules that are associated with a category in the category tree. See the Overview document for the dictionary editor for definitions of terms such as category, keyword, and synonyms.
Specifically, with the rule editor, you can:
  • Add new rules under the different categories of the dictionary tree.
  • View rules in a specific category or in all categories.
  • Edit rules - editing rule names, rule values and save them as new rules.
  • Edit tokens - editing Constraint Values and save them as new tokens.
  • Delete rules.
  • View Details of each Rule in the Browse View.
  • Search rules based on the rule name or based on a constraint type and value.
  • Back up and restore rules.
  • Transform the rules file from .RPF format to .PAT format.
  • Test rules on a small set of unstructured text from the user interface.
Figure 1 shows the relationship of the rule editor with the current components of the miner, including the Dictionary Editor. The Rule Editor is invoked as an application from the Dictionary Editor and the rules created by the Rule Editor are subsequently used in mining documents.
Relationship between rule Editor and dictionary editor.

Figure 1: Relationship of rule editor with components of the dictionary editor.

1.2 Rule editor files

Similar to the Dictionary Editor, the rule editor supports editing operations by multiple users. To avoid editing conflicts, the Rule Editor includes a mechanism to lock the file to be edited and prevent other users from editing the same file. The synchronization mechanisms are discussed in section 8. The rule editor is associated with "Rich Pattern Format" files, which are XML files with the extension .RPF. All rules created by the rule editor are saved in .RPF files. Note the following points about how RPF files are maintained.
  • The files used by IBM Content Analyzer up to version 8.4 are .PAT files. These contain rules in the TAKMI format. The rules that are written to the RPF files are slight variations of the TAKMI rules.
  • The rules in RPF files have an additional (not mandatory) attribute optional for each word tag (w) over the rules in the PAT files. The optional attribute takes values of the form {i,j}, where both i and j are integers. The semantics of the optional attribute are that the pattern should match i to j repetitions of the corresponding word.
  • Because the rules in the RPF format have only an additional optional attribute over the PAT rules, the rule editor can handle all PAT rules as well.
  • Every new rule is written to a file with a name that corresponds to the rule category. That is, every rule having the category .callprocesscheck is saved in a file with name ".callprocesscheck.rpf".
  • The rule editor is accompanied by a batch script that can be used to transform each RPF file to a PAT file. Note that one rule in the .RPF format might translate into multiple rules in the PAT format, based on the values of the optional constraints in the rules. Apart from the batch file, user is also provided with a Transform Rules link by the help of which the user can convert the rule file from the User Interface.

1.3 The dictionary editor and the rule editor

At the level of the user interface, the Rule Editor is tightly integrated to the Dictionary Editor and runs as an application within the Dictionary Editor. The Dictionary Editor operates in the context of a specific database that is also the database used by the Rule Editor. Further, each rule is associated with a category to which it belongs. This category is an element of the category tree in the dictionary. The main home page of the rule editor is accessible through a link from the home page of the Dictionary Editor. All operations at the level of a rule, such as rule creation, modification and deletion are associated with the category to which the rule belongs. Also, synchronization of the common resources is also performed across the rule editor and dictionary editor. Figure 2 shows the home page of the dictionary editor with the link Edit Rules. When clicked, this link will open the home page of the Rule Editor.

Home page of Dictionary Editor
Figure 2: Home page of the Dictionary Editor

2 Rules and rule files

2.1 Rule definition

A rule is an entity that allows the user to specify what is to be mined from the various documents. A rule consists of two parts: a pattern and the value. The rule editor helps the user define the pattern by enabling the configuration of a set of parameters values. The rule value specifies what the result of applying the pattern to the document should be.

2.2 Rule structure

Figure 3 specifies a sample rule and its various components.
Components of a rule
Figure 3: Components of a rule

  • A rule belongs to a category in the dictionary tree.
  • A rule comprises one or more tokens.
  • Each token is a set of one or more 2-tuples, where each tuple comprises a name and a value.
  • The name of each tuple is from a set of entities called constraints. Currently only the following constraints are supported in the rule editor - {string, lex, part-of-speech (POS), category, feature}
  • The value of each constraint is dependent on the type of the constraint. The following values are the permitted for each constraint:
    • String - This constraint type can take as value any input string.
    • Lex - This constraint type can take any input string as a value.
    • Part-of-speech (POS) - This constraint type can take a specified set of values as defined for the specific domain or application. Examples are noun, verb, and adjective.
    • Features (ftrs) - This constraint type can take any of the allowed set of values for the specific domain. It is used to refer to more fine-grained grammar and depends on the value entered in the parts of speech constraint.
    • Catgeory - This constraint can take values from the set of categories in the category tree.
    Also, each token can have at most one constraint of each type.
  • In addition to the above constraint types, each token by default has 2 other constraints. These are:
    • A token ID, which is assigned automatically, at the time of saving the rule. This is done by assigning values 1, 2, 3 ... to each token in sequence.
    • A 2-tuple, which is called the optional constraint, is specified by {min_val, max_val}. The first value specifies the minimum number of times this token must occur in the text being matched, while the second value specifies the maximum number of times this token might occur in the search pattern. (You might be familiar with regular expression syntax and recognize this use of the optional constraint as a means of implementing the + and * operators in regular expressions. Although the maximum number of times an operator can occur could theoretically be any high value, in this implementation, this value is restricted to 9. Therefore, the (pattern+) can be specified as a pattern with an optional constraint value of {1,9} and the (pattern*) can be specified with an optional constraint value of {0,9} and the (pattern)[2] could be specified with an optional constraint value of {2,2}.)
  • A rule has a rule name. Although earlier versions of IBM Content Analyzer did not enforce a rule name, from this version onwards, you must enter a rule name before saving the rule. This name does not need to be unique and can be used for subsequent searching based on the name.
  • A rule value is the value returned as a result of the execution of that rule.

2.3 Rule files - RPF format

The RPF format supports all the rules supported by the PAT format. In addition, the RPF format allows you to specify optional constraints for each w (word) element of each rule. The rule editor supports both PAT and RPF files. However, every newly created rule is saved in a file that has the name of the category of that rule.

3 Accessing the rule editor


Home page of rule editor

Figure 4: Home page of the Rule Editor

The rule editor runs as an application within the dictionary editor. When you open the dictionary editor (as described in the overview section of the dictionary editor), you are first prompted to select a database. At this time, the Edit Rules link in the left frame is disabled. When you select a database, the Edit Rules link is now highlighted (as shown in figure - 2). After you click this link, you see the Home Page of the rule editor, which is a view of the category tree. Those categories with a plus sign (+) on the left can be drilled down further until the lowest level. Each category displays links to Add a new rule and to Browse rules in that category. Also, at the top level, there are links to Browse all rules, Search rules, Backup Rules, Restore Rules, Transform Rules, and Test Rules. This view will subsequently be referred to as the home page of the rule editor. Figure 4 shows a screen capture of the dictionary tree.

4 Browsing the rule tree

When you select Edit rules from the home page of the dictionary editor, you see the dictionary tree (see figure 4), with links at each node (each node represents one category) to add a new rule or to browse for rules under that category. At the top of the page is a link to Browse all rules. You can view the rules by using one of the following options:
    • When you click Browse Rules, all the rules corresponding to the category that you chose are displayed on this page.
    • When you click Browse all Rules, all the rules are displayed on this page.
    • When you click Search Rules, the rules are displayed according to the rule name or the rule value.

4.1 Browsing rules of one category


View of Browse Rules

Figure 5: View of Browse Rules

Figure 5 shows a screen capture of the view that you see when you select Browse Rules from a specific category from the home page of the rule editor. All rules in that category are displayed. The details displayed are the category name, the tokens in the rule and the rule value.

4.2 Browsing all rules


View of Browse all rules
Figure 6: View of Browse all rules

Figure 6 shows a screen capture of the view that you see when you select Browse all Rules from the home page of the rule editor. This view is similar to the previous view (in figure 5) except that here all the rules in all the categories are displayed. Viewing all the rules is useful when you do not know which rule you are looking for or when the number of rules in the system is not very high. The Search Rules view also has the same view as shown in the previous figure.

Options for browsing Rules
Figure 7: Options for Browsing Rules

In all the previously described cases, you have the following options to handle a particular rule:
    • Rules per Page - This option allows you to choose the number of rules that you want to be displayed on the current window. You can show 10, 20, 50, and 100 rules per page. The default value is 20.
    • Edit Rule - You can edit the corresponding rule's name, value, tokens, and repeats.

      User Interface for Edit Rule
      Figure 8: User Interface for Edit Rule
      You can edit the tokens from the Edit Rule window by clicking Edit. The edit token functionality is described in detail in section 5.3 (see Figure 12).
    • Delete Rule - This option helps you delete a particular rule.
    • Details - This option shows the details for a particular rule, such as rule id, rule name, rule value, rule category, number of tokens, or tokens details.

      User Interface for Detail View
      Figure 9: User Interface for Detail View

5 Creating a new rule in Rule Editor

Every rule belongs to some category, and you can add a new rule by first selecting the category to which the rule belongs. No rule can be added without specifying the category to which it belongs. You can also specify various parameters for the rule. After you click Save, the rule is saved to an XML file. Subsequently, the rule can be viewed by searching for a parameter of the rule or by browsing the rules in that category.

5.1 Flow of work


Flow of tasks in creating a new rule

Figure 10: Flow of tasks in creating a new rule

Figure 10 describes the sequence of steps and the work flow to create a new rule. Follow these general steps to create a new rule:
  1. Click Add Rule from the Rule Editor home page.
  2. Edit the Empty Token.
  3. Click Edit to enter the values for different constraints. Save the token.
  4. To create a token, click Add Token. You have two options: create an empty token or copy a token from the list of existing tokens by specifying the token ID that you want to copy.
  5. After you specify all the tokens to be added, complete the rule construction by specifying the rule name and the rule value.
  6. Click Save.

5.2 Add Rule User Interface


Add Rule User Interface
Figure 11: Add Rule User Interface

The previous figure shows the window for adding a rule. Review the following descriptions of parameters for building a rule:
  1. Rule name: Start creating the rule by specifying the rule name. This name does not need to be unique and can be used for subsequent searching based on the name.
  2. Editing of token: Edit the empty token that is generated automatically by the editor.
  3. Adding a token: Either add an empty token or copy a token.
  4. Repeats: With this parameter, you can assign a limit to the minimum and maximum number of times that a token can be repeated. When you select a value from the menu, the rule editor automatically saves and stores these values in the rule file.
  5. Move up: Move the order of tokens in which they are displayed.
  6. Rule value: Enter a rule value to complete the rule construction. This is the value returned when you invoke this rule. There are two ways of entering a rule value:
    • Rule Value as String: This value is independent of the token ID and its value.
    • Rule Value Interactively: Select the token ID and the constraint types and enters the rule value interactively.
    An additional undo button "<<" has been provided, so that the user has more flexibility while writing the rule value.
  7. Save Rule: When the user is done with his rule completion he saves the rule.

5.3 Edit Token window

Whenever you create a new rule, the rule editor automatically creates an empty token. You can edit the empty token by clicking Edit. The following figure shows the window for editing a token for a particular rule.

Edit Token User Interface
Figure 12: Edit Token window

The supported constraint types are String, Lex, Part-of-Speech, Features and Category. You must select one of these constraints. After you select a constraint, the relevant page is displayed for entering the value for that constraint. The user can then enter the value for that constraint as follows.
Constraint typeConstraint value
StringAny string value
LexAny string value
Part-of-speech(POS)Selection from a pre-specified set of values
FeaturesSelection from a pre-specified set of values
CategorySelection from the list of categories

Figure 12 shows a screen capture for the selection of the lex constraint. Figures 13, 14, and 15 show the screen captures for the selection of the constraint values when the constraint types are String, Parts of Speech / Features, and Category, respectively.

View for entering string value
Figure 13: View for entering string value

View for entering POS / Feature value
Figure 14: View for entering Parts of Speech / Features value

View for entering category value
Figure 15: View for entering Category value

5.4 Regular Expression syntax in ICA

IBM Content Analyzer uses the Java java.util.regex package for regular expression matching. In addition to the Java regular expression processing, all linguistic processing, including that done by Language Ware, also applies.
    The / operator
    The / operator is not part of the Java regular expression syntax. It is used to tell the rule interpreter to invoke the Java regular expression processing on a rule. Therefore,
    str="love"
    only matches with "love".
    str="/love/"
    matches with strings that contain "love" inside such as "lover", "lovely", "beloved", "glove", and "loves".
    The OR (|) operator
    The main operator for writing rules is the vertical line (|) operator, which is interpreted as the Boolean OR. This operator has the lowest precedence among all operators.
    It is important when writing String constraints to understand that this constraint is a literal constraint in contrast to a regular expression. This means the rule will not be interpreted by the regular expression interpreter. Moreover, it will not be interpreted at all. The only matches will be on exactly one of those words in the list.
    The AND (&) operator
    The ampersand character (&) is another frequently used operator used in rules, which is interpreted as the Boolean AND. To match the pattern containing AND operators, all the words should be matched exactly in the text.
    The ^ and $ operators
    The caret, or circumflex character, (^) matches only at the beginning of a line. The dollar sign ($) matches only at the end of a line. Here are some examples:
    str="/^love/"
    matches with strings that start with "love" such as "lover", "lovely", and "loves", in addition to "love" , but does not match "beloved" or "glove".
    str="/love$/"
    matches with strings that end with "love" such as "glove" and "truelove", in addition to "love", but does not match "lovely" or "loves".
    str="/^love$/"
    matches with strings that start and end with "love". So it only matches with "love".
    () Operators
    If you want more than one word and variations of those words to be evaluated by the Java regular expression interpreter, you need to use parentheses. The parentheses characters are a grouping operator. Like any usual regular expression, the syntax
    ab|cd
    is interpreted as
    (a)(b|c)(d)
    and matches "abd" or "acd". In contrast
    (ab)|(cd)
    matches "ab" or "cd". Here are a few concrete examples:
    str="/love|hate/"
    matches with any combination of the letter "l" + "ove" + "e" (the last letter of "hate"). Thus,
    "lovee"
    would match. "l" + "hate" would also work:
    "lhate".
    If you want either variations on the words "love" or "hate", add parentheses around each of these words, for example:
    str="/(love)|(hate)/"
    has the same effect as
    str="/((love)|(hate))/"

5.5 Writing Constraint Values

As mentioned in section 5.2, based on the constraint type selected, you can see the appropriate page for specifying the constraint value. Figure 12 shows the page for entering the constraint value when the constraint type is lex. Figures 13, 14, and 15 show the pages for entering constraint values when the type is String, Parts of Speech / Features, and Category, respectively.
The constraint value can be any valid expression constructed by using a combination of operators and operands. Note the following tips when you write rules:
  • The operators "/","$" and "^" are shown only when the constraint type is either String or Lex. In all other constraint types, remaining operators are shown.
  • The features constraint type is linked with the parts of speech constraint. Thus, you can use only the features type if and only if you entered the parts of speech constraint. The following figure shows the dependency of the features constraint type to parts of speech constraint type.

    Dependency of Features on Parts of Speech
    Figure 16: Dependency of "Features" on "Parts of Speech"

    The features constraint type is enabled only when the parts of speech constraint type value is not null. Only those features are displayed that correspond to a particular part of speech.
  • Click Undo to undo the constraint value one step at a time.
  • Click Reset to reset the constraint value. Reset completely erases the value on the text area.
  • Click Save to overwrite the constraint values for a particular token that is being edited.
  • Click Save As to create a new token with the constraint values provided by the user.

5.6 Adding New Tokens

To create and empty token or copy and existing token, click Add Rule under a category to add a new rule from the home page of the Rule Editor (See Figure 11).

Add/Copy Token
Figure 17: Add / Copy Token

To add empty token, click Add and then click Submit.
To copy an existing token, click Copy Token and then select the Token ID of the token that you want to copy. After you select the Token ID, click Submit.

6 Search

Figure 4 shows the rule tree page, with a link 'Search rules'. This allows the user to search for rules based on 2 criteria - based on the rule name or based on (constraint type, constraint value). The search is case insensitive. Figure 18 shows the screen displayed when you click Search Rules.

Search Rules
Figure 18: Search Rules Window

6.1 Search on Rule Name

This option allows you to search for rules based on part of the rule name or the full name. You enter the string and click Submit. All rules that have the string as part of their names will be returned in the search results. The results obtained after searching are shown in the following window.

6.2 Search on constraint value


Search based on rule constraint name and value
Figure 19: Search based on constraint type and value

This option allows you to search for rules based on the constraint type and value. Figure 19 shows a search window that allows you to enter the constraint type to be searched for and the value. All rules that have at least one constraint of this type having this value are returned.

7 Backup Rules

This link, which is available on rule editor home page allows you to back up the current rules. When you click this link, you must enter the name of the folder in which you want to save the rule files. This link is provided at the top of the home page of the rule editor. The rule files that are backed up are stored in the directory structure %TAKMI_HOME%/databases/database_name/pattern/backup/rule-files-folder-name. The folder name inside the backup folder consists of two parts:
  1. The first part of the folder name is the same name that you provided through the Rule Editor window.
  2. The second part of the folder name is the time stamp. The time stamp is the concatenation of the system date in the yyyymmdd format and the system time in the hhmm format.
These two parts together form the complete name of the folder in which all the rule files are backed up, for example:
NewRules.20080131.1737
In this example, the value NewRules is the name that you provided and 20080131.1737 is the time stamp created by the system. See the following screen capture of the Backup Rules window.
The interface for backup of the rules is shown below:

Backup Rules
Figure 20: Backup Rules window

8 Restore Rules

This link, which is available on rule editor home page, allows you to restore the rules back to the current environment.
Important: Whenever you restore the rules, the current rules are overwritten by the ones that are to be restored. See the following screen capture of the Restore Rules window.

Restore Rules
Figure 21: Restore Rules window

After you click Restore Rules, you see the list of all the folder names in where the backed up rules reside. Select the folder name that you want to restore and click Restore.
You can also see the path where the backed up files are stored. Each folder name is appended with the time stamp. This time stamp helps you to map the files to the date on which you backed up the rule files.

9 Transform Rules

Click Transform Rules to convert the rule file in RPF format to PAT format. After you click this link, you see the list of categories of rule files that will be transformed. See the following screen capture of the Transform Rules window.

Transform Rules
Figure 21: Transform Rules window

Apart from the link provided, the Rule Editor is also accompanied by a utility for exporting files in the RPF format to files in PAT format. The utility is batch script that is named takmi_transform_rules.bat. The script requires the XSLT file takmi-resolve-repetition.xsl in the same directory and the JAR file in the lib/oae-rule-editor-backend.jar directory. The batch script can be invoked as: takmi_transform_rules.bat source_xml_file (in rpf format) destination_xml_file (in pat format)

10 Testing Rules


Test Rules
Figure 22: Test Rules window

Testing rules is one of the most powerful features of the Rule Editor. Testing rules helps you to test the rule on a small set of unstructured data with a click of a button. The Test Rules link is provided on the home page of the Rule Editor. After clicking the link, you must enter the following parameters:
  1. Enter the unstructured text on which you want to test the rules in the text area provided in the window (See Figure 22). Also, you can do one of the following tasks:
    • Import Text - Import a text file instead of writing the text. These files are stored in the system defined by the following path: %TAKMI_HOME%/databases/database_name/test_rules/backup/rule-files.
      The file names are also appended with the time stamp similar to the one in backup rules so that you can easily find the latest file.
    • Save Text - Save the text in a file and store it for later use. The file stored in the system is in the TXT format.
  2. Select the radio button corresponding to the category under which you want to test the rules.

After you enter the text and select the category, click Test. After you click Test, you see another window that shows the results of deploying the rules in the particular category onto the text provided. The following figure shows the window that shows the test results.

Test Results window
Figure 23: Test Results Interface

You see the results of the rules tested on the text provided in the previous step the document details, including the document ID, date, and the text on which the rules were tested. You also see the category and the keyword information. Each keyword's starting and ending offset is also shown.
To check the consistency of the rule made, click the radio button next to one or more keywords. After you select a keyword, the corresponding text is highlighted in the text provided in the document details.

11 Synchronizing among multiple users

The Dictionary Editor supports editing operations by multiple users. The Rule Editor, which is a part of Dictionary Editor, can lock the files to be edited and prevent other users from editing the same files. Problems can be avoided if users know which files might cause conflicts when they edit them. A description of each file type is as follows:
  1. Category Tree File: The entire category tree is saved as one file, and you use the Edit category tree window to edit it. Each rule belongs to a category in the category tree. All the rules can be browsed by category. Therefore, when you access the rule editor, the category tree file is locked in the view mode. This means that if another user is editing the category tree, then a view mode lock cannot be achieved without interrupting the other user. However, another user can acquire the view mode lock while a user accesses Rule Editor.
  2. Rule File: All the rule files are locked in edit mode by the Rule Editor. Therefore, two users cannot simultaneously edit the rules.

Terms of Use


Notices
This information was developed for products and services offered in the U.S.A.

IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service.

IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not grant you any license to these patents. You can send license inquiries, in writing, to:

IBM Director of Licensing
IBM Corporation
North Castle Drive
Armonk, NY 10504-1785
U.S.A. 
For license inquiries regarding double-byte (DBCS) information, contact the IBM Intellectual Property Department in your country or send inquiries, in writing, to:

IBM World Trade Asia Corporation
Licensing
2-31 Roppongi 3-chome, Minato-ku
Tokyo 106-0032, Japan 
The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you.

This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice.

Any references in this information to non-IBM Web sites are provided for convenience only and do not in any manner serve as an endorsement of those Web sites. The materials at those Web sites are not part of the materials for this IBM product and use of those Web sites is at your own risk.

IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you.

Licensees of this program who wish to have information about it for the purpose of enabling: (i) the exchange of information between independently created programs and other programs (including this one) and (ii) the mutual use of the information which has been exchanged, should contact:

IBM Corporation
Silicon Valley Lab
Building 090/H-410
555 Bailey Avenue
San Jose, CA 95141-1003
U.S.A.
Such information may be available, subject to appropriate terms and conditions, including in some cases, payment of a fee.

The licensed program described in this document and all licensed material available for it are provided by IBM under terms of the IBM Customer Agreement, IBM International Program License Agreement or any equivalent agreement between us.

Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products.

All statements regarding IBM's future direction or intent are subject to change or withdrawal without notice, and represent goals and objectives only.

This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental.

Copyright License
This information contains sample application programs in source language, which illustrate programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs.

Trademarks
This topic lists IBM trademarks and certain non-IBM trademarks.

See http://www.ibm.com/legal/copytrade.shtml for information about IBM trademarks.

The following terms are trademarks or registered trademarks of other companies:

Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.

Microsoft, Windows, Windows NT, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both.

Intel, Intel Inside (logos), MMX and Pentium are trademarks of Intel Corporation in the United States, other countries, or both.

UNIX is a registered trademark of The Open Group in the United States and other countries.

Linux is a trademark of Linus Torvalds in the United States, other countries, or both.

Other company, product or service names might be trademarks or service marks of others.