Author: skitching
Date: Sun May 1 00:12:05 2005
New Revision: 165467
URL: http://svn.apache.org/viewcvs?rev=165467&view=rev
Log:
Javadoc changes only: modified to improve readability.
Modified:
jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/ExtendedBaseRules.java
Modified:
jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/ExtendedBaseRules.java
URL:
http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/ExtendedBaseRules.java?rev=165467&r1=165466&r2=165467&view=diff
==============================================================================
---
jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/ExtendedBaseRules.java
(original)
+++
jakarta/commons/proper/digester/trunk/src/java/org/apache/commons/digester/ExtendedBaseRules.java
Sun May 1 00:12:05 2005
@@ -39,69 +39,100 @@
*
* <h4>When should you use this rather than the original?</h4>
*
- * <p>These rules are complex and slower but offer more functionality.
- * The <code>RulesBase</code> matching set allows interaction between patterns.
- * This allows sophisticated matching schema to be created
- * but it also means that it can be hard to create and debug mappings
- * for complex schema.
- * This extension introduces <em>universal</em> versions of these patterns
- * that always act independently.</p>
- *
- * <p>Another three kinds of matching pattern are also introduced.
- * The parent matchs allow common method to be easily called for children.
- * The wildcard match allows rules to be specified for all elements.</p>
+ * <p>
+ * This pattern-matching engine is complex and slower than the basic
+ * default RulesBase class, but offers more functionality:
+ * <ul>
+ * <li>Universal patterns allow patterns to be specified which will match
+ * regardless of whether there are "better matching" patterns available.</li>
+ * <li>Parent-match patterns (eg "a/b/?") allow matching for all direct
+ * children of a specified element.</li>
+ * <li>Ancestor-match patterns (eg "a/b/*") allow matching all elements
+ * nested within a specified element to any nesting depth.</li>
+ * <li>Completely-wild patterns ("*" or "!*") allow matching all elements.</li>
+ * </ul>
+ * </p>
+ *
+ * <h4>Universal Match Patterns</h4>
+ *
+ * <p>The default RulesBase pattern-matching engine always attempts to find
+ * the "best matching pattern", and will ignore rules associated with other
+ * patterns that match but are not "as good". As an example, if the pattern
+ * "a/b/c" is associated with rules 1 and 2, and "*/c" is associated with
+ * rules 3 and 4 then element "a/b/c" will cause only rules 1 and 2 to execute.
+ * Rules 3 and 4 do have matching patterns, but because the patterns are
shorter
+ * and include wildcard characters they are regarded as being "not as good" as
+ * a direct match. In general, exact patterns are better than wildcard
patterns,
+ * and among multiple patterns with wildcards, the longest is preferred.
+ * See the RulesBase class for more information.</p>
+ *
+ * <p>This feature of preferring "better" patterns can be a powerful tool.
+ * However it also means that patterns can interact in unexpected ways.</p>
+ *
+ * <p>When using the ExtendedBaseRules, any pattern prefixed with '!' bypasses
+ * the "best match" feature. Even if there is an exact match or a longer
+ * wildcard match, patterns prefixed by '!' will still be tested to see if
+ * they match, and if so their associated Rule objects will be included in
+ * the set of rules to be executed in the normal manner.</p>
+ *
+ * <ul>
+ * <li>Pattern <code>"!*/a/b"</code> matches whenever an 'b' element
+ * is inside an 'a'.</li>
+ * <li>Pattern <code>"!a/b/?"</code> matches any child of a parent
+ * matching <code>"a/b"</code> (see "Parent Match Patterns").</li>
+ * <li>Pattern <code>"!*/a/b/?"</code> matches any child of a parent
+ * matching <code>"!*/a/b"</code> (see "Parent Match Patterns").</li>
+ * <li>Pattern <code>"!a/b/*"</code> matches any element whose path
+ * starts with "a" then "b" (see "Ancestor Match Patterns").</li>
+ * <li>Pattern <code>"!*/a/b/*"</code> matches any elements whose path
+ * contains 'a/b' (see "Ancestor Match Patterns").</li>
+ * </ul>
+ *
+ * <h4>Parent Match Patterns</h4>
*
- * <h4>The additional matching patterns:</h4>
+ * <p>
+ * These will match direct child elements of a particular parent element.
+ * <ul>
+ * <li>
+ * <code>"a/b/c/?"</code> matches any child whose parent matches
+ * <code>"a/b/c"</code>. Exact parent rules take precedence over Ancestor
+ * Match patterns.
+ * </li>
+ * <li>
+ * <code>"*/a/b/c/?"</code> matches any child whose parent matches
+ * <code>"*/a/b/c"</code>. The longest matching still applies to parent
+ * matches but the length excludes the '?', which effectively means
+ * that standard wildcard matches with the same level of depth are
+ * chosen in preference.
+ * </li>
+ * </ul>
+ * </p>
+ *
+ * <h4>Ancestor Match Patterns</h4>
*
+ * <p>
+ * These will match elements whose parentage includes a particular sequence
+ * of elements.
* <ul>
- * <li><em>Parent Match </em> - Will match child elements of a particular
- * kind of parent. This is useful if a parent has a particular method
- * to call.
- * <ul>
- * <li><code>"a/b/c/?"</code> matches any child whose parent matches
- * <code>"a/b/c"</code>. Exact parent rules take precedence over
- * standard wildcard tail endings.</li>
- * <li><code>"*/a/b/c/?"</code> matches any child whose parent matches
- * "*/a/b/c"</code>. The longest matching still applies to parent
- * matches but the length excludes the '?', which effectively means
- * that standard wildcard matches with the same level of depth are
- * chosen in preference.</li>
- * </ul></li>
- * <li><em>Ancester Match</em> - Will match elements who parentage includes
- * a particular sequence of elements.
- * <ul>
- * <li><code>"a/b/*"</code> matches any element whose parentage path
starts with
- * 'a' then 'b'. Exact parent and parent match rules take precedence.
The longest
- * ancester match will take precedence.</li>
- * <li><code>"*/a/b/*"</code> matches any elements whose parentage
path contains
- * an element 'a' followed by an element 'b'. The longest matching
still applies
- * but the length excludes the '*' at the end.</li>
- * </ul>
+ * <li>
+ * <code>"a/b/*"</code> matches any element whose path starts with
+ * 'a' then 'b'. Exact parent and parent match rules take precedence.
+ * The longest ancestor match will take precedence.
+ * </li>
+ * <li>
+ * <code>"*/a/b/*"</code> matches any elements whose path contains
+ * an element 'a' followed by an element 'b'. The longest matching still
+ * applies but the length excludes the '*' at the end.
* </li>
- * <li><em>Universal Wildcard Match</em> - Any pattern prefixed with '!'
- * bypasses the longest matching rule. Even if there is an exact match
- * or a longer wildcard match, patterns prefixed by '!' will still be
- * tested to see if they match. This can be used for example to specify
- * universal construction rules.
- * <ul>
- * <li>Pattern <code>"!*/a/b"</code> matches whenever an 'b' element
- * is inside an 'a'.</li>
- * <li>Pattern <code>"!a/b/?"</code> matches any child of a parent
- * matching <code>"a/b"</code>.</li>
- * <li>Pattern <code>"!*/a/b/?"</code> matches any child of a parent
- * matching <code>"!*/a/b"</code></li>
- * <li>Pattern <code>"!a/b/*"</code> matches any element whose parentage
path starts with
- * "a" then "b".</li>
- * <li>Pattern <code>"!*/a/b/*"</code> matches any elements whose
parentage path contains
- * 'a/b'</li>
- * </ul></li>
- * <li><em>Wild Match</em>
- * <ul>
- * <li>Pattern <code>"*"</code> matches every pattern that isn't matched
- * by any other basic rule.</li>
- * <li>Pattern <code>"!*"</code> matches every pattern.</li>
- * </ul></li>
* </ul>
+ * </p>
+ *
+ * <h4>Completely Wild Patterns</h4>
+ *
+ * <p>Pattern <code>"*"</code> matches every pattern that isn't matched by
+ * any other basic rule.</p>
+ *
+ * <p>Pattern <code>"!*"</code> matches every pattern.</p>
*
* <h4>Using The Extended Rules</h4>
*
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]