2010-09-20 22:08:53 +02:00
|
|
|
<!-- doc/src/sgml/isn.sgml -->
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2011-05-08 04:29:20 +02:00
|
|
|
<sect1 id="isn" xreflabel="isn">
|
2007-11-11 00:30:46 +01:00
|
|
|
<title>isn</title>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
<indexterm zone="isn">
|
|
|
|
<primary>isn</primary>
|
|
|
|
</indexterm>
|
|
|
|
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
The <filename>isn</filename> module provides data types for the following
|
|
|
|
international product numbering standards: EAN13, UPC, ISBN (books), ISMN
|
2010-10-20 04:46:55 +02:00
|
|
|
(music), and ISSN (serials). Numbers are validated on input according to a
|
|
|
|
hard-coded list of prefixes; this list of prefixes is also used to hyphenate
|
|
|
|
numbers on output. Since new prefixes are assigned from time to time, the
|
|
|
|
list of prefixes may be out of date. It is hoped that a future version of
|
|
|
|
this module will obtained the prefix list from one or more tables that
|
|
|
|
can be easily updated by users as needed; however, at present, the
|
|
|
|
list can only be updated by modifying the source code and recompiling.
|
|
|
|
Alternatively, prefix validation and hyphenation support may be
|
|
|
|
dropped from a future version of this module.
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<sect2>
|
2011-01-29 19:00:18 +01:00
|
|
|
<title>Data Types</title>
|
2007-11-11 00:30:46 +01:00
|
|
|
|
2010-08-10 22:42:01 +02:00
|
|
|
<para>
|
|
|
|
<xref linkend="isn-datatypes"> shows the data types provided by
|
|
|
|
the <filename>isn</filename> module.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<table id="isn-datatypes">
|
2011-01-29 19:00:18 +01:00
|
|
|
<title><filename>isn</filename> Data Types</title>
|
2007-11-11 00:30:46 +01:00
|
|
|
<tgroup cols="2">
|
|
|
|
<thead>
|
|
|
|
<row>
|
2011-01-29 19:00:18 +01:00
|
|
|
<entry>Data Type</entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry>Description</entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
</row>
|
|
|
|
</thead>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
<tbody>
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>EAN13</type></entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
<entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
European Article Numbers, always displayed in the EAN13 display format
|
2007-11-11 00:30:46 +01:00
|
|
|
</entry>
|
|
|
|
</row>
|
|
|
|
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>ISBN13</type></entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
<entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
International Standard Book Numbers to be displayed in
|
|
|
|
the new EAN13 display format
|
2007-11-11 00:30:46 +01:00
|
|
|
</entry>
|
|
|
|
</row>
|
|
|
|
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>ISMN13</type></entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
<entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
International Standard Music Numbers to be displayed in
|
|
|
|
the new EAN13 display format
|
2007-11-11 00:30:46 +01:00
|
|
|
</entry>
|
|
|
|
</row>
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>ISSN13</type></entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
<entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
International Standard Serial Numbers to be displayed in the new
|
|
|
|
EAN13 display format
|
2007-11-11 00:30:46 +01:00
|
|
|
</entry>
|
|
|
|
</row>
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>ISBN</type></entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
<entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
International Standard Book Numbers to be displayed in the old
|
|
|
|
short display format
|
2007-11-11 00:30:46 +01:00
|
|
|
</entry>
|
|
|
|
</row>
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>ISMN</type></entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
<entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
International Standard Music Numbers to be displayed in the
|
|
|
|
old short display format
|
2007-11-11 00:30:46 +01:00
|
|
|
</entry>
|
|
|
|
</row>
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>ISSN</type></entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
<entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
International Standard Serial Numbers to be displayed in the
|
|
|
|
old short display format
|
2007-11-11 00:30:46 +01:00
|
|
|
</entry>
|
|
|
|
</row>
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>UPC</type></entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
<entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
Universal Product Codes
|
2007-11-11 00:30:46 +01:00
|
|
|
</entry>
|
|
|
|
</row>
|
|
|
|
</tbody>
|
|
|
|
</tgroup>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
Some notes:
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
|
2007-12-10 06:32:51 +01:00
|
|
|
<orderedlist>
|
2007-11-11 00:30:46 +01:00
|
|
|
<listitem>
|
2007-12-10 06:32:51 +01:00
|
|
|
<para>ISBN13, ISMN13, ISSN13 numbers are all EAN13 numbers.</para>
|
2007-11-11 00:30:46 +01:00
|
|
|
</listitem>
|
|
|
|
<listitem>
|
2007-12-10 06:32:51 +01:00
|
|
|
<para>EAN13 numbers aren't always ISBN13, ISMN13 or ISSN13 (some
|
|
|
|
are).</para>
|
2007-11-11 00:30:46 +01:00
|
|
|
</listitem>
|
|
|
|
<listitem>
|
2007-12-10 06:32:51 +01:00
|
|
|
<para>Some ISBN13 numbers can be displayed as ISBN.</para>
|
2007-11-11 00:30:46 +01:00
|
|
|
</listitem>
|
|
|
|
<listitem>
|
2007-12-10 06:32:51 +01:00
|
|
|
<para>Some ISMN13 numbers can be displayed as ISMN.</para>
|
2007-11-11 00:30:46 +01:00
|
|
|
</listitem>
|
|
|
|
<listitem>
|
2007-12-10 06:32:51 +01:00
|
|
|
<para>Some ISSN13 numbers can be displayed as ISSN.</para>
|
2007-11-11 00:30:46 +01:00
|
|
|
</listitem>
|
|
|
|
<listitem>
|
2007-12-10 06:32:51 +01:00
|
|
|
<para>UPC numbers are a subset of the EAN13 numbers (they are basically
|
|
|
|
EAN13 without the first <literal>0</> digit).</para>
|
2007-11-11 00:30:46 +01:00
|
|
|
</listitem>
|
|
|
|
<listitem>
|
2007-12-10 06:32:51 +01:00
|
|
|
<para>All UPC, ISBN, ISMN and ISSN numbers can be represented as EAN13
|
|
|
|
numbers.</para>
|
2007-11-11 00:30:46 +01:00
|
|
|
</listitem>
|
2007-12-10 06:32:51 +01:00
|
|
|
</orderedlist>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
Internally, all these types use the same representation (a 64-bit
|
|
|
|
integer), and all are interchangeable. Multiple types are provided
|
|
|
|
to control display formatting and to permit tighter validity checking
|
|
|
|
of input that is supposed to denote one particular type of number.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
The <type>ISBN</>, <type>ISMN</>, and <type>ISSN</> types will display the
|
|
|
|
short version of the number (ISxN 10) whenever it's possible, and will show
|
|
|
|
ISxN 13 format for numbers that do not fit in the short version.
|
|
|
|
The <type>EAN13</type>, <type>ISBN13</type>, <type>ISMN13</type> and
|
|
|
|
<type>ISSN13</type> types will always display the long version of the ISxN
|
|
|
|
(EAN13).
|
|
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
|
|
|
|
<sect2>
|
|
|
|
<title>Casts</title>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
The <filename>isn</> module provides the following pairs of type casts:
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<itemizedlist>
|
2007-11-11 00:30:46 +01:00
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISBN13 <=> EAN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISMN13 <=> EAN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISSN13 <=> EAN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISBN <=> EAN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISMN <=> EAN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISSN <=> EAN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
UPC <=> EAN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISBN <=> ISBN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISMN <=> ISMN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
ISSN <=> ISSN13
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
When casting from <type>EAN13</> to another type, there is a run-time
|
|
|
|
check that the value is within the domain of the other type, and an error
|
|
|
|
is thrown if not. The other casts are simply relabelings that will
|
|
|
|
always succeed.
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
|
|
|
|
<sect2>
|
2007-12-10 06:32:51 +01:00
|
|
|
<title>Functions and Operators</title>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
The <filename>isn</> module provides the standard comparison operators,
|
2010-08-17 06:37:21 +02:00
|
|
|
plus B-tree and hash indexing support for all these data types. In
|
2009-05-18 13:08:24 +02:00
|
|
|
addition there are several specialized functions; shown in <xref linkend="isn-functions">.
|
|
|
|
In this table,
|
|
|
|
<type>isn</> means any one of the module's data types.
|
2007-12-10 06:32:51 +01:00
|
|
|
</para>
|
|
|
|
|
2009-05-18 13:08:24 +02:00
|
|
|
<table id="isn-functions">
|
2011-01-29 19:00:18 +01:00
|
|
|
<title><filename>isn</> Functions</title>
|
2007-12-10 06:32:51 +01:00
|
|
|
<tgroup cols="3">
|
2007-11-11 00:30:46 +01:00
|
|
|
<thead>
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry>Function</entry>
|
|
|
|
<entry>Returns</entry>
|
|
|
|
<entry>Description</entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
</row>
|
|
|
|
</thead>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
<tbody>
|
|
|
|
<row>
|
2013-07-04 17:33:08 +02:00
|
|
|
<entry><function>isn_weak(boolean)</function><indexterm><primary>isn_weak</primary></indexterm></entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>boolean</type></entry>
|
|
|
|
<entry>Sets the weak input mode (returns new setting)</entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
</row>
|
|
|
|
<row>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><function>isn_weak()</function></entry>
|
|
|
|
<entry><type>boolean</type></entry>
|
|
|
|
<entry>Gets the current status of the weak mode</entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
</row>
|
|
|
|
<row>
|
2013-07-04 17:33:08 +02:00
|
|
|
<entry><function>make_valid(isn)</function><indexterm><primary>make_valid</primary></indexterm></entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>isn</type></entry>
|
|
|
|
<entry>Validates an invalid number (clears the invalid flag)</entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
</row>
|
|
|
|
<row>
|
2013-07-04 17:33:08 +02:00
|
|
|
<entry><function>is_valid(isn)</function><indexterm><primary>is_valid</primary></indexterm></entry>
|
2007-12-10 06:32:51 +01:00
|
|
|
<entry><type>boolean</type></entry>
|
|
|
|
<entry>Checks for the presence of the invalid flag</entry>
|
2007-11-11 00:30:46 +01:00
|
|
|
</row>
|
|
|
|
</tbody>
|
|
|
|
</tgroup>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
<firstterm>Weak</firstterm> mode is used to be able to insert invalid data
|
|
|
|
into a table. Invalid means the check digit is wrong, not that there are
|
|
|
|
missing numbers.
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
<para>
|
|
|
|
Why would you want to use the weak mode? Well, it could be that
|
|
|
|
you have a huge collection of ISBN numbers, and that there are so many of
|
|
|
|
them that for weird reasons some have the wrong check digit (perhaps the
|
2007-12-10 06:32:51 +01:00
|
|
|
numbers were scanned from a printed list and the OCR got the numbers wrong,
|
|
|
|
perhaps the numbers were manually captured... who knows). Anyway, the point
|
|
|
|
is you might want to clean the mess up, but you still want to be able to
|
|
|
|
have all the numbers in your database and maybe use an external tool to
|
|
|
|
locate the invalid numbers in the database so you can verify the
|
|
|
|
information and validate it more easily; so for example you'd want to
|
|
|
|
select all the invalid numbers in the table.
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
<para>
|
|
|
|
When you insert invalid numbers in a table using the weak mode, the number
|
2007-12-10 06:32:51 +01:00
|
|
|
will be inserted with the corrected check digit, but it will be displayed
|
|
|
|
with an exclamation mark (<literal>!</>) at the end, for example
|
|
|
|
<literal>0-11-000322-5!</>. This invalid marker can be checked with
|
|
|
|
the <function>is_valid</> function and cleared with the
|
|
|
|
<function>make_valid</> function.
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
|
|
|
<para>
|
|
|
|
You can also force the insertion of invalid numbers even when not in the
|
|
|
|
weak mode, by appending the <literal>!</> character at the end of the
|
|
|
|
number.
|
|
|
|
</para>
|
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
Another special feature is that during input, you can write
|
|
|
|
<literal>?</> in place of the check digit, and the correct check digit
|
|
|
|
will be inserted automatically.
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
|
|
|
</sect2>
|
|
|
|
|
|
|
|
<sect2>
|
|
|
|
<title>Examples</title>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2010-07-29 21:34:41 +02:00
|
|
|
<programlisting>
|
2007-11-11 00:30:46 +01:00
|
|
|
--Using the types directly:
|
|
|
|
SELECT isbn('978-0-393-04002-9');
|
|
|
|
SELECT isbn13('0901690546');
|
|
|
|
SELECT issn('1436-4522');
|
|
|
|
|
|
|
|
--Casting types:
|
2007-12-10 06:32:51 +01:00
|
|
|
-- note that you can only cast from ean13 to another type when the
|
|
|
|
-- number would be valid in the realm of the target type;
|
|
|
|
-- thus, the following will NOT work: select isbn(ean13('0220356483481'));
|
|
|
|
-- but these will:
|
|
|
|
SELECT upc(ean13('0220356483481'));
|
|
|
|
SELECT ean13(upc('220356483481'));
|
2007-11-11 00:30:46 +01:00
|
|
|
|
|
|
|
--Create a table with a single column to hold ISBN numbers:
|
2007-12-10 06:32:51 +01:00
|
|
|
CREATE TABLE test (id isbn);
|
2007-11-11 00:30:46 +01:00
|
|
|
INSERT INTO test VALUES('9780393040029');
|
|
|
|
|
2007-12-10 06:32:51 +01:00
|
|
|
--Automatically calculate check digits (observe the '?'):
|
2007-11-11 00:30:46 +01:00
|
|
|
INSERT INTO test VALUES('220500896?');
|
|
|
|
INSERT INTO test VALUES('978055215372?');
|
|
|
|
|
|
|
|
SELECT issn('3251231?');
|
2007-11-11 15:23:18 +01:00
|
|
|
SELECT ismn('979047213542?');
|
2007-11-11 00:30:46 +01:00
|
|
|
|
|
|
|
--Using the weak mode:
|
|
|
|
SELECT isn_weak(true);
|
|
|
|
INSERT INTO test VALUES('978-0-11-000533-4');
|
|
|
|
INSERT INTO test VALUES('9780141219307');
|
|
|
|
INSERT INTO test VALUES('2-205-00876-X');
|
|
|
|
SELECT isn_weak(false);
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
SELECT id FROM test WHERE NOT is_valid(id);
|
2007-12-10 06:32:51 +01:00
|
|
|
UPDATE test SET id = make_valid(id) WHERE id = '2-205-00876-X!';
|
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
SELECT * FROM test;
|
|
|
|
|
|
|
|
SELECT isbn13(id) FROM test;
|
2010-07-29 21:34:41 +02:00
|
|
|
</programlisting>
|
2007-11-11 00:30:46 +01:00
|
|
|
</sect2>
|
|
|
|
|
|
|
|
<sect2>
|
|
|
|
<title>Bibliography</title>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
<para>
|
2007-12-10 06:32:51 +01:00
|
|
|
The information to implement this module was collected from
|
2007-11-11 00:30:46 +01:00
|
|
|
several sites, including:
|
2010-07-29 21:34:41 +02:00
|
|
|
<itemizedlist>
|
|
|
|
<listitem><para><ulink url="http://www.isbn-international.org/"></ulink></para></listitem>
|
|
|
|
<listitem><para><ulink url="http://www.issn.org/"></ulink></para></listitem>
|
|
|
|
<listitem><para><ulink url="http://www.ismn-international.org/"></ulink></para></listitem>
|
|
|
|
<listitem><para><ulink url="http://www.wikipedia.org/"></ulink></para></listitem>
|
|
|
|
</itemizedlist>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
|
|
|
The prefixes used for hyphenation were also compiled from:
|
2010-07-29 21:34:41 +02:00
|
|
|
<itemizedlist>
|
|
|
|
<listitem><para><ulink url="http://www.gs1.org/productssolutions/idkeys/support/prefix_list.html"></ulink></para></listitem>
|
|
|
|
<listitem><para><ulink url="http://www.isbn-international.org/en/identifiers.html"></ulink></para></listitem>
|
|
|
|
<listitem><para><ulink url="http://www.ismn-international.org/ranges.html"></ulink></para></listitem>
|
|
|
|
</itemizedlist>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
Care was taken during the creation of the algorithms and they
|
|
|
|
were meticulously verified against the suggested algorithms
|
|
|
|
in the official ISBN, ISMN, ISSN User Manuals.
|
|
|
|
</para>
|
|
|
|
</sect2>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
2007-11-11 00:30:46 +01:00
|
|
|
<sect2>
|
|
|
|
<title>Author</title>
|
|
|
|
<para>
|
2011-05-31 21:32:31 +02:00
|
|
|
Germán Méndez Bravo (Kronuz), 2004 - 2006
|
2007-11-11 00:30:46 +01:00
|
|
|
</para>
|
2007-12-10 06:32:51 +01:00
|
|
|
|
|
|
|
<para>
|
|
|
|
This module was inspired by Garrett A. Wollman's
|
2010-08-17 06:37:21 +02:00
|
|
|
<filename>isbn_issn</> code.
|
2007-12-10 06:32:51 +01:00
|
|
|
</para>
|
2007-11-11 00:30:46 +01:00
|
|
|
</sect2>
|
|
|
|
|
2007-12-10 06:32:51 +01:00
|
|
|
</sect1>
|