The Perl Advent Calendar needs more articles for 2022. Submit your idea today!
Change History:

0.68 (tjmather) 1/16/2003
- Delay calling tput until delimiters are needed, and don't call if
  user specifies his/her own delimiters first (Ed Avis)
- Don't run tput if TERM is set to empty string (Ed Avis)
- Filled in MANIFEST

0.67 (tjmather) 5/11/2002
- Only use tput if TERM environment variable is set (Poul Sørensen)

0.66 (tjmather) 6/20/2001
- Removed file generated by h2xs that shouldn't have been there.

0.65 (tjmather) 6/20/2001
- XML::XQL is now it a separate distribution from libxml-enno again!
- Removed timezone warning from XML::XQL::Date (Marc Lehmann)

libxml-enno-1.05 (tjmather) 5/14/2001
- Fixed XML/XQL/Query.pod to include use XML::XQL::DOM; in Synopsis
  (Gene Dascher)

libxml-enno-1.04 (tjmather) 3/20/2001
- Updated XQLParser/Makefile.PL to use yapp instead of
  since was renamed to yapp starting with Parse::Yapp 0.30.
  This fixed a problem where it mangled XML/XQL/ if
  Parse::Yapp >= 0.30 was installed.
- Replaced '>' in __DATA__ section of t/xql_big.t with '>'.

libxml-enno-1.03 (enno) (not released)
- Fixed $intersect$ operator. It used to throw exception when parsing the XQL
  expression. Something like "xql_check method not implemented".
  (Thanks to Tatiana <>)
- Fixed q// and qq// operators. Typo in RE caused them to be unrecognized
  by the XQL expression parser.
- Fixed 'any' and 'all' modifiers. Typos in Parser.yp caused them to fail.
  (Thanks to James Curran <>)
- Fixed warning on Windows when using XML::XQL, related to tput.

0.63 part of libxml-enno-1.01 (enno) 2/17/2000
- all XML::XQL::Operator classes now 'use fields', which makes them faster
  and smaller (see man fields(3) and man base(3)).
- the minus '-' sign is now allowed in XQL function names etc.
- added the XQL+ document() method, which creates XML::DOM::Documents
  on the fly. The document() parameter can be a simple string (i.e. filename or 
  URL) or a query that evaluates to a bunch of filenames. 
  See XML::XQL for details. See also new test case: t/xql_document.t
- added the following methods which were found in the XPath spec to XQL+:
  round, floor, ceiling, concat, starts-with, contains, substring-before,
  substring-after, substring (not the same as substr, the index is 1-based!),
  translate, string-length (similar to length, but is also a method),
  normalize-space, sum. Also added ends-with, which is not part of XPath.
  See XML::XQL(3) for details.
- added XML::XQL::Query::dispose(). Call dispose on your query object to
  clean up circular references after you're done and avoid memory leaks.

0.62 part of libxml-enno-1.00 (enno) 2/17/2000
- XML::Checker now implements the PerlSAX Handler interface.
- Fixed XML::Checker::Parser to use XML::Parser::Expat::specified_attr to
  determine which attributes were specified (and which were defaulted by expat.)
  (I was using original_string before and parsing the string myself to
  figure out which attributes were specified, but there was a bug in my code
  which would generate bogus error-159's.)
  (Thanks to Jim Anderson <>)
- External DTDs with relative file paths (and without the 'file://' prefix)
  are now located using SGML_SEARCH_PATH.
  See XML::Checker::Parser pod for details.
  (Thanks to Stephane Bortzmeyer <>)
- XML::Checker::DOM is now obsolete. I moved the functionality to XML::DOM.
- The error descriptions in the XML::Checker manual page now have links to
  the appropriate sections and Validity Constraints in the XML spec.

0.61 (enno) 8/2/1999
- Added -H option to, which is similar to -h, but it doesn't print a 
  file header when there are no query results for that file.
- Fixed memory leak in It wasn't calling dispose on the XML::DOM
  document after it was done processing it, causing it to run out of memory
  when processing a lot of files.
- Fixed the regular expressions for XML tokens to include Unicode values > 127

0.60 (enno) 3/19/1999
- Fixed $lt$ and $ilt$ (operator '<' was working fine)
  (Thanks again, Ingo)
- Implemented ';;' (precedes) and ';' (immediately precedes) operators.
  - Added test cases t/precedes.t and t/immediately_precedes.t
  - Updated docs.
- Fixed dependancies in Makefile.PL. Date::Manip 5.20 (or less) won't work and
  XML::DOM 1.11 won't work. Since I was using Date::Manip 5.33, I now require
  you to do the same. If you don't want to switch, you're free to change the
  version number in Makefile.PL, but I wouldn't recommend it.
  (Thanks to Andrew McNaughton <>)
- Reimplemented code that sorts nodes in document order.
- Fixed bugs in subscript and filter operators (the ones with square brackets)
  - Added testcases t/subscript2.t and t/index2.t
  - In the subscript2 and index2 testcases only the first node was returned
  (Thanks to Christophe Guillon <>)
- Fixed all MacOS related build problems. (Those pesky newlines...)
  (Thanks to Arved Sandstrom for helping to fix them.)

0.59 (enno) 2/15/1999
- Performance improvement:
  - Removed automatic inclusion of XML::XQL::Date. Users must now explicitly
    'use XML::XQL::Date;' if they want to use date() or Date objects.
  - Performance analysis showed that about 75% was spent building the DOM
    (with DOM 1.14), so let's optimize the DOM further first...
- Fixed typos and grammar in the XML::XQL POD and Tutorial.
  (Thanks to John Durand <>)
- Fixed the collection functions: comment(), element() etc. They would throw
  exceptions like "Can't call method "_nodesByType" on an undefined value..."
  (Thanks to Ingo Macherius <>)
- Added t/comment.t test case.
- Made most XQL functions process the entire list of input nodes, rather than
  just the first one. This allows queries like "//comment()".
- Fixed bug in 'sort in document order' (sortBySrcNode) 
  This was used by $union$ and now also by collection functions.
- Fixed attribute() function. It ignored the optional parameter.

0.58 (enno) 1/25/1999
- Fixed bug in text() for Element nodes. It would sometimes omit the contents
  of certain text nodes when merging text within an Element node.
  (Thanks to Marcin Jagodzinski <>)
- text(0) and rawText(0) for Element nodes would include child Element nodes
  (contrary to the POD documentation)
- Added t/text.t test case.

0.57 (enno) 1/22/1999
- Fixed code related to sorting in document order when the node list contains
  Attribute nodes.
  (Thanks to Martin Virtel <>)

0.56 (enno) 1/20/1999
- Fixed Subscript related code (e.g. for queries a la "//author[2]") and
  added testcase t/subscript.t
  It used to throw the following exception:
  "Can't call method "setParent" without a package or object reference..."
  (Thanks to Arved Sandstrom <>)

0.55 (enno) 1/13/1999
- Added XML::DOM to dependancy list in Makefile.PL

0.54 (enno) 1/7/1999
- XQL keywords are now case-insensitive and dollar delimiters may be omitted.
- Changed regexp "s/^(\s*|#.*)*//" to "s/^(\s|#.*)*//" to avoid error "regexp *+
  operand can be empty" with Perl 5.004_4
- Removed build warnings a la 'Ambiguous use of ...' with Perl 5.004_4
  (Thanks to Tony Hammond <>)

0.53 (enno) 12/21/1998
- Fixed Union operator (bug in sorting code)
- Fixed XQL+ operators
- Changed Element::xql_text and Element::xql_rawText (i.e. text() and rawText() 
  methods) to recurse by default.
- Added defineElementValueConvertor() and defineAttrValueConvertor() to
  support user defined conversion of Element and Attribute value() results.
- Added samples/ A nifty utility that performs XQL queries on files
  and formats the output in multiple ways, or modifies XML files in place.
  (Run without parameters for Usage description.)
- Wrote Tutorial (use man XML::XQL::Tutorial)
- Added DOM_nodeType() method
- Changed default nodeType() from -1 to 0. This is returned for primitives.
- nodeType returns same as DOM_nodeType for all node types other than 
  CDATASection and EntityReference. It used to return -1 for node types not
  specified in the XQL spec.
- Fixed nodeTypeString() for processing instructions from "pi" to
  "processing_instruction" (as per the XQL spec)
- Fixed prefix(). It used to return the entire nodeName if there was no prefix.
- Changed t/sin2.t test case, so it won't spit out warnings
- Simplified build environment

0.52 (enno) 12/10/1998
- Fixed Makefiles and put submodules in subdirectories.
  (I had some soft links in my development environment, so everything
  worked for me. I forgot to test the installation from scratch. Sorry...)
- Added XML::DOM::Element::xql_rawTextBlocks for use in subst, map etc.
- Changed subst() to work on 'text blocks' for Element nodes by default.
  Added MODE parameter. MODE=1 uses value() for Elements, just like version 0.51
- subst() uses xql_setValue to modify objects that match. It used to create a new
  object when it matched an XQL primitive (to prevent people from modifying
  constants in the XQL query expression), but on second thought it doesn't seem
  likely that that will be a problem. (Hell, it might be a feature :-)
- Fixed generateFunction for when ARGCOUNT = [N, -1]
- Added new() function
- Cleaned up Date class and modified date() function accordingly
- Added defineExpandedTypes()
- Added more stuff to the POD documentation.

0.51 (enno) 12/7/1998
- First alpha release. Announced to Perl-XML mailing list.