Mounting a Text Class Collection
From DLXS Documentation
Line 18: | Line 18: | ||
This section describes the the Text Class DTD and mechanisms and programs used by DLXS for accessing and displaying images that are defined by the FIGURE element in TextClass document markup. | This section describes the the Text Class DTD and mechanisms and programs used by DLXS for accessing and displaying images that are defined by the FIGURE element in TextClass document markup. | ||
- | |||
- | |||
==[[Working with Text Class Data and Directories]]== | ==[[Working with Text Class Data and Directories]]== | ||
- | + | ==[[Data Preparation and Conversion: Unicode, XML, and Normalization]]== | |
- | ==[[Data Preparation and | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | == | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
==[[Working with Fabricated Regions]]== | ==[[Working with Fabricated Regions]]== | ||
- | |||
==[[Customizing Text Class]]== | ==[[Customizing Text Class]]== |
Revision as of 14:39, 15 September 2007
Main Page > Mounting Collections: Class-specific Steps > Mounting a Text Class Collection
Text Class Overview
Examples of Text Class Implementations and Practices
Making of America, Twentieth Century American Poetry.
The decision process for inclusion of content in the Text Class is roughly based on the following:
- The text is a monograph or journal issue available in SGML or XML.
- Each text has a unique ID.
- The campus and/or world community would benefit from access to the information.
These are, at best, general guidelines for decision making based on the current state of the Text Class implementation at the University of Michigan.
Working with Text Class Markup
This section describes the the Text Class DTD and mechanisms and programs used by DLXS for accessing and displaying images that are defined by the FIGURE element in TextClass document markup.
Working with Text Class Data and Directories
Data Preparation and Conversion: Unicode, XML, and Normalization
Working with Fabricated Regions
Customizing Text Class
This could provide other topics, but I think it would be a good place for a discussion of the pieces of text class that are customizable ranked by level of difficulty. Then you could link to the places in the doc that discuss specific methods for customizing different bits.
Building the Index
After you have followed all the steps to set up your directories and prepare your files, as found in the Text Class preparation documentation, indexing the collection is fairly straightforward. To create an index for use with the Text Class interface, you will need to index the words in the collection, then index the XML (the structural metadata, if you will), and then finally "fabricate" structures based on a combination of elements (for example, defining what the "main entry" is, without adding a <MAINENTRY> tag around the appropriate <AUTHOR> or <TITLE> element). The following commands can be used to make the index, alone or in combination.
- Ensure that your collection XML is valid by using the make validate command in the Makefile stored at $DLXSROOT/bin/c/collid/Makefile
- make singledd indexes words for texts that have been concatenated into one large file for a collection. This is the recommended process, as a data dictionary built from a single concatenated file is faster for searching and more reliable than one built using multi-file system indexing. Use the make singledd command in the Makefile stored at $DLXSROOT/bin/c/collid/Makefile .
- make xml indexes the XML structure by reading the DTD, and validates as it indexes. It is slower than multiregion indexing (see XPAT documentation for more information) for this reason. However, it is necessary for collections that have nested elements of the same name (even when separated by an intervening element, such as a <P> within <NOTE1> that is itself within a <P>). Use the make xmlcommand in the Makefile stored at $DLXSROOT/bin/c/collid/Makefile
- make post builds and indexes fabricated regions based on the XPAT queries stored in the $DLXSROOT/prep/c/collid/collid.extra.srch file. Because every collection is different, this file will need to be adapted after you have determined what you want to use as a "poem" for text (e.g., perhaps every DIV1 TYPE="sonnet" and DIV2 TYPE="poem" in the collection) and how many levels of division heads you have in your collection (e.g., at least one text is nested to DIV4, so you'll need to fabricate up to div4head). If the extra.srch file references elements not used in your text collection, you will see errors like Error found: <Error>syntax error before: ")</Error> when you use the make post command in the Makefile stored at $DLXSROOT/bin/c/collid/Makefile. Remove unnecessary lines.
You have now built indexes and region files for your collection. You can test that things are properly indexed by issuing the commandxpatu $DLXSROOT/idx/c/collid/collid.dd and doing searches, such as for a common word like the or an element that should appear such as region "main" or region "HEADER". Strategically, it is good to test this from a directory other than the one you indexed in, to ensure that relative or absolute paths are resolving appropriately.
Everything is now set up to build the XPATu index. The Makefile in the bin directory contains the commands necessary to build the index, and can be executed easily.
make dd
cp /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.blank.dd /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd /l/local/bin/xpatbldu -m 256m -D /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd cp /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.presgml.dd
make xml
cp /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.presgml.dd /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd /l/local/bin/xmlrgn -D /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd /l1/workshop/sooty/dlxs/misc/sgml/xml.dcl /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.inp /l1/workshop/sooty/dlxs/obj/w/workshoptc/workshoptc.xml /l/local/bin/xmlrgn:/l1/workshop/sooty/dlxs/misc/sgml/xml.dcl:1:W: SGML declaration was not implied cp /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.prepost.dd
make post
cp /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.prepost.dd /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd touch /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.init /l/local/bin/xpatu -q /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd < /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.extra.srch | /l1/workshop/sooty/dlxs/bin/t/text/output.dd.frag.pl /l1/workshop/sooty/dlxs/idx/w/workshoptc/ > /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.extra.dd /l1/workshop/sooty/dlxs/bin/t/text/inc.extra.dd.pl /l1/workshop/sooty/dlxs/prep/w/workshoptc/workshoptc.extra.dd /l1/workshop/sooty/dlxs/idx/w/workshoptc/workshoptc.dd
Sorting and browse building require that you have only one maintitle, mainauthor and maindate per text, so that you have one value on which to sort. Your extra.srch files may need to be changed in order to be more specific. If you do not, some sort operations will give you a sortkey assertion failure.
Some examples of more specific searches in your extra.srch are provided below. The first relies on identifying metadata that has been specified through the use of attributes; the second merely chooses the first occurrence as an indication that it is the "main" value.
(((region TITLE incl "type=main") within region TITLESTMT) within region SOURCEDESC); {exportfile "/l1/idx/e/example/maintitle.rgn"}; export; ~sync "maintitle";
(((region AUTHOR within (region "<TITLESTMT".."</AUTHOR>")) within (region TITLESTMT within region FILEDESC)) not within (region SOURCEDESC)); {exportfile "/l1/idx/e/example/mainauthor.rgn"}; export; ~sync "mainauthor";
Mounting the Collection Online
Text Class Collection to Web from workshop doc would go in here
Working with Page Image Access Mechanisms in Text Class
This document describes the mechanisms and programs used by DLXS for accessing and viewing images of pages that correspond to pages in TextClass documents (and possibly other classes). It also explains the particular metadata requirements that exist for this functionality to be possible and shows a sample pageview.dat file. The pageview.dat mechanisms are now deprecated, but still useful for importing information into the Pageview table (see instructions below in Populating the Pageview Table). Also discussed is the mechanism for linking to ImageClass to view Pageviewer images in more detail.
- [#GeneralInfo General Information]
- [ivimageconversion.html Itemviewer Image Conversion]
- [#pb The Page Break (PB) Element and Page Image Metadata]
- [#pageviewTable Populating the Pageview Table]
- [#pageviewDat Creating pageview.dat Files]
- [#pageviewFig Linking from Pageviewer to ImageClass]
General Information
For collections where the middleware delivers page images rather than or in addition to the text content of the pages, the main mechanism for viewing the pages is the pageviewer-idx CGI program. In order to link from the XML text to the corresponding image, this CGI expects that page images are stored in directories based on (1) the DLXSROOT value, (2) the object directory recorded in the collection manager, and (3) the unique identifier assigned to the XML text and stored in the IDNO element, and that there are page break elements in the document referencing the images. In addition, there must be a Pageview table in the [../../collmeta/colldatabases.html dlxs metadata database] that should contain a column for each page image, listing the image file name, its sequence in the XML text, the page number (if any) specified on the page, the OCR confidence value (if available), and a three-letter code for any special features of the page (the default value for no special feature is UNS; see below for more information).
pageviewer-idx connects to the database and retrieves the name and location of the page image file from the Pageview table. pageviewer-idx then decides how to deliver the page. If the stored file format is different from the requested format as recorded in the collection manager (e.g., stored as tiff and requested as gif), a separate program, tif2web, is started to convert the image on the fly. For more information about how pageviewer-idx does its work in deciding how to deliver the page image, see [ivimageconversion.html Itemviewer Image Conversion ].
The Page Break Element and Page Image Metadata
The PB tag in the XML data, representing a page break, has this form in Text Class:
<PB REF="00000009.tif" SEQ="00000009" RES="600dpi" FMT="TIFF6.0" FTR="TPG" CNF="856" N=iiii"/>
The attributes are:
- REF: file name of page image
- SEQ: the sequence number of the page in the series, from start to finish, of all the pages in the document.
- RES: the resolution of the page image.
- FMT: the file format of the page image.
- FTR: the feature of the page, given as a three letter code. Possible values are listed below.
- CNF: the confidence value of the OCR for the page, given by the OCR software.
- N: the page number, not as a sequence, but rather the number as printed on the page (e.g., 3, 96, ix, etc.). This may be left blank, but the attribute cannot be omitted.
The information in this PB tag allows the Text Class middleware to create a URL to call the pageviewer-idx program with the parameters necessary to retrieve and display the corresponding page image. pageviewer-idx uses the Pageview table of the dlxs metadata database to do so.
The following are examples of feature codes and their expanded definitions that have been used in various collections mounted by DLPS. You may redefine these or use other codes, but will need to add or change the values in the PageView.cfg file found in the Text Class cgi directory. To see an example of these codes in use in the Text Class interface, go to this page from The Use of the Barometer in the Making of America and note the variety of features in the upper right hand pull down menu labeled "go to." If UNS is the sole feature recorded, no special features will be listed in this menu. Note that the FTR value becomes part of a lookup key in the langmap.en.xml to be referred to from the the pageviewer XSL.
Here is an example:
<Lookup id="viewer"> <Item key="viewer.ftr.1stpg">First Page</Item> <Item key="viewer.ftr.ack">Acknowledgement</Item> <Item key="viewer.ftr.adv">Advertisement</Item> <Item key="viewer.ftr.app">Appendix</Item> <Item key="viewer.ftr.bib">Bibliography</Item> <Item key="viewer.ftr.blp">Blank Page</Item> <Item key="viewer.ftr.ctp">Cover Title Page</Item> <Item key="viewer.ftr.dig">Digest</Item> <Item key="viewer.ftr.err">Errata</Item> <Item key="viewer.ftr.fnt">Front Matter</Item> <Item key="viewer.ftr.his">History</Item> <Item key="viewer.ftr.ind">Comprehensive Index</Item> <Item key="viewer.ftr.loi">List of Illustrations</Item> <Item key="viewer.ftr.lot">List of Tables</Item> <Item key="viewer.ftr.map">Map</Item> <Item key="viewer.ftr.mis">Miscellaneous</Item> <Item key="viewer.ftr.mss">Manuscript</Item> <Item key="viewer.ftr.not">Notes</Item> <Item key="viewer.ftr.npn">[n/a]</Item> <Item key="viewer.ftr.ord">Ordinances</Item> <Item key="viewer.ftr.pni">Author or Name Index</Item> <Item key="viewer.ftr.pnt">Production Note</Item> <Item key="viewer.ftr.pre">Preface</Item> <Item key="viewer.ftr.ref">References</Item> <Item key="viewer.ftr.reg">Regulations</Item> <Item key="viewer.ftr.rul">Rules</Item> <Item key="viewer.ftr.spi">Special Index</Item> <Item key="viewer.ftr.sui">Subject Index</Item> <Item key="viewer.ftr.sup">Supplement</Item> <Item key="viewer.ftr.tab">Table</Item> <Item key="viewer.ftr.toc">Table of Contents</Item> <Item key="viewer.ftr.tpg">Title Page</Item> <Item key="viewer.ftr.uns"></Item> <Item key="viewer.ftr.ves">Volume End Sheets</Item> <Item key="viewer.ftr.vli">Volume List of Illus</Item> <Item key="viewer.ftr.voi">Volume Index</Item> <Item key="viewer.ftr.vpg">Various Pagination</Item> <Item key="viewer.ftr.vtp">Volume Title Page</Item> <Item key="viewer.ftr.vtv">Volume Title Page Verso</Item> <Item key="viewer.nopagenum">[n/a]</Item> </Lookup>
Populating the Pageview Table
In DLXS releases prior to CD-ROM 8, the pageview.dat, a tab-delimited ASCII file used to locate page images associated with a text, was stored in the directory with the page images for a particular collection. If you have created pageview.dat files and would like to migrate them to the Pageview table, [../../data/pageview.html instructions can be found here.] Otherwise, metadata about page images for a collection should be entered directly into the Pageview table.
Creating pageview.dat Files (For Information Only)
The pageview.dat file for a particular XML text can be automatically generated provided that the metadata required is stored as attributes in the page break (PB) elements in the text. On the distribution CD-ROM, in the directory /l1/bin/t/text/, you will find a perl script named makepageviewdata.pl. When run with a directory path as its sole argument, it will work through the subdirectories, creating pageview.dat files for all files with a .sgm* extension. (For XML files, you will need to edit lines 27 and 51 to point the script to files with the extension .xml.) For example,
/l1/bin/t/text/makepageviewdata.pl /l1/obj/a/
will run through all the subdirectories below /l1/obj/a/ and report on the files it finds and work it is doing:
Working on xml files in directory: /l1/obj/a/j/l/ajl7777.0001.001 Working on file: /l1/obj/a/j/l/ajl7777.0001.001/ajl7777.0001.001.xml Working on PB tag for sequence: 0001 Working on PB tag for sequence: 0002 Working on PB tag for sequence: 0003 Working on PB tag for sequence: 0004
Working with a document containing these four page break tags:
<PB REF="00000001.tif" SEQ="00000001" RES="600dpi" FMT="TIFF6.0" FTR="TPG" CNF="852" N="1"/> <PB REF="00000002.tif" SEQ="00000002" RES="600dpi" FMT="TIFF6.0" FTR="UNSPEC" CNF="100" N="2"/> <PB REF="00000003.tif" SEQ="00000003" RES="600dpi" FMT="TIFF6.0" FTR="UNSPEC" CNF="884" N="3"/> <PB REF="00000004.tif" SEQ="00000004" RES="600dpi" FMT="TIFF6.0" FTR="UNSPEC" CNF="872" N="4"/>
would result in a pageview.dat file that contained this data:
## File: /l1/obj/b/a/b/bab3633.0001.001/pageview.dat ## Created: Mon Aug 6 11:32:55 EDT 2001 ## #filename seq pagenum confid feature 00000001.tif 00000001 00000001 852 TPG 00000002.tif 00000002 00000002 100 UNS 00000003.tif 00000003 00000003 884 UNS 00000004.tif 00000004 00000004 872 UNS
Linking from Pageviewer to ImageClass
Pageviewer can handle both bitonal and continuous tone image formats. The output of a page capture process might be a bitonal scan of a page containing a continuous tone plate and a second continuous scan of the plate. Or the entire page might be captured as a continuous tone image. So there are two cases.
- In the bitonal with continuous plate case, Pageviewer can display the bitonal page image and provide a link into ImageClass for the continuous tone plate. The link may be simple text or a thumbnail of the continuous tone plate (if thumbnail images are available).
- If the entire page is a continuous tone image it may still be desirable to link to ImageClass for enhanced viewing opportunities provided there.
Pageviewer can provide a links to the image if it is placed under ImageCLass management. The bitonal page with thumbnail link is shown in the following illustration.
Detailed Description of the Mechanism
ImageClass
The continuous tone images and optional thumb images are placed under ImageClass management ase described in [../image/imageloading.html Image Class Image Loading for Online Delivery].
DLXS idresolver CGI and DLXS database idresolver database table
The DLXS IdResolver CGI script is delivered in DLXSROOT/cgi/i/idresolver/idresolver. It depends on a table in the DLXS database called idresolver. Check DLXSROOT/misc/db/MySQL-dump.sql for the schema. A row consists of an ID and a URL to ImageClass for that ID.
The default format of the ID is ic-collid-idno-ENTITY-[th|rec] where th is for the thumb and rec is for the full sized image. ENTITY is the value of the ENTITY attribute in the <FIGURE> tag in the XML. Simple bitonal page collections use the <PB> tag to indicate pages. If the page has a continuous tone plate or is itself a continuous tone image for which ImageClass viewing is desirable, the <FIGURE> tag is used in addition to the <PB> tag.
The virtual host running the idresolver CGI is assigned to $LibGlobals::gIdResolverHost via an install-time question. It can be changed later by editing DLXSROOT/lib/LibGlobals.cfg.
Population of the idresolver table is accomplished by a variety of local mechanisms which will vary depending upon your data preparation processes.
DLXS databse PageviewFig table
The final component to this mechanism is the DLXS database PageviewFig table.
This table is consulted by Pageviewer to determine whether to present links to ImageClass when a given page is displayed. Check DLXSROOT/misc/db/MySQL-dump.sql for the schema. A row consists of (1) the idno of the item, (2) the page sequence number (seq) from the SEQ attribute of the <PB> tag for the page being viewed and (3) the value of the ENTITY attribute from the <FIGURE> tag accompanying the <PB> tag in the XML.
The PageviewFig table can be populated by the DLXSROOT/bin/t/text/processPageviewFig.pl Perl script. It accepts a single command-line option with values of -a to insert rows and -d to delete rows. The script will prompt for DLXSROOT and for a path relative to DLXSROOT where the XPAT Data Dictionary for the collection resides, e.g. /idx/c/coll/coll.dd. The script will perform XPAT queries and parse the ENTITY attribute value from the <FIGURE> tag and the SEQ attribute of the containing <PB> tag and the idno of the containing item. The result is inserted into the table. Deletion is accomplished by deleting all rows with idno values for the collection in question.
Putting it all together
When Pageviewer displays the image for a given page (seq) for a given item (idno) in some collection it uses these keys to look up the corresponding ENTITY value in the PageviewFig table. It constructs two IDs from the ENTITY for lookup in the idresolver table. It then builds links using the URLs to ImageClass that come back in the query result. If the thumbnail image URL is empty it builds a text link instead of a thumb link.
Working with the User Interface
Specifying Individual Collection Characteristics
Could we re-label this topic with a friendlier title? Perhaps "Customizing Text Class UI Layout"or something.