CALS tables parser¶
Description¶
A CalsParser is used to parse the tables (table elements) of a CALS file
and generate a Table instances (memory representation of a table).
The instance can then be serialize in another XML format, like HTML, Formex 4 or even CALS.
To use this class, you need to inherit the BaseBuilder class
and create an instance of your class to used in the CalsParser parser.
Of course, for the sake of this demonstration we can used an instance
of the class BaseBuilder, without implementing
the generate_table_tree() method.
>>> from lxml import etree
>>> from benker.builders.base_builder import BaseBuilder
>>> from benker.parsers.cals import CalsParser
>>> builder = BaseBuilder()
>>> parser = CalsParser(builder)
For example, you can parse the following CALS table:
<table frame="all">
<tgroup cols="2" colsep="0" rowsep="1">
<colspec colnum="1" colname="c1" colwidth="50mm" align="left"/>
<colspec colnum="2" colname="c2" colwidth="20mm" align="right"/>
<colspec colnum="3" colname="c3" colwidth="20mm" align="char" char="." charoff="20"/>
<thead>
<row bgcolor="#90ee90">
<entry valign="top">Element</entry>
<entry valign="top">(Z)</entry>
<entry valign="top">(A)</entry>
</row>
</thead>
<tbody>
<row bgcolor="#cdcdcd">
<entry>Hydrogen</entry>
<entry>1</entry>
<entry>1.008</entry>
</row>
<row>
<entry>Helium</entry>
<entry>2</entry>
<entry>4.0026</entry>
</row>
<row bgcolor="#cdcdcd">
<entry>Lithium</entry>
<entry>3</entry>
<entry>6.94</entry>
</row>
</tbody>
</tgroup>
</table>
And generate a Table instance:
>>> tree = etree.parse("docs/_static/parsers.cals.sample1.xml")
>>> cals_table = tree.getroot()
>>> table = parser.parse_table(cals_table)
>>> print(table)
+-----------+-----------+-----------+
| Element | (Z) | (A) |
+-----------+-----------+-----------+
| Hydrogen | 1 | 1.008 |
+-----------+-----------+-----------+
| Helium | 2 | 4.0026 |
+-----------+-----------+-----------+
| Lithium | 3 | 6.94 |
+-----------+-----------+-----------+
Options¶
The CalsParser parser accept the following options:
cals_ns is used to specify a specific namespace used by your CALS tables.
For instance, if you have :
<table frame="box" xmlns="http://my.cals.ns"> <tgroup cols="2" colsep="0" rowsep="1"> <colspec colnum="1" colname="c1"/> <colspec colnum="2" colname="c2"/> <colspec colnum="3" colname="c3"/> <thead> <row><entry/><entry>k</entry><entry>unit</entry></row> </thead> <tbody> <row><entry>Meter</entry><entry>km</entry><entry>m</entry></row> <row><entry>Liter</entry><entry>KL</entry><entry>L</entry></row> <row><entry>Gram</entry><entry>Kg</entry><entry>g</entry></row> </tbody> </tgroup> </table>
To parse this XML document, you can create a parser using the cals_ns option:
>>> parser = CalsParser(builder, cals_ns="http://my.cals.ns") >>> tree = etree.parse("docs/_static/parsers.cals.sample2.xml") >>> cals_table = tree.getroot() >>> table = parser.parse_table(cals_table) >>> print(table) +-----------+-----------+-----------+ | | k | unit | +-----------+-----------+-----------+ | Meter | km | m | +-----------+-----------+-----------+ | Liter | KL | L | +-----------+-----------+-----------+ | Gram | Kg | g | +-----------+-----------+-----------+
Supported values¶
The CalsParser parser can handle the following values:
CALS styles.