Repository: https://github.com/lisp/de.setf.xml
License: LGPL
Various informative statements about it from the homepage and the CL-XML documentation:
CL-XML is a collection of Common LISP modules for data stream parsing and serialization according to the "Extensible Markup Language" and ancillary standards. The modules perform parsing and serialization between XML, XML Query, and XML Path expressions and DOM-compatible CLOS instances. The XML processor includes a conformant, validating, namespace-aware model-based parser. It supports, in particular, namespace-aware DTD-based validation. The XPATH module comprises LISP bindings for the XML Path library, an S-expression-based namespace-aware path model, and a macro-based path model compiler which implements an XPATH-algebra. The XQUERY module comprises LISP bindings for the XML Query library, an S-expression-based query model which incorporates the XPATH facilities, and a macro-based query compiler. The base CLOS model implements the XML Query Data Model in a class hierarchy which presents an Infoset compatible programming interface.The respective releases have been tested with
- ALLEGRO(5.0.1, 6.2) - CL-HTTP
- LispWorks(4, 4.3) - CL-HTTP
- MCL(4.2, 5.0) +/- CL-HTTP(cl-http-70-190)
- openmcl
- cmucl (latest test was with p.mai's osx port)
- scieneer
CL-XML supports both DOM-based parsing and Event-based parsing. For the latter method, two event-based interfaces are provided -- one, on a lower level, and another, as a SAX equivalent. The DOM-based (i.e.: model-based) method is the default. DOM-based and Event-based methods may be used together, in the same application.
The XML, XPath, and XQuery parsers are generated from BNF files, which are available at the main CL-XML page.
CL-XML, version 0.915, also includes a contributed SOAP module
Quick assessment (2024-07-04)
- The system xml.asd must be named de.setf.xml.asd or else ASDF won't load it.
- Lines 11–14 of xml.asd: Don't know what this is trying to do. Probably logical pathnames?
- Line 28 of xml.asd: The system is called usocket, not :net.common-lisp.usocket.
- MIME package is broken because package operations don't include :documentation.
- Lines 516–551 of mime.lisp: MIME type parameter parsing doesn't work right.
- Line 145 of package.lisp: Tends to interfere with ccl:vector-input-stream.
- Line 741 of utils.lisp: Need to import ccl::make-ip-socket.
- Line 579 of xqdm-character-classes.lisp: Typo.
obsolete