[Axl] [ANN] axl library 0.2.1 is ready!
Francis Brosnan Blazquez
francis at aspl.es
Thu Apr 20 09:33:11 CEST 2006
# Axl Library release note: 0.2.1 #
Advanced Software Production Line is proud to announce the initial
official release of Axl Library: an Open Source XML toolkit.
Axl Library is an small and efficient XML toolkit, that will allow you
to produce efficient and clear code that interfaces with XML data.
The library was produced to support XML requirements needed by
software developed by Advanced Software Production Line, S.L.
At this moment the library is being used by Vortex Library and
Vortex Library Homepage
Advanced Software Production Line, S.L.
Memory report (an interesting report)
This release in short
First official release which comes with all basic functions
required by most XML developers: XML parsing, DTD validation (not
supported yet ATTLIST), XML dumping, etc.
Many memory and execution time improvements has been done to the
library before this release was done. Check out the memory report
from the resources section.
Changes from previous release (initial)
* [fix] uploading initial source code proposal to implement a XML 1.0
Third edition compliant implementation.
* [fix] uploading missing autogen.sh file.
* [new] adding a new module axl-stream to implement a streaming
concept while padding the xml structure. This will allow to write a
higher level code that could open the possibility to implement
parsing xml from other sources. API added:
* [fix] reorganized axl error module to implement application error
reporting using references rather than hiding it.
* [fix] adding initial code to axl_doc_parse. Now we parse the initial
xml header [production 23].
* [fix] adding new internal function to get next chunk, inside stream
* [fix] making axl_stream_inspect to automatically call to
axl_stream_accept if a call is done without accept previous valid
inspection. Non valid inspection doesn't produce to accept
automatically stream consumed.
* [new] adding new API to move the stream an amount provided.
* [new] implemented axl_stream_get_until which returns the all stream
available until some chunk (or several chunks) are found.
* [new] adding new API to provide an easy way to consume spaces,
tabular line feed and carry return. (\x20, \x9, \x0A and \x0D). API
* [fix] uploading axl_doc_parse implementation that is able to mostly
parse xml header.
* [new] adding a function to enable API consumers to get the xml
encoding value for a given axlDoc reference. API added:
* [fix] uploading missing VERSION file.
* [new] uploading initial test files and Makefile.am to check the
* [new] adding initial test to check if xml document header is
* [new] Adding new API to dispose axlDoc instances created.
* [new] Adding more internal API to axl stream module, to allow
associating an axlDoc instance to axlStream instance so the axlDoc
instance is deallocated if the stream is done so.
* [new] Adding a top-level type redefinition: bool. This is just a
redefinition of the int type to bool value. This allow to make more
explicit type semantic for function and variables that only needs to
represent the false and true boolean values. Added also macro
definitions: AXL_TRUE and AXL_FALSE.
* [fix] include cpp header declarations to be usable from c++.
* [fix] LibAxl know successfully parses the xml header specification,
including encoding and stand alone values and it supports any
interleaving "white space" the in XML 1.0 sense. test/test_01.c
contains a test that check different situations.
* [new] added new API to the axl doc module to get current stand alone
* [new] added new API to the axl node module:
* [fix] fixing several bugs at axl_stream_inspect. Now any call to
axl_stream_inspect that successfully find the element looked up, the
stream will be accepted and move forward.
* [fix] fixing several bugs at axl_stream_inspect_several.
* [new] adding new API to axl stream module to check that a provided
chunk contains a "white space" in the sense the XML 1.0 standard
defines. Added also API to compare two chunks. A function to get
current status for the stream is also added.
* [new] adding a new module to perform console log reporting. API
- AxlDebugLevel (enum definition)
* [fix] fixing a bug in the AXL_CONSUME_SPACES which was causing to
not properly detect when an error was found at the stream.
* [new] adding a new macro which allows to check if an string
reference is empty either because it is NULL or it has no content.
* [fix,new] making axl_init function to return an bool rather than an
int value. Added a new function to the axl module to terminate axl
library function. Currently it doesn't make any operation. It is
added for future use.
* [fix] making axl_error_new function to drop a critical log when it
receives a initialization call. This saves the needed to write a
console line instruction to report the error received.
* [new] adding more test to check that LibAxl properly detects errors
while reading the xml header.
* [new] LibAxl now completely read xml documents with one empty node
and full header xml specification.
* [new] making LibAxl error reporting mechanism to report not only the
error found but also the stream index, the stream size and a preview
of the stream near to the error. API added:
* [new] adding more deallocation code to release memory used by
* [new] implemented supporting function for copying strings and
creating them using the printf-like format. API added:
* [fix] fixing axl_strdup macro definition to point to the
* [new] adding a new module, axl list, to implement an ordered,
double-linked, list that could support other collections to be built
on top of it. API added:
* [new] adding new declarations to the axl decl module. API added:
* [new] adding a new module, axl stack, implemented on top of axl
list, implementing an stack interface. API added:
* [new] adding more API to the axl do module, to configure new childs
to the current parent xml node and to configure which is the current
parent xml node. API added:
* [new] adding more API to the axl node, to configure its content,
childs and deallocating memory reserved by them. API added:
* [new] adding new API to axl stream module to allow performing
inspect operation without accepting the stream
recognized. Re-implemented axl_stream_inspect to use a common
function shared with the new one added. API added:
* [fix] extended LibAxl test suite to check functionality for new list
and stack implementation, ensure that it not only works but also
don't leak memory.
* [fix] making axl_stream_get_until function to report which chunk
have been matched.
* [new] adding more internal API to report where we are while reading
* [fix] fixing axl_doc_parse_node to be able to parse axl nodes that
uses the > and /> form but really close to the xml node
name. Starting to parse serious xml chunks.
* [fix] making axl error module to also report the stream header being
parsed once the error is reported.(using previous function
* [new] adding new API the to the axl node module which allows to
configure node content, check if a given node have a selected name
and to get a child node that is selected by a particular name. API
* [new] updated axl_stream_get_until and splitted the function into two
pieces called with normal arguments and stdargs. Added support to
configure if the terminator matched should be accepted or not. API
* [new] implemented a string split operation, that is able to use
several strings to split the result. Adding API to get current
number of items inside the result returned and to release it.
* [fix] renaming axl_list_destroy to axl_list_free (API naming
consistency) I hope no one is already using this API X'D.
* [fix] LibAxl is now able to parse xml documents and to detect many
errors relationed with proper balancing, node naming, etc. Also added
support to get a node on a selected path, implementing a minimal
feature that is similar to XPath. Also added API to get the root
* [fix] adding lot of internal test code to ensure the library works
properly and do not leak anything.
* [fix] uploading missing module (axl_decl.c)
* [fix] working on adding doxygen support to axl library.
* [fix] uploading missing files.
* [fix] Adding support to consume xml comments. Modified axl_doc_parse
function to support this new feature. Added a new test to check this
is working (test_04). Internal API added:
* [fix] Adding support to consume xml node attributes. Test verifying
* [new] Adding new API to the axl node module to allow setting,
querying attribute values for xml nodes. API added:
* [fix] making axl_stream_move function to use axl_stream_accept
before modifying current index.
* [new] Adding a new function to perform string concatenation.
* [new] Adding new function to perform xml document parsing for a set
of lines. API added:
* [new] Starting PI target support. API added:
* [new] finished initial LibAxl support to properly parse xml
document, including comments, and PI elements. Now, working on
adding support for DTD validation. New module added: axl dtd with
Adding new type to represent the kind of element being used inside a
Adding new type to represent how many times is represented/allowed
to use a element type definition:
* [fix] updating project logo, updating axl document center, adding
several logo files: axl-logo.xcf, axl-logo-80x80.png
axl-logo-200x200.png and axl-logo-600x600.png
* [new] updated axl node API to include support for managing xml PI
elements. API added:
* [new] adding new function to make a given string to be upper cased
or lower cased:
* [new] adding new API to the axlDoc module to include support for
processing PI elements. API added:
* [fix] working on adding support to axl library to be able to parse
files, memory chunks and sockets, which contains a xml stream, using
the same interface.
* [new] adding initial DTD parsing support. Added initial tests.
* [new] added a new function to allow parsing xml document from
files. Modified internal implementation to use the same code for all
functions parsing data:
* [fix] updating current axl stream implementation to be more
efficient while reading xml files from buffers that are connected
with file descriptors.
* [fix] uploading first fully function libxml parsing library which is
able to parse files, sockets, memory chunks, using the same source
code, due to its stream abstraction.
* [fix] uploaded initial DTD implementation (which could parse very
simple DTD pieces).
* [fix] changing compilation mode to use ANSI features.
* [new] adding new API to perform DTD validation using. Now, the
function supports validation for the first root node. Also added a
function to the the DTD root node name.
* [new] committing first working version which validates the first root
node for xml documents.
* [new] adding a new test to the main test module (to check more
extended DTD support).
* [fix] Making NODE_CMP_NAME to use axl_cmp rather than
axl_stream_cmp, which fails to check strings that are equal for the
elements that beings both.
* [fix] fixing xml document parsing where the defined elements was an
empty root node using the short format.
* [new] adding more API to the DTD module which allows to get current
dtd element name and its type.
* [fix] extending LibAxl stream implementation to be able to ref more
objects to be destroyed once the stream is deallocated.
* [fix] more code to support DTD content spec.
* [new] Adding a new function to allow getting child nodes for a given
xml node representation. API added:
* [fix] fixing a bug inside axl_stream_get_until function which was
making to not properly detect chunk endings while looking for white
spaces (it wasn't using the white space in the sense defined by the
XML 1.0 standard).
* [new] making axl_free and axl_strdup to be function rather than
* [new] added initial support to fully parse a DTD file, and included
API to allow inspecting the DTD content. Great. API added:
- axlDtdElementList (type def)
- axlDtdElementListNode (type def)
- AxlDtdNestedType (enum def)
- NodeType (enum def)
* [fix] uploading missing files used to perform library tests.
* [fix] uploading first fully working LibAxl version which is able to
parse and validate xml documents against DTD definitions. Currently
only xml node structure is implemented, <!ELEMENT
declaration. Remains to implement <!ATTLIST declaration. Great!!
* [fix] fixing LibAxl library to be able to parse huge xml files
(using large.xml). Added regression test to ensure this remains this
way in the future.
* [new] adding a new function to the axl node module to enable getting
child nodes at a selected position. API added:
* [fix] added support to read content spec repetition characters
(?,+,*) for content particles and content particle lists. Added
API to manage this information:
* [fix] making axl list implementation to implement a memory allocator
to handle node blocks requests/disposals to be able to reuse nodes
that are already allocated.
* [fix] making every axlStream object to have its own temporal buffer
to perform string operations to reduce stack activation impact for
* [fix] making axl node objects to only initialize its internal
childs, piTargets and attribute list only once required.
* [new] adding two new test to perform comparative results against
* [fix] adding a more complex DTD test (test_09, inside test_01.c
file). Adding two new more xml files that are know to be properly
formated and defined by the DTD (fact.dtd) which is also added.
* [fix] added support to parse complex DTD nested definitions mixing
sequences and choices ( (,..,( |) ).
* [fix] improved support to parse repetition patterns inside nested
* [fix] adding more test to support DTD pattern repetition (*,?,+)
while defining content particles.
* [fix] fixing xml document processing to stop reading the stream if a
complete xml document was detected.
* [fix] fixing a bug while recognizing mixed content particles
specification which was setting repetition patterns with nested item
* [fix] reorganizing DTD validation code to support nested
* [fix] fixing a bug while parsing DTD element, with repeat
characters, separated by sequence or choice indicators.
* [fix] adding support to detect and validate DTD element item list
that comes with element repetitions.
* [fix] finally, we have complete DTD validation for sequence
separator. Great! Fixed internal implementation (axl_dtd.c) and
included a more extended test to check its functionality.
* [fix] fixing a not proper handling for documents with one empty
* [fix] making test file to run all test defined (disabled for initial
* [fix] finally, DTD support for <!ELEMENT instruction is now
complete. It includes support for any combination and nesting for
sequence and choices, including repetition patterns. Great!
* [fix] added several files to improve parse memory efficiency. This
improvements have made LibAxl for 39% more memory efficient than
LibXML. API added:
* [fix] applying an internal change to the axl stream implementation
to not allocate memory required for an array used to store the
chunks to match inside the axl_stream_get_until function, making
that allocation at the stream initialization code, reusing the same
piece of memory between calls. This have improved LibAxl memory
usage up to 36%!!!
* [fix] making LibAxl DTD parsing engine to detect and skip <!ENTITY
declarations for now.
* [fix] making DTD nodes flagged as PCDATA to accept empty content.
* [fix] disabling top level root node check while performing DTD
validation. This concept is implemented using <!DOCTYPE declaration,
which is not supported yet.
* [fix] fixing axl_dtd_element_is_toplevel to properly return the
right value rather the inverse one.
* [new] adding a new function to support making a local copy from an
attribute for a given node. Added a new function to create empty xml
documents (axlDoc reference). Added initial implementation to
support dumping an axlDoc reference into a flat xml
representation. Also added a function to allow getting the node
content at a profiled path. Added a function which allows to set the
document root node. API added:
* [new] adding support to transparently encode and decode entities
values (<,>,',", &) to its corresponding entities. Added a new test
to ensure that automatic translation works for every release
done. API added:
* [new] added support to performing XML document dumping from an
structure into a string representation. The operation is done in an
efficient way, allocating only one memory chunk, that was previously
calculated. Added a test to ensure dumping functionally. API added:
* [new] added a new function to allow comparing two XML
documents. Also added a function to compare two nodes. API added:
* [fix] fixing axl_stream_inspect_several to not report an error if
there are more chunks left to be matched.
* [fix] several internal library improvements that have made the
library to run a regression tests from 0.637ms to 0.106ms
(GREAT!!!). LibXML do the same task in 0.047ms. Valgrind and
Statistical progression data:
*) Initial measure: 0.637ms
1) After making some function to not call several times to strlen:
2) After making inspect several to not calculate every time chunk
3) After making get until function to not compare with white space
4) After avoiding calling to getenv from axl_log_is_enabled:
5) After rewriting AXL_CONSUME_SPACES to for an efficient version:
6) After making a function, from inside the axl node module, to not
call to initialize an internal list when it is known that the
function will do nothing: [0.106!!!]
* [fix] fixing a bug left.
* [fix] general win32 makefiles update to remove previous references
to libxml, replacing it with the new LibAxl implementation.
* [new] adding first initial web proposal for the LibAxl
* [fix] more updates for the LibAxl web page.
* [fix] uploading changes to make it work while building the axl dist.
* [new] adding initial memory report result.
* [fix] adding missing checking to avoid running doxygen tool if not
* [fix] mostly finished memory and time execution report.
* [fix] finished memory usage report.
About Advanced Software Production Line, S.L.
Advanced Software Production Line is leading the Af-Arch project: a
complete framework to develop distributed application to manage
Af-Arch project relies uses Axl library to support its XML
requirements while exchanging data between nodes.
Advanced Software Production Line also provides GNU/Linux support
and consulting services to enable organization to introduce
GNU/Linux inside its process, making other platforms to interact
Contact us, using English or Spanish, to get commercial support
and/or XML based development services.
You can reach us:
http://www.aspl.es - info at aspl.es
We hope Axl Library help you. Enjoy Axl Library!
Francis Brosnan Blázquez - francis at aspl.es
Advanced Software Production Line - http://www.aspl.es
20th Apr 2006, Madrid (Spain)
More information about the Axl