======================================================================

 -------
| TODO: |
 -------

  - Implement type-based optimizations for: 
    o arithmetic operators applied to empty
  - Clean up datatypes & datamodel : remove all polymorphic operators
    now that we have monomorphic operators
  - Check all operators on () & with optimization enabled.
  - Implement optimization for sorting by document order.
  - Make the Galax code reentrant. This means getting rid of all
    global variables and pass any required global structure in a
    functional way.

  - Complete review of treatment of namespaces & namespace
    attributes. 

======================================================================

 ------------
| Changelog: |
 ------------

***** Galax Release 0.3.0 January 20, 2002 *****

January 22, 2003 - Jerome

  - Fixed the release number to 0.3.0

January 21, 2003 - Mary and Jerome

  - Fixed last minutes problems with use cases, tests and compilation.

January 19, 2003 - Mary
  
  - Added RELEASE_NOTES (documents changes in each new version)

  - Added RELEASE_NOTES and Bugs to web site.

  - Fixed evaluation and typing of FLWOR expressions with order-by
    clause and nested FLWOR expressions

    o Inner-for expression must contain sub-expressions (possibly
    if-then-else or let) that create ordered tuples *only*.

    o where expressions are now evaluated *before* order-by
    Evaluation of a where expression may yield the empty tuple. 

    o Changed _Concat_Extended_Value_Sequence to eliminate empty
    tuples during concatenation.

    o Changed typing of tuple expressions to permit the empty tuple
    type.
  
    o Changed CESort to take explicit sort variable instead of
    $glx:dot.  This is a necessary (and cleaner!) way to supported
    nested FLWOR with order-by clauses.

January 17, 2003 - Mary

  *** In the home stretch for v0.3!! ****

  - Updated website & usecases to include:
    NS, PARTS, REL, SEQ, SGML, STRING, TREE, XMP, XMARK, XML Schema

  - Deleted SEMANTICS from usecases

  - Removed evaluation/optimgen.{mli,ml}

  - Changed default return type of function to item*.

  - Fixed bug in FLWOR expressions that include both WHERE and
    ORDER-BY by normalizing:

    for $v in E1 where E2 order-by E3 return E4
    ==
    for $v in E1 order-by E3 return if (E2) then E4 else ()

    Inner-for expression must only create ordered tuples; any other
    complex expression raises error during evaluation.

    *Did not* touch corresponding UFLWR code. 

  - Replaced fn:concats by fn:string-join
  - Made fn:concat variadic.

  - Moved definition of typed-value from bltin.ml to into
  datamodel.ml.

  - Updated INSTALL/README

  - Fixed << and >> to be *strictly* less than/greater than
    comparators of document order.

January 9, 2003 - Jerome

  - Changed toplevel to apply optimization passes on the query
    prolog when the optim flag is on.
  - Turned the optim flag on by default!
  - Implemented first cut rough optimization rules to remove
    unnecessary sorting by document order. **THOSE RULES NEED TESTING**

January 9, 2003 - Mary

  - Added typed_value function to Datamodel.  Was named
    '_fn_data_node' in Bltin.

  - Added galapi/Datamodel_api.  Contains O'Caml object interface to
    Galax.  (Under construction)

January 8, 2003 - Mary

  - Moved built-in variables dot, position, last, sequence to
    Xquery_astutil so available to all modules.

  - Changed prefix of all built-in and generated variables to "glx" to
    avoid name conflicts.

  - Fixed bugs in parsing and printing of optional type declaration in
    'for' and 'let' expressions, and of printing optional variables in
    'case' clauses.

  - Changed signatures/implementations of all arithmetic operators to
    accept empty sequence as argument.  This change eliminates all the
    typeswitches that were polluting the normalized code. 

  - Implemented type-based optimizations for: 
    o fn:data
    o fn:boolean
    o dynamically dispatched functions converted to statically
      dispatched functions

January 5, 2003 - Mary

  - Updated Makefile and INSTALL, NEW, README, and STATUS
     documentation for v0.3 release.

January 5, 2003 - Mary

  - Following changes align arithmetic & comparison operators with
    *February 2003* working drafts:

    * Implemented general comparison operators 
      o untypedAtomic cast to double
    * Implemented new semantics for atomization/fn:data()
    * Implemented fn:boolean()
    * Implemented semantics of cast on (atomic?) only 
    * Changed EBV code to call to fn:boolean()
    * Implemented conversion rules for function arguments when
      required type is <: anySimpleType.

  - Fixed bug in node & order comparisons: empty sequence not handled.
  - Fixed type declarations to propogate declared type, not type of
    expression.

December 20, 2002 - Jerome

  - Fixed bug in parsing of function declaration when no type is given
    for the parameters / return clause. Now generates the proper item*
    default type.

December 18, 2002 - Mary

  - Following changes align arithmetic & comparison operators with 
    *February 2003* working drafts:

    * Implemented promotion semantics for arithmetic operators
      o untypedAtomic cast to double
    * Implemented "new" transitive "eq" operators 
      o untypedAtomic cast to string.
      o eq on () raises type error.

  - TODO: 
    - Change atomization to fn:data()
      Change EBV to fn:boolean()
      Implement fn:boolean()
    - Optimization rules for function dispatch & fn:data()
    - Clean up datatypes & datamodel : remove unnecessary operators

December 13, 2002 - Mary

  - Implemented dynamic function dispatch.
  - Implemented promotion of atomic values/types in dynamic & static
    semantics.  
  - Added monomorphic equality/inequality operators for all numeric
    types, string, QName, and anyURI.
  - Changed to implement above:
    stdlib/{bltin.ml,pervasive.xqp}
    toplevel/{toputils}*
    normalization/{mapping,maputil}*
    datatypes/{datatypes}*
    datamodel/{datamodel}*
    typing/{typing}*
  - Fixed string manipulation bugs.
    String.index and String.sub not guarded by 'try-with'.
    Changed split_string_on_char into split_left_on_char &
    split_right_on_char.
    Changed:
    base/gmisc.ml
    namespace/qname_lexer.src

  - TODO: 
    - New semantics for fn:data()
      New semantics for fn:boolean()
    - Optimization rules for function dispatch & fn:data()
    - Clean up datatypes & datamodel : remove unnecessary operators

December 9, 2002 - Jerome

  - Implemented two 'printing functions':

      glx:print-string   which prints a string on stdout
      glx:print-item     which prints an XML item on stdout

    to help users debug their XQuery programs [Requested by Bard Bloom
    Dec. 4th]

  - Fixed namespace handling to reject wrong rebindings of special
    namespace prefixes xml: and xmlns:.
  - Implemented support for fn:base-uri.
  - Implemented support for xml:lang:
       F&O function fn:lang
       Galax function glx:get-lang which merely computes
       the right language for any given node.

December 5, 2002 - Mary

  - Added 'Bugs' file for tracking bugs
  - Fixed bug in fn:data().  On content with type xs:anyType, returns
    string-value. 
  - TODO: align fn:data() with new definition.

December 5, 2002 - Jerome

  - Fixed bug in variable substitution for the position variable.
  - Fixed bug in galapi: should not put the default context in a
    global variable.

December 4, 2002 - Mary

  - Made glx:docorder and glx:distinct-docorder builtin functions.  
    Changed typing accordingly.
  - Implemented semantics of path expressions, including ordering by
    document order and removing duplicates. [Section 3.2, FS Section
    5.2]
  - Changed core grammar to distinguish between CEForwardAxis and
    CEReverseAxis. 
  - Added warning print functions to base/error
  - Fixed bug in sort : stable & non-stable were swapped
  - Changed errors to warnings in schemamapping for unsupported
    features: annotation and any group.

December 4, 2002 - Jerome

  - Attributes now allow the '....' syntax as they should!
  - Turned xf into fn everywhere. [Nov. 2002 WD]
  - Changed fn: and op: URI's to:

          http://www.w3.org/2002/11/xquery-functions
     and  http://www.w3.org/2002/11/xquery-operators

    respectively.
  - Implemented normalization for FLWOR updates. This makes use of the
    tuple features.

December 3, 2002 - Jerome

  - Changed the syntax of function declarations to use the new syntax
    with 'as SequenceType'.
  - Changed the syntax of typeswitch to use the new 'as' keyword
    before sequence types.
  - Changed () to empty in the sequence type [ Old change missing ]

December 2, 2002 - Jerome

  - Fixed last dirty bug in the semantics of sort by due to the fact
    that variable substitution was not working properly for the '.'
    variable.

November 27, 2002 - Jerome

  - Fixed numbers of bugs in handling of legacy E1 sort by E2
    expression.
  - Fixed problem in whitespace handling in the pretty printer (should
    not print whitespace-only text in element content to the output).
  - Fixed static typing for distinct-node, missing.
  - Fixed parsing bug in XML documents, was not allowing whitespace
    around equal sign in attributes.
  - Added support for tuples in the data model and type system.
  - Added new Core operations dealing with tuples.
  - Added support for "order by" in FLWR expressions using the new
    tuple operations.
  - Fixed variable substitution to work when the substituted variable
    is $fs:dot! Note that in that case, the expression AxisNodeTest
    must be treated separately. The way variable substitution is done
    is by adding the following let just around it:

    Axis NodeTest [ Expr1 / $fs:dot ]
    ------------------------------------
    let $fs:dot = Expr1 in Axis NodeTest

November 25, 2002 - Mary

  - Hacked Typing module to ignore empty text node expressions, which
    are never constructed, and therefore never contribute to a
    type. Empy text nodes exist solely to delimit enclosed expressions,
    and therefore cannot be removed during normalization.  Instead, we
    ignore them during static typing.  This code must be revisited
    after we implement validating element constructors.

November 20, 2002 - Jerome

  - Added some support for simple updates and conditional updates.
  - Fixed parsing problem for document type declarations.

November 18, 2002 - Jerome

  - Added support for xml:space directive.

November 18, 2002 - Mary

  - Changed config/Makefile.gen to use OCAMLBIN variable, if it is
    set.
  - Fixed dynamic semantics of attribute and element
    constructors and of whitespace in constructors
  - Fixed static typing of attribute and element constructors -- is
    now conservative: raises error if content type is mix of values and
    nodes. 
  - Changed element node constructors in datamodel to collapse
    adjacent text nodes and eliminate empty text nodes. 
  - Added tests to XQueryUnit (see xqueryunit/Changes)

  - *** Noto Bene: the document loader is still in flux, therefore 
    loaded documents do not "round-trip" correctly when serialized ***

November 17, 2002 - Jerome

  - Added support for 'at $i' in for expressions.

November 16, 2002 - Jerome

  - Fixed some of the compilation phase for the toplevel query
    prolog/context.
  - Fixed bug in galapi. Made sure the externally bound variables are
    added to the context *before* compiling the XQuery prolog.
  - Added support for multiple kinds of statements in the toplevel
    expressions. This is mostly transparent now, but is required to
    add support for updates.
  - Added support for keys and keyref operations. Syntax to define a
    key is:

    define key "KeyName" { Expr1 } { Expr2 }

    "KeyName" is a string literal used to identify the key used. Expr1
    is used to define the set of nodes on which the keys are
    defined. Expr2 is an expression which has implicitly each node
    from Expr1 bound as the context node '.' and describe the
    component used to define the key. What ever Expr2 returns, the
    string value is used for to define the key.

    glx:keyref("KeyName", Expr3) is a special function which can be
    used to access the XML node bound to the result of Expr3 in the
    key whose name is "KeyName". The first parameter of that function
    *must* be a string literal.

November 14, 2002 - Jerome

  - Added some new functions in Galapi.

November 13, 2002 - Jerome

  - Fixed bug in lexer having to do with string buffers not properly
    reset during lexical state changes. This fixes problems in
    attributes content escaped as XQuery expressions.
  - Added separate module to handle calls to the error()
    function. Xerror, which can now contain a proper data model value
    as a message.

November 12, 2002 - Mary
  - Testing CVS server

November 5, 2002 - Jerome

  - Made fixes to projection now working for: child::, attribute::,
    descendant, self::, descendant-or-self::. Improved projection for
    attributes.

November 4, 2002 - Jerome

  - Fixed XMark query 14.

November 2, 2002 - Jerome

  - Fixed XMark query 19.
  - Fixed wf-sax to use the monitor.
  - Fixed a bug in the makfile which was building a symbolic link to
    the wrong executable for wf-sax and validate.
  - Fixed tabulation in the monitor.
  - Added a mini update parser. Not connected to the rest of the
    system yet.

October 29, 2002 - Jerome

  - Cleaned up the top of the XQuery AST. Removed the notion of module
    list. Fixed the parser and toplevel loop accordingly. Now a single
    file contains only one module.

    The ';' syntax is now only used to separate several statements
    (currently only single expressions) at the end of the module.  The
    only difference visible externally is that one cannot write prolog
    components after a given expression anymore.

October 28, 2002 - Jerome

  - Added statistics on the number of data model nodes created.
  - Fixed bug in monitoring for DOM-like parsing and loading of
    document.

October 27, 2002 - Jerome

  ** Welcome to the big fall cleanup! **

  ** This is a large reorganization which will require people to
  ** migrate. Recommended is to do a full checkout again, except for
  ** people who made actual changes. More changes in the terminology
  ** inside the Datamodel and Datatypes modules are still expected.

  - Fairly deep cleanup of the directory structure, file names, and
    module organization. Here is the new organization, in compilation
    order:

        o ./base	 --  Basic modules, not really XML specific

            XML related modules have been moved later in the
            compilation chain. Remains:

              Gmisc -- Additions to Caml's stdlib
              Id -- Identifiers generation
              Pool -- String pools
              Finfo -- Handles locations in file
              Error -- Galax error handling
              Pervasive -- Wrapping of the pervasive.xq file
              Conf -- Global variables and configuration parameters
	      Args -- Dealing with function arguments
	      Whitespace -- Operations on whitespace in strings
	      Occurrence -- Operations on occurrence indicators

        o ./fsa		 -- Generic package for finite state automatas

            This package has been made generic. Most modules only
            contains functors, parameterized by an alphabet of
            letters, which will make the transitions for the
            automatas.

              Fsautil -- Functions for the rest of the FSA package
	      Nfa -- Non deterministic FSAs
	      Dfa -- Deterministic FSAs
	      Regexp -- Regular expressions and Glushkov construction
	        from regular expressions to NFA and DFA. This module
	        relies on the fact that states in the automata should
	        be positions in the regular expression, as specified
	        in the Glushkov construction. This also contains
	        intersection and reachability (emptiness check) for
	        the automata(s)

        o ./namespace	--  Operations on XML names, and namespaces

            All basic support for XML names is located here.

	      Qname_lexer_{encoding} -- Lexer for qualified names for
  	        a given character encoding
              Qname_lexer -- toplevel access to the QName lexer(s)
	      Namespace -- Support for namespace names, local names,
  	        namespace prefixes and URIs. It also implements
  	        namespace environments
              Sym -- Support for 'compiled' names, i.e., names stored
  	        somewhere in a string pool
              Resolve -- Support for namespace resolution. Given a
  	        qname and a namespace environment, it can return you a
  	        resolved name

        o ./datatypes	--  Support for XML Schema datatypes

            Support for XML Schema datatypes should now all be located
            in this directory.

              Decimal -- xsd:int, xsd:integer, xsd:decimal
	      DateTime -- xsd:dateTime, xsd:date, xsd:time
	      AnyURI -- xsd:anyURI
	      Datatypes_lexer -- Lexer for the various datatypes
	      Datatypes -- Top-level support for datatypes. Contains
	        implementation for atomic values in the XML Query data
	        model

        o ./parsing	--  Abstract Syntax Trees, XML&XQuery parsers

            The parsing 

              Xml_ast -- XML Abstract Syntax Tree (if materialized)
	      Xquery_ast -- XQuery Abstract Syntax Tree
	      Print -- Printing functions for the AST's
 	      Xml_astutil -- Construction and misc. operations on the
	        XML AST
 	      Xquery_astutil -- Construction and misc. operations on
	        the XQuery AST
              Lexutil -- Lexing utilities, including support for
  	        multiple lexical states
              Xquery_parser -- XQuery parser
              Document_lexer_{encoding} -- XML Document prolog lexer
	        for a given character encoding
              Opening_tag_lexer_{encoding} -- Opening tag lexer for a
	        given character encoding
              Closing_tag_lexer_{encoding} -- Closing tag lexer for a
	        given character encoding
              Text_lexer_{encoding} -- Text content lexer for a given
	        character encoding
              Lexers_{encoding} -- Toplevel access to the lexer(s) for
                a given encoding
              Xmldecl_lexer -- XML declaration lexer
	      Type_lexer -- XQuery type system lexer
	      Xquery_lexer -- Main XQuery lexer

        o ./monitor	--  Monitoring of Galax activity

              Monitor -- Used to monitor CPU and memory consumption

        o ./schema      --  XML Schema and XQuery type system

            One step further in typing, now support for XML Schema and
            the XQuery type system. A major rewrite of this package is
            expected [Support for named typing].

              Glushkov -- Wrapper on top of the FSA
                package. Implements low-level inclusion and
                intersection over content models
              Schemamapping -- Mapping from XML Schema to the XQuery
                type system
              Schemautil -- Various operations on types. Pretty messy
                in there...
              Theta -- Subsumption mappings between type names, used
                during the subtyping algorithm
              Subsumption -- Main subtyping module
              Simplification -- simplification over computed types
              Typeutil -- More operations on types... used in the rest
                of the type checking

        o ./normalization -- Query normalization

            This module corresponds to normalization as specified in
            the XQuery 1.0 and XPath 2.0 Formal Semantics.              

  - Clean up of terminology in several modules, notably datatypes, and
    data model. Here are the detailed changes:
      --> Bound module		becomes Occurrence module
          Bound.bound type	becomes Occurrence.occurs type
      --> Simple module		becomes Datatypes module
      --> Data in Simple	becomes Atomic in Datatype
      --> _text in Simple	becomes _untyped in Datatype
      --> oforest 		becomes Sequence
      --> InstanceNode		becomes Node
      --> Instance		becomes Item
      --> InstanceForest	becomes Value

  - Node names are aligned with names in the XQuery data model
    document.
      --> ElemNode		becomes ElementNode
      --> AttrNode		becomes AttributeNode
      --> DocNode		becomes DocumentNode
      --> NSNode		becomes NamespaceNode
      --> PINode		becomes ProcessingInstructionNode

  - Fixed bug in toplevel Galax processing files in reverse input
    order when given on the command line! :^)

October 26, 2002 - Jerome

  - Made a number of changes to try to understand the reason the data
    model is so big in memory. Problems are in part due to the way
    memory measure is done, which makes difficult to measure the
    actual size of a memory object.

      o Added some printing of the size of the string
        pools.
      o Simplified the way some of the loading with projection is done
        to avoid registering names which are discarded by projection.
      o Changed the SAX events to use QNames instead of symbols from
        the pools. This is better since this way events do not get
        recorded in the string pools. SAX event are discarded anyway.

October 25, 2002 - Jerome

  - Fixed bug in xf:index-of which was not using node identity has it
    should have. This bug was triggered by projection, since it was
    removing many other nodes and making it more likely that other
    nodes would have the same structure among siblings.
  - Fixed monitor to print the phase name for each line in the
    summary.
  - Fixed the document function to make sure it calls the monitor.

October 21, 2002 - Mary

  - Implemented element constructor semantics as described in Section
    3.7.1.  An item sequence containing both non-attribute nodes and
    atomic values is converted to a node sequence before applying
    element constructor.  Effects:
      datamodel/datamodel.mli   
      evaluation/xaeval.ml

  - Implemented typing for element constructors: an item-sequence type
    containing both non-attribute node types and atomic value types is
    converted to a node-sequence type before typing element
    constructor.  Effects:
      typing/typing.ml

  - NB: The above changes will be effected by validating
    constructors. 
  
October 17, 2002 - Amelie

  - Changed projection print function to output to formatter
  - Fixed some projection bugs

October 16, 2002 - Jerome

  - Added fairly extensive support for monitoring memory and CPU
    activity in Galax. Monitoring can be turned on with [-monitor on]
    along with the now standard [-output-monitor filename].

    This gives detailed memory and CPU consumption for each processing
    phase. It also allows to wrap monitors around sub-activities, for
    instance this is used to monitor document loading, which is
    typically an expensive process.

    There is a new directory and interface for this in ./monitor.

***** Galax Release 0.2.0 October 15, 2002 *****

October 14, 2002 - Jerome, Vasilis, Mogan

  - Hooked up minimal support for the xs:dateTime datatype. Not
    enabled in the system yet.

October 13, 2002 - Jerome

  - Cleaned up the Caml API.
  - Added possibility to add a global XQuery variable from the Caml
    side.

October 12, 2002 - Jerome and Amelie

  - Implemented projection for a complete query.
  - Added some regression tests for projection in the
    ./regress/projection directory. Those trip some bugs in loading
    with projection when // is involved. Those tests are not done run
    by default yet. use make project in the ./regress directory
    instead.
  - Added options in the Galax interpretor related to projection.
        [-print-projection on] prints the path used for projection.
        [-print-optimized-projection on] prints the path used for
         optimized projection.
        [-output-projection filename] prints back the input document
        after projection.

October 11, 2002 - Jerome

  - Updated the STATUS file, notably the section on F&O.
  - Fixed bug for usecase tests under windows.
  - Fixed bug in makefile for ISO-8859-1 lexer.
  - Put all of the non standard functions in the glx: namespace. This
    impacts the following functions:
       glx:docorder
       glx:distinct-docorder
       glx:unique
       glx:optional
       glx:union-values
       glx:intersect-values
       glx:except-values
       glx:document-sax
       glx:document-validate
  - Remove xf:distinct from pervasive, obsolete.
  - Fixed some flag problem generated during printing of core
    expressions.
  - Added optimization as an option in the demo.
  - Aligned parameters in the demo with processing phases/printing
    options from the command line.
  - Moved the 'english text' in the web demo to be a comment at the
    beginning of the query expression instead of part of the form.
  - Fixed the web demo form field names.
  - Fixed some remaining bugs in printing of expressions in the Web demo.
  - Added value-based union, intersection and difference.
  - Added NEW file to record major changes between releases.
  - Changed release number to 0.2.0.
  - Renamed ./capi into ./galapi.
  - Created automatic packaging for the source and for the
    pre-installed binary versions.
  - Fixed symbolic links to the executables to be relative instead of
    absolute for better portability (e.g., moving the installed binary
    to another directory).

October 11, 2002 - Mary

  - Added support for arithmetic operators on xsd:integer
  - Added rules for promoting between xsd:integer and other numeric
    types. 

October 7, 2002 - Amelie and Jerome

  - Added support for document projection at loading time. Made
    preliminary tests.

  ** BREAKING NEWS Tuesday October 7th, 2002 6:30pm EDT: The first
     Galax query to run on 1Gb document is XMark usecase 1. It ran on
     a Linux 256Mb memory box, and took about 1 minute to give a
     (correct) result!

October 5, 2002 - Jerome

  - All the use cases and regression tests now work with -optim
    on. Included a third pass on the usecases which tests them with
    optimization on.
  - Fixed bug in recursive factor function used to compute the type of
    descendant. Was forgetting to keep document node types. This fixes
    a bug in the sgml use case.
  - Changed toplevel to turn -print-xml off automatically when using
    -dynamic off.
  - Complete fix to the treatment of quantified expressions.
     o Added support for multiple bindings in quantified expressions
       in the AST and the parser [Forgotten August 16th change].
     o Fixed pretty-printer to be pretty for quantified expressions
       and support multiple bindings.
     o Added quantified expressions in the core. Now some and every
       are preserved pretty much 'as is'. Multiple bindings are turned
       into nested unary some/every. This enables a nicer normalized
       form for many expressions and optimization. See below.
     o Changed normalization to preserve quantified expression in the
       core. Changed normalization of 'map_existential' to use
       existential quantification directly.
     o Added typing rules and evaluation code for quantified
       expressions. It seems the evaluation should be more efficient
       like this than the previous one using not(empty(for...)).
     o Added optimization rules for quantified expressions. Those are
       quite similar to for. Ones, this enables actual optimization of
       predicates and operators in XPath in many standard cases.
     o Added a few regression tests for quantified expressions.

October 4, 2002 - Mary

  - Added examples/ and examples/ml-api/ directories.
  - Minor changes to README and INSTALL.

October 3, 2002 - Jerome

  - Added JAVAINCLUDE parameter in the configuration makefile. This
    will allow users of varions JDK's to point to the correct include
    directory where jni.h is located. [Thanks to Lars Nilsson for
    pointing out the problem and the fix!].
  - Fixed README and INSTALL files.
  - Fixed serialization for floating point numbers, doubles and
    decimals, implementing XML Schema canonical value properly.

October 3, 2002 - Jerome & Mary 

  - Added missing test results in regress/
  - Added tests regress/typeswitch_empty*.xq    
  - Fixed numerous bugs in typing/typing.ml related to factored types 
    (for CEFor, CESort, CETypeswitch, distinct-values, CEUnordered)
  - Fixed typing bug in which some core expressions were not typed
    o Caused optimization to fail

October 2, 2002 - Mary

  - Fixed normalization & dynamic semantics of function application

    o Added dynamic check that actual argument is instance of
      corresponding formal type and that return value is instance of
      return type.  

    o Added check at function application site (not in function body)
      so that rule can be applied consistently to user-defined and
      built-in functions.  (Could be moved into function body for
      user-defined functions.)

      (NB: Dynamic type check is only necessary if static analysis is
       off.  We should generate dynamic checks conditionally, but will
       wait to do this until context issue is resolved.)

    o TODO : SequenceType matching not fully implemented (DTTypeRef)
      in Xaeval.of_type_by_name and Commontype.small_type_unit.

  - Updated stdlib/pervasive.xqp to use data types instead of type
    names in function signatures
  - Fixed signature of item-at() & corresponding tests
  - Added Galapi.eval_xquery_fun 

October 2, 2002 - Jerome

  - Fixed compilation chain to work smoothly under Windows. Tested
    with MinWG.

    ** Warning: for some obscure reason, some wrong tests have been
       committed. No record was found. **

September 30, 2002 - Jerome

  - Fixed the document() function to keep track of previously opened
    documents. Multiple access to the same document result in the same
    data model instance.
  - Removed dependency to physical pervasive.xq file in the Galax
    directory. The pervasive file is now compiled directly within the
    Galax engine. This allows installation of the system anywhere
    without requiring knowledge of the installation directory at
    compile time. This will be good for binary packages.

September 27, 2002 - Jerome

  - Implemented F&O Section 15. Context Functions:
        xf:context-item
  - Implemented F&O Section 13. Functions and Operators on Nodes:
        xf:name
        xf:namespace-uri
        op:node-equal
        xf:deep-equal
        op:node-before
        op:node-after
        xf:copy
        xf:root
  - Finished implementing F&O Section 14. Functions on Sequences:
        xf:empty
        xf:exists
        xf:distinct-nodes
        xf:distinct-values
        xf:insert
        xf:remove
        xf:subsequence
	xf:sequence-deep-equal
	xf:sequence-node-equal
	op:union
	op:intersect
	op:except
        xf:count
	xf:avg-{int,decimal,float,double}  // Monomorphic versions...
  - Removed xf:length obsolete.
  - Added a glx: prefix and URI for Galax additions to F&O, types,
    etc. URI for the Galax namespace is http://db.bell-labs.com/galax

September 27, 2002 - Mary

  - Tested CAST expression. 
    o See test matrix in regress/evaluation/cast_test_matrix.txt
  - Implemented type promotion rules for 
    o Arithmetic operators
    o Value comparison operators
    o Updated regression tests and usecases effected by this change

September 25, 2002 - Mary

  - Changed version to 0.2
  - Revised STATUS document
  - Changed default serialization to emit item sequences as XQuery
    sequences (i.e., ',' delimited)
    o Updated regression tests and usecases effected by this change
    o Sec 3.7.1: Element Constructor
      Added instance_forest_to_node_forest to datamodel.ml to 
      implement conversion of item sequence to node sequence.
  - Added xq: prefix and namespace for serializing <xq:result/>
  - Implemented 
        xf:string()
        xf:string(item?)
        xf:error(item?) - now reports user-defined error

  - Fixed expression printing bug in website/demo

September 24, 2002 - Jerome

  - Fixed bug about the default namespace not being remembered.
  - Fixed bug about default namespace for attributes, in printing and
    path expressions.

September 22, 2002 - Jerome

  - Implemented F&O Section 9. Functions on QNames:
	xf:expanded-QName
	xf:get-local-name-from-QName
	xf:get-namespace-from-QName
  - Revised F&O Section 7. Functions and Operators on Booleans:
        xf:true
        xf:false
        xf:not
        op:and      (* Missing in F&O *)
        op:or       (* Missing in F&O *)
  - Implemented F&O Section 14. Functions on Sequences:
        op:to
        xf:boolean
        op:concatenate
	xf:item-at
  - Implemented range expressions, backed up by the op:to operator.

September 21, 2002 - Jerome

  - Fixed function normalization to lookup function *after* namespace
    resolution instead of based on the namespace prefix. This fixes
    errors on type constructors (xs:string, etc.) and special
    functions (xf:position, xf:error, etc.).
  - Removed "ERROR" function obsolete.
  - Fixed built-in simple type table so that both xs: and xsd:
    prefixes would work in casting and constructor operations.
  - Made sure all errors are reported correctly at the toplevel.
  - Made names of errors and error messages more consistent.

September 20, 2002 - Jerome

  - Turned xf: into op: for operators.
  - Merged 3 source branches from Amelie, Mary and Jerome.
  - Implemented URI operations:
      xf:base-uri    (partially -- See XQuery issue)
      xf:resolve-uri

September 20, Jerome and Amelie

  - Added first prototype of path analysis.
  - Created new ./analysis directory.
  - Changed compilation order to have normalization before
    datamodel. The ./analysis directory is compiled between
    ./normalization and ./datamodel.

September 20, 2002 - Mary

  - Implemented -serialize-wf switch

September 19, 2002 - Mary

  ** MAJOR CHANGES TO COMMAND LINE INTERFACE **
  - See documentation in galax/README for new options
      o Changed toplevel/xmlquery.ml capi/toputils.ml
      o Updated regress/runtest.perlp, usescases/runtest.perlp,
        & website/demo to use new options

  - Implemented xsd:TYPE constructor functions

September 19, 2002 - Jerome

  ** CHANGE TO COMMAND LINE EXECUTABLE NAME **
  - Changed the name of the command line tools:
      xmlquery --> galax      (main command-line executable)
      galax    --> galaxtop   (Caml interpretor with Galax embedded)
  - Integrated netstring version 0.10.1 directly into Galax. This
    removes dependencies to both netstring and findlib, and is the
    base for URL support in Galax. It adds dependency to both Unix and
    Str modules in Caml, but this is probably inevitable (e.g., for
    date and time support).
  - Moved the character sets to ./tools/charsets. All third-party code
    is now located in the ./tools directory.

September 18, 2002 - Jerome

  - Fixed the expected output for the usecases which do not use static
    typing. (XMARK, PARTS, and NS).
  - Started implementing F&O, version August 16th. Added:
      xf:string
      xf:local-name
      xf:node-name
      xf:node-kind

September 18, 2002 - Mary

  - Implemented new normalization rules for Atomization and Effective
    Boolean Value (EBV).  These rules enforce stricter static typing
    than previous rules.
  - Some regression & usecase tests that previously raised dynamic
    errors now raise static errors. 
      o Disabled static typing for NS, PARTS, and XMARK usecase tests
  - Modified demo
      o Disabled static typing for NS, PARTS, and XMARK usecases
        See usecases/Usecases file
  - Added Static_Type_Error to base/error.ml

September 17, 2002 - Mary & Jerome

  - Changed static typing of typeswitch to allow branches to fail. The
    overall typeswitch fails if all the branches fail.
  - Changed the static typing to make sure all sub-expressions are
    annotated with a type. All ill-typed expressions are annotated
    with the 'none' type. This should make the optimizer happy.

September 15, 2002 - Jerome

  - Fixed the Web demo to work with the new use case organization.
  - Slightly reorganized the use cases, for the needs of the automatic
    testing:
      o All XML and XSD files are now in ./usecases/docs
      o All usecases have now a _usecase.xq prefix
  - Fixed bug in the parser which should parser a sequence of toplevel
    expressions as a single expressions sequence instead of a list of
    expressions.
  - Finished fixing the pretty printer for XQuery
    expressions. Precedence should work fine now.
  - Tested the pretty printer through boot-strapping, using the
    following steps:
      o parsed use cases.
      o pretty-printed back all of the expressions.
      o checked that the pretty-printed expression parse back and run
        the use cases as the original query.
  - Added test script in the use case directory. This test runs all of
    the working use cases, and also performs test of the
    pretty-printer through boot-strapping (as described above).
  - Hooked up testing of the use cases to the toplevel 'make tests'.

    ** From now on, each commit must be preceded from a make tests'
       directly at the toplevel. **

September 12, 2002 - Jerome

  - Removed binary operation 'to' obsolete, already had been replaced
    by RangeExpr.
  - Removed attribute list from computed element constructor's AST,
    unused.

September 11, 2002 - Jerome

  - Fixed many problems in the pretty printer for expressions. Started
    implementing support for precedence in the pretty printer.

September 8, 2002 - Jerome

  - Fixed error message for unallowed castings to xs:boolean, xs:integer
    and xs:int.
  - Bug on sorting with empty greatest was already fixed.
  - Fixed all of the namespace support for functions. Implemented
    support for default function and element namespaces.
  - The default namespace for functions is now the one from F&O. xf:
    and op: are now recognized by default.
  - Reorganized static typing for functions. Built-in functions with
    specific typing rules are now handled separatly, through a table
    lookup.
  - Fixed various problems with namespace handling. Added xmlns: as a
    built-in namespace prefix. Added xsi: as an XML Schema
    namespace prefix, will be used as soon as support for XML Schema
    named typing is added. Fixed all built-in namespaces
    (xml,xmlns,xs,xsd,xsi,xf,op) to the correct URIs.

    ** TODO: Better support of nested namespaces inside element
    constructors is still needed. Some bugs are lurking there. **

September 6, 2002 - Gargi and Jerome

  - Installed latest version of the optimization rules.
  - Fixed all of the optimization regression tests so all errors are
    recorded as bugs.
  - Fixed the regression test program so that -all is working.

    ******************************************************************
    ** All committed changes should now use be preceded to a run of **
    ** the regression tests with the -all option                    **
    ******************************************************************

  - Moved the GALAXSRC variable from ./config/Makefile to

    ./regress/Makefile.conf

    This is now setup by default to .. so the standard user should not
    have to do anything about it, except if he wants to move the
    regression tests to a different location.

  - Fixed the main Makefile so that it will still work if there is no
    API to compile.
  - Fixed output formatting for the regression tests, so it will print
    a simple report on stdout.
  - Added a "make tests" target in the main makefile for Galax users
    will be able to run them when they compile the system. Document it
    in the INSTALL file.

September 4, 2002 - Jerome and Amelie

  - Fixed the SAX parser wrt. new XML lexers. Notably, whitespace in
    document root and opening tags was not handled properly.
  - Implemented loading from well-formed documents to the XML Query
    data model from SAX streams.
  - Added a document-sax(...) function in the built-in library which
    uses SAX parsing instead of DOM parsing.

August 26, 2002 - Jerome

  - Added support for multiple character encodings.

    This required pretty deep changes in the compiling
    process. Notably, separate Makefiles are used for various
    character encodings. The configuration makefile can be used to
    select a subset of the available encodings. The compilation
    process then gets parameterized by the selected encodings. The
    -linkall flag *must* be passed to the Caml compilers.

August 23, 2002 - Jerome

  - Added back support for escaped names (e.g., :item, :for) in the
    XQuery parser.
  - Simplified the compilation process to two simple steps: "make",
    followed by "make install".
  - Implemented UTF-8 and ISO-8859-1 support at the parsing level.
  - Implemented appropriate handling of XML character sets at the
    parsing level.

    Note:
      This change required some pretty serious rewrite of each lexer,
      which is not partially generated from auxiliary files 'a la'
      PXP.

      Character sets and pre-compilation tools are courtesy of Gerd
      Stolpmann, and Claudio Sacerdoti Coen.

  - Fixed all bugs related to handling of characters in the parsing
    tests.

August 21, 2002 - Jerome

  - Factorized the XML-DOM and XQuery parsers. Remove the original XML
    parser and lexer. Added document prolog lexer.

August 20, 2002 - Jerome

  - Fixed the syntax for the query prolog.
     Works: declare namespace
            default element namespace
            import schema namespace prefix = uri
            import schema default element namespace = uri

August 19, 2002 - Mary

  - Fixed bug in normalization of "<<" and ">>"
  - Fixed bugs in regress/evaluation/node_comp*
  - usecases/
    - Pre-August usecases compile & run, but are not up-to-date
      w.r.t. 18 August Usecase document
  - website/
    - Recompiled and tested
    - Previously deleted functions:
      Gmisc.load_file added to demo/demo_conf.ml 
      Toputils.print_{core_}xquery_text_from_string added to
       demo/querycgi.ml

August 15, 2002 - Jerome, Mary, Gargi

  - Traded a bug for another: Fixed typing of axis so it would not
    fail for complex content. Currently atomic types are turned into
    text node types, but the adjacent 'text node types' are not
    merged.
  - Fixed parser to deal with the new grammar (August 16th) for
    expressions. Notably:
        o for/let/quantifiers now have an optional type assertion.
        o Removed type assertions (assert as).
        o Added unordered expression which does nothing for now.
        o Changed the syntax of typeswitch.
        o Changed 'sortby' to 'sort by'
  - Added optimization which removes type assertions when the static
    inference shows it is a no-op.
  - Changed makefile so that xmlquery et al will be links to the
    native code version if available.

August 14, 2002 - Mary and Gargi

  - TODO: dynamic type checks in For/Let is not implemented

August 13, 2002 - Jerome

  - Split the XQuery lexer into smaller parts. This will allow further
    work on the parser and enable factorization with the XML parser.
      [ Files created:
          o opening_tag_lexer.mll for opening tags
       	  o closing_tag_lexer.mll for closing tags
       	  o text_lexer.mll for XML text content
       	  o type_lexer.mll for type declarations ]

August 13, 2002 - Gargi

  - Implemented generic optimizer which takes a list optimization
    rules as a parameters. This makes the optimizer easily extensible
    and more modular.
       [ Files created:
           ./evaluation/optimgen.ml
           ./evaluation/optimrules.ml
           ./evaluation/optimjudge.ml ]
       [ Files deleted:
           ./evaluation/optimutil.ml ]
  - Improved let optimization: now works for step expressions.
  - Added empty() and length() as "safe" functions [in the can_fail
    judgement].
  - Added optimization tests.
  - Indicated all BUGS properly in the regression tests.

August 12, 2002 - Jerome

  - Fixed malloc bug during parameter construction in the C API. Bug
    fix courtesy of Yana Kadiyska.
  - Fixed bug in parsing of single-quoted strings.
      [ Fixes:
          parsing/string_05_pos.xq
          parsing/string_06_pos.xq
          parsing/string_11_pos.xq ]
  - Fixed bug in parsing of doubles. Was forcing a digit after the
    decimal point.
      [ Fixes:
          parsing/double_10_pos.xq and
          parsing/double_11_pos.xq ]
  - Fixed bug in parsing of attribute content. Was allowing the
    forbidden character '<'.
  - Fixed bug in parsing of element content. Was allowing the
    forbidden sequence of characters ']]>'.
  - Fixed bug in parsing of element opening tags. Was allowing
    duplicate attributes!

August 6, 2002 - Jerome

  - Fixed bug in pretty printer for 'every', 'some', and 'if'.

August 1st, 2002 - Mary

  - Regression tests in regress/evaluation/:
     o re-ran each test by hand; 
     o populated expect/ directory with expected results
     o annotated first line of each test query that triggers bug 
     o regress/results reports 24 files with bugs
  - Fixed bug in pervasive.xqp -- xs:AnyDocument not contained in xs:AnyNode
  - Fixed bug in load.ml -- document node was not assigned node
    identifier during loading
  - Fixed bug in typing.ml -- type check of data() incorrectly raised
    error when applied to document {}
  - Fixed bug in datamodel.ml -- elemNodeWithValue incorrectly created
    empty text node
  - Fixed bug in xmlquery.ml -- print errors to stderr

August 1st, 2002 - Jerome

  - Now prints input XQuery using pretty-printing. Removed
    Gmisc.load_file function which was not working under
    Windows. Fixes Windows bug raised by Phil [ xmlquery was not
    working properly on windows file with new lines. ]

July 31, 2002 - Jerome

  - Implemented the string-value() Data Model accessor.

July 27, 2002 - Jerome

  - Removed '=>' operator, removed from XQuery.

July 26, 2002 - Jerome

  - Fixed bug in parsing of SequenceType for occurrence indicator
    '*'. Was getting confused with multiplication.

July 25, 2002 - Jerome

  - Added support for text node constructor.
    Syntax : text { Expr }
    Semantics : the expression should evaluate to a single string. It
    creates a new text node with the corresponding string as text content.
    Limitations : it does not deal with string concatenation and still
    allows empty strings.
  - Added text representation for element with a simple type. This
    allows to use the XPath axis on e.g., <a> { 1 } </a>.
  - Fixed bugs in typing for XPath axis in the case of simple type
    elements and attributes.

July 24, 2002 - Jerome

  - Added a 'concats' function which concatenates a list of string.
  - Fixed bug in parsing of numeric types.
  - Fixed bug in factoring for sortby. Cleaned up factoring functions.

July 22, 2002 - Mary

  - Changed -noverbose option to -verbose option. (Terse output should
    always be the default)
  - Changed serialization of query output to always produce a document,
    contained in <xq:result>.  This was the default, but was changed
    at some point.
  - Updated regress/runtest.perl to look for expected output in
    expect/ subdirectory.
  - Updated regress/evaluation/expect
    TODO: expected output for regress/typing 
  - Re-ran regress/evaluation to check for errors. 

  *** NOTE: All tests in evaluation/ should be run and
      regress/results file should be examined before committing changes
      to CVS repository ***

  - Fixed bugs in: 
    - datamodel/datamodel.ml in isInstanceValue
    - evaluation/xaeval.ml 
       
      in of_type_by_name :
        did not match datatype Node with PIs or comments; 
        incorrectly matched datatype node with atomic values
      in evaluation of CEAxis: $dot may be bound to atomic value
  - Changed: 
    - parsing/print.ml: added printf_datatype_kind 
    - typing/typing.ml: in typing of CETypeswitch case clause, when
      intersection of expression's type and datatype is None, we type
      the case-clause body "conservatively" by using the data type of
      the case clause.
    - schema/schemautil.ml:
      Added function factor_type_in_typeswitch, which factors the type
      of the argument expression.  For the empty type TEmpty,
      factor_with_units (used to type for and sort expressions)
      returns (TNone, 0, 0), which is not applicable to typeswitch.
      In this case, the factored type is converted back to TEmpty.
    - TODO : normalization rule for 'treat as'. 
 
July 19, 2002 - Zewei

  - Put in a temporary hack to protect against the backslash bug of
    ocamldep for the benefit of Yu Xu

July 18, 2002 - Gargi
  
  - Completed typeswitch simplification by adding intersects function and
    and fixing code for remove-empty-clauses
  - Extended let simplification by adding a new rule
  - Implemented two rules for "for" simplification
  - Changes made to typeswitch static type evaluation


July 15, 2002 - Zewei

  - Separated the installation destinations of html documents and cgi
    programs.  This is necessitated by multi-user systems that have
    restrictions on where a user can place cgi programs.
  - Updated documentation to reflect the changes
    Website/README content is replaced with a reference to ../INSTALL
    Website/INSTALL content is replaced with a reference to ../INSTALL
    INSTALL is updated to distinguish the configuration of web server
    from configuration of website/demo wrt to a pre-configured server.
  - All code changes are confined to website/demo
  - Added a local module, Demo_conf, to provide run-time parameterization
    (based on a config file) of:
        DEMOSITE (html document directory)
	DEMOCGIBIN (cgi program directory)
	CGIBIN_PREFIX (how the webserver refers to the per user cgi-bin)
  - Changed files: 
      Makefile (generates the configuration file, among other changes)
      Makfile.config (only changes the user should be aware of)
      demo_conf.ml[i] (new, defines demo_init: string -> unit)
      viewxml.ml
      querycgi.ml
      usecase.ml
      template.html
  - TODO: demo_init reads in parameter definitions from a config file.  
    It has to be performed at each toplevel entry to the demo program 
    suite, namely: querycgi.ml, viewxml.ml, usecase.ml.  The module 
    base/conf.ml hardcodes a number of parameters at compile time.  
    To use the configuration file approach here would improve it.
    But there is currently no convenient entry point like an init
    function.  It can be added.  Should it?
  - Also, does it make sense to install LICENSE INSTALL STATUS in
    the $(WEBSITE)?

July 12, 2002 - Zewei

  - Separated the installation destinations of html documents and cgi
    programs.  This is necessitated by multi-user systems that have
    restrictions on where a user can place cgi programs.
  - Updated documentation to reflect the changes Website/README
    content is replaced with a reference to ../INSTALL Website/INSTALL
    content is replaced with a reference to ../INSTALL INSTALL is
    updated to distinguish the configuration of web server from
    configuration of website/demo wrt to a pre-configured server.
  - All code changes are confined to website/demo
  - Added a local module, Demo_conf, to provide run-time
    parameterization (based on a config file) of:
        DEMOSITE (html document directory)
	DEMOCGIBIN (cgi program directory)
	CGIBIN_PREFIX (how the webserver refers to the per user cgi-bin)
  - Changed files: 
      Makefile (generates the configuration file, among other changes)
      Makfile.config (only changes the user should be aware of)
      demo_conf.ml[i] (new, defines demo_init: string -> unit)
      viewxml.ml
      querycgi.ml
      usecase.ml
      template.html
  - TODO: demo_init reads in parameter definitions from a config file.
    It has to be performed at each toplevel entry to the demo program
    suite, namely: querycgi.ml, viewxml.ml, usecase.ml.  The module
    base/conf.ml hardcodes a number of parameters at compile time.  To
    use the configuration file approach here would improve it.  But
    there is currently no convenient entry point like an init
    function.  It can be added.  Should it?
  - Also, does it make sense to install LICENSE INSTALL STATUS in
    the $(WEBSITE)?

July 12, 2002 - Gargi, Jerome and Mary

  - Fixed bug in static typing of typeswitch: was sometimes not doing
    typing of certain branches of the typeswitch.

July 10, 2002 - Jerome

  - Fixed bug in subtyping for document nodes.

July 9, 2002 - Jerome

  - Added '-version' option on the command line tool.
  - Made '-verbose' the default. Verbose printing can be turned off
    with '-noverbose'.
  - Hooked-up the optimization module to the system. Added two options
    in the command-line interface: '-optim' turns optimization on, and
    '-print-optim-core' prints out the optimized core expression.
  - Removed the temporary 'test_opt' command line tool. The same
    behavior can be recovered through: xmlquery -notype -noeval -optim
    -print-optim-core xqueryfile
  - Added PI's and Comments in the XQuery core. Fixed normalization
    rules for PI's and Comments.
  - Added support for document node constructors (document { ... }).
  - Added normalization for 'instance of'.
  - Removed instance of only obsolete.

July 8, 2002 - Jerome

  - Removed many obsolete files and directories from the CVS
    repository.

July 8, 2002 - Gargi

  - Implemented the can_fail judgement for the let expression. Other
    than the cast-as, treat-as and error expressions, all user-defined
    functions and some of the built-in functions have been defined to
    fail.  Note: Most of the built-in functions can fail if the static
    typing is turned off.

July 3, 2002 - Jerome

  - Added preliminary support for updates in Galax:
     o Added low-level update operations at the data model level.
     o Added marker in the data model for deleted nodes.
     o Made sure that all accessors on nodes fail for deleted nodes.

June 28, 2002 - Jerome

  - Added user-level API for Galax in ML. Name of the module is
    Galapi.
  - Fixed a bug in function calls normalization: was not raising an
    appropriate error for function calls having a mismatch with the
    function signature.

June 27, 2002 - Gargi, Mary and Jerome

  - Added mini optimization module. This supports recursive
    simplification of unused let bindings. Added toplevel test_opt to
    test optimization.
  - Reorganized the ./algebra directory into three directories:
      o normalization
      o typing
      o evaluation
    Everything about optimization should go into the ./evaluation
    directory.
  - Removed the type handle from the 'expr' type (XQuery AST).
  - Cleaned up normalization to initialize the core expressions type
    handles to None.

June 26, 2002 - Jerome

  - A number of fixes to the demo.
  - Fixed bugs in the XML parser: added support for <!DOCTYPE
    ... >. Added support for comments and pis in the document root.

May 29, 2002 - Jerome

  - Implemented docorder() function which sorts by document order.
    Note: implementation maps that function directly to a core sort
    expression using '.'.

May 28, 2002 - Jerome

  - Fixed the dynamic and static semantics of sortby.
  - Added support for 'empty greatest' and 'empty least'.
  - Added support for stable and unstable sort.
  - Fixed a bug in the data() function.
       was : data(<a/>) = "" 
       now : data(<a/>) = ()
  - Cleaned up the organization of the evaluation module.

May 26, 2002 - Jerome

  - Implemented ancestor and ancestor-or-self axis.
  - Fixed typing for parent, ancestor, descendant, ancestor-or-self.

May 25, 2002 - Jerome

  - Turned == into is
          !== into isnot
  - Removed before and after unused.
  - Implemented follows and precedes.

May 24, 2002 - Mary and Jerome

  - Fixed the new Web site.

May 14, 2002 - Jerome

  - Fixed bug in parsing of comments in XML documents and XQuery
    file. Was allowing '--'. Was closing comments with ' -->' instead
    of '-->'.

May 5, 2002 - Jerome

  - Fixed error messages to print file and line number where the error
    occured. NOTE: Some of the typing errors are behaving strange:
    raising error() dynamically instead of actual type error. TODO:
    remove ./parsing/line.mll from the repository. Not needed anymore.
  - Added check for matching open/close tags in SAX parser.

***** Galax Release 0.1-alpha April 25, 2002 *****

April 25, 2002 - Mary

  - Added Galax website in website/.  Includes demo subdirectory.
  - TODO: remove demo/ subdirectory, add ptrs to other XQuery
    implementations, track downloads, add intro slides to 'about galax'.

April 24th, 2002 - Jerome

  - Fixed bug in deep copy, was wrongly returning a new internal Node
    instead of updating the dirty one.
  - Implemented support for parent.

April 23rd, 2002 - Mary and Jerome

  - Implemented support for node identity in the data model, loading
    and validation.
  - Implemented lazy deep copy in node construction. Copy is done only
    when an actual data model accessor requires it.
  - Fixed attribute content to be text instead of a node.

April 1st, 2002 - Jerome

  - Implemented a prototype SAX parser.

March 11, 2002 - Jerome and Mary

  - Added XMark use case. 19 out of 20 queries are working. Tested on
    up to 10Mb document on Jerome's Linux laptop with 128Mb memory.
  - Fixed pointers to use cases in the demo.
  - Implemented cast of UnknownSimpleType argument to type of second 
    operand in value comparisons
  - Fixed comparison operators on decimal, integer, int
  - Fixed attribute constructors: required type is sequence of atomic
    value; constructor expression automatically converted to sequence
    of atomic values. 

March 6, 2002 - Jerome and Mary

  - Implemented arithmetic on decimals, floats, and doubles
  - BUG: Automatic type promotion is not implemented.  User must use
    explicit casts. 
  - Fixed places where minOccurs maxOccurs could still build anything
    else than +, *, ?. Fixes bug in function call 3.
  - Fixed bug in typing for data(), children() and attribute(). Now
    working on union of atomic types.
  - Fixed confusion use case.
  - Replaced xs:AnyTree by xs:AnyContentModel, less missleading.
  - Fixed bug in validation for mixed content. Was not walking into
    text node content models properly.

March 5, 2002 - Jerome

  - Rationalized the use of subtyping in typing and mapping modules.
      Created a new module schema/typeutil.ml which contains subtyping
      wrapper functions. No modules in ./algebra should now rely on
      anything else but Schema, Simplify, and Typeutil (notably, they
      should not call Subsumption directly).
  - Fixed name of schema environment component in Xatenv.
    Changed tyenv operation into schemaenv
  - Changed printing of the core expression to use namespace prefixes.

March 1, 2002 - Mary 

  - Implemented formal semantics of:
       2.2.4 Function Calls

  - BUG: builtin-functions data(), nodes(), children(), etc.  are
    defined on singleton nodes, not on unions of singleton nodes.

  - BUG: xsd:int (minoccurs 3) (maxoccurs 3) not subtype of xsd:int+
    See regress/evaluation/function_arg_3_bug.xq

February 28, 2002 - Mary

  - Implemented formal semantics of: 

    2.5 Arithmetic Expressions
    2.6.1 Value Comparisons
    2.6.2 General Comparisons
    2.7 Logical Expressions
    2.11 Conditional Expressions
    2.12 Quantified Expressions

  - Fixed printing bugs in print.ml & error.ml
  - Added 'text', 'atomic', and 'numeric' as datatype keywords to
    lexer & parser.
  - Added AnyNumeric to builtin types in sym.ml
  - Replaced (+), etc. by numeric-add, etc. in pervasive.xqp

February 27, 2002 - Mary

  - BUG: In bltin.ml, built-in functions are denoted by unresolved QNames
      (prefix, localname), but should be denoted by expanded QNames
      (uri, localname). 

  - In maputil.ml, implemented formal semantics of : 
      optional_atomic_value
      optional_node
      effective_boolean_value
    which are used in mapping of arithmetic, (in)equality, logical,
    and conditional expressions.

  - Usecases
    Non-deterministic type bug in confusion 

February 27, 2002 - Jerome

  - Added support for "cast as". Works for:

    casting to xsd:string, xsd:int, xsd:integer, xsd:decimal,
               xsd:float, xsd:double, xsd:boolean, xsd:qname,
               xsd:anyuri.
  - Fixed bug introduced in the parser for e/text().
  - Fixed bug in typing for element constructors containing text.
  - Fixed bug in parsing of simple types, impacting both validation
    and casting.

February 26, 2002 - Jerome

  - Removed some 'long tokens' from the lexer, moving towards a
    simpler XQuery parser.
  - Fixed bug in schema loading/normalization introduced by the text
    node.
  - Fixed bug in the parser related to whitespace between keywords.

February 25, 2002 - Jerome

  - Added support for escaped QNames. Syntax is:
       ':'NCNAME
  - Added support for mixed content in validation. Mixed content is a
    content model with text nodes but no simple value.

February 25, 2002 - Jerome and Mary

  - Added support for datatype 'text' and for type model 'TText' and
    for typing of text nodes as 'text'. 
  - Changed definition of data() on nodes: 
 
      data(element { anySimpleType }) : anySimpleType
      data(element { anyTree }) : UnknownSimpleType*
      data(text) : UnknownSimpleType*

  - Added UnknownSimple value to data model

  [ Mapping of binary operators and functions still does not align
    with FS doc. ]

February 23, 2002 - Jerome

  - Fixed bug in validation for optional attributes screwing up
    content model processing (the system was thinking some content
    model were not deterministics passing over optional attributes).

February 20, 2002 - Jerome

  - Fixed bug in the empty namespace handling due to empty xml: prefix
    in the configuration.

February 12, 2002 - Jerome

  - Changed printing to print the default namespace even if default
    namespace is the empty namespace.
  - Fixed validation to preserve type names (required for named typing
    and legodb).

January 27, 2002 - Mary
 
  - Implemented "predicate truth value" semantics
    (step-qualifiers) for XPath expressions.
    (effects: algebra/{mapping,maputil}.ml)
  - Added () (DTEmpty) to Datatype production -- necessary to
    implement step qualifiers.
    (effects: algebra/{typing,xaeveal}.ml
    parsing/{xquery_ast,xquery_parser}.ml schema/schemautil.ml)
  - Fixed subtag bug in base/sym.ml
  - Removed "value" from stdlib/bltin.ml
  - Added NS usecase
  - Added "xml" namespace as builtin namespace in
    stdlib/pervasive.xqp; defined in config/Makefile.  Necessary for
    NS usecase.
    (effects: serialization in datamodel/datamodel.ml)

January 26, 2002 - Jerome

  - Cleaned XML Schema validation.

January 23, 2002 - Mary

  - Fixed some more use cases.

January 22, 2002 - Jerome

  - Added support for single quoted strings in the lexer. now 'hello =
    true' is a valid string.
  - Fixed bug in load_file basic operation. Function 'input' is not
    reading the complete file, using really_input instead.

January 21, 2002 - Mary and Jerome

  - Fixed bug in reachability module for FSA (was blowing-up). This
    fixes one known bug for the subtyping non terminating.
  - Fixed bugs in simplification module for union types.
  - Fixed type syntax from 'group' to 'type'
  - Fixed type syntax for document nodes to M. Kay's proposal. Fixed
    AST, mapping and typeswitch accordingly.
  - Fixed use cases XMP, Rel, Tree, Semantics, Confusion to the new
    syntax and mappings.
  - Fixed bugs in typing of name() and nodes() built-in functions.

January 16, 2002 - Lori

  - In the regress/parsing directory, 
    Renamed all the xmltest files to fit into our naming scheme:
    xxx_pos.xq, xxx_neg.xq, xxx_neg_expect.xq.
    Removed the badly named files from the repository, 
    and added the correctly named files to the repository.

January 14, 2002 - Lori

  - Updated config/Makefile. Has new PERL and GALAXSRC variables.
  - Updated top-level Makefile. New regress/runtest.perl target,
    generated from runtest.perlp and PERL variable.

January 14, 2002 - Mary
  - Fixed bug in pretty printing of errors

January 10, 2002 - Lori

  - Added regress/runtest.perlp. When the new config/Makefile is updated,
    and you run "make depend", it will generate runtest.perl.

  - Added regress/Makefile. This allows 
    make all, make parsing, make typing, make evaluation, make clean.

  - Added regress/parsing/xmltest_valid_*.xq and - valid xml expressions
    regress/parsing/xmltest_notwf_*.xq           - not well-formed xml exprs

  - Still need to commit top-level Makefile and config/Makefile. Must resolve
    conflicts first.

January 10, 2002 - Mary 

  - Added regress/evaluation/typeswitch* - to test new typeswitch 
          regress/mapping/               - start of XPath tests

  - Updated algebra/maputil.ml to support 'fortran'-style operators eq,lt, etc.

January 10, 2002 - Mary and Jerome

  - Fixed typing for typeswitch.  

    - Added datatype production and modified typeswitch (typing
      & evaluation) to operate over datatypes.

    - Added small_type(t1,t2) in lieu of intersect_type(t1,t2)
      as semantics of typeswitch.

    - In (1) type subsumption and (2) testing that a value is in the
      domain of a type (see: Xaeval.of_type_by_name), only symbols are
      compared. 

      For elements and attributes, it *only* compares for equality the
      element/attribute value's symbol/name with the type's
      symbol/name.  It does not recursively check the node's content.

      For simple values, it *only* checks that the type of the value
      and datatype are equal.  It should use type subsumption on
      simple types.

      Group references and 'element of type' not yet supported in
      typeswitch. 

  - Added a document unit symbol to sym.ml
  - In AST, added support for element of type (group and basetype)

January 6, 2002 - Phil and Jerome

  - Updated the pretty printer for types to deal with precedence.

January 4, 2002 - Jerome

  - Updated the mapping to deal with value comparisons: lt gt eq, etc.
      *** Mary: please double check: see the note in ./algebra/maputil.ml

January 3, 2002 - Jerome and Mary

  - Cleaned command line option for Lori's test suite.
      * -notype : turns types off
      * -noeval : turns eval off
      * -parse	: only do parsing
      * -algebra is removed
      * -print-core : prints XQuery Core. False by default.
  - Removed junk from ./regress directory
  - Added directories and README for test suite in ./regress:
      * ./regress/parsing     for parsing tests
      * ./regress/mapping     for XQuery to Core mapping tests
      * ./regress/xmlschema   for XML Schema to types mapping tests
      * ./regress/namespaces  for Namespaces tests
      * ./regress/typing      for typing tests on the Core
      * ./regress/eval	      for evaluation tests on the Core
      * ./regress/README      documents the test suite.
  - Updated the XQuery AST, lexer and parser to handle the new
    datatype production.

January 2, 2002 - Mary

  - Added command line options for xmlquery: 
    -verbose     Default behavior : print everything
    -quiet       Only print result XML document and type
    -o <prefix>  Prints XML document to prefix.xml and type to prefix.xsd
    
  - Changes to stdlib/pervasive/bltin, etc. to align with 20 Dec F&O document
  - Fixed tests & usecases to align with new grammar & 20 Dec F&O document
  - Updated STATUS document to reflect alignment with 20 Dec WDs.

January 2, 2002 - Jerome

  - Improved pretty printing of serialized documents.
  - Fixed bug in simple type lexer for decimal and doubles.
  - Fixed Fsa and Dfa module interfaces to compile under Ocaml-3.04.
  - Updated attribute constructor's syntax to reflect the new WD. New
    syntax is:
	   <a a="{1 + 2}"/> instead of <a a={1 + 2}/>
  - Removed obsolete ZERO token in the parser.
  - Removed minOccurs maxOccurs from the type syntax.
  - Fixed lexing of XML names (should be consistent with XML 1.0 with
    ISO-88591 encoding.
  - Cleaned whitespace after keywords in XQuery no longer needed.

December 20, 2001 - Mary

  - Updated examples in test directory.
    See tests/Status for examples that do not terminate
  - Fixed usecases/{xmp,tree}* to conform to new syntax

December 13, 2001 - Jerome

  - Added Use Case "Tree" to the demo.
  - Fixed the formatting of the Use Case "Tree" for the demo.
  - Fixed bug in typing rule for 'for'. Was not working for () and
    NONE types.
  - Added a configuration parameters to whether to print xsi:type
    information in the results or not. Updated the demo to take this
    parameter into account.
  - Added dependency in the Makefile for the toplevel galax
    interpretor.
  - Fixed simple type parser for doubles (was not accepting values
    without exponent).
  - Fixed some of the XML schema mapping for datatypes. NEEDS MORE
    CLEANING.
  - Cleaned up text, pi and comment parsing.
     o Fixed bug in child:: axis of document nodes.
     o Fixed printing of Comments and PI's expressions.
     o Removed CDATA from expressions. CDATA are not treated as text
       and folded into the current text node.
     o Fixed parsing of text in XQuery to deal with whitespace
       consistently.
  - Cleaned up parsing of XML document declaration.
  - Added an UnknownSimpleType in the type system for untyped text
    content from XML document.
  - Added text creation in the core.
     o Added CEText in cexpr in the XQuery Core AST.
     o Added typing rule and evaluation rule for CEText.
     o Changed mapping to the core to create CEText instead of
       CEScalar for text.
  - Fixed document root node bug in the data model loading and
    validation. Both now create root node appropriately.
     o This introduces a bug in the type system!! What is the type of
       rooted documents?
  - Turned all keywords in lowercase, following the new spec.
  - Turned "instanceof" into "instance of".
  - Fixed usecases to use only lowercase.
  - Added root type. Syntax is:
      o document { ... } added in type production
      o document { ... } added in datatype production
      o document() and document-validate() both return document { ... }
        types
  - Fixed usecases to use document functions and fixed several related
    bugs in path expressions.
  - Fixed whitespace handling bug. \013 was not recognized as
    whitespace, breaking the demo.
  - Changed typing rule for axis::text() to return UnknownSimpleType.
  - Fixed bug in mapping rule for [i]: index_of renamed to index-of.
  - Fixed AnyScalar in pervasive.xq.
  - Fixed printing bug for core expressions : let in instead of let
    return.
  - Fixed the max-int, min-int, max-float, min-float to return () when
    input is (). Fixed the signature in pervasive.xq to allow () as
    output.
  - Fixed sorting for xsd:integer and xsd:int datatypes.
  - Fixed integer arithmetics (+, -, *, div, mod) to allow null
    values.
  - Added a large part of use case "R".
  - Fixed printing for text("...") expressions in the core.
  - Fixed bug in printing of attribute names.

December 1, 2001 - Jerome

  - Added a Caml toplevel with built-in Galax libraries (galax).
  - Some fixes in the XQuery parser:
     o removed obsolete 'true' and 'false' keywords.
     o fixed numeric literals to support:
         --> XQuery numeric literals: double & decimal
         --> int (not part of the XQuery spec)
     o fixed string literals to avoid escaping a la Caml.
  - Some fixed in simple type parsers:
     o fixed numeric literals to support:
         --> xs:double  (IEEE floating point number, see XML schema
			 xsd:double, implemented as Caml float)
	 --> xs:decimal (Arbitrary precision decimal values,
                         implemented as Caml Num.num)
         --> xs:integer (Arbitrary integers, implemented as Caml
                         Big_int.big_int)
         --> xs:int (Implemented as Caml int)
     o fixed boolean parser to support 1 and 0 for true and false.
     o fixed double parser to support NaN, INF, and -INF
  - Fixed printing of simple types: decimal was printed as integer.
  - Fixed bug in subtyping of simple types.
  - Fixed several bugs in validation:
     o Validation is now working on empty content models.
     o Validation is now working on simple content models with
       attributes.
  - Fixed several bugs in recfactor. not terminating for recursive
    elements. wrong bounds.

Nov 30, 2001 - Mary
  - base/error.ml -- errors not printed to stderr
  - schema/schemamapping.ml - made some functions public

Nov 29, 2001 - Mary

  - added TREE use case
     o Validation error when trying to validate:
       define element image { 
         attribute source { xsd:string }
       }
     o Stack overflow error in //

November 28, 2001 - Mary and Jerome

  - Fixed several bug in validation. Validation now takes a root
    global *element* instead of a global *group*.
  - Fixed several bug in compilation process and Makefiles.
  - Separated API compilation from the mail Galax libraries
    compilation.
  - Moved usecases in a root directory.
  - Removed obsolete examples from the demo.
  - Fixed names of F&O functions and operators from '_' to '-'.
  - Fixed aggregate functions to be type specific (this is in
    contradiction with the F&O document). This allows more precise
    typing. Functions are:
       min-int	      min-float
       max-int	      max-float
       sum-int	      sum-float
       avg-int	      avg-float
  - Fixed the XMP use cases. Notably the data() function only works on
    a single node, which requires additional for loops in some cases.
  - Heavy fix of the Simple module: aligned all built-in primitive
    simple types with XML Schema spec. Propagated that change
    throughout the code.
  - Moved builtin type resolution from the parser to the Simple
    module.
  - Added serialization of xsi:type information.
  - Updated INSTALL file.
  - Fixed bug in validation of optional elements. (was only occuring,
    when an element had several optional attributes).

November 21, 2001 - Jerome

  - Fixed Makefile to create parent directories during installation as
    well.
  - Fixed bugs in the demo. The demo now uses well-formed XML
    documents directly using the new parser.

November 20, 2001 - Jerome

  - AST update:
	o separated XML documents and XQuery AST in new modules:
		    Xml_ast
		    Xquery_ast
	o moved AST utilities in corresponding modules:
		    Astutil -> Xquery_astutil
                    (new)      Xml_astutil
    The new XML ast is much smaller and should reduce memory
    consumption when doing parsing.
  - Created separate XML lexer and XML parser using Xml_ast.
  - Migrated the XML parsing and loading functions to use Xml_ast and
    the new parser. This impacts:
        Parseutil
	Schemamapping
	Load
	Bltin
	Toputil
  - Implemented partial Schema validation. This is in the Validation
    module. The implementation uses the XQuery type system and
    performs tree-walking on the AST for XML well-formed document,
    parses text to check for values according to the schema and
    creates an instance of the XML Query Data Model with values.
  - Added document-validate function that performs both document
    parsing and schema validation.
  - Did some minimal debugging and testing of validation. See:
    ./tests/xq21.xq.

November 20, 2001 - Mary

  - Updated INSTALL, README
  - Added STATUS
  - Removed TODO
  - Updated Makefile to install executables in bin/
  - config/Makefile
     o added GALAXHOME as install/release directory 
  - stdlib/pervasive.xqp
    stdlib/bltin.ml
     o fixed bugs in function signatures
     o alignment with F&O doc
  - Changed several Internal_Error exceptions to Prototype exceptions
  - base/config.mlp 
     o changed environment variable GLXLIB to GALAXLIB

November 13, 2001 - Byron

  - Added some functions from F and O document
  - the change is very localized. It's in the end of the bltin.ml and
    the pervasive.xqp
  - We may consider to put all those F and O in a separate file
  - The test script file is in tests/fando.xq
  - More complete test is needed.

November 12, 2001 - Mary

  - Added builtin functions true(), false()
  - Added integer arithmetic operators '*', 'div', 'mod'
     o see stdlib/pervasive.xpq for ugly lexer hack
  - XPath 2.0 Semantics: 
     o Added support for implicit conversion of nodes to their
       simple-content values in conditional, binary-op, and unary-op
       expressions and in the key expression of the sortby.
     o NOT DONE: implicit conversion of node arguments to functions
       expecting simple values.
     o NOT DONE: 3-valued logic for all equality/comparison operators
  - Fixed bugs: (see CVS comments)
     o in schemamapping (element values now EText)
     o in datamodel/instance_eq : element's children or simple valued
       content are compared for equality; previously, only children
       were compared.
     o typewitch variable now available in default clause
     o typeswitch may now refer to 'unit' group types, e.g.,
       xs:AnyElement
  - Added error messages during type checking for undefined variables,
    functions
  - In tests and tests/usecases, removed all unnecessary applications
    of data().
     o Changed confusion use case to use text() instead of data()
       because it is applied to an 'untyped' document.
  - Documentation:
     o split README split into README, INSTALL, and DEVELOPERS.
       INSTALL contains installation instructions.  DEVELOPERS
       contains internal documentation for implementors.

November 11, 2001 - Jerome

  - Worked on the C, C++ and Java API. Some bugs remain.

November 9, 2001 - Arnaud and Jerome

  - Added Java JNI interface to Galax! (not usable yet)
  - Started cleaning the C and C++ interfaces.

November 8, 2001 - Jerome

  - Renamed Xasyn into Xquery_ast.
  - Fixed bug in the XQuery lexer when parsing whitespace in a closing
    tag.

November 4, 2001 - Jerome

  - Removed statix code out of Galax. StatiX is now an independant
    piece of software.

October 30, 2001 - Jerome

  - Added a specific statix command-line tool for the statistics.
  - Fixed many bugs in the statistics generation.

October 26, 2001 - Jerome

  - Hooked the statistics generation to the validate command
    tool. Improved validate tool interface.
  - Moved normalize_model from Subsumption to Schemautil.
  - Added resolve_rgroup_stat, used for statistics generation.

October 25, 2001 - Jerome

  - Added -wf option in the validate command line tool to only check
    for well-formedness.
  - Added basic lexer module for XML Schema simple types. Most of the
    simple type values are string place-holders for now.
  - Added conversion operations from text to simple values in Simple.
  - Support for simple type values (Simple) can now shared between the
    AST and the data model. This simplifies a lot of the evaluation
    and loading operations. Modified Xasyn accordingly to use
    Simple. Propagated that change to the AST accross the system.

October 24, 2001 - Jerome

  - Moved simple values from Datamodel to Simple module. Move the
    simple types module into the ./base directory.
  - Renamed ./misc directory into ./base.
  - Added a ./validate command-line tool that only performs schema
    validation and reports errors.

October 21, 2001 - Jerome

  - Major update of the Data Model:
      o Implementation of text nodes
      o De-nodification of values. Values are not nodes anymore, do
        not have an identity of a parent.
      o Implementation of instances as (possibly heterogeneous)
        sequences of values or nodes.
      o Major cleaning of the data model interface itself. Reorganized
        function according to types.
      o Propagated data model update to the rest of the system. Subtle
        changes in the behavior of the run time can occur due to the
        difference in handling text and values.
  - Modified serialization to distinguish printing of values and text.

October 19, 2001 - Jerome

  - Removed obsolete InfoItem and Reference nodes from the data model.

October 2, 2001 - Jerome

  - Added an XML Schema use case in the demo. This contains XML Schema
    import, static checking of input/output schemas and some
    namespace related examples.
  - Fixed bug in uri <--> prefix table.
  - Fixed bug in default namespace and handling.
  - Fixed pretty printing for models and sort declarations.
  - Fixed pretty printing of core expressions.
  - Improved error messages for failed type assertions. ASSERT AS.
  - Fixed namespace support for the document() function. The document
    function takes the namespace's environment into account.
  - Allowed the default prefix in the XML Schema mapping.
  - Added mapschema command line tools. This takes an XML Schema file
    and prints the corresponding type system representation of that
    schema.

August 26, 2001 - Jerome

  - All the namespace examples in ./tests seem to work (This needs to
    be checked by a namespace guru!!!)
  - Fixed bug in printing for the default namespace.
  - Fixed bug in mapping of element constructors: it should use
    locally defined namespaces.
  - Fixed bug in ASSERT mapping for global element and attributes.
  - Added support for Floats.
  - Moved validation module from ./schema to ./datamodel.
  - Implemented the new syntax for global variables:
      DEFINE GLOBAL $a { expr }
    Updated the usecases accordingly.
  - Fixed bug in prevasive.xqp: signature of the document() function
    should be xs:AnyType.
  - Fixed error message in case of parsing or lexing error.
  - Fixed bug in Parser: XML fragment should return text instead of string.
  - Fixed bug in Lexstate: string buffer was not initialized properly.
  - Fixed bug in Parseutil: opened files where not closed properly.
  - Fixed bug in mapping of global variables: model wasn't mapped.
  - Fixed bug in subsumption: now raises an exception for
    non-deterministic content models instead of returning false.
  - Added TREAT in the core. Hooked its evaluation to validation (not
    implemented yet).
  - Renamed Simplify module into Simplification.
  - Recompiled the C-API and the demo.

August 25, 2001 - Jerome

  - Fixed many bugs due to the cleaning process, notably in
    subsumption.
  - Changed subsumption to avoid copying schema if not necessary.
  - Fixed schema compilation (previously called renaming) to complain
    about unknown global elements/attributes/groups.
  - Simple types now use the "xsd" prefix. Changed examples to reflect
    that.
  - Changed printing of models to use namespaces for infered types.

August 24, 2001 - Byron and Jerome

  - **Important** Schema replaces sort_decl pretty much everywhere to
    avoid the previous type information duplication (there was no
    clear rule at when to use one or the other). Related changes:
     o Schemautil replaces Typeutil but now works on schema
       structures. Typeutil has disappeared.
     o All the modules using type information are now using schemas,
       notably: subsumption, intersection, simplify, mapping, xatenv,
       typing and eval.
  - We are getting close! Everything but the C-API and the demo
    compile. Several namespace bugs have been resolved in Namespace
    and Sym modules. Printing is fixed somehow. Several typing bugs
    are still there.

August 23, 2001 - Jerome, Phil and Byron

  - We keep pushing hard on the cleaning. Recompiled: ./datamodel and
    ./stdlib modules.
  - Further updates on Sym, Namespace and Resolve modules.
  - Pushed cleaning up to typing. It is now time to clean the
    Schema/Sort Decl mess.

August 22, 2001 - Jerome and Byron

  - Major cleaning of the Symbol support, of the QName support, of the
    Namespace support, of the Schema support, of the XML Schema
    support and of the Mapping support. Here is a list of changes:

    In Misc
    -------

    o New ./misc/pool.ml module implement generic support for name
      pools
    o New ./misc/namespace.ml module contains support for qnames
      (resolved and unresolved) and namespaces environment.
    o ./misc/sym.ml:
        * Removed namespaces from there
	* Created separate symbol pools for the 6 following kinds of
          names:
            --> uelem_symbol  / unresolved element names
	    --> relem_symbol  / resolved element names
	    --> uattr_symbol  / unresolved attribute names
	    --> rattr_symbol  / resolved attribute names
	    --> ugroup_symbol / unresolved group names
	    --> rgroup_symbol / resolved group names
	* The interface has separate functions for the 6 above kinds
	  of names plus a few additional generic functions on certain
	  kinds of names.
    o New ./misc/resolve contains the basic resolution functions for
      namespaces.

    In Parsing
    ----------

    o Removed the algebra parser and the algebra parse utililities
    o Removed the warning module
    o ./parsing/xasyn.mli:
	* Removed support for nameclasses and named types (until we
	  know what to do with them).
	* Added schema names (used in the schema module).
	* Put qname back in Path expressions (instead of symbol)
	* Added types for XML AST and XML Schema Ast
    o ./parsing/parseutil: Added function for XML Schema.

    In FSA
    ------

    o Created a new fsa directory with all the support for FSA.

    In Schema
    ---------

    o moved ./parsing/xmlschema.ml to ./schema/schemamapping.ml
    o moved all fsa related code to ./fsa
    o Folded all namespace resolution and conflict detection in the
      ./schema module to type declarations (i.e., when compiling the
      schema).
    o Finished recompiling everything with the new symbol support.

  - merged with Mary's new Typeutil (renamed typeutils to typeutil)

August 17, 2001 - Mary

  - Added '//'
    - fixed bug in typeutils.ml

August 16, 2001 - Mary and Byron

  - Added support for importing Schemas into type system: 
      SCHEMA prefix = "uri" 
    Regression tests in regress/schema-test.xq
  - Added built-in functions : 
    length, contains, ends-with
  - Added support for XPath '[]' predicates, 
    including last(), position() and [IntegerLiteral]
    tests in tests/xq01b.xq
  
August 10, 2001 - Byron

  - Implemented the below in mapping.ml.
    Jerome wrote:
      Having static static type assertion only for global elements. In
      any case, a static type assertion checks the type of all its
      descendants so we do not have to put them everywhere.

August 8, 2001 - Everyone

  - Merged support for namespaces with for-factoring and nodeswitch
  - Added syntax of function signatures: 
	DEFINE FUNCTION SIGNATURE fname (Datatype, ... , Datatype)
        RETURNS QName | '(' Datatype ')'
  - Changed pervasive.xq to use XQuery syntax
  - Debugged namespaces

August 7, 2001 - Mary and Byron

  - Added symbol spaces for namespace name and group.
      symbol_val_c ::= Datasym .. | Elemsym .. | Attrsym .. 
                    | Groupsym qname | NSsym (prefix opt, uri, targetnamespace)
    Added accessors and constructors for the symbols
    (See Also: misc/sym.ml)
  - Element, Attribute, Group no longer carry qname or tname along.
    They carry symbol now. (See Also: parsing/xasyn.mli: expr_desc,
    cexpr_desc, model_desc, and nameclass)
  - All the occurence of Element, Attribute, Group (core) expressions
    need to be modified. The change is minor. But, it's everywhere.
  - Slight modification on print module, as expected.
  - The symbols are generated and added into the correct symbol space
    during parsing
  - mapping.ml does two things:
    1. Map the Full AST to Core AST
    2. Resolve the qnames all over the place (Element, Attribute,
    Group, Path, etc.) 
  
    Note: all are done in 1 walk of the AST
    Warning: mapping.ml becomes heavy-weight and less trivial.
             maputil.ml are not doing much work.
  - Modify Namespace node in datamodel (See also datamodel.ml: NSNode )
      o the change we made is small. Essentially modifying the node,
        its accessor and constructor And the change on fserialize
        support serialization of the namespace-awared datamodel
        forest.
      o load.ml is modifyed accordingly.
  - toplevel: use pervasiveX.xq (in Full XQuery synatx) instead of
    pervasive.xq (in Core syntax)

  - Added tests/result directory: It contains the redirected output of
    the tests, located in tests/
    Usage:
    >  xmlquery xqXX.xq > xqXX.res
    >  diff xqXX.res result/xqXX.res
    If your xmlquery executable is correct, diff will tell you that
    there is no difference between your output and the one in result
    dir.

August 6, 2001 - Mary

  - xquery_parser: limitedmodel. TNone and TEmpty are added add adhoc
    rules to parse function signatures

August 3, 2001 - Jerome

  - Added descendant and descendant-or-self accessors in the data
    model. Added corresponding calls in the evaluation module. Typing
    for descendant is not working yet. Sorting in doc-order and
    duplicate removal is not working.

August 2, 2001 - Jerome and Phil

  - Turned back to for-factoring.
      o Added axis in the core.
      o Added direct evaluation rules for axis.
      o Modified mapping modules not to generate typeswitch and
        preserve axis.
      o Checked examples with the new system.
      o Put back factoring in the for type inference rule.
      o Added direct typing rules for axis.
  - Added primitive support for warning when an expression is not
    empty but has type empty.

August 1, 2001 - Jerome

  - Fixed bug in typing for children.
  - Added Jonathan Robie's example on well-formed vs. invalid
    documents.

July 30, 2001 - Jerome

  - Fixed bug in type intersection due to bug in or-patterns in
    Caml(sic!).
  - Fixed formatting and presentation bugs reported by Phil in the
    demo.
  - Added support for Attribute and Element references, except in XML
    schema mapping.
      tests are in ./tests/subtypes2.xq

July 26, 2001 - Jerome

  - Added wadler as a CVS user.
  - Put all the demo file in the Galax ./demo directory.
  - Added current usecases in ./tests/usecases.
  - Added automatic generation of JavaScript and HTML files for the
    demo from the current use cases.
  - Added [-context file] option in xmlquery command-line so one
    context file can be shared among many queries.

July 24, 2001 - Jerome

  - Added support for tracing of accesses to the data model children
    operation.
     o Extended algebra parser to support a (&1) [ "john" ] where 1 is
       the ID of the a element node.
     o Added tracing global variable in Config. This variable is set
       to true if tracing is on.
     o Added -trace file option in the command line xmlquery. The file
       stores the node id of the elements accessed during the query in
       the order where the query accesses these elements.

July 23, 2001 - Mary

  - Added maping for error()/ERROR() functions

July 23, 2001 - Byron

  - parsing/xmlschema: map XML syntax to the sort_decl
               - partially implemented, had some simple tests
  - parsing/MAP2SCHEMA: the mapping rules from XML Schema to the galax
    sort declaration and models

July 21, 2001 - Jerome

  - Computed names can now be of type string or qname.
  - Fixed bug in the name function (did not work for attributes).
  - Added type AnyNode = AnyElement | AnyAttribute in pervasive.xq.

July 20, 2001 - Jerome

  - Fixed bug in the typing rule for the children function. children
    now takes any node as input and returns empty sequence for values.
  - Added support for computed elements and attributes in the parser.
  - Added mapping rule for computed elements and attributes.

July 17, 2001 - Jerome

  - XMP use case to use XML element constructors. Added Q7 and Q10.
  - Fixed XQuery parser to support expression lists within enclosed
    expressions. (i.e., <a>{ 1,2 }</a> instead of <a> { (1,2) } </a>.
  - Added support for XML element constructor and EText in the mapping.
  - Modified XQuery parser to generate EText instead of string values
    for XML text.
  - Added EText expressions for text nodes in the AST.
  - Finished rewritting all the demo examples. All the examples from
    the XML DevCon demo are now running.
  - Cosmetic changes in xmlquery and in the demo scripts.

July 16, 2001 - Byron

  - translated xq18.xq, xq19.xq, xq20.xq to Full XQuery syntax.

July 16, 2001 - Byron

  Jerome wrote: 
  - Fixed bug in DFA to NFA automata mapping.
     o Why is there such a conversion ??

  val includes : NFA -> NFA -> bool    (old)
  val includes : NFA -> DFA -> bool    (new)

     o When we construct a DFA from a nondeterministic regular
       expression, it will raise exception in runtime.

     o We can pass NFA of a bigger type to includes
       functions. (statically checked)

  val intersects: NFA -> NFA -> NFA        (needed in includes)

     o This code is tested and working before DFA is written. (the
       code is rather non-trivial.)
     o write the conversion of DFA to NFA to reuse intersects.
     o the conversion is not needed after intersects is modified to
       intersects: NFA -> DFA -> NFA

July 16, 2001 - Jerome

  - Implemented existential quantification in predicates.
  - Updated the demo with XQuery examples.
  - Fixed bug in Schema.weakunion_types and Simplify.
  - XML loading function to remove leading and trailing whitespace.
  - XML loading function to remove empty text nodes.
  - Fixed Mary's subtype operator:
     o resolved grammar ambiguity.
       new syntax is : ASSERT AS (m1 <: m2)
     o implemented mapping rule for <:
  - BUG: subtyping should not return false when the bigger type is non
    deterministic.

July 16, 2001 - Mary

  - commented debugging statements
  - added more tests to subtypes.xq 

July 15, 2001 - Mary

  - Added subtype operator model <: model for testing.
    See tests in tests/subtypes.xq
  - Added check_type to algebra/typing.ml to check type
    of non-empty expressions.

July 15, 2001 - Jerome

  - Recompiled the demo.
  - Cleaned the toplevel modules and the CGI modules.
  - Added support for global variables in the parser. Syntax is:
       let $v as m := (e)
  - Added mapping rule for global variables.
  - Cleaned mapping module.
  - Fixed e/@a bug located in mapping module.
     --> mapping for attributes was not creating labelattr symbol.

July 13, 2001 - Mary

  - Implemented mapping for following XQuery expressions: EApp, EAttr,
     EAssert, EBinaryOp, EElem, EFLWR, EIf, EList, EPath (partially
     implemented) EScalar, ESelf, ESome, EEvery, ESort, ETypeswitch,
     EUnaryOp, EVar
  - Implemented index_of using value equality (needs node equality but
    DM doesn't have identity fully implemented)
  - Updated tests/Status; most working upto xq18.xq.
  - LEXER BUG : in function definition, function name must be
    immediately followed by lparen.

July 13, 2001 - Jerome
 
  - more updates on the XQuery parser for types.
      o typeswitch supports full models
      o function declarations take a limited forme of
        model/element/attribute references
      o TREAT/CAST/ASSERT take only a limited form of
        model/element/attribute references
      o made more tests and examples in regress. everything seems much
        better now.
  - updated the XQuery parser to support precisely the current
    consensus grammar.
      o removed TYPE declarations
      o simplified wildcards
      o minOccurs maxOccurs are not optional

July 12, 2001 - Jerome

  - added many subsumption examples, most work. still a few bugs:
      o RNone is not supported properly in the automata
      o schema renaming must differ from bigger and smaller types.
  - Updated syntax for types
      o added ( model ), model?, model+
  - Fixed bug in DFA to NFA automata mapping.
      o Why is there such a conversion ??
  - Added new implementation of the subsumption module.
      o still supports subsumption mappings
      o works for smaller type non deterministic
      o hooked to Byron's automata for inclusion of regular
        expressions

July 12, 2001 - Mary

  - Translated all 'algebra' examples in tests/xa*.xq into XQuery
    syntax in files tests/xq*.xq.  Not all examples are complete.
  - Added static type assertion expression: ASSERT AS model (expr)
  - Extended mapping.ml to handle type declarations, function
    definitions, and simple path expressions, e.g., $v/a
  - Minor changes to algebra/xmlquery_parser.mly to parse TYPE
    declarations (BUG ALERT: See ??MF about parsing ATTRIBUTE/ELEMENT
    tokens )

July 12, 2001 - Byron

  - Added an automata module during the past few days.
    o fsa.ml(i): a fsa functor, plus some another structures for 
      creating an automata for type
    o glushkov.ml(i): the implementation of the algorithm in Regular
      Expressions into Finate Automata [Anne Bruggemann-Klein]

      (Definitions of follow, nullable, first,..., at the front
       Definition 2.3: Definition of Glushkov automaton 
       Definition 3.1, 3.2: Star normal form)

      Normalization of Type AST is added. The normalization of TBound
      (t, m,n) is follow:
      Modified from Jerome's code
                 (I)      t{0,*} == t*
                 (II)     t{1,*} == t+
                 (III)    t{m,*} == t, t{m-1, *}

                 (IV)     t{0,1} == ()|t
                 (IV')    t{0,n} == ()|t,t{0,n-1}
                 (V)      if m > 1 then t{m,n} == t,t{m-1,n-1}

    o intersectfsa.ml(i): given two TypeName_NFA.nfa, M1 and M2,
      compute the intersection of M1 and M2.
 
      The algorithm is mainly running special Dijkstra's on two
      automata in parallel.

      NB. Print function is provided to print out the automata. For
          debugging reason.

    o reachablity.ml(i): provide a function to decide the reachabilty
      problem: Given an automaton M, a (start) state s, and a set of
      (final) states F, is there a simple path from s to any memeber
      of F.

      The algorithm is adapted from Dijkstra's.

      Limitation: M can only be the TypeName_NFA_Pair.nfa.  It should
      be more generic. Need modification.

July 3rd, 2001 - Jerome

  - Added printing function for full XQuery expressions.
  - Recompiled the C and C++ API.
  - Fixed algebra parser. Sort rule only allows one sort
    criteria. Fixed precedence problem.
  - Fixed xquery parser. Fixed lexer that kept 'element ' in the
    ELEMENT token instead of only keeping the qname.

July 3rd, 2001 - Byron

  - sortby is working on simple types. 
    o the parser is updated (ie., expr1 sortby expr2 sortkind)
    o the typing rule is added
    o the evaluation rule is added
    o example query are
	query bib0/book/author sortby data() descending, data() ascending
	query bib0/book sortby year/data() descending sortby year/data() ascending
    o To Do
      . need to propagate the typing error message properly. It
      screams "Fatal error" when a Query Prototype exception is
      raised. Quite scary.
      . need to factor out the dummy sort variable, "_dot". It is now
      hardcoded in xaeval.ml, typing.ml and xaparser.ml. Which file
      should it go to?
      . need to pretty print the core sort expression.
      . map the Full XQuery Sort to the Core Sort. Need to deal with
      Path expression. Not sure how to do.

July 2nd, 2001 - Byron

  - the simple test queries for the rules are located at
    galax/tests/xquery/
  - Added mapping from Full XQuery to the Core.

    o mappping.ml(i) : contains code for transversing the tree
    o maputil.ml(i) : definition of intermediate structures for the
    mapping and applying the mapping rule

    Below are the rules that has been implemented and passed simple
    tests.

    o Binary operators
    o FLWR expressions
    o Conditional expressions
    o Typeswitch
    o Unary operators (*NOT TESTED*)
    o Variables
    o Scalar values
    o Function application
    o Sequences
    o standalone element constructor
    o standalone attribute constructor

  - tests (only the evaluation part) the algebra test cases this is a
    brief summary of the test:

                evaluation/translation	
	xa01.xq          correct
	xa02.xq          correct
	xa03.xq          correct
	xa4.xq		 syntax error "for b <- ..."	
	xa05.xq          correct
	xa06.xq          correct
	xa07.xq          correct
	xa08.xq          correct
	xa09.xq		 'unique' not supported
	xa10.xq 	 'index' not supported
	xa11.xq 	 'sort' not working
	xa12.xq		 'group' not supported
	xa13.xq		 correct
	xa14.xq		 correct
	xa15.xq	         syntax error in type declaration
	xa16.xq		 syntax error "<-", case
	xa17.xq	         correct
	xa18.xq		 syntax error "<-", case
	xa19.xq		 syntax error "<-", case
	xa20.xq		 syntax error case

  - removed all the debugging print statements.

June 29th, 2001 - Mary, Byron and Jerome

  - Compiled the whole thing except the C api with new AST
  - Found lots of bugs in typing and subtyping.
  - Added ELEMENT A { } ATTRIBUTE A { } in the xquery parser. Did not
    debug that part yet.

June 28th, 2001 - Byron

  - Updated the parser so that both element and attribute are
    correctly parsed and constructed.
  - Done more tests systematically. Reveals some bugs. Not fixed yet.
    The scripts are located at ~/galax/regress
  - Bug on subsumption and simplify.  The new test set revealed the
    problem with simplify.ml It has problem in simplifying Unions.
    Fact:
     o subsumption.ml's bug: None <: Empty (true) Empty <: None
       (true!!! it should be false)
     o None is a subtype of everything (from XQuery 1.0 Formal
       Semantic section 4.2)

    In simplification, it deunions everything, simplifies, REMOVE
    types that is a subtype of something else in the new union.
 
    If we simplify () | 0, it will remove () because of the
    subsumption bug. It will give us 0. But, the correct result is ().
    The code checks whehter () <: 0. The bug tells wrong answer. So
    that () is removed.

June 27th, 2001 - Byron

  - wrote a simple regression test. 4 remarks are made, mainly about
    the xquery parser

      o This doesn't parses: 
	parseStringFXQuery "default namespace = \"pennDBSpace\"";;
        This does: 
	parseStringFXQuery "default namespace mySpace = \"pennDBSpace\"";;

        We are expecting the opposite.

        ToDo: EDefaultNamespaceDecl is (string * string). It should be
        string. EDefaultNamespaceDecl ENamespaceDecl are not used
        anywhere. => I can't tell what the pair of string means and I
        didn't modify.

      o model -> ... | ELEMENT nameset LCURLY typedmodel RCURLY | ...
        This parses: "element * { String }" This doesn't: "element
        myElem * { String }"

        qname is missing. => The element model is not properly created

      o model -> ... | ATTRIBUTE nameset LCURLY typedmodel RCURLY | ...
        This parses: { attribute myAttr* { String }
        This doesn't: { attribute myAttr * { String }

        ATTRIBUTE -> "attribute" whitespaceplus qname
        Cause: qname followed by nameset
        ToDo: put whitespaceplus between these two 'terminals'
  
      o Subsumption fails in this trivial case:
       	myMNone is a model of None
     	myMEmpty is a model of Empty
	Both of the below return true.
		isSubtype sortDeclList myMNone myMEmpty;;
		isSubtype sortDeclList myMEmpty myMNone;;

June 26th, 2001 - Byron

  - Updated Schema and Subsumption to comiple with the new AST (not
    test yet).

  - subsumption.ml(i): the internal structure, sub_theta is updated
    to:

	type sub_theta = (tname * tname) list

    this affects operations on subsumptions mappings and subsumption
    functions.

  - Many functions in schema.ml match on the model_desc
      o Exceptions are raised if it matches TElemRef, TAttrRef.  I am
        not sure what's the right thing to do with them.
      o TAmp is not supported yet.

June 25th, 2001 - Mary, Byron, and Jerome

  - Updated Simplify, Intersection to compile with the new AST.
  - Updated all interface under schema directory to compile with the
    new AST.
  - Updated the first half of Schema.
  - Updated Typeutils to compile with the new AST.

June 24th, 2001 - Jerome

  - Checked algebra parser and printing functions on ./test
    examples. Updated all examples with the new syntax.

June 23th, 2001 - Jerome

  - Updated Parseutil to compile with the new AST. Cleaned detection
    of multiply defined functions and variables.
  - Added new printing functions from the core to the XQuery syntax.
  - Added back printing functions for old algebra type syntax.
  - Added printing functions for the new type systax.
  - Updated the Print module to compile with the new AST. Removed
    obsolete printing functions.

June 22th, 2001 - Jerome

  - Moved printing for minOccurs/maxOccurs values from the Print to
    the Bound module.
  - Updated the XQuery parser to compile with the new AST.
  - Added additional AST creation functions in Astutil that take finfo
    and other parameteres into account.
  - Added precedence for SORT in Algebra parser.
  - Modified syntax for match in Algebra:

    match e                        match e as v
      case v1 : t1 do e1     -->     case t1 do e1
      ...                            ...
      else en                        else en

  - Updated the Algebra parser to compile with the new AST. The
    algebra syntax for types handled by the parser is still the same,
    but it now creates the new AST using groups instead of
    types. Notably:

    TYPE X = t    -->    GROUP X = t
    a [ X ]       -->    ELEMENT a { GROUP X }

  - Updated the AST to handle the new new syntax for types.

June 21th, 2001 - Byron and Jerome

  - Created Astutil containing AST creation functions.
  - Put locinfo() in the Finfo module.
  - Updated Xasyn to the new AST for XQuery and the core.
  - Fixed Makefile in ./capi to avoid trying the installation is the
    CAPI is not compiled.
  - Fixed printing function for Sort.

June 10th, 2001 - Jerome

  - Removed support for unordered collections (cf. new version of the
    data model).
  - Added support for process instructions, CDATA sections and
    comments in the parser.

June 6th, 2001 - Jerome

  - Made CVS repository available to the rest of the Galax team.

June 4th, 2001

  - Mary Fernandez and Byron Choi join the Galax team!
  - Moved bltin.ml module from algebra/ to in stdlib/
  - Preliminary support for the new syntax for types in XQuery (Phil
    Wadler and Jonathan Robie's proposal).

May 25th, 2001

  - Created toplevel/toputils.ml file and updated toplevel tools
    accordingly.
  - Removed the serialization module. Transfered the corresponding
    function in the data model module.
  - Made _Node and _ValueNode abstract in the datamodel.
  - Did some cleaning on the datamodel interface.
  - Made _oforest and _uforest abstract in the datamodel.
  - Created lexer and parser for XQuery. Added corresponding files
    parsing/xquery_lexer.mll parsing/xquery_parser.mly. Removed old
    attempts xqlexer.mll and xqparser.mly. Updated parseutil.ml and
    xasyn.ml accordingly. Added all_usecases.xq in the test directory.
  - Created stdlib directory. This directory will contain the XPath
    2.0 operators, pervasive.xq, etc.

