Il 08/01/21 03:00, Thibaut Cuvelier ha scritto:
A tour of some C++ libraries for XML:
- RapidXML: mostly unmaintained since 2013, no support for namespaces (except in forks: https://github.com/dwd/rapidxml <https://github.com/dwd/rapidxml>) - Boost Property Tree: no XML parser, which limits further use (it can use RapidXML though, see above)
- libstudxml: C++ library, designed for speed, no DOM
- libxml2: C library, designed for features and not speed (also includes XPath and XSLT, DTD and XML Schema, namespaces), "mature" and barely not evolving anymore
- libxml++: depends on glibmm2
- Xerces-C++: C++ library, designed for features and not speed (also includes XPath, DTD and XML Schema, namespaces), "mature" and barely not evolving anymore; no XSLT (Xalan could be used, but it only works with a ancient version of Xerces; XQuilla implemented XPath 2, but is no more developed since 2016) - Expat: C library, designed for speed, no DOM by default (provided by https://github.com/kolotsey/expat-dom <https://github.com/kolotsey/expat-dom>), with namespaces - tinyxml2: C++ library, designed for speed only (also includes XPath through the unmaintained https://github.com/stanthomas/tinyxml2-ex <https://github.com/stanthomas/tinyxml2-ex>, no validation, no namespaces), mature and slowly evolving - pugixml: C++ library, designed for speed with a few features (like XPath, no validation, no namespaces), mature and evolving - libroxml: C library, no clear design goal (includes XPath, namespaces, no validation), evolving - Saxon-C: C/C++ wrapper of the state-of-the-art Java library, largest amount of features (XPath and XSLT 3, DTD and XML Schema validation -- extension for RelaxNG: http://www.cfoster.net/saxon-jing/ <http://www.cfoster.net/saxon-jing/> --, namespaces), very mature, really evolving (both performance and features), but it requires a JVM (Excelsior is built-in, even though it's not been maintained for quite a long time) - Qt: no, I was joking :). Qt XML is not supported anymore, it's recommended to switch to QXmlStreamReader and QXmlStreamWriter (which are only SAX-like). Qt XML Patterns used to have XPath, XSLT, and XML Schema, but it's been deprecated a while ago (Qt 5.13 for the last wake-up call, but it hasn't been touched since Qt 4, basically)

If LyX is being really serious about XML (i.e. moving as many things as possible to XML technologies), Saxon is probably the way to go. Otherwise, it's going to be too heavy to ship Saxon and a JVM along with LyX. Instead, pugixml seems to me like a good choice: a few features (XPath is the most relevant for LyX, and included in the base library, no need for addons), good performance, still maintained (there is a chance to have bugs fixed in a newer version, plus security vulnerabilities taken care of).
Was this addressed in the virtual meeting? Also, since Xerces-C was the most feature full and mature after Saxon-C, I was curious as to why you didn't mention it.

Anyhow, I think that for a start we'd need only the most basic features (tag insertion, indent), as was the purpose of #12055 in the first place (I'm sorry to have opened this pandora's box), so maybe no harm will come if we start wrapping pugi.

Let me know what you think, and if this is not the time for this, as with LyX 2.4 coming out there might be other things that need focus.
--
lyx-devel mailing list
lyx-devel@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-devel

Reply via email to