

The Project Gutenberg Etext of LOC WORKSHOP ON ELECTRONIC TEXTS




                      WORKSHOP ON ELECTRONIC TEXTS

                               PROCEEDINGS



                          Edited by James Daly







                             9-10 June 1992


                           Library of Congress
                            Washington, D.C.



    Supported by a Grant from the David and Lucile Packard Foundation


               ***   ***   ***   ******   ***   ***   ***


                            TABLE OF CONTENTS


Acknowledgements

Introduction

Proceedings
   Welcome
      Prosser Gifford and Carl Fleischhauer

   Session I.  Content in a New Form:  Who Will Use It and What Will They Do?
      James Daly (Moderator)
      Avra Michelson, Overview
      Susan H. Veccia, User Evaluation
      Joanne Freeman, Beyond the Scholar
         Discussion

   Session II.  Show and Tell
      Jacqueline Hess (Moderator)
      Elli Mylonas, Perseus Project
         Discussion
      Eric M. Calaluca, Patrologia Latina Database
      Carl Fleischhauer and Ricky Erway, American Memory
         Discussion
      Dorothy Twohig, The Papers of George Washington
         Discussion
      Maria L. Lebron, The Online Journal of Current Clinical Trials
         Discussion
      Lynne K. Personius, Cornell mathematics books
         Discussion

   Session III.  Distribution, Networks, and Networking:  
                 Options for Dissemination
      Robert G. Zich (Moderator)
      Clifford A. Lynch
         Discussion
      Howard Besser
         Discussion
      Ronald L. Larsen
      Edwin B. Brownrigg
         Discussion

   Session IV.  Image Capture, Text Capture, Overview of Text and
                Image Storage Formats
         William L. Hooton (Moderator)
      A) Principal Methods for Image Capture of Text:  
            direct scanning, use of microform
         Anne R. Kenney
         Pamela Q.J. Andre
         Judith A. Zidar
         Donald J. Waters
            Discussion
      B) Special Problems:  bound volumes, conservation,
                            reproducing printed halftones
         George Thoma
         Carl Fleischhauer
            Discussion
      C) Image Standards and Implications for Preservation
         Jean Baronas
         Patricia Battin
            Discussion
      D) Text Conversion:  OCR vs. rekeying, standards of accuracy
                           and use of imperfect texts, service bureaus
         Michael Lesk
         Ricky Erway
         Judith A. Zidar
            Discussion

   Session V.  Approaches to Preparing Electronic Texts
      Susan Hockey (Moderator)
      Stuart Weibel
         Discussion
      C.M. Sperberg-McQueen
         Discussion
      Eric M. Calaluca
         Discussion

   Session VI.  Copyright Issues
      Marybeth Peters

   Session VII.  Conclusion
      Prosser Gifford (Moderator)
      General discussion

Appendix I:  Program

Appendix II:  Abstracts

Appendix III:  Directory of Participants


               ***   ***   ***   ******   ***   ***   ***


                            Acknowledgements

I would like to thank Carl Fleischhauer and Prosser Gifford for the
opportunity to learn about areas of human activity unknown to me a scant
ten months ago, and the David and Lucile Packard Foundation for
supporting that opportunity.  The help given by others is acknowledged on
a separate page.

                                                          19 October 1992


               ***   ***   ***   ******   ***   ***   ***


                              INTRODUCTION

The Workshop on Electronic Texts (1) drew together representatives of
various projects and interest groups to compare ideas, beliefs,
experiences, and, in particular, methods of placing and presenting
historical textual materials in computerized form.  Most attendees gained
much in insight and outlook from the event.  But the assembly did not
form a new nation, or, to put it another way, the diversity of projects
and interests was too great to draw the representatives into a cohesive,
action-oriented body.(2)

Everyone attending the Workshop shared an interest in preserving and
providing access to historical texts.  But within this broad field the
attendees represented a variety of formal, informal, figurative, and
literal groups, with many individuals belonging to more than one.  These
groups may be defined roughly according to the following topics or
activities:

* Imaging
* Searchable coded texts
* National and international computer networks
* CD-ROM production and dissemination
* Methods and technology for converting older paper materials into
electronic form
* Study of the use of digital materials by scholars and others

This summary is arranged thematically and does not follow the actual
sequence of presentations.

NOTES:
     (1)  In this document, the phrase electronic text is used to mean
     any computerized reproduction or version of a document, book,
     article, or manuscript (including images), and not merely a machine-
     readable or machine-searchable text.

     (2)  The Workshop was held at the Library of Congress on 9-10 June
     1992, with funding from the David and Lucile Packard Foundation. 
     The document that follows represents a summary of the presentations
     made at the Workshop and was compiled by James DALY.  This
     introduction was written by DALY and Carl FLEISCHHAUER.


PRESERVATION AND IMAGING

Preservation, as that term is used by archivists,(3) was most explicitly
discussed in the context of imaging.  Anne KENNEY and Lynne PERSONIUS
explained how the concept of a faithful copy and the user-friendliness of
the traditional book have guided their project at Cornell University.(4) 
Although interested in computerized dissemination, participants in the
Cornell project are creating digital image sets of older books in the
public domain as a source for a fresh paper facsimile or, in a future
phase, microfilm.  The books returned to the library shelves are
high-quality and useful replacements on acid-free paper that should last
a long time.  To date, the Cornell project has placed little or no
emphasis on creating searchable texts; one would not be surprised to find
that the project participants view such texts as new editions, and thus
not as faithful reproductions. 

In her talk on preservation, Patricia BATTIN struck an ecumenical and
flexible note as she endorsed the creation and dissemination of a variety
of types of digital copies.  Do not be too narrow in defining what counts
as a preservation element, BATTIN counseled; for the present, at least,
digital copies made with preservation in mind cannot be as narrowly
standardized as, say, microfilm copies with the same objective.  Setting
standards precipitously can inhibit creativity, but delay can result in
chaos, she advised.

In part, BATTIN's position reflected the unsettled nature of image-format
standards, and attendees could hear echoes of this unsettledness in the
comments of various speakers.  For example, Jean BARONAS reviewed the
status of several formal standards moving through committees of experts;
and Clifford LYNCH encouraged the use of a new guideline for transmitting
document images on Internet.  Testimony from participants in the National
Agricultural Library's (NAL) Text Digitization Program and LC's American
Memory project highlighted some of the challenges to the actual creation
or interchange of images, including difficulties in converting
preservation microfilm to digital form.  Donald WATERS reported on the
progress of a master plan for a project at Yale University to convert
books on microfilm to digital image sets, Project Open Book (POB).

The Workshop offered rather less of an imaging practicum than planned,
but "how-to" hints emerge at various points, for example, throughout
KENNEY's presentation and in the discussion of arcana such as
thresholding and dithering offered by George THOMA and FLEISCHHAUER.

NOTES:
     (3)  Although there is a sense in which any reproductions of
     historical materials preserve the human record, specialists in the
     field have developed particular guidelines for the creation of
     acceptable preservation copies.

     (4)  Titles and affiliations of presenters are given at the
     beginning of their respective talks and in the Directory of
     Participants (Appendix III).


THE MACHINE-READABLE TEXT:  MARKUP AND USE

The sections of the Workshop that dealt with machine-readable text tended
to be more concerned with access and use than with preservation, at least
in the narrow technical sense.  Michael SPERBERG-McQUEEN made a forceful
presentation on the Text Encoding Initiative's (TEI) implementation of
the Standard Generalized Markup Language (SGML).  His ideas were echoed
by Susan HOCKEY, Elli MYLONAS, and Stuart WEIBEL.  While the
presentations made by the TEI advocates contained no practicum, their
discussion focused on the value of the finished product, what the
European Community calls reusability, but what may also be termed
durability.  They argued that marking up--that is, coding--a text in a
well-conceived way will permit it to be moved from one computer
environment to another, as well as to be used by various users.  Two
kinds of markup were distinguished:  1) procedural markup, which
describes the features of a text (e.g., dots on a page), and 2)
descriptive markup, which describes the structure or elements of a
document (e.g., chapters, paragraphs, and front matter).

The TEI proponents emphasized the importance of texts to scholarship. 
They explained how heavily coded (and thus analyzed and annotated) texts
can underlie research, play a role in scholarly communication, and
facilitate classroom teaching.  SPERBERG-McQUEEN reminded listeners that
a written or printed item (e.g., a particular edition of a book) is
merely a representation of the abstraction we call a text.  To concern
ourselves with faithfully reproducing a printed instance of the text,
SPERBERG-McQUEEN argued, is to concern ourselves with the representation
of a representation ("images as simulacra for the text").  The TEI proponents'
interest in images tends to focus on corollary materials for use in teaching,
for example, photographs of the Acropolis to accompany a Greek text.

By the end of the Workshop, SPERBERG-McQUEEN confessed to having been
converted to a limited extent to the view that electronic images
constitute a promising alternative to microfilming; indeed, an
alternative probably superior to microfilming.  But he was not convinced
that electronic images constitute a serious attempt to represent text in
electronic form.  HOCKEY and MYLONAS also conceded that their experience
at the Pierce Symposium the previous week at Georgetown University and
the present conference at the Library of Congress had compelled them to
reevaluate their perspective on the usefulness of text as images. 
Attendees could see that the text and image advocates were in
constructive tension, so to say.

Three nonTEI presentations described approaches to preparing
machine-readable text that are less rigorous and thus less expensive.  In
the case of the Papers of George Washington, Dorothy TWOHIG explained
that the digital version will provide a not-quite-perfect rendering of
the transcribed text--some 135,000 documents, available for research
during the decades while the perfect or print version is completed. 
Members of the American Memory team and the staff of NAL's Text
Digitization Program (see below) also outlined a middle ground concerning
searchable texts.  In the case of American Memory, contractors produce
texts with about 99-percent accuracy that serve as "browse" or
"reference" versions of written or printed originals.  End users who need
faithful copies or perfect renditions must refer to accompanying sets of
digital facsimile images or consult copies of the originals in a nearby
library or archive.  American Memory staff argued that the high cost of
producing 100-percent accurate copies would prevent LC from offering
access to large parts of its collections.


THE MACHINE-READABLE TEXT:  METHODS OF CONVERSION

Although the Workshop did not include a systematic examination of the
methods for converting texts from paper (or from facsimile images) into
machine-readable form, nevertheless, various speakers touched upon this
matter.  For example, WEIBEL reported that OCLC has experimented with a
merging of multiple optical character recognition systems that will
reduce errors from an unacceptable rate of 5 characters out of every
l,000 to an unacceptable rate of 2 characters out of every l,000.

Pamela ANDRE presented an overview of NAL's Text Digitization Program and
Judith ZIDAR discussed the technical details.  ZIDAR explained how NAL
purchased hardware and software capable of performing optical character
recognition (OCR) and text conversion and used its own staff to convert
texts.  The process, ZIDAR said, required extensive editing and project
staff found themselves considering alternatives, including rekeying
and/or creating abstracts or summaries of texts.  NAL reckoned costs at
$7 per page.  By way of contrast, Ricky ERWAY explained that American
Memory had decided from the start to contract out conversion to external
service bureaus.  The criteria used to select these contractors were cost
and quality of results, as opposed to methods of conversion.  ERWAY noted
that historical documents or books often do not lend themselves to OCR. 
Bound materials represent a special problem.  In her experience, quality
control--inspecting incoming materials, counting errors in samples--posed
the most time-consuming aspect of contracting out conversion.  ERWAY
reckoned American Memory's costs at $4 per page, but cautioned that fewer
cost-elements had been included than in NAL's figure.


OPTIONS FOR DISSEMINATION

The topic of dissemination proper emerged at various points during the
Workshop.  At the session devoted to national and international computer
networks, LYNCH, Howard BESSER, Ronald LARSEN, and Edwin BROWNRIGG
highlighted the virtues of Internet today and of the network that will
evolve from Internet.  Listeners could discern in these narratives a
vision of an information democracy in which millions of citizens freely
find and use what they need.  LYNCH noted that a lack of standards
inhibits disseminating multimedia on the network, a topic also discussed
by BESSER.  LARSEN addressed the issues of network scalability and
modularity and commented upon the difficulty of anticipating the effects
of growth in orders of magnitude.  BROWNRIGG talked about the ability of
packet radio to provide certain links in a network without the need for
wiring.  However, the presenters also called attention to the
shortcomings and incongruities of present-day computer networks.  For
example:  1) Network use is growing dramatically, but much network
traffic consists of personal communication (E-mail).  2) Large bodies of
information are available, but a user's ability to search across their
entirety is limited.  3) There are significant resources for science and
technology, but few network sources provide content in the humanities. 
4) Machine-readable texts are commonplace, but the capability of the
system to deal with images (let alone other media formats) lags behind. 
A glimpse of a multimedia future for networks, however, was provided by
Maria LEBRON in her overview of the Online Journal of Current Clinical
Trials (OJCCT), and the process of scholarly publishing on-line.   

The contrasting form of the CD-ROM disk was never systematically
analyzed, but attendees could glean an impression from several of the
show-and-tell presentations.  The Perseus and American Memory examples
demonstrated recently published disks, while the descriptions of the
IBYCUS version of the Papers of George Washington and Chadwyck-Healey's
Patrologia Latina Database (PLD) told of disks to come.  According to
Eric CALALUCA, PLD's principal focus has been on converting Jacques-Paul
Migne's definitive collection of Latin texts to machine-readable form. 
Although everyone could share the network advocates' enthusiasm for an
on-line future, the possibility of rolling up one's sleeves for a session
with a CD-ROM containing both textual materials and a powerful retrieval
engine made the disk seem an appealing vessel indeed.  The overall
discussion suggested that the transition from CD-ROM to on-line networked
access may prove far slower and more difficult than has been anticipated.


WHO ARE THE USERS AND WHAT DO THEY DO?

Although concerned with the technicalities of production, the Workshop
never lost sight of the purposes and uses of electronic versions of
textual materials.  As noted above, those interested in imaging discussed
the problematical matter of digital preservation, while the TEI proponents
described how machine-readable texts can be used in research.  This latter
topic received thorough treatment in the paper read by Avra MICHELSON.
She placed the phenomenon of electronic texts within the context of
broader trends in information technology and scholarly communication.

Among other things, MICHELSON described on-line conferences that
represent a vigorous and important intellectual forum for certain
disciplines.  Internet now carries more than 700 conferences, with about
80 percent of these devoted to topics in the social sciences and the
humanities.  Other scholars use on-line networks for "distance learning." 
Meanwhile, there has been a tremendous growth in end-user computing;
professors today are less likely than their predecessors to ask the
campus computer center to process their data.  Electronic texts are one
key to these sophisticated applications, MICHELSON reported, and more and
more scholars in the humanities now work in an on-line environment. 
Toward the end of the Workshop, Michael LESK presented a corollary to
MICHELSON's talk, reporting the results of an experiment that compared
the work of one group of chemistry students using traditional printed
texts and two groups using electronic sources.  The experiment
demonstrated that in the event one does not know what to read, one needs
the electronic systems; the electronic systems hold no advantage at the
moment if one knows what to read, but neither do they impose a penalty.

DALY provided an anecdotal account of the revolutionizing impact of the
new technology on his previous methods of research in the field of classics.
His account, by extrapolation, served to illustrate in part the arguments
made by MICHELSON concerning the positive effects of the sudden and radical
transformation being wrought in the ways scholars work.

Susan VECCIA and Joanne FREEMAN delineated the use of electronic
materials outside the university.  The most interesting aspect of their
use, FREEMAN said, could be seen as a paradox:  teachers in elementary
and secondary schools requested access to primary source materials but,
at the same time, found that "primariness" itself made these materials
difficult for their students to use.


OTHER TOPICS

Marybeth PETERS reviewed copyright law in the United States and offered
advice during a lively discussion of this subject.  But uncertainty
remains concerning the price of copyright in a digital medium, because a
solution remains to be worked out concerning management and synthesis of
copyrighted and out-of-copyright pieces of a database.

As moderator of the final session of the Workshop, Prosser GIFFORD directed
discussion to future courses of action and the potential role of LC in
advancing them.  Among the recommendations that emerged were the following:

     * Workshop participants should 1) begin to think about working
     with image material, but structure and digitize it in such a
     way that at a later stage it can be interpreted into text, and
     2) find a common way to build text and images together so that
     they can be used jointly at some stage in the future, with
     appropriate network support, because that is how users will want
     to access these materials.  The Library might encourage attempts
     to bring together people who are working on texts and images.

     * A network version of American Memory should be developed or
     consideration should be given to making the data in it
     available to people interested in doing network multimedia. 
     Given the current dearth of digital data that is appealing and
     unencumbered by extremely complex rights problems, developing a
     network version of American Memory could do much to help make
     network multimedia a reality.

     * Concerning the thorny issue of electronic deposit, LC should
     initiate a catalytic process in terms of distributed
     responsibility, that is, bring together the distributed
     organizations and set up a study group to look at all the
     issues related to electronic deposit and see where we as a
     nation should move.  For example, LC might attempt to persuade
     one major library in each state to deal with its state
     equivalent publisher, which might produce a cooperative project
     that would be equitably distributed around the country, and one
     in which LC would be dealing with a minimal number of publishers
     and minimal copyright problems.  LC must also deal with the
     concept of on-line publishing, determining, among other things,
     how serials such as OJCCT might be deposited for copyright.

     * Since a number of projects are planning to carry out
     preservation by creating digital images that will end up in
     on-line or near-line storage at some institution, LC might play
     a helpful role, at least in the near term, by accelerating how
     to catalog that information into the Research Library Information
     Network (RLIN) and then into OCLC, so that it would be accessible.
     This would reduce the possibility of multiple institutions digitizing
     the same work. 


CONCLUSION

The Workshop was valuable because it brought together partisans from
various groups and provided an occasion to compare goals and methods. 
The more committed partisans frequently communicate with others in their
groups, but less often across group boundaries.  The Workshop was also
valuable to attendees--including those involved with American Memory--who
came less committed to particular approaches or concepts.  These
attendees learned a great deal, and plan to select and employ elements of
imaging, text-coding, and networked distribution that suit their
respective projects and purposes.

Still, reality rears its ugly head:  no breakthrough has been achieved. 
On the imaging side, one confronts a proliferation of competing
data-interchange standards and a lack of consensus on the role of digital
facsimiles in preservation.  In the realm of machine-readable texts, one
encounters a reasonably mature standard but methodological difficulties
and high costs.  These latter problems, of course, represent a special
impediment to the desire, as it is sometimes expressed in the popular
press, "to put the [contents of the] Library of Congress on line."  In
the words of one participant, there was "no solution to the economic
problems--the projects that are out there are surviving, but it is going
to be a lot of work to transform the information industry, and so far the
investment to do that is not forthcoming" (LESK, per litteras).


               ***   ***   ***   ******   ***   ***   ***


                               PROCEEDINGS


WELCOME

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GIFFORD * Origin of Workshop in current Librarian's desire to make LC's
collections more widely available * Desiderata arising from the prospect
of greater interconnectedness *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

After welcoming participants on behalf of the Library of Congress,
American Memory (AM), and the National Demonstration Lab, Prosser
GIFFORD, director for scholarly programs, Library of Congress, located
the origin of the Workshop on Electronic Texts in a conversation he had
had considerably more than a year ago with Carl FLEISCHHAUER concerning
some of the issues faced by AM.  On the assumption that numerous other
people were asking the same questions, the decision was made to bring
together as many of these people as possible to ask the same questions
together.  In a deeper sense, GIFFORD said, the origin of the Workshop
lay in the desire of the current Librarian of Congress, James H. 
Billington, to make the collections of the Library, especially those
offering unique or unusual testimony on aspects of the American
experience, available to a much wider circle of users than those few
people who can come to Washington to use them.  This meant that the
emphasis of AM, from the outset, has been on archival collections of the
basic material, and on making these collections themselves available,
rather than selected or heavily edited products.

From AM's emphasis followed the questions with which the Workshop began: 
who will use these materials, and in what form will they wish to use
them.  But an even larger issue deserving mention, in GIFFORD's view, was
the phenomenal growth in Internet connectivity.  He expressed the hope
that the prospect of greater interconnectedness than ever before would
lead to:  1) much more cooperative and mutually supportive endeavors; 2)
development of systems of shared and distributed responsibilities to
avoid duplication and to ensure accuracy and preservation of unique
materials; and 3) agreement on the necessary standards and development of
the appropriate directories and indices to make navigation
straightforward among the varied resources that are, and increasingly
will be, available.  In this connection, GIFFORD requested that
participants reflect from the outset upon the sorts of outcomes they
thought the Workshop might have.  Did those present constitute a group
with sufficient common interests to propose a next step or next steps,
and if so, what might those be?  They would return to these questions the
following afternoon.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
FLEISCHHAUER * Core of Workshop concerns preparation and production of
materials * Special challenge in conversion of textual materials *
Quality versus quantity * Do the several groups represented share common
interests? *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Carl FLEISCHHAUER, coordinator, American Memory, Library of Congress,
emphasized that he would attempt to represent the people who perform some
of the work of converting or preparing  materials and that the core of
the Workshop had to do with preparation and production.  FLEISCHHAUER
then drew a distinction between the long term, when many things would be
available and connected in the ways that GIFFORD described, and the short
term, in which AM not only has wrestled with the issue of what is the
best course to pursue but also has faced a variety of technical
challenges.

FLEISCHHAUER remarked AM's endeavors to deal with a wide range of library
formats, such as motion picture collections, sound-recording collections,
and pictorial collections of various sorts, especially collections of
photographs.  In the course of these efforts, AM kept coming back to
textual materials--manuscripts or rare printed matter, bound materials,
etc.  Text posed the greatest conversion challenge of all.  Thus, the
genesis of the Workshop, which reflects the problems faced by AM.  These
problems include physical problems.  For example, those in the library
and archive business deal with collections made up of fragile and rare
manuscript items, bound materials, especially the notoriously brittle
bound materials of the late nineteenth century.  These are precious
cultural artifacts, however, as well as interesting sources of
information, and LC desires to retain and conserve them.  AM needs to
handle things without damaging them.  Guillotining a book to run it
through a sheet feeder must be avoided at all costs.

Beyond physical problems, issues pertaining to quality arose.  For
example, the desire to provide users with a searchable text is affected
by the question of acceptable level of accuracy.  One hundred percent
accuracy is tremendously expensive.  On the other hand, the output of
optical character recognition (OCR) can be tremendously inaccurate. 
Although AM has attempted to find a middle ground, uncertainty persists
as to whether or not it has discovered the right solution.

Questions of quality arose concerning images as well.  FLEISCHHAUER
contrasted the extremely high level of quality of the digital images in
the Cornell Xerox Project with AM's efforts to provide a browse-quality
or access-quality image, as opposed to an archival or preservation image. 
FLEISCHHAUER therefore welcomed the opportunity to compare notes.

FLEISCHHAUER observed in passing that conversations he had had about
networks have begun to signal that for various forms of media a
determination may be made that there is a browse-quality item, or a
distribution-and-access-quality item that may coexist in some systems
with a higher quality archival item that would be inconvenient to send
through the network because of its size.  FLEISCHHAUER referred, of
course, to images more than to searchable text.

As AM considered those questions, several conceptual issues arose:  ought
AM occasionally to reproduce materials entirely through an image set, at
other times, entirely through a text set, and in some cases, a mix? 
There probably would be times when the historical authenticity of an
artifact would require that its image be used.  An image might be
desirable as a recourse for users if one could not provide 100-percent
accurate text.  Again, AM wondered, as a practical matter, if a
distinction could be drawn between rare printed matter that might exist
in multiple collections--that is, in ten or fifteen libraries.  In such
cases, the need for perfect reproduction would be less than for unique
items.  Implicit in his remarks, FLEISCHHAUER conceded, was the admission
that AM has been tilting strongly towards quantity and drawing back a
little from perfect quality.  That is, it seemed to AM that society would
be better served if more things were distributed by LC--even if they were
not quite perfect--than if fewer things, perfectly represented, were
distributed.  This was stated as a proposition to be tested, with
responses to be gathered from users.

In thinking about issues related to reproduction of materials and seeing
other people engaged in parallel activities, AM deemed it useful to
convene a conference.  Hence, the Workshop.  FLEISCHHAUER thereupon
surveyed the several groups represented:  1) the world of images (image
users and image makers); 2) the world of text and scholarship and, within
this group, those concerned with language--FLEISCHHAUER confessed to finding
delightful irony in the fact that some of the most advanced thinkers on
computerized texts are those dealing with ancient Greek and Roman materials;
3) the network world; and 4) the general world of library science, which
includes people interested in preservation and cataloging.

FLEISCHHAUER concluded his remarks with special thanks to the David and
Lucile Packard Foundation for its support of the meeting, the American
Memory group, the Office for Scholarly Programs, the National
Demonstration Lab, and the Office of Special Events.  He expressed the
hope that David Woodley Packard might be able to attend, noting that
Packard's work and the work of the foundation had sponsored a number of
projects in the text area.

                                 ******

SESSION I.  CONTENT IN A NEW FORM:   WHO WILL USE IT AND WHAT WILL THEY DO?

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DALY * Acknowledgements * A new Latin authors disk *  Effects of the new
technology on previous methods of research *       
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Serving as moderator, James DALY acknowledged the generosity of all the
presenters for giving of their time, counsel, and patience in planning
the Workshop, as well as of members of the American Memory project and
other Library of Congress staff, and the David and Lucile Packard
Foundation and its executive director, Colburn S. Wilbur.

DALY then recounted his visit in March to the Center for Electronic Texts
in the Humanities (CETH) and the Department of Classics at Rutgers
University, where an old friend, Lowell Edmunds, introduced him to the
department's IBYCUS scholarly personal computer, and, in particular, the
new Latin CD-ROM, containing, among other things, almost all classical
Latin literary texts through A.D. 200.  Packard Humanities Institute
(PHI), Los Altos, California, released this disk late in 1991, with a
nominal triennial licensing fee.

Playing with the disk for an hour or so at Rutgers brought home to DALY
at once the revolutionizing impact of the new technology on his previous
methods of research.  Had this disk been available two or three years
earlier, DALY contended, when he was engaged in preparing a commentary on
Book 10 of Virgil's Aeneid for Cambridge University Press, he would not
have required a forty-eight-square-foot table on which to spread the
numerous, most frequently consulted items, including some ten or twelve
concordances to key Latin authors, an almost equal number of lexica to
authors who lacked concordances, and where either lexica or concordances
were lacking, numerous editions of authors antedating and postdating Virgil.

Nor, when checking each of the average six to seven words contained in
the Virgilian hexameter for its usage elsewhere in Virgil's works or
other Latin authors, would DALY have had to maintain the laborious
mechanical process of flipping through these concordances, lexica, and
editions each time.  Nor would he have had to frequent as often the
Milton S. Eisenhower Library at the Johns Hopkins University to consult
the Thesaurus Linguae Latinae.  Instead of devoting countless hours, or
the bulk of his research time, to gathering data concerning Virgil's use
of words, DALY--now freed by PHI's Latin authors disk from the
tyrannical, yet in some ways paradoxically happy scholarly drudgery--
would have been able to devote that same bulk of time to analyzing and
interpreting Virgilian verbal usage.

Citing Theodore Brunner, Gregory Crane, Elli MYLONAS, and Avra MICHELSON,
DALY argued that this reversal in his style of work, made possible by the
new technology, would perhaps have resulted in better, more productive
research.  Indeed, even in the course of his browsing the Latin authors
disk at Rutgers, its powerful search, retrieval, and highlighting
capabilities suggested to him several new avenues of research into
Virgil's use of sound effects.  This anecdotal account, DALY maintained,
may serve to illustrate in part the sudden and radical transformation
being wrought in the ways scholars work.

                                 ******

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MICHELSON * Elements related to scholarship and technology * Electronic
texts within the context of broader trends within information technology
and scholarly communication * Evaluation of the prospects for the use of
electronic texts * Relationship of electronic texts to processes of
scholarly communication in humanities research * New exchange formats
created by scholars * Projects initiated to increase scholarly access to
converted text * Trend toward making electronic resources available
through research and education networks * Changes taking place in
scholarly communication among humanities scholars * Network-mediated
scholarship transforming traditional scholarly practices * Key
information technology trends affecting the conduct of scholarly
communication over the next decade * The trend toward end-user computing
* The trend toward greater connectivity * Effects of these trends * Key
transformations taking place * Summary of principal arguments *
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Avra MICHELSON, Archival Research and Evaluation Staff, National Archives
and Records Administration (NARA), argued that establishing who will use
electronic texts and what they will use them for involves a consideration
of both information technology and scholarship trends.  This
consideration includes several elements related to scholarship and
technology:  1) the key trends in information technology that are most
relevant to scholarship; 2) the key trends in the use of currently
available technology by scholars in the nonscientific community; and 3)
the relationship between these two very distinct but interrelated trends. 
The investment in understanding this relationship being made by
information providers, technologists, and public policy developers, as
well as by scholars themselves, seems to be pervasive and growing,
MICHELSON contended.  She drew on collaborative work with Jeff Rothenberg
on the scholarly use of technology.

MICHELSON sought to place the phenomenon of electronic texts within the
context of broader trends within information technology and scholarly
communication.  She argued that electronic texts are of most use to
researchers to the extent that the researchers' working context (i.e.,
their relevant bibliographic sources, collegial feedback, analytic tools,
notes, drafts, etc.), along with their field's primary and secondary
sources, also is accessible in electronic form and can be integrated in
ways that are unique to the on-line environment.

Evaluation of the prospects for the use of electronic texts includes two
elements:  1) an examination of the ways in which researchers currently
are using electronic texts along with other electronic resources, and 2)
an analysis of key information technology trends that are affecting the
long-term conduct of scholarly communication.  MICHELSON limited her
discussion of the use of electronic texts to the practices of humanists
and noted that the scientific community was outside the panel's overview.

MICHELSON examined the nature of the current relationship of electronic
texts in particular, and electronic resources in general, to what she
maintained were, essentially, five processes of scholarly communication
in humanities research.  Researchers 1) identify sources, 2) communicate
with their colleagues, 3) interpret and analyze data, 4) disseminate
their research findings, and 5) prepare curricula to instruct the next
generation of scholars and students.  This examination would produce a
clearer understanding of the synergy among these five processes that
fuels the tendency of the use of electronic resources for one process to
stimulate its use for other processes of scholarly communication.

For the first process of scholarly communication, the identification of
sources, MICHELSON remarked the opportunity scholars now enjoy to
supplement traditional word-of-mouth searches for sources among their
colleagues with new forms of electronic searching.  So, for example,
instead of having to visit the library, researchers are able to explore
descriptions of holdings in their offices.  Furthermore, if their own
institutions' holdings prove insufficient, scholars can access more than
200 major American library catalogues over Internet, including the
universities of California, Michigan, Pennsylvania, and Wisconsin. 
Direct access to the bibliographic databases offers intellectual
empowerment to scholars by presenting a comprehensive means of browsing
through libraries from their homes and offices at their convenience.

The second process of communication involves communication among
scholars.  Beyond the most common methods of communication, scholars are
using E-mail and a variety of new electronic communications formats
derived from it for further academic interchange.  E-mail exchanges are
growing at an astonishing rate, reportedly 15 percent a month.  They
currently constitute approximately half the traffic on research and
education networks.  Moreover, the global spread of E-mail has been so
rapid that it is now possible for American scholars to use it to
communicate with colleagues in close to 140 other countries.

Other new exchange formats created by scholars and operating on Internet
include more than 700 conferences, with about 80 percent of these devoted
to topics in the social sciences and humanities.  The rate of growth of
these scholarly electronic conferences also is astonishing.  From l990 to
l991, 200 new conferences were identified on Internet.  From October 1991
to June 1992, an additional 150 conferences in the social sciences and
humanities were added to this directory of listings.  Scholars have
established conferences in virtually every field, within every different
discipline.  For example, there are currently close to 600 active social
science and humanities  conferences on topics such as art and
architecture, ethnomusicology, folklore, Japanese culture, medical
education, and gifted and talented education.  The appeal to scholars of
communicating through these conferences is that, unlike any other medium,
electronic conferences today provide a forum for global communication
with peers at the front end of the research process.

Interpretation and analysis of sources constitutes the third process of
scholarly communication that MICHELSON discussed in terms of texts and
textual resources.  The methods used to analyze sources fall somewhere on
a continuum from quantitative analysis to qualitative analysis. 
Typically, evidence is culled and evaluated using methods drawn from both
ends of this continuum.  At one end, quantitative analysis involves the
use of mathematical processes such as a count of frequencies and
distributions of occurrences or, on a higher level, regression analysis. 
At the other end of the continuum, qualitative analysis typically
involves nonmathematical processes oriented toward language
interpretation or the building of theory.  Aspects of this work involve
the processing--either manual or computational--of large and sometimes
massive amounts of textual sources, although the use of nontextual
sources as evidence, such as photographs, sound recordings, film footage,
and artifacts, is significant as well.

Scholars have discovered that many of the methods of interpretation and
analysis that are related to both quantitative and qualitative methods
are processes that can be performed by computers.  For example, computers
can count.  They can count brush strokes used in a Rembrandt painting or
perform regression analysis for understanding cause and effect.  By means
of advanced technologies, computers can recognize patterns, analyze text,
and model concepts.  Furthermore, computers can complete these processes
faster with more sources and with greater precision than scholars who
must rely on manual interpretation of data.  But if scholars are to use
computers for these processes, source materials must be in a form
amenable to computer-assisted analysis.  For this reason many scholars,
once they have identified the sources that are key to their research, are
converting them to machine-readable form.  Thus, a representative example
of the numerous textual conversion projects organized by scholars around
the world in recent years to support computational text analysis is the
TLG, the Thesaurus Linguae Graecae.  This project is devoted to
converting the extant ancient texts of classical Greece.  (Editor's note: 
according to the TLG Newsletter of May l992, TLG was in use in thirty-two
different countries.  This figure updates MICHELSON's previous count by one.)

The scholars performing these conversions have been asked to recognize
that the electronic sources they are converting for one use possess value
for other research purposes as well.  As a result, during the past few
years, humanities scholars have initiated a number of projects to
increase scholarly access to converted text.  So, for example, the Text
Encoding Initiative (TEI), about which more is said later in the program,
was established as an effort by scholars to determine standard elements
and methods for encoding machine-readable text for electronic exchange. 
In a second effort to facilitate the sharing of converted text, scholars
have created a new institution, the Center for Electronic Texts in the
Humanities (CETH).  The center estimates that there are 8,000 series of
source texts in the humanities that have been converted to
machine-readable form worldwide.  CETH is undertaking an international
search for converted text in the humanities, compiling it into an
electronic library, and preparing bibliographic descriptions of the
sources for the Research Libraries Information Network's (RLIN)
machine-readable data file.  The library profession has begun to initiate
large conversion projects as well, such as American Memory.

While scholars have been making converted text available to one another,
typically on disk or on CD-ROM, the clear trend is toward making these
resources available through research and education networks.  Thus, the
American and French Research on the Treasury of the French Language
(ARTFL) and the Dante Project are already available on Internet. 
MICHELSON summarized this section on interpretation and analysis by
noting that:  1) increasing numbers of humanities scholars in the library
community are recognizing the importance to the advancement of
scholarship of retrospective conversion of source materials in the arts
and humanities; and 2) there is a growing realization that making the
sources available on research and education networks maximizes their
usefulness for the analysis performed by humanities scholars.

The fourth process of scholarly communication is dissemination of
research findings, that is, publication.  Scholars are using existing
research and education networks to engineer a new type of publication: 
scholarly-controlled journals that are electronically produced and
disseminated.  Although such journals are still emerging as a
communication format, their number has grown, from approximately twelve
to thirty-six during the past year (July 1991 to June 1992).  Most of
these electronic scholarly journals are devoted to topics in the
humanities.  As with network conferences, scholarly enthusiasm for these
electronic journals stems from the medium's unique ability to advance
scholarship in a way that no other medium can do by supporting global
feedback and interchange, practically in real time, early in the research
process.  Beyond scholarly journals, MICHELSON remarked the delivery of
commercial full-text products, such as articles in professional journals,
newsletters, magazines, wire services, and reference sources.  These are
being delivered via on-line local library catalogues, especially through
CD-ROMs.  Furthermore, according to MICHELSON, there is general optimism
that the copyright and fees issues impeding the delivery of full text on
existing research and education networks soon will be resolved.

The final process of scholarly communication is curriculum development
and instruction, and this involves the use of computer information
technologies in two areas.  The first is the development of
computer-oriented instructional tools, which includes simulations,
multimedia applications, and computer tools that are used to assist in
the analysis of sources in the classroom, etc.  The Perseus Project, a
database that provides a multimedia curriculum on classical Greek
civilization, is a good example of the way in which entire curricula are
being recast using information technologies.  It is anticipated that the
current difficulty in exchanging electronically computer-based
instructional software, which in turn makes it difficult for one scholar
to build upon the work of others, will be resolved before too long. 
Stand-alone curricular applications that involve electronic text will be
sharable through networks, reinforcing their significance as intellectual
products as well as instructional tools.

The second aspect of electronic learning involves the use of research and
education networks for distance education programs.  Such programs
interactively link teachers with students in geographically scattered
locations and rely on the availability of electronic instructional
resources.  Distance education programs are gaining wide appeal among
state departments of education because of their demonstrated capacity to
bring advanced specialized course work and an array of experts to many
classrooms.  A recent report found that at least 32 states operated at
least one statewide network for education in 1991, with networks under
development in many of the remaining states.

MICHELSON summarized this section by noting two striking changes taking
place in scholarly communication among humanities scholars.  First is the
extent to which electronic text in particular, and electronic resources
in general, are being infused into each of the five processes described
above.  As mentioned earlier, there is a certain synergy at work here. 
The use of electronic resources for one process tends to stimulate its
use for other processes, because the chief course of movement is toward a
comprehensive on-line working context for humanities scholars that
includes on-line availability of key bibliographies, scholarly feedback,
sources, analytical tools, and publications.  MICHELSON noted further
that the movement toward a comprehensive on-line working context for
humanities scholars is not new.  In fact, it has been underway for more
than forty years in the humanities, since Father Roberto Busa began
developing an electronic concordance of the works of Saint Thomas Aquinas
in 1949.  What we are witnessing today, MICHELSON contended, is not the
beginning of this on-line transition but, for at least some humanities
scholars, the turning point in the transition from a print to an
electronic working context.  Coinciding with the on-line transition, the
second striking change is the extent to which research and education
networks are becoming the new medium of scholarly communication.  The
existing Internet and the pending National Education and Research Network
(NREN) represent the new meeting ground where scholars are going for
bibliographic information, scholarly dialogue and feedback, the most
current publications in their field, and high-level educational
offerings.  Traditional scholarly practices are undergoing tremendous
transformations as a result of the emergence and growing prominence of
what is called network-mediated scholarship.

MICHELSON next turned to the second element of the framework she proposed
at the outset of her talk for evaluating the prospects for electronic
text, namely the key information technology trends affecting the conduct
of scholarly communication over the next decade:  1) end-user computing
and 2) connectivity.

End-user computing means that the person touching the keyboard, or
performing computations, is the same as the person who initiates or
consumes the computation.  The emergence of personal computers, along
with a host of other forces, such as ubiquitous computing, advances in
interface design, and the on-line transition, is prompting the consumers
of computation to do their own computing, and is thus rendering obsolete
the traditional distinction between end users and ultimate users.

The trend toward end-user computing is significant to consideration of
the prospects for electronic texts because it means that researchers are
becoming more adept at doing their own computations and, thus, more
competent in the use of electronic media.  By avoiding programmer
intermediaries, computation is becoming central to the researcher's
thought process.  This direct involvement in computing is changing the
researcher's perspective on the nature of research itself, that is, the
kinds of questions that can be posed, the analytical methodologies that
can be used, the types and amount of sources that are appropriate for
analyses, and the form in which findings are presented.  The trend toward
end-user computing means that, increasingly, electronic media and
computation are being infused into all processes of humanities
scholarship, inspiring remarkable transformations in scholarly
communication.

The trend toward greater connectivity suggests that researchers are using
computation increasingly in network environments.  Connectivity is
important to scholarship because it erases the distance that separates
students from teachers and scholars from their colleagues, while allowing
users to access remote databases, share information in many different
media, connect to their working context wherever they are, and
collaborate in all phases of research.

The combination of the trend toward end-user computing and the trend
toward connectivity suggests that the scholarly use of electronic
resources, already evident among some researchers, will soon become an
established feature of scholarship.  The effects of these trends, along
with ongoing changes in scholarly practices, point to a future in which
humanities researchers will use computation and electronic communication
to help them formulate ideas, access sources, perform research,
collaborate with colleagues, seek peer review, publish and disseminate
results, and engage in many other professional and educational activities.

In summary, MICHELSON emphasized four points:  1) A portion of humanities
scholars already consider electronic texts the preferred format for
analysis and dissemination.  2) Scholars are using these electronic
texts, in conjunction with other electronic resources, in all the
processes of scholarly communication.  3) The humanities scholars'
working context is in the process of changing from print technology to
electronic technology, in many ways mirroring transformations that have
occurred or are occurring within the scientific community.  4) These
changes are occurring in conjunction with the development of a new
communication medium:  research and education networks that are
characterized by their capacity to advance scholarship in a wholly unique
way.

MICHELSON also reiterated her three principal arguments:  l) Electronic
texts are best understood in terms of the relationship to other
electronic resources and the growing prominence of network-mediated
scholarship.  2) The prospects for electronic texts lie in their capacity
to be integrated into the on-line network of electronic resources that
comprise the new working context for scholars.  3) Retrospective conversion
of portions of the scholarly record should be a key strategy as information
providers respond to changes in scholarly communication practices.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
VECCIA * AM's evaluation project and public users of electronic resources
* AM and its design * Site selection and evaluating the Macintosh
implementation of AM * Characteristics of the six public libraries
selected * Characteristics of AM's users in these libraries * Principal
ways AM is being used *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Susan VECCIA, team leader, and Joanne FREEMAN, associate coordinator,
American Memory, Library of Congress, gave a joint presentation.  First,
by way of introduction, VECCIA explained her and FREEMAN's roles in
American Memory (AM).  Serving principally as an observer, VECCIA has
assisted with the evaluation project of AM, placing AM collections in a
variety of different sites around the country and helping to organize and
implement that project.  FREEMAN has been an associate coordinator of AM
and has been involved principally with the interpretative materials,
preparing some of the electronic exhibits and printed historical
information that accompanies AM and that is requested by users.  VECCIA
and FREEMAN shared anecdotal observations concerning AM with public users
of electronic resources.  Notwithstanding a fairly structured evaluation
in progress, both VECCIA and FREEMAN chose not to report on specifics in
terms of numbers, etc., because they felt it was too early in the
evaluation project to do so.

AM is an electronic archive of primary source materials from the Library
of Congress, selected collections representing a variety of formats--
photographs, graphic arts, recorded sound, motion pictures, broadsides,
and soon, pamphlets and books.  In terms of the design of this system,
the interpretative exhibits have been kept separate from the primary
resources, with good reason.  Accompanying this collection are printed
documentation and user guides, as well as guides that FREEMAN prepared for
teachers so that they may begin using the content of the system at once.

VECCIA described the evaluation project before talking about the public
users of AM, limiting her remarks to public libraries, because FREEMAN
would talk more specifically about schools from kindergarten to twelfth
grade (K-12).   Having started in spring 1991, the evaluation currently
involves testing of the Macintosh implementation of AM.  Since the
primary goal of this evaluation is to determine the most appropriate
audience or audiences for AM, very different sites were selected.  This
makes evaluation difficult because of the varying degrees of technology
literacy among the sites.  AM is situated in forty-four locations, of
which six are public libraries and sixteen are schools.  Represented
among the schools are elementary, junior high, and high schools.
District offices also are involved in the evaluation, which will
conclude in summer 1993.

VECCIA focused the remainder of her talk on the six public libraries, one
of which doubles as a state library.  They represent a range of
geographic areas and a range of demographic characteristics.  For
example, three are located in urban settings, two in rural settings, and
one in a suburban setting.  A range of technical expertise is to be found
among these facilities as well.  For example, one is an "Apple library of
the future," while two others are rural one-room libraries--in one, AM
sits at the front desk next to a tractor manual.

All public libraries have been extremely enthusiastic, supportive, and
appreciative of the work that AM has been doing.  VECCIA characterized
various users:  Most users in public libraries describe themselves as
general readers; of the students who use AM in the public libraries,
those in fourth grade and above seem most interested.  Public libraries
in rural sites tend to attract retired people, who have been highly
receptive to AM.  Users tend to fall into two additional categories: 
people interested in the content and historical connotations of these
primary resources, and those fascinated by the technology.  The format
receiving the most comments has been motion pictures.  The adult users in
public libraries are more comfortable with IBM computers, whereas young
people seem comfortable with either IBM or Macintosh, although most of
them seem to come from a Macintosh background.  This same tendency is
found in the schools.

What kinds of things do users do with AM?  In a public library there are
two main goals or ways that AM is being used:  as an individual learning
tool, and as a leisure activity.  Adult learning was one area that VECCIA
would highlight as a possible application for a tool such as AM.  She
described a patron of a rural public library who comes in every day on
his lunch hour and literally reads AM, methodically going through the
collection image by image.  At the end of his hour he makes an electronic
bookmark, puts it in his pocket, and returns to work.  The next day he
comes in and resumes where he left off.  Interestingly, this man had
never been in the library before he used AM.  In another small, rural
library, the coordinator reports that AM is a popular activity for some
of the older, retired people in the community, who ordinarily would not
use "those things,"--computers.  Another example of adult learning in
public libraries is book groups, one of which, in particular, is using AM
as part of its reading on industrialization, integration, and urbanization
in the early 1900s.

One library reports that a family is using AM to help educate their
children.  In another instance, individuals from a local museum came in
to use AM to prepare an exhibit on toys of the past.  These two examples
emphasize the mission of the public library as a cultural institution,
reaching out to people who do not have the same resources available to
those who live in a metropolitan area or have access to a major library. 
One rural library reports that junior high school students in large
numbers came in one afternoon to use AM for entertainment.  A number of
public libraries reported great interest among postcard collectors in the
Detroit collection, which was essentially a collection of images used on
postcards around the turn of the century.  Train buffs are similarly
interested because that was a time of great interest in railroading. 
People, it was found, relate to things that they know of firsthand.  For
example, in both rural public libraries where AM was made available,
observers reported that the older people with personal remembrances of
the turn of the century were gravitating to the Detroit collection. 
These examples served to underscore MICHELSON's observation re the
integration of electronic tools and ideas--that people learn best when
the material relates to something they know.

VECCIA made the final point that in many cases AM serves as a
public-relations tool for the public libraries that are testing it.  In
one case, AM is being used as a vehicle to secure additional funding for
the library.  In another case, AM has served as an inspiration to the
staff of a major local public library in the South to think about ways to
make its own collection of photographs more accessible to the public.

                                  ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
FREEMAN * AM and archival electronic resources in a school environment *
Questions concerning context * Questions concerning the electronic format
itself * Computer anxiety * Access and availability of the system *
Hardware * Strengths gained through the use of archival resources in
schools *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Reiterating an observation made by VECCIA, that AM is an archival
resource made up of primary materials with very little interpretation,
FREEMAN stated that the project has attempted to bridge the gap between
these bare primary materials and a school environment, and in that cause
has created guided introductions to AM collections.  Loud demand from the
educational community,  chiefly from teachers working with the upper
grades of elementary school through high school, greeted the announcement
that AM would be tested around the country.

FREEMAN reported not only on what was learned about AM in a school
environment, but also on several universal questions that were raised
concerning archival electronic resources in schools.  She discussed
several strengths of this type of material in a school environment as
opposed to a highly structured resource that offers a limited number of
paths to follow.

FREEMAN first raised several questions about using AM in a school
environment.  There is often some difficulty in developing a sense of
what the system contains.  Many students sit down at a computer resource
and assume that, because AM comes from the Library of Congress, all of
American history is now at their fingertips.  As a result of that sort of
mistaken judgment, some students are known to conclude that AM contains
nothing of use to them when they look for one or two things and do not
find them.  It is difficult to discover that middle ground where one has
a sense of what the system contains.  Some students grope toward the idea
of an archive, a new idea to them, since they have not previously
experienced what it means to have access to a vast body of somewhat
random information.

Other questions raised by FREEMAN concerned the electronic format itself. 
For instance, in a school environment it is often difficult both for
teachers and students to gain a sense of what it is they are viewing. 
They understand that it is a visual image, but they do not necessarily
know that it is a postcard from the turn of the century, a panoramic
photograph, or even machine-readable text of an eighteenth-century
broadside, a twentieth-century printed book, or a nineteenth-century
diary.  That distinction is often difficult for people in a school
environment to grasp.  Because of that, it occasionally becomes difficult
to draw conclusions from what one is viewing.

FREEMAN also noted the obvious fear of the computer, which constitutes a
difficulty in using an electronic resource.  Though students in general
did not suffer from this anxiety, several older students feared that they
were computer-illiterate, an assumption that became self-fulfilling when
they searched for something but failed to find it.  FREEMAN said she
believed that some teachers also fear computer resources, because they
believe they lack complete control.  FREEMAN related the example of
teachers shooing away students because it was not their time to use the
system.  This was a case in which the situation had to be extremely
structured so that the teachers would not feel that they had lost their
grasp on what the system contained.

A final question raised by FREEMAN concerned access and availability of
the system.  She noted the occasional existence of a gap in communication
between school librarians and teachers.  Often AM sits in a school
library and the librarian is the person responsible for monitoring the
system.  Teachers do not always take into their world new library
resources about which the librarian is excited.  Indeed, at the sites
where AM had been used most effectively within a library, the librarian
was required to go to specific teachers and instruct them in its use.  As
a result, several AM sites will have in-service sessions over a summer,
in the hope that perhaps, with a more individualized link, teachers will
be more likely to use the resource.

A related issue in the school context concerned the number of
workstations available at any one location.  Centralization of equipment
at the district level, with teachers invited to download things and walk
away with them, proved unsuccessful because the hours these offices were
open were also school hours.

Another issue was hardware.  As VECCIA observed, a range of sites exists,
some technologically advanced and others essentially acquiring their
first computer for the primary purpose of using it in conjunction with
AM's testing.  Users at technologically sophisticated sites want even
more sophisticated hardware, so that they can perform even more
sophisticated tasks with the materials in AM.  But once they acquire a
newer piece of hardware, they must learn how to use that also; at an
unsophisticated site it takes an extremely long time simply to become
accustomed to the computer, not to mention the program offered with the
computer.  All of these small issues raise one large question, namely,
are systems like AM truly rewarding in a school environment, or do they
simply act as innovative toys that do little more than spark interest?

FREEMAN contended that the evaluation project has revealed several strengths
that were gained through the use of archival resources in schools, including:

     * Psychic rewards from using AM as a vast, rich database, with
     teachers assigning various projects to students--oral presentations,
     written reports, a documentary, a turn-of-the-century newspaper--
     projects that start with the materials in AM but are completed using
     other resources; AM thus is used as a research tool in conjunction
     with other electronic resources, as well as with books and items in
     the library where the system is set up.

     * Students are acquiring computer literacy in a humanities context.

     * This sort of system is overcoming the isolation between disciplines
     that often exists in schools.  For example, many English teachers are
     requiring their students to write papers on historical topics
     represented in AM.  Numerous teachers have reported that their
     students are learning critical thinking skills using the system.

     * On a broader level, AM is introducing primary materials, not only
     to students but also to teachers, in an environment where often
     simply none exist--an exciting thing for the students because it
     helps them learn to conduct research, to interpret, and to draw
     their own conclusions.  In learning to conduct research and what it
     means, students are motivated to seek knowledge.  That relates to
     another positive outcome--a high level of personal involvement of
     students with the materials in this system and greater motivation to
     conduct their own research and draw their own conclusions.

     * Perhaps the most ironic strength of these kinds of archival
     electronic resources is that many of the teachers AM interviewed
     were desperate, it is no exaggeration to say, not only for primary
     materials but for unstructured primary materials.  These would, they
     thought, foster personally motivated research, exploration, and
     excitement in their students.  Indeed, these materials have done
     just that.  Ironically, however, this lack of structure produces
     some of the confusion to which the newness of these kinds of
     resources may also contribute.  The key to effective use of archival
     products in a school environment is a clear, effective introduction
     to the system and to what it contains. 

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Nothing known, quantitatively, about the number of
humanities scholars who must see the original versus those who would
settle for an edited transcript, or about the ways in which humanities
scholars are using information technology * Firm conclusions concerning
the manner and extent of the use of supporting materials in print
provided by AM to await completion of evaluative study * A listener's
reflections on additional applications of electronic texts * Role of
electronic resources in teaching elementary research skills to students *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the discussion that followed the presentations by MICHELSON,
VECCIA, and FREEMAN, additional points emerged.

LESK asked if MICHELSON could give any quantitative estimate of the
number of humanities scholars who must see or want to see the original,
or the best possible version of the material, versus those who typically
would settle for an edited transcript.  While unable to provide a figure,
she offered her impressions as an archivist who has done some reference
work and has discussed this issue with other archivists who perform
reference, that those who use archives and those who use primary sources
for what would be considered very high-level scholarly research, as
opposed to, say, undergraduate papers, were few in number, especially
given the public interest in using primary sources to conduct
genealogical or avocational research and the kind of professional
research done by people in private industry or the federal government. 
More important in MICHELSON's view was that, quantitatively, nothing is
known about the ways in which, for example, humanities scholars are using
information technology.  No studies exist to offer guidance in creating
strategies.  The most recent study was conducted in 1985 by the American
Council of Learned Societies (ACLS), and what it showed was that 50
percent of humanities scholars at that time were using computers.  That
constitutes the extent of our knowledge.

Concerning AM's strategy for orienting people toward the scope of
electronic resources, FREEMAN could offer no hard conclusions at this
point, because she and her colleagues were still waiting to see,
particularly in the schools, what has been made of their efforts.  Within
the system, however, AM has provided what are called electronic exhibits-
-such as introductions to time periods and materials--and these are
intended to offer a student user a sense of what a broadside is  and what
it might tell her or him.  But FREEMAN conceded that the project staff
would have to talk with students next year, after teachers have had a
summer to use the materials, and attempt to discover what the students
were learning from the materials.  In addition, FREEMAN described
supporting materials in print provided by AM at the request of local
teachers during a meeting held at LC.  These included time lines,
bibliographies, and other materials that could be reproduced on a
photocopier in a classroom.  Teachers could walk away with and use these,
and in this way gain a better understanding of the contents.  But again,
reaching firm conclusions concerning the manner and extent of their use
would have to wait until next year.

As to the changes she saw occurring at the National Archives and Records
Administration (NARA) as a result of the increasing emphasis on
technology in scholarly research, MICHELSON stated that NARA at this
point was absorbing the report by her and Jeff Rothenberg addressing
strategies for the archival profession in general, although not for the
National Archives specifically.  NARA is just beginning to establish its
role and what it can do.  In terms of changes and initiatives that NARA
can take, no clear response could be given at this time.

GREENFIELD remarked two trends mentioned in the session.  Reflecting on
DALY's opening comments on how he could have used a Latin collection of
text in an electronic form, he said that at first he thought most scholars
would be unwilling to do that.  But as he thought of that in terms of the
original meaning of research--that is, having already mastered these texts,
researching them for critical and comparative purposes--for the first time,
the electronic format made a lot of sense.  GREENFIELD could envision
growing numbers of scholars learning the new technologies for that very
aspect of their scholarship and for convenience's sake.

Listening to VECCIA and FREEMAN, GREENFIELD thought of an additional
application of electronic texts.  He realized that AM could be used as a
guide to lead someone to original sources.  Students cannot be expected
to have mastered these sources, things they have never known about
before.  Thus, AM is leading them, in theory, to a vast body of
information and giving them a superficial overview of it, enabling them
to select parts of it.  GREENFIELD asked if any evidence exists that this
resource will indeed teach the new user, the K-12 students, how to do
research.  Scholars already know how to do research and are applying
these new tools.  But he wondered why students would go beyond picking
out things that were most exciting to them.

FREEMAN conceded the correctness of GREENFIELD's observation as applied
to a school environment.  The risk is that a student would sit down at a
system, play with it, find some things of interest, and then walk away. 
But in the relatively controlled situation of a school library, much will
depend on the instructions a teacher or a librarian gives a student.  She
viewed the situation not as one of fine-tuning research skills but of
involving students at a personal level in understanding and researching
things.  Given the guidance one can receive at school, it then becomes
possible to teach elementary research skills to students, which in fact
one particular librarian said she was teaching her fifth graders. 
FREEMAN concluded that introducing the idea of following one's own path
of inquiry, which is essentially what research entails, involves more
than teaching specific skills.  To these comments VECCIA added the
observation that the individual teacher and the use of a creative
resource, rather than AM itself, seemed to make the key difference.
Some schools and some teachers are making excellent use of the nature
of critical thinking and teaching skills, she said.

Concurring with these remarks, DALY closed the session with the thought that
the more that producers produced for teachers and for scholars to use with
their students, the more successful their electronic products would prove.

                                 ******

SESSION II.  SHOW AND TELL

Jacqueline HESS, director, National Demonstration Laboratory, served as
moderator of the "show-and-tell" session.  She noted that a
question-and-answer period would follow each presentation.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MYLONAS * Overview and content of Perseus * Perseus' primary materials
exist in a system-independent, archival form * A concession * Textual
aspects of Perseus * Tools to use with the Greek text * Prepared indices
and full-text searches in Perseus * English-Greek word search leads to
close study of words and concepts * Navigating Perseus by tracing down
indices * Using the iconography to perform research *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Elli MYLONAS, managing editor, Perseus Project, Harvard University, first
gave an overview of Perseus, a large, collaborative effort based at
Harvard University but with contributors and collaborators located at
numerous universities and colleges in the United States (e.g., Bowdoin,
Maryland, Pomona, Chicago, Virginia).  Funded primarily by the
Annenberg/CPB Project, with additional funding from Apple, Harvard, and
the Packard Humanities Institute, among others, Perseus is a multimedia,
hypertextual database for teaching and research on classical Greek
civilization, which was released in February 1992 in version 1.0 and
distributed by Yale University Press.

Consisting entirely of primary materials, Perseus includes ancient Greek
texts and translations of those texts; catalog entries--that is, museum
catalog entries, not library catalog entries--on vases, sites, coins,
sculpture, and archaeological objects; maps; and a dictionary, among
other sources.  The number of objects and the objects for which catalog
entries exist are accompanied by thousands of color images, which
constitute a major feature of the database.  Perseus contains
approximately 30 megabytes of text, an amount that will double in
subsequent versions.  In addition to these primary materials, the Perseus
Project has been building tools for using them, making access and
navigation easier, the goal being to build part of the electronic
environment discussed earlier in the morning in which students or
scholars can work with their sources.

The demonstration of Perseus will show only a fraction of the real work
that has gone into it, because the project had to face the dilemma of
what to enter when putting something into machine-readable form:  should
one aim for very high quality or make concessions in order to get the
material in?  Since Perseus decided to opt for very high quality, all of
its primary materials exist in a system-independent--insofar as it is
possible to be system-independent--archival form.  Deciding what that
archival form would be and attaining it required much work and thought. 
For example, all the texts are marked up in SGML, which will be made
compatible with the guidelines of the Text Encoding Initiative (TEI) when
they are issued.

Drawings are postscript files, not meeting international standards, but
at least designed to go across platforms.  Images, or rather the real
archival forms, consist of the best available slides, which are being
digitized.  Much of the catalog material exists in database form--a form
that the average user could use, manipulate, and display on a personal
computer, but only at great cost.  Thus, this is where the concession
comes in:  All of this rich, well-marked-up information is stripped of
much of its content; the images are converted into bit-maps and the text
into small formatted chunks.  All this information can then be imported
into HyperCard and run on a mid-range Macintosh, which is what Perseus
users have.  This fact has made it possible for Perseus to attain wide
use fairly rapidly.  Without those archival forms the HyperCard version
being demonstrated could not be made easily, and the project could not
have the potential to move to other forms and machines and software as
they appear, none of which information is in Perseus on the CD.

Of the numerous multimedia aspects of Perseus, MYLONAS focused on the
textual.  Part of what makes Perseus such a pleasure to use, MYLONAS
said, is this effort at seamless integration and the ability to move
around both visual and textual material.  Perseus also made the decision
not to attempt to interpret its material any more than one interprets by
selecting.  But, MYLONAS emphasized, Perseus is not courseware:  No
syllabus exists.  There is no effort to define how one teaches a topic
using Perseus, although the project may eventually collect papers by
people who have used it to teach.  Rather, Perseus aims to provide
primary material in a kind of electronic library, an electronic sandbox,
so to say, in which students and scholars who are working on this
material can explore by themselves.  With that, MYLONAS demonstrated
Perseus, beginning with the Perseus gateway, the first thing one sees
upon opening Perseus--an effort in part to solve the contextualizing
problem--which tells the user what the system contains.

MYLONAS demonstrated only a very small portion, beginning with primary
texts and running off the CD-ROM.  Having selected Aeschylus' Prometheus
Bound, which was viewable in Greek and English pretty much in the same
segments together, MYLONAS demonstrated tools to use with the Greek text,
something not possible with a book:  looking up the dictionary entry form
of an unfamiliar word in Greek after subjecting it to Perseus'
morphological analysis for all the texts.  After finding out about a
word, a user may then decide to see if it is used anywhere else in Greek. 
Because vast amounts of indexing support all of the primary material, one
can find out where else all forms of a particular Greek word appear--
often not a trivial matter because Greek is highly inflected.  Further,
since the story of Prometheus has to do with the origins of sacrifice, a
user may wish to study and explore sacrifice in Greek literature; by
typing sacrifice into a small window, a user goes to the English-Greek
word list--something one cannot do without the computer (Perseus has
indexed the definitions of its dictionary)--the string sacrifice appears
in the definitions of these sixty-five words.  One may then find out
where any of those words is used in the work(s) of a particular author. 
The English definitions are not lemmatized.

All of the indices driving this kind of usage were originally devised for
speed, MYLONAS observed; in other words, all that kind of information--
all forms of all words, where they exist, the dictionary form they belong
to--were collected into databases, which will expedite searching.  Then
it was discovered that one can do things searching in these databases
that could not be done searching in the full texts.  Thus, although there
are full-text searches in Perseus, much of the work is done behind the
scenes, using prepared indices.  Re the indexing that is done behind the
scenes, MYLONAS pointed out that without the SGML forms of the text, it
could not be done effectively.  Much of this indexing is based on the
structures that are made explicit by the SGML tagging.

It was found that one of the things many of Perseus' non-Greek-reading
users do is start from the dictionary and then move into the close study
of words and concepts via this kind of English-Greek word search, by which
means they might select a concept.  This exercise has been assigned to
students in core courses at Harvard--to study a concept by looking for the
English word in the dictionary, finding the Greek words, and then finding
the words in the Greek but, of course, reading across in the English.
That tells them a great deal about what a translation means as well.

Should one also wish to see images that have to do with sacrifice, that
person would go to the object key word search, which allows one to
perform a similar kind of index retrieval on the database of
archaeological objects.  Without words, pictures are useless; Perseus has
not reached the point where it can do much with images that are not
cataloged.  Thus, although it is possible in Perseus with text and images
to navigate by knowing where one wants to end up--for example, a
red-figure vase from the Boston Museum of Fine Arts--one can perform this
kind of navigation very easily by tracing down indices.  MYLONAS
illustrated several generic scenes of sacrifice on vases.  The features
demonstrated derived from Perseus 1.0; version 2.0 will implement even
better means of retrieval.

MYLONAS closed by looking at one of the pictures and noting again that
one can do a great deal of research using the iconography as well as the
texts.  For instance, students in a core course at Harvard this year were
highly interested in Greek concepts of foreigners and representations of
non-Greeks.  So they performed a great deal of research, both with texts
(e.g., Herodotus) and with iconography on vases and coins, on how the
Greeks portrayed non-Greeks.  At the same time, art historians who study
iconography were also interested, and were able to use this material.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Indexing and searchability of all English words in Perseus *
Several features of Perseus 1.0 * Several levels of customization
possible * Perseus used for general education * Perseus' effects on
education * Contextual information in Perseus * Main challenge and
emphasis of Perseus *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Several points emerged in the discussion that followed MYLONAS's presentation.

Although MYLONAS had not demonstrated Perseus' ability to cross-search
documents, she confirmed that all English words in Perseus are indexed
and can be searched.  So, for example, sacrifice could have been searched
in all texts, the historical essay, and all the catalogue entries with
their descriptions--in short, in all of Perseus.

Boolean logic is not in Perseus 1.0 but will be added to the next
version, although an effort is being made not to restrict Perseus to a
database in which one just performs searching, Boolean or otherwise.  It
is possible to move laterally through the documents by selecting a word
one is interested in and selecting an area of information one is
interested in and trying to look that word up in that area.

Since Perseus was developed in HyperCard, several levels of customization
are possible.  Simple authoring tools exist that allow one to create
annotated paths through the information, which are useful for note-taking
and for guided tours for teaching purposes and for expository writing. 
With a little more ingenuity it is possible to begin to add or substitute
material in Perseus.

Perseus has not been used so much for classics education as for general
education, where it seemed to have an impact on the students in the core
course at Harvard (a general required course that students must take in
certain areas).  Students were able to use primary material much more.

The Perseus Project has an evaluation team at the University of Maryland
that has been documenting Perseus' effects on education.  Perseus is very
popular, and anecdotal evidence indicates that it is having an effect at
places other than Harvard, for example, test sites at Ball State
University, Drury College, and numerous small places where opportunities
to use vast amounts of primary data may not exist.  One documented effect
is that archaeological, anthropological, and philological research is
being done by the same person instead of by three different people.

The contextual information in Perseus includes an overview essay, a
fairly linear historical essay on the fifth century B.C. that provides
links into the primary material (e.g., Herodotus, Thucydides, and
Plutarch), via small gray underscoring (on the screen) of linked
passages.  These are handmade links into other material.

To different extents, most of the production work was done at Harvard,
where the people and the equipment are located.  Much of the
collaborative activity involved data collection and structuring, because
the main challenge and the emphasis of Perseus is the gathering of
primary material, that is, building a useful environment for studying
classical Greece, collecting data, and making it useful. 
Systems-building is definitely not the main concern.  Thus, much of the
work has involved writing essays, collecting information, rewriting it,
and tagging it.  That can be done off site.  The creative link for the
overview essay as well as for both systems and data was collaborative,
and was forged via E-mail and paper mail with professors at Pomona and
Bowdoin.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CALALUCA * PLD's principal focus and contribution to scholarship *
Various questions preparatory to beginning the project * Basis for
project * Basic rule in converting PLD * Concerning the images in PLD *
Running PLD under a variety of retrieval softwares * Encoding the
database a hard-fought issue * Various features demonstrated * Importance
of user documentation * Limitations of the CD-ROM version *   
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Eric CALALUCA, vice president, Chadwyck-Healey, Inc., demonstrated a
software interpretation of the Patrologia Latina Database (PLD).  PLD's
principal focus from the beginning of the project about three-and-a-half
years ago was on converting Migne's Latin series, and in the end,
CALALUCA suggested, conversion of the text will be the major contribution
to scholarship.  CALALUCA stressed that, as possibly the only private
publishing organization at the Workshop, Chadwyck-Healey had sought no
federal funds or national foundation support before embarking upon the
project, but instead had relied upon a great deal of homework and
marketing to accomplish the task of conversion.

Ever since the possibilities of computer-searching have emerged, scholars
in the field of late ancient and early medieval studies (philosophers,
theologians, classicists, and those studying the history of natural law
and the history of the legal development of Western civilization) have
been longing for a fully searchable version of Western literature, for
example, all the texts of Augustine and Bernard of Clairvaux and
Boethius, not to mention all the secondary and tertiary authors.

Various questions arose, CALALUCA said.  Should one convert Migne? 
Should the database be encoded?  Is it necessary to do that?  How should
it be delivered?  What about CD-ROM?  Since this is a transitional
medium, why even bother to create software to run on a CD-ROM?  Since
everybody knows people will be networking information, why go to the
trouble--which is far greater with CD-ROM than with the production of
magnetic data?  Finally, how does one make the data available?  Can many
of the hurdles to using electronic information that some publishers have
imposed upon databases be eliminated?

The PLD project was based on the principle that computer-searching of
texts is most effective when it is done with a large database.  Because
PLD represented a collection that serves so many disciplines across so
many periods, it was irresistible.

The basic rule in converting PLD was to do no harm, to avoid the sins of
intrusion in such a database:  no introduction of newer editions, no
on-the-spot changes, no eradicating of all possible falsehoods from an
edition.  Thus, PLD is not the final act in electronic publishing for
this discipline, but simply the beginning.  The conversion of PLD has
evoked numerous unanticipated questions:  How will information be used? 
What about networking?  Can the rights of a database be protected? 
Should one protect the rights of a database?  How can it be made
available?

Those converting PLD also tried to avoid the sins of omission, that is,
excluding portions of the collections or whole sections.  What about the
images?  PLD is full of images, some are extremely pious
nineteenth-century representations of the Fathers, while others contain
highly interesting elements.  The goal was to cover all the text of Migne
(including notes, in Greek and in Hebrew, the latter of which, in
particular, causes problems in creating a search structure), all the
indices, and even the images, which are being scanned in separately
searchable files.

Several North American institutions that have placed acquisition requests
for the PLD database have requested it in magnetic form without software,
which means they are already running it without software, without
anything demonstrated at the Workshop.

What cannot practically be done is go back and reconvert and re-encode
data, a time-consuming and extremely costly enterprise.  CALALUCA sees
PLD as a database that can, and should, be run under a variety of
retrieval softwares.  This will permit the widest possible searches. 
Consequently, the need to produce a CD-ROM of PLD, as well as to develop
software that could handle some 1.3 gigabyte of heavily encoded text,
developed out of conversations with collection development and reference
librarians who wanted software both compassionate enough for the
pedestrian but also capable of incorporating the most detailed
lexicographical studies that a user desires to conduct.  In the end, the
encoding and conversion of the data will prove the most enduring
testament to the value of the project.

The encoding of the database was also a hard-fought issue:  Did the
database need to be encoded? Were there normative structures for encoding
humanist texts?  Should it be SGML?  What about the TEI--will it last,
will it prove useful?  CALALUCA expressed some minor doubts as to whether
a data bank can be fully TEI-conformant.  Every effort can be made, but
in the end to be TEI-conformant means to accept the need to make some
firm encoding decisions that can, indeed, be disputed.  The TEI points
the publisher in a proper direction but does not presume to make all the
decisions for him or her.  Essentially, the goal of encoding was to
eliminate, as much as possible, the hindrances to information-networking,
so that if an institution acquires a database, everybody associated with
the institution can have access to it.

CALALUCA demonstrated a portion of Volume 160, because it had the most
anomalies in it.  The software was created by Electronic Book
Technologies of Providence, RI, and is called Dynatext.  The software
works only with SGML-coded data.

Viewing a table of contents on the screen, the audience saw how Dynatext
treats each element as a book and attempts to simplify movement through a
volume.  Familiarity with the Patrologia in print (i.e., the text, its
source, and the editions) will make the machine-readable versions highly
useful.  (Software with a Windows application was sought for PLD,
CALALUCA said, because this was the main trend for scholarly use.)

CALALUCA also demonstrated how a user can perform a variety of searches
and quickly move to any part of a volume; the look-up screen provides
some basic, simple word-searching. 

CALALUCA argued that one of the major difficulties is not the software. 
Rather, in creating a product that will be used by scholars representing
a broad spectrum of computer sophistication,  user documentation proves
to be the most important service one can provide.

CALALUCA next illustrated a truncated search under mysterium within ten
words of virtus and how one would be able to find its contents throughout
the entire database.  He said that the exciting thing about PLD is that
many of the applications in the retrieval software being written for it
will exceed the capabilities of the software employed now for the CD-ROM
version.  The CD-ROM faces genuine limitations, in terms of speed and
comprehensiveness, in the creation of a retrieval software to run it. 
CALALUCA said he hoped that individual scholars will download the data,
if they wish, to their personal computers, and have ready access to
important texts on a constant basis, which they will be able to use in
their research and from which they might even be able to publish.

(CALALUCA explained that the blue numbers represented Migne's column numbers,
which are the standard scholarly references.  Pulling up a note, he stated
that these texts were heavily edited and the image files would appear simply
as a note as well, so that one could quickly access an image.)

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
FLEISCHHAUER/ERWAY * Several problems with which AM is still wrestling *
Various search and retrieval capabilities * Illustration of automatic
stemming and a truncated search * AM's attempt to find ways to connect
cataloging to the texts * AM's gravitation towards SGML * Striking a
balance between quantity and quality * How AM furnishes users recourse to
images * Conducting a search in a full-text environment * Macintosh and
IBM prototypes of AM * Multimedia aspects of AM *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

A demonstration of American Memory by its coordinator, Carl FLEISCHHAUER,
and Ricky ERWAY, associate coordinator, Library of Congress, concluded
the morning session.  Beginning with a collection of broadsides from the
Continental Congress and the Constitutional Convention, the only text
collection in a presentable form at the time of the Workshop, FLEISCHHAUER
highlighted several of the problems with which AM is still wrestling.
(In its final form, the disk will contain two collections, not only the
broadsides but also the full text with illustrations of a set of
approximately 300 African-American pamphlets from the period 1870 to 1910.)

As FREEMAN had explained earlier, AM has attempted to use a small amount
of interpretation to introduce collections.  In the present case, the
contractor, a company named Quick Source, in Silver Spring, MD., used
software called Toolbook and put together a modestly interactive
introduction to the collection.  Like the two preceding speakers,
FLEISCHHAUER argued that the real asset was the underlying collection.

FLEISCHHAUER proceeded to describe various search and retrieval
capabilities while ERWAY worked the computer.  In this particular package
the "go to" pull-down allowed the user in effect to jump out of Toolbook,
where the interactive program was located, and enter the third-party
software used by AM for this text collection, which is called Personal
Librarian.  This was the Windows version of Personal Librarian, a
software application put together by a company in Rockville, Md.

Since the broadsides came from the Revolutionary War period, a search was
conducted using the words British or war, with the default operator reset
as or.  FLEISCHHAUER demonstrated both automatic stemming (which finds
other forms of the same root) and a truncated search.  One of Personal
Librarian's strongest features, the relevance ranking, was represented by
a chart that indicated how often words being sought appeared in
documents, with the one receiving the most "hits" obtaining the highest
score.  The "hit list" that is supplied takes the relevance ranking into
account, making the first hit, in effect, the one the software has
selected as the most relevant example.

While in the text of one of the broadside documents, FLEISCHHAUER
remarked AM's attempt to find ways to connect cataloging to the texts,
which it does in different ways in different manifestations.  In the case
shown, the cataloging was pasted on:  AM took MARC records that were
written as on-line records right into one of the Library's mainframe
retrieval programs, pulled them out, and handed them off to the contractor,
who massaged them somewhat to display them in the manner shown.  One of
AM's questions is, Does the cataloguing normally performed in the mainframe
work in this context, or had AM ought to think through adjustments?

FLEISCHHAUER made the additional point that, as far as the text goes, AM
has gravitated towards SGML (he pointed to the boldface in the upper part
of the screen).  Although extremely limited in its ability to translate
or interpret SGML, Personal Librarian will furnish both bold and italics
on screen; a fairly easy thing to do, but it is one of the ways in which
SGML is useful.

Striking a balance between quantity and quality has been a major concern
of AM, with accuracy being one of the places where project staff have
felt that less than 100-percent accuracy was not unacceptable. 
FLEISCHHAUER cited the example of the standard of the rekeying industry,
namely 99.95 percent; as one service bureau informed him, to go from
99.95 to 100 percent would double the cost.

FLEISCHHAUER next demonstrated how AM furnishes users recourse to images,
and at the same time recalled LESK's pointed question concerning the
number of people who would look at those images and the number who would
work only with the text.  If the implication of LESK's question was
sound, FLEISCHHAUER said, it raised the stakes for text accuracy and
reduced the value of the strategy for images.

Contending that preservation is always a bugaboo, FLEISCHHAUER
demonstrated several images derived from a scan of a preservation
microfilm that AM had made.  He awarded a grade of C at best, perhaps a
C minus or a C plus, for how well it worked out.  Indeed, the matter of
learning if other people had better ideas about scanning in general, and,
in particular, scanning from microfilm, was one of the factors that drove
AM to attempt to think through the agenda for the Workshop.  Skew, for
example, was one of the issues that AM in its ignorance had not reckoned
would prove so difficult.

Further, the handling of images of the sort shown, in a desktop computer
environment, involved a considerable amount of zooming and scrolling. 
Ultimately, AM staff feel that perhaps the paper copy that is printed out
might be the most useful one, but they remain uncertain as to how much
on-screen reading users will do.

Returning to the text, FLEISCHHAUER asked viewers to imagine a person who
might be conducting a search in a full-text environment.  With this
scenario, he proceeded to illustrate other features of Personal Librarian
that he considered helpful; for example, it provides the ability to
notice words as one reads.  Clicking the "include" button on the bottom
of the search window pops the words that have been highlighted into the
search.  Thus, a user can refine the search as he or she reads,
re-executing the search and continuing to find things in the quest for
materials.  This software not only contains relevance ranking, Boolean
operators, and truncation, it also permits one to perform word algebra,
so to say, where one puts two or three words in parentheses and links
them with one Boolean operator and then a couple of words in another set
of parentheses and asks for things within so many words of others.

Until they became acquainted recently with some of the work being done in
classics, the AM staff had not realized that a large number of the
projects that involve electronic texts were being done by people with a
profound interest in language and linguistics.  Their search strategies
and thinking are oriented to those fields, as is shown in particular by
the Perseus example.  As amateur historians, the AM staff were thinking
more of searching for concepts and ideas than for particular words. 
Obviously, FLEISCHHAUER conceded, searching for concepts and ideas and
searching for words may be two rather closely related things.

While displaying several images, FLEISCHHAUER observed that the Macintosh
prototype built by AM contains a greater diversity of formats.  Echoing a
previous speaker, he said that it was easier to stitch things together in
the Macintosh, though it tended to be a little more anemic in search and
retrieval.  AM, therefore, increasingly has been investigating
sophisticated retrieval engines in the IBM format.

FLEISCHHAUER demonstrated several additional examples of the prototype
interfaces:  One was AM's metaphor for the network future, in which a
kind of reading-room graphic suggests how one would be able to go around
to different materials.  AM contains a large number of photographs in
analog video form worked up from a videodisc, which enable users to make
copies to print or incorporate in digital documents.  A frame-grabber is
built into the system, making it possible to bring an image into a window
and digitize or print it out.

FLEISCHHAUER next demonstrated sound recording, which included texts. 
Recycled from a previous project, the collection included sixty 78-rpm
phonograph records of political speeches that were made during and
immediately after World War I.  These constituted approximately three
hours of audio, as AM has digitized it, which occupy 150 megabytes on a
CD.  Thus, they are considerably compressed.  From the catalogue card,
FLEISCHHAUER proceeded to a transcript of a speech with the audio
available and with highlighted text following it as it played.
A photograph has been added and a transcription made.

Considerable value has been added beyond what the Library of Congress
normally would do in cataloguing a sound recording, which raises several
questions for AM concerning where to draw lines about how much value it can
afford to add and at what point, perhaps, this becomes more than AM could
reasonably do or reasonably wish to do.  FLEISCHHAUER also demonstrated
a motion picture.  As FREEMAN had reported earlier, the motion picture
materials have proved the most popular, not surprisingly.  This says more
about the medium, he thought, than about AM's presentation of it.

Because AM's goal was to bring together things that could be used by
historians or by people who were curious about history,
turn-of-the-century footage seemed to represent the most appropriate
collections from the Library of Congress in motion pictures. These were
the very first films made by Thomas Edison's company and some others at
that time.  The particular example illustrated was a Biograph film,
brought in with a frame-grabber into a window.  A single videodisc
contains about fifty titles and pieces of film from that period, all of
New York City.  Taken together, AM believes, they provide an interesting
documentary resource.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Using the frame-grabber in AM * Volume of material processed
and to be processed * Purpose of AM within LC * Cataloguing and the
nature of AM's material * SGML coding and the question of quality versus
quantity *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the question-and-answer period that followed FLEISCHHAUER's
presentation, several clarifications were made.

AM is bringing in motion pictures from a videodisc.  The frame-grabber
devices create a window on a computer screen, which permits users to
digitize a single frame of the movie or one of the photographs.  It
produces a crude, rough-and-ready image that high school students can
incorporate into papers, and that has worked very nicely in this way.

Commenting on FLEISCHHAUER's assertion that AM was looking more at
searching ideas than words, MYLONAS argued that without words an idea
does not exist.  FLEISCHHAUER conceded that he ought to have articulated
his point more clearly.  MYLONAS stated that they were in fact both
talking about the same thing.  By searching for words and by forcing
people to focus on the word, the Perseus Project felt that they would get
them to the idea.  The way one reviews results is tailored more to one
kind of user than another.

Concerning the total volume of material that has been processed in this
way, AM at this point has in retrievable form seven or eight collections,
all of them photographic.  In the Macintosh environment, for example,
there probably are 35,000-40,000 photographs.  The sound recordings
number sixty items.  The broadsides number about 300 items.  There are
500 political cartoons in the form of drawings.  The motion pictures, as
individual items, number sixty to seventy.

AM also has a manuscript collection, the life history portion of one of
the federal project series, which will contain 2,900 individual
documents, all first-person narratives.  AM has in process about 350
African-American pamphlets, or about 12,000 printed pages for the period
1870-1910.  Also in the works are some 4,000 panoramic photographs.  AM
has recycled a fair amount of the work done by LC's Prints and
Photographs Division during the Library's optical disk pilot project in
the 1980s.  For example, a special division of LC has tooled up and
thought through all the ramifications of electronic presentation of
photographs.  Indeed, they are wheeling them out in great barrel loads. 
The purpose of AM within the Library, it is hoped, is to catalyze several
of the other special collection divisions which have no particular
experience with, in some cases, mixed feelings about, an activity such as
AM.  Moreover, in many cases the divisions may be characterized as not
only lacking experience in "electronifying" things but also in automated
cataloguing.  MARC cataloguing as practiced in the United States is
heavily weighted toward the description of monograph and serial
materials, but is much thinner when one enters the world of manuscripts
and things that are held in the Library's music collection and other
units.  In response to a comment by LESK, that AM's material is very
heavily photographic, and is so primarily because individual records have
been made for each photograph, FLEISCHHAUER observed that an item-level
catalog record exists, for example, for each photograph in the Detroit
Publishing collection of 25,000 pictures.  In the case of the Federal
Writers Project, for which nearly 3,000 documents exist, representing
information from twenty-six different states, AM with the assistance of
Karen STUART of the Manuscript Division will attempt to find some way not
only to have a collection-level record but perhaps a MARC record for each
state, which will then serve as an umbrella for the 100-200 documents
that come under it.  But that drama remains to be enacted.  The AM staff
is conservative and clings to cataloguing, though of course visitors tout
artificial intelligence and neural networks in a manner that suggests that
perhaps one need not have cataloguing or that much of it could be put aside.

The matter of SGML coding, FLEISCHHAUER conceded, returned the discussion
to the earlier treated question of quality versus quantity in the Library
of Congress.  Of course, text conversion can be done with 100-percent
accuracy, but it means that when one's holdings are as vast as LC's only
a tiny amount will be exposed, whereas permitting lower levels of
accuracy can lead to exposing or sharing larger amounts, but with the
quality correspondingly impaired.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TWOHIG * A contrary experience concerning electronic options * Volume of
material in the Washington papers and a suggestion of David Packard *
Implications of Packard's suggestion * Transcribing the documents for the
CD-ROM * Accuracy of transcriptions * The CD-ROM edition of the Founding
Fathers documents *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Finding encouragement in a comment of MICHELSON's from the morning
session--that numerous people in the humanities were choosing electronic
options to do their work--Dorothy TWOHIG, editor, The Papers of George
Washington, opened her illustrated talk by noting that her experience
with literary scholars and numerous people in editing was contrary to
MICHELSON's.  TWOHIG emphasized literary scholars' complete ignorance of
the technological options available to them or their reluctance or, in
some cases, their downright hostility toward these options.

After providing an overview of the five Founding Fathers projects
(Jefferson at Princeton, Franklin at Yale, John Adams at the
Massachusetts Historical Society, and Madison down the hall from her at
the University of Virginia), TWOHIG observed that the Washington papers,
like all of the projects, include both sides of the Washington
correspondence and deal with some 135,000 documents to be published with
extensive annotation in eighty to eighty-five volumes, a project that
will not be completed until well into the next century.  Thus, it was
with considerable enthusiasm several years ago that the Washington Papers
Project (WPP) greeted David Packard's suggestion that the papers of the
Founding Fathers could be published easily and inexpensively, and to the
great benefit of American scholarship, via CD-ROM.

In pragmatic terms, funding from the Packard Foundation would expedite
the transcription of thousands of documents waiting to be put on disk in
the WPP offices.  Further, since the costs of collecting, editing, and
converting the Founding Fathers documents into letterpress editions were
running into the millions of dollars, and the considerable staffs
involved in all of these projects were devoting their careers to
producing the work, the Packard Foundation's suggestion had a
revolutionary aspect:  Transcriptions of the entire corpus of the
Founding Fathers papers would be available on CD-ROM to public and
college libraries, even high schools, at a fraction of the cost--
$100-$150 for the annual license fee--to produce a limited university
press run of 1,000 of each volume of the published papers at $45-$150 per
printed volume.  Given the current budget crunch in educational systems
and the corresponding constraints on librarians in smaller institutions
who wish to add these volumes to their collections, producing the
documents on CD-ROM would likely open a greatly expanded audience for the
papers.  TWOHIG stressed, however, that development of the Founding
Fathers CD-ROM is still in its infancy.  Serious software problems remain
to be resolved before the material can be put into readable form.  

Funding from the Packard Foundation resulted in a major push to
transcribe the 75,000 or so documents of the Washington papers remaining
to be transcribed onto computer disks.  Slides illustrated several of the
problems encountered, for example, the present inability of CD-ROM to
indicate the cross-outs (deleted material) in eighteenth century
documents.  TWOHIG next described documents from various periods in the
eighteenth century that have been transcribed in chronological order and
delivered to the Packard offices in California, where they are converted
to the CD-ROM, a process that is expected to consume five years to
complete (that is, reckoning from David Packard's suggestion made several
years ago, until about July 1994).  TWOHIG found an encouraging
indication of the project's benefits in the ongoing use made by scholars
of the search functions of the CD-ROM, particularly in reducing the time
spent in manually turning the pages of the Washington papers.

TWOHIG next furnished details concerning the accuracy of transcriptions. 
For instance, the insertion of thousands of documents on the CD-ROM
currently does not permit each document to be verified against the
original manuscript several times as in the case of documents that appear
in the published edition.  However, the transcriptions receive a cursory
check for obvious typos, the misspellings of proper names, and other
errors from the WPP CD-ROM editor.  Eventually, all documents that appear
in the electronic version will be checked by project editors.  Although
this process has met with opposition from some of the editors on the
grounds that imperfect work may leave their offices, the advantages in
making this material available as a research tool outweigh  fears about the
misspelling of proper names and other relatively minor editorial matters.

Completion of all five Founding Fathers projects (i.e., retrievability
and searchability of all of the documents by proper names, alternate
spellings, or varieties of subjects) will provide one of the richest
sources of this size for the history of the United States in the latter
part of the eighteenth century.  Further, publication on CD-ROM will
allow editors to include even minutiae, such as laundry lists, not
included in the printed volumes.

It seems possible that the extensive annotation provided in the printed
volumes eventually will be added to the CD-ROM edition, pending
negotiations with the publishers of the papers.  At the moment, the
Founding Fathers CD-ROM is accessible only on the IBYCUS, a computer
developed out of the Thesaurus Linguae Graecae project and designed for
the use of classical scholars.  There are perhaps 400 IBYCUS computers in
the country, most of which are in university classics departments. 
Ultimately, it is anticipated that the CD-ROM edition of the Founding
Fathers documents will run on any IBM-compatible or Macintosh computer
with a CD-ROM drive.  Numerous changes in the software will also occur
before the project is completed.  (Editor's note: an IBYCUS was
unavailable to demonstrate the CD-ROM.)

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Several additional features of WPP clarified *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Discussion following TWOHIG's presentation served to clarify several
additional features, including (1) that the project's primary
intellectual product consists in the electronic transcription of the
material; (2) that the text transmitted to the CD-ROM people is not
marked up; (3) that cataloging and subject-indexing of the material
remain to be worked out (though at this point material can be retrieved
by name); and (4) that because all the searching is done in the hardware,
the IBYCUS is designed to read a CD-ROM which contains only sequential
text files.  Technically, it then becomes very easy to read the material
off and put it on another device.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LEBRON * Overview of the history of the joint project between AAAS and
OCLC * Several practices the on-line environment shares with traditional
publishing on hard copy * Several technical and behavioral barriers to
electronic publishing * How AAAS and OCLC arrived at the subject of
clinical trials * Advantages of the electronic format and other features
of OJCCT * An illustrated tour of the journal *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Maria LEBRON, managing editor, The Online Journal of Current Clinical
Trials (OJCCT), presented an illustrated overview of the history of the
joint project between the American Association for the Advancement of
Science (AAAS) and the Online Computer Library Center, Inc. (OCLC).  The
joint venture between AAAS and OCLC owes its beginning to a
reorganization launched by the new chief executive officer at OCLC about
three years ago and combines the strengths of these two disparate
organizations.  In short, OJCCT represents the process of scholarly
publishing on line.

LEBRON next discussed several practices the on-line environment shares
with traditional publishing on hard copy--for example, peer review of
manuscripts--that are highly important in the academic world.  LEBRON
noted in particular the implications of citation counts for tenure
committees and grants committees.  In the traditional hard-copy
environment, citation counts are readily demonstrable, whereas the
on-line environment represents an ethereal medium to most academics.

LEBRON remarked several technical and behavioral barriers to electronic
publishing, for instance, the problems in transmission created by special
characters or by complex graphics and halftones.  In addition, she noted
economic limitations such as the storage costs of maintaining back issues
and market or audience education.

Manuscripts cannot be uploaded to OJCCT, LEBRON explained, because it is
not a bulletin board or E-mail, forms of electronic transmission of
information that have created an ambience clouding people's understanding
of what the journal is attempting to do.  OJCCT, which publishes
peer-reviewed medical articles dealing with the subject of clinical
trials, includes text, tabular material, and graphics, although at this
time it can transmit only line illustrations.

Next, LEBRON described how AAAS and OCLC arrived at the subject of
clinical trials:  It is 1) a highly statistical discipline that 2) does
not require halftones but can satisfy the needs of its audience with line
illustrations and graphic material, and 3) there is a need for the speedy
dissemination of high-quality research results.  Clinical trials are
research activities that involve the administration of a test treatment
to some experimental unit in order to test its usefulness before it is
made available to the general population.  LEBRON proceeded to give
additional information on OJCCT concerning its editor-in-chief, editorial
board, editorial content, and the types of articles it publishes
(including peer-reviewed research reports and reviews), as well as
features shared by other traditional hard-copy journals.

Among the advantages of the electronic format are faster dissemination of
information, including raw data, and the absence of space constraints
because pages do not exist.  (This latter fact creates an interesting
situation when it comes to citations.)  Nor are there any issues.  AAAS's
capacity to download materials directly from the journal to a
subscriber's printer, hard drive, or floppy disk helps ensure highly
accurate transcription.  Other features of OJCCT include on-screen alerts
that allow linkage of subsequently published documents to the original
documents; on-line searching by subject, author, title, etc.; indexing of
every single word that appears in an article; viewing access to an
article by component (abstract, full text, or graphs); numbered
paragraphs to replace page counts; publication in Science every thirty
days of indexing of all articles published in the journal;
typeset-quality screens; and Hypertext links that enable subscribers to
bring up Medline abstracts directly without leaving the journal.

After detailing the two primary ways to gain access to the journal,
through the OCLC network and Compuserv if one desires graphics or through
the Internet if just an ASCII file is desired, LEBRON illustrated the
speedy editorial process and the coding of the document using SGML tags
after it has been accepted for publication.  She also gave an illustrated
tour of the journal, its search-and-retrieval capabilities in particular,
but also including problems associated with scanning in illustrations,
and the importance of on-screen alerts to the medical profession re
retractions or corrections, or more frequently, editorials, letters to
the editors, or follow-up reports.  She closed by inviting the audience
to join AAAS on 1 July, when OJCCT was scheduled to go on-line.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Additional features of OJCCT *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

In the lengthy discussion that followed LEBRON's presentation, these
points emerged:

     * The SGML text can be tailored as users wish.

     * All these articles have a fairly simple document definition.

     * Document-type definitions (DTDs) were developed and given to OJCCT
     for coding.

     * No articles will be removed from the journal.  (Because there are
     no back issues, there are no lost issues either.  Once a subscriber
     logs onto the journal he or she has access not only to the currently
     published materials, but retrospectively to everything that has been
     published in it.  Thus the table of contents grows bigger.  The date
     of publication serves to distinguish between currently published
     materials and older materials.)

     * The pricing system for the journal resembles that for most medical
     journals:  for 1992, $95 for a year, plus telecommunications charges
     (there are no connect time charges);    for 1993, $110 for the
     entire year for single users, though the journal can be put on a
     local area network (LAN).  However, only one person can access the
     journal at a time.  Site licenses may come in the future.

     * AAAS is working closely with colleagues at OCLC to display
     mathematical equations on screen.

     * Without compromising any steps in the editorial process, the
     technology has reduced the time lag between when a manuscript is
     originally submitted and the time it is accepted; the review process
     does not differ greatly from the standard six-to-eight weeks
     employed by many of the hard-copy journals.  The process still
     depends on people.

     * As far as a preservation copy is concerned, articles will be
     maintained on the computer permanently and subscribers, as part of
     their subscription, will receive a microfiche-quality archival copy
     of everything published during that year; in addition, reprints can
     be purchased in much the same way as in a hard-copy environment. 
     Hard copies are prepared but are not the primary medium for the
     dissemination of the information.

     * Because OJCCT is not yet on line, it is difficult to know how many
     people would simply browse through the journal on the screen as
     opposed to downloading the whole thing and printing it out; a mix of
     both types of users likely will result.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PERSONIUS * Developments in technology over the past decade * The CLASS
Project * Advantages for technology and for the CLASS Project *
Developing a network application an underlying assumption of the project
* Details of the scanning process * Print-on-demand copies of books *
Future plans include development of a browsing tool *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Lynne PERSONIUS, assistant director, Cornell Information Technologies for
Scholarly Information Services, Cornell University, first commented on
the tremendous impact that developments in technology over the past ten
years--networking, in particular--have had on the way information is
handled, and how, in her own case, these developments have counterbalanced
Cornell's relative geographical isolation.  Other significant technologies
include scanners, which are much more sophisticated than they were ten years
ago; mass storage and the dramatic savings that result from it in terms of
both space and money relative to twenty or thirty years ago; new and
improved printing technologies, which have greatly affected the distribution
of information; and, of course, digital technologies, whose applicability to
library preservation remains at issue.

Given that context, PERSONIUS described the College Library Access and
Storage System (CLASS) Project, a library preservation project,
primarily, and what has been accomplished.  Directly funded by the
Commission on Preservation and Access and by the Xerox Corporation, which
has provided a significant amount of hardware, the CLASS Project has been
working with a development team at Xerox to develop a software
application tailored to library preservation requirements.  Within
Cornell, participants in the project have been working jointly with both
library and information technologies.  The focus of the project has been
on reformatting and saving books that are in brittle condition. 
PERSONIUS showed Workshop participants a brittle book, and described how
such books were the result of developments in papermaking around the
beginning of the Industrial Revolution.  The papermaking process was
changed so that a significant amount of acid was introduced into the
actual paper itself, which deteriorates as it sits on library shelves.

One of the advantages for technology and for the CLASS Project is that
the information in brittle books is mostly out of copyright and thus
offers an opportunity to work with material that requires library
preservation, and to create and work on an infrastructure to save the
material.  Acknowledging the familiarity of those working in preservation
with this information, PERSONIUS noted that several things are being
done:  the primary preservation technology used today is photocopying of
brittle material.  Saving the intellectual content of the material is the
main goal.  With microfilm copy, the intellectual content is preserved on
the assumption that in the future the image can be reformatted in any
other way that then exists.

An underlying assumption of the CLASS Project from the beginning was
that it would develop a network application.  Project staff scan books
at a workstation located in the library, near the brittle material.
An image-server filing system is located at a distance from that
workstation, and a printer is located in another building.  All of the
materials digitized and stored on the image-filing system are cataloged
in the on-line catalogue.  In fact, a record for each of these electronic
books is stored in the RLIN database so that a record exists of what is
in the digital library throughout standard catalogue procedures.  In the
future, researchers working from their own workstations in their offices,
or their networks, will have access--wherever they might be--through a
request server being built into the new digital library.  A second
assumption is that the preferred means of finding the material will be by
looking through a catalogue.  PERSONIUS described the scanning process,
which uses a prototype scanner being developed by Xerox and which scans a
very high resolution image at great speed.  Another significant feature,
because this is a preservation application, is the placing of the pages
that fall apart one for one on the platen.  Ordinarily, a scanner could
be used with some sort of a document feeder, but because of this
application that is not feasible.  Further, because CLASS is a
preservation application, after the paper replacement is made there, a
very careful quality control check is performed.  An original book is
compared to the printed copy and verification is made, before proceeding,
that all of the image, all of the information, has been captured.  Then,
a new library book is produced:  The printed images are rebound by a
commercial binder and a new book is returned to the shelf. 
Significantly, the books returned to the library shelves are beautiful
and useful replacements on acid-free paper that should last a long time,
in effect, the equivalent of preservation photocopies.  Thus, the project
has a library of digital books.  In essence, CLASS is scanning and
storing books as 600 dot-per-inch bit-mapped images, compressed using
Group 4 CCITT (i.e., the French acronym for International Consultative
Committee for Telegraph and Telephone) compression.  They are stored as
TIFF files on an optical filing system that is composed of a database
used for searching and locating the books and an optical jukebox that
stores 64 twelve-inch platters.  A very-high-resolution printed copy of
these books at 600 dots per inch is created, using a Xerox DocuTech
printer to make the paper replacements on acid-free paper.

PERSONIUS maintained that the CLASS Project presents an opportunity to
introduce people to books as digital images by using a paper medium. 
Books are returned to the shelves while people are also given the ability
to print on demand--to make their own copies of books.  (PERSONIUS
distributed copies of an engineering journal published by engineering
students at Cornell around 1900 as an example of what a print-on-demand
copy of material might be like.  This very cheap copy would be available
to people to use for their own research purposes and would bridge the gap
between an electronic work and the paper that readers like to have.) 
PERSONIUS then attempted to illustrate a very early prototype of
networked access to this digital library.  Xerox Corporation has
developed a prototype of a view station that can send images across the
network to be viewed.

The particular library brought down for demonstration contained two
mathematics books.  CLASS is developing and will spend the next year
developing an application that allows people at workstations to browse
the books.  Thus, CLASS is developing a browsing tool, on the assumption
that users do not want to read an entire book from a workstation, but
would prefer to be able to look through and decide if they would like to
have a printed copy of it.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Re retrieval software * "Digital file copyright" * Scanning
rate during production * Autosegmentation * Criteria employed in
selecting books for scanning * Compression and decompression of images *
OCR not precluded *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the question-and-answer period that followed her presentation,
PERSONIUS made these additional points:

     * Re retrieval software, Cornell is developing a Unix-based server
     as well as clients for the server that support multiple platforms
     (Macintosh, IBM and Sun workstations), in the hope that people from
     any of those platforms will retrieve books; a further operating
     assumption is that standard interfaces will be used as much as
     possible, where standards can be put in place, because CLASS
     considers this retrieval software a library application and would
     like to be able to look at material not only at Cornell but at other
     institutions.

     * The phrase "digital file copyright by Cornell University" was
     added at the advice of Cornell's legal staff with the caveat that it
     probably would not hold up in court.  Cornell does not want people
     to copy its books and sell them but would like to keep them
     available for use in a library environment for library purposes.

     * In production the scanner can scan about 300 pages per hour,
     capturing 600 dots per inch.

     * The Xerox software has filters to scan halftone material and avoid
     the moire patterns that occur when halftone material is scanned. 
     Xerox has been working on hardware and software that would enable
     the scanner itself to recognize this situation and deal with it
     appropriately--a kind of autosegmentation that would enable the
     scanner to handle halftone material as well as text on a single page.

     * The books subjected to the elaborate process described above were
     selected because CLASS is a preservation project, with the first 500
     books selected coming from Cornell's mathematics collection, because
     they were still being heavily used and because, although they were
     in need of preservation, the mathematics library and the mathematics
     faculty were uncomfortable having them microfilmed.  (They wanted a
     printed copy.)  Thus, these books became a logical choice for this
     project.  Other books were chosen by the project's selection committees
     for experiments with the technology, as well as to meet a demand or need.

     * Images will be decompressed before they are sent over the line; at
     this time they are compressed and sent to the image filing system
     and then sent to the printer as compressed images; they are returned
     to the workstation as compressed 600-dpi images and the workstation
     decompresses and scales them for display--an inefficient way to
     access the material though it works quite well for printing and
     other purposes.

     * CLASS is also decompressing on Macintosh and IBM, a slow process
     right now.  Eventually, compression and decompression will take
     place on an image conversion server.  Trade-offs will be made, based
     on future performance testing, concerning where the file is
     compressed and what resolution image is sent.

     * OCR has not been precluded; images are being stored that have been
     scanned at a high resolution, which presumably would suit them well
     to an OCR process.  Because the material being scanned is about 100
     years old and was printed with less-than-ideal technologies, very
     early and preliminary tests have not produced good results.  But the
     project is capturing an image that is of sufficient resolution to be
     subjected to OCR in the future.  Moreover, the system architecture
     and the system plan have a logical place to store an OCR image if it
     has been captured.  But that is not being done now.

                                 ******

SESSION III.  DISTRIBUTION, NETWORKS, AND NETWORKING:  OPTIONS FOR
DISSEMINATION

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ZICH * Issues pertaining to CD-ROMs * Options for publishing in CD-ROM *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Robert ZICH, special assistant to the associate librarian for special
projects, Library of Congress, and moderator of this session, first noted
the blessed but somewhat awkward circumstance of having four very
distinguished people representing networks and networking or at least
leaning in that direction, while lacking anyone to speak from the
strongest possible background in CD-ROMs.  ZICH expressed the hope that
members of the audience would join the discussion.  He stressed the
subtitle of this particular session, "Options for Dissemination," and,
concerning CD-ROMs, the importance of determining when it would be wise
to consider dissemination in CD-ROM versus networks.  A shopping list of
issues pertaining to CD-ROMs included:  the grounds for selecting
commercial publishers, and in-house publication where possible versus
nonprofit or government publication.  A similar list for networks
included:  determining when one should consider dissemination through a
network, identifying the mechanisms or entities that exist to place items
on networks, identifying the pool of existing networks, determining how a
producer  would choose between networks, and identifying the elements of
a business arrangement in a network.

Options for publishing in CD-ROM:  an outside publisher versus
self-publication.  If an outside publisher is used, it can be nonprofit,
such as the Government Printing Office (GPO) or the National Technical
Information Service (NTIS), in the case of government.  The pros and cons
associated with employing an outside publisher are obvious.  Among the
pros, there is no trouble getting accepted.  One pays the bill and, in
effect, goes one's way.  Among the cons, when one pays an outside
publisher to perform the work, that publisher will perform the work it is
obliged to do, but perhaps without the production expertise and skill in
marketing and dissemination that some would seek.  There is the body of
commercial publishers that do possess that kind of expertise in
distribution and marketing but that obviously are selective.  In
self-publication, one exercises full control, but then one must handle
matters such as distribution and marketing.  Such are some of the options
for publishing in the case of CD-ROM.

In the case of technical and design issues, which are also important,
there are many matters which many at the Workshop already knew a good
deal about:  retrieval system requirements and costs, what to do about
images, the various capabilities and platforms, the trade-offs between
cost and performance, concerns about local-area networkability,
interoperability, etc.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LYNCH * Creating networked information is different from using networks
as an access or dissemination vehicle * Networked multimedia on a large
scale does not yet work * Typical CD-ROM publication model a two-edged
sword * Publishing information on a CD-ROM in the present world of
immature standards * Contrast between CD-ROM and network pricing *
Examples demonstrated earlier in the day as a set of insular information
gems * Paramount need to link databases * Layering to become increasingly
necessary * Project NEEDS and the issues of information reuse and active
versus passive use * X-Windows as a way of differentiating between
network access and networked information * Barriers to the distribution
of networked multimedia information * Need for good, real-time delivery
protocols * The question of presentation integrity in client-server
computing in the academic world * Recommendations for producing multimedia
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Clifford LYNCH, director, Library Automation, University of California,
opened his talk with the general observation that networked information
constituted a difficult and elusive topic because it is something just
starting to develop and not yet fully understood.  LYNCH contended that
creating genuinely networked information was different from using
networks as an access or dissemination vehicle and was more sophisticated
and more subtle.  He invited the members of the audience to extrapolate,
from what they heard about the preceding demonstration projects, to what
sort of a world of electronics information--scholarly, archival,
cultural, etc.--they wished to end up with ten or fifteen years from now. 
LYNCH suggested that to extrapolate directly from these projects would
produce unpleasant results.

Putting the issue of CD-ROM in perspective before getting into
generalities on networked information, LYNCH observed that those engaged
in multimedia today who wish to ship a product, so to say, probably do
not have much choice except to use CD-ROM:  networked multimedia on a
large scale basically does not yet work because the technology does not
exist.  For example, anybody who has tried moving images around over the
Internet knows that this is an exciting touch-and-go process, a
fascinating and fertile area for experimentation, research, and
development, but not something that one can become deeply enthusiastic
about committing to production systems at this time.

This situation will change, LYNCH said.  He differentiated CD-ROM from
the practices that have been followed up to now in distributing data on
CD-ROM.  For LYNCH the problem with CD-ROM is not its portability or its
slowness but the two-edged sword of having the retrieval application and
the user interface inextricably bound up with the data, which is the
typical CD-ROM publication model.  It is not a case of publishing data
but of distributing a typically stand-alone, typically closed system,
all--software, user interface, and data--on a little disk.  Hence, all
the between-disk navigational issues as well as the impossibility in most
cases of integrating data on one disk with that on another.  Most CD-ROM
retrieval software does not network very gracefully at present.  However,
in the present world of immature standards and lack of understanding of
what network information is or what the ground rules are for creating or
using it, publishing information on a CD-ROM does add value in a very
real sense.

LYNCH drew a contrast between CD-ROM and network pricing and in doing so
highlighted something bizarre in information pricing.  A large
institution such as the University of California has vendors who will
offer to sell information on CD-ROM for a price per year in four digits,
but for the same data (e.g., an abstracting and indexing database) on
magnetic tape, regardless of how many people may use it concurrently,
will quote a price in six digits.

What is packaged with the CD-ROM in one sense adds value--a complete
access system, not just raw, unrefined information--although it is not
generally perceived that way.  This is because the access software,
although it adds value, is viewed by some people, particularly in the
university environment where there is a very heavy commitment to
networking, as being developed in the wrong direction.

Given that context, LYNCH described the examples demonstrated as a set of
insular information gems--Perseus, for example, offers nicely linked
information, but would be very difficult to integrate with other
databases, that is, to link together seamlessly with other source files
from other sources.  It resembles an island, and in this respect is
similar to numerous stand-alone projects that are based on videodiscs,
that is, on the single-workstation concept.

As scholarship evolves in a network environment, the paramount need will
be to link databases.  We must link personal databases to public
databases, to group databases, in fairly seamless ways--which is
extremely difficult in the environments under discussion with copies of
databases proliferating all over the place.

The notion of layering also struck LYNCH as lurking in several of the
projects demonstrated.  Several databases in a sense constitute
information archives without a significant amount of navigation built in. 
Educators, critics, and others will want a layered structure--one that
defines or links paths through the layers to allow users to reach
specific points.  In LYNCH's view, layering will become increasingly
necessary, and not just within a single resource but across resources
(e.g., tracing mythology and cultural themes across several classics
databases as well as a database of Renaissance culture).  This ability to
organize resources, to build things out of multiple other things on the
network or select pieces of it, represented for LYNCH one of the key
aspects of network information.

Contending that information reuse constituted another significant issue,
LYNCH commended to the audience's attention Project NEEDS (i.e., National
Engineering Education Delivery System).  This project's objective is to
produce a database of engineering courseware as well as the components
that can be used to develop new courseware.  In a number of the existing
applications, LYNCH said, the issue of reuse (how much one can take apart
and reuse in other applications) was not being well considered.  He also
raised the issue of active versus passive use, one aspect of which  is
how much information will be manipulated locally by users.  Most people,
he argued, may do a little browsing and then will wish to print.  LYNCH
was uncertain how these resources would be used by the vast majority of
users in the network environment.

LYNCH next said a few words about X-Windows as a way of differentiating
between network access and networked information.  A number of the
applications demonstrated at the Workshop could be rewritten to use X
across the network, so that one could run them from any X-capable device-
-a workstation, an X terminal--and transact with a database across the
network.  Although this opens up access a little, assuming one has enough
network to handle it, it does not provide an interface to develop a
program that conveniently integrates information from multiple databases. 
X is a viewing technology that has limits.  In a real sense, it is just a
graphical version of remote log-in across the network.  X-type applications
represent only one step in the progression towards real access.

LYNCH next discussed barriers to the distribution of networked multimedia
information.  The heart of the problem is a lack of standards to provide
the ability for computers to talk to each other, retrieve information,
and shuffle it around fairly casually.  At the moment, little progress is
being made on standards for networked information; for example, present
standards do not cover images, digital voice, and digital video.  A
useful tool kit of exchange formats for basic texts is only now being
assembled.  The synchronization of content streams (i.e., synchronizing a
voice track to a video track, establishing temporal relations between
different components in a multimedia object) constitutes another issue
for networked multimedia that is just beginning to receive attention.

Underlying network protocols also need some work; good, real-time
delivery protocols on the Internet do not yet exist.  In LYNCH's view,
highly important in this context is the notion of networked digital
object IDs, the ability of one object on the network to point to another
object (or component thereof) on the network.  Serious bandwidth issues
also exist.  LYNCH was uncertain if billion-bit-per-second networks would
prove sufficient if numerous people ran video in parallel.

LYNCH concluded by offering an issue for database creators to consider,
as well as several comments about what might constitute good trial
multimedia experiments.  In a networked information world the database
builder or service builder (publisher) does not exercise the same
extensive control over the integrity of the presentation; strange
programs "munge" with one's data before the user sees it.  Serious
thought must be given to what guarantees integrity of presentation.  Part
of that is related to where one draws the boundaries around a networked
information service.  This question of presentation integrity in
client-server computing has not been stressed enough in the academic
world, LYNCH argued, though commercial service providers deal with it
regularly.

Concerning multimedia, LYNCH observed that good multimedia at the moment
is hideously expensive to produce.  He recommended producing multimedia
with either very high sale value, or multimedia with a very long life
span, or multimedia that will have a very broad usage base and whose
costs therefore can be amortized among large numbers of users.  In this
connection, historical and humanistically oriented material may be a good
place to start, because it tends to have a longer life span than much of
the scientific material, as well as a wider user base.  LYNCH noted, for
example, that American Memory fits many of the criteria outlined.  He
remarked the extensive discussion about bringing the Internet or the
National Research and Education Network (NREN) into the K-12 environment
as a way of helping the American educational system.

LYNCH closed by noting that the kinds of applications demonstrated struck
him as excellent justifications of broad-scale networking for K-12, but
that at this time no "killer" application exists to mobilize the K-12
community to obtain connectivity.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Dearth of genuinely interesting applications on the network
a slow-changing situation * The issue of the integrity of presentation in
a networked environment * Several reasons why CD-ROM software does not
network *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the discussion period that followed LYNCH's presentation, several
additional points were made.

LYNCH reiterated even more strongly his contention that, historically,
once one goes outside high-end science and the group of those who need
access to supercomputers, there is a great dearth of genuinely
interesting applications on the network.  He saw this situation changing
slowly, with some of the scientific databases and scholarly discussion
groups and electronic journals coming on as well as with the availability
of Wide Area Information Servers (WAIS) and some of the databases that
are being mounted there.  However, many of those things do not seem to
have piqued great popular interest.  For instance, most high school
students of LYNCH's acquaintance would not qualify as devotees of serious
molecular biology.

Concerning the issue of the integrity of presentation, LYNCH believed
that a couple of information providers have laid down the law at least on
certain things.  For example, his recollection was that the National
Library of Medicine feels strongly that one needs to employ the
identifier field if he or she is to mount a database commercially.  The
problem with a real networked environment is that one does not know who
is reformatting and reprocessing one's data when one enters a client
server mode.  It becomes anybody's guess, for example, if the network
uses a Z39.50 server, or what clients are doing with one's data.  A data
provider can say that his contract will only permit clients to have
access to his data after he vets them and their presentation and makes
certain it suits him.  But LYNCH held out little expectation that the
network marketplace would evolve in that way, because it required too
much prior negotiation.

CD-ROM software does not network for a variety of reasons, LYNCH said. 
He speculated that CD-ROM publishers are not eager to have their products
really hook into wide area networks, because they fear it will make their
data suppliers nervous.  Moreover, until relatively recently, one had to
be rather adroit to run a full TCP/IP stack plus applications on a
PC-size machine, whereas nowadays it is becoming easier as PCs grow
bigger and faster.  LYNCH also speculated that software providers had not
heard from their customers until the last year or so, or had not heard
from enough of their customers.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BESSER * Implications of disseminating images on the network; planning
the distribution of multimedia documents poses two critical
implementation problems * Layered approach represents the way to deal
with users' capabilities * Problems in platform design; file size and its
implications for networking * Transmission of megabyte size images
impractical * Compression and decompression at the user's end * Promising
trends for compression * A disadvantage of using X-Windows * A project at
the Smithsonian that mounts images on several networks *  
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Howard BESSER, School of Library and Information Science, University of
Pittsburgh, spoke primarily about multimedia, focusing on images and the
broad implications of disseminating them on the network.  He argued that
planning the distribution of multimedia documents posed two critical
implementation problems, which he framed in the form of two questions: 
1) What platform will one use and what hardware and software will users
have for viewing of the material?  and 2) How can one deliver a
sufficiently robust set of information in an accessible format in a
reasonable amount of time?  Depending on whether network or CD-ROM is the
medium used, this question raises different issues of storage,
compression, and transmission.

Concerning the design of platforms (e.g., sound, gray scale, simple
color, etc.) and the various capabilities users may have, BESSER
maintained that a layered approach was the way to deal with users'
capabilities.  A result would be that users with less powerful
workstations would simply have less functionality.  He urged members of
the audience to advocate standards and accompanying software that handle
layered functionality across a wide variety of platforms.

BESSER also addressed problems in platform design, namely, deciding how
large a machine to design for situations when the largest number of users
have the lowest level of the machine, and one desires higher
functionality.  BESSER then proceeded to the question of file size and
its implications for networking.  He discussed still images in the main. 
For example, a digital color image that fills the screen of a standard
mega-pel workstation (Sun or Next) will require one megabyte of storage
for an eight-bit image or three megabytes of storage for a true color or
twenty-four-bit image.  Lossless compression algorithms (that is,
computational procedures in which no data is lost in the process of
compressing [and decompressing] an image--the exact bit-representation is
maintained) might bring storage down to a third of a megabyte per image,
but not much further than that.  The question of size makes it difficult
to fit an appropriately sized set of these images on a single disk or to
transmit them quickly enough on a network.

With these full screen mega-pel images that constitute a third of a
megabyte, one gets 1,000-3,000 full-screen images on a one-gigabyte disk;
a standard CD-ROM represents approximately 60 percent of that.  Storing
images the size of a PC screen (just 8 bit color) increases storage
capacity to 4,000-12,000 images per gigabyte; 60 percent of that gives
one the size of a CD-ROM, which in turn creates a major problem.  One
cannot have full-screen, full-color images with lossless compression; one
must compress them or use a lower resolution.  For megabyte-size images,
anything slower than a T-1 speed is impractical.  For example, on a
fifty-six-kilobaud line, it takes three minutes to transfer a
one-megabyte file, if it is not compressed; and this speed assumes ideal
circumstances (no other user contending for network bandwidth).  Thus,
questions of disk access, remote display, and current telephone
connection speed make transmission of megabyte-size images impractical.

BESSER then discussed ways to deal with these large images, for example,
compression and decompression at the user's end.  In this connection, the
issues of how much one is willing to lose in the compression process and
what image quality one needs in the first place are unknown.  But what is
known is that compression entails some loss of data.  BESSER urged that
more studies be conducted on image quality in different situations, for
example, what kind of images are needed for what kind of disciplines, and
what kind of image quality is needed for a browsing tool, an intermediate
viewing tool, and archiving.

BESSER remarked two promising trends for compression:  from a technical
perspective, algorithms that use what is called subjective redundancy
employ principles from visual psycho-physics to identify and remove
information from the image that the human eye cannot perceive; from an
interchange and interoperability perspective, the JPEG (i.e., Joint
Photographic Experts Group, an ISO standard) compression algorithms also
offer promise.  These issues of compression and decompression, BESSER
argued, resembled those raised earlier concerning the design of different
platforms.  Gauging the capabilities of potential users constitutes a
primary goal.  BESSER advocated layering or separating the images from
the applications that retrieve and display them, to avoid tying them to
particular software.

BESSER detailed several lessons learned from his work at Berkeley with
Imagequery, especially the advantages and disadvantages of using
X-Windows.  In the latter category, for example, retrieval is tied
directly to one's data, an intolerable situation in the long run on a
networked system.  Finally, BESSER described a project of Jim Wallace at
the Smithsonian Institution, who is mounting images in a extremely
rudimentary way on the Compuserv and Genie networks and is preparing to
mount them on America On Line.  Although the average user takes over
thirty minutes to download these images (assuming a fairly fast modem),
nevertheless, images have been downloaded 25,000 times.

BESSER concluded his talk with several comments on the business
arrangement between the Smithsonian and Compuserv.  He contended that not
enough is known concerning the value of images.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Creating digitized photographic collections nearly
impossible except with large organizations like museums * Need for study
to determine quality of images users will tolerate *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the brief exchange between LESK and BESSER that followed, several
clarifications emerged.

LESK argued that the photographers were far ahead of BESSER:  It is
almost impossible to create such digitized photographic collections
except with large organizations like museums, because all the
photographic agencies have been going crazy about this and will not sign
licensing agreements on any sort of reasonable terms.  LESK had heard
that National Geographic, for example, had tried to buy the right to use
some image in some kind of educational production for $100 per image, but
the photographers will not touch it.  They want accounting and payment
for each use, which cannot be accomplished within the system.  BESSER
responded that a consortium of photographers, headed by a former National
Geographic photographer, had started assembling its own collection of
electronic reproductions of images, with the money going back to the
cooperative.

LESK contended that BESSER was unnecessarily pessimistic about multimedia
images, because people are accustomed to low-quality images, particularly
from video.  BESSER urged the launching of a study to determine what
users would tolerate, what they would feel comfortable with, and what
absolutely is the highest quality they would ever need.  Conceding that
he had adopted a dire tone in order to arouse people about the issue,
BESSER closed on a sanguine note by saying that he would not be in this
business if he did not think that things could be accomplished.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LARSEN * Issues of scalability and modularity * Geometric growth of the
Internet and the role played by layering * Basic functions sustaining
this growth * A library's roles and functions in a network environment *
Effects of implementation of the Z39.50 protocol for information
retrieval on the library system * The trade-off between volumes of data
and its potential usage * A snapshot of current trends *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Ronald LARSEN, associate director for information technology, University
of Maryland at College Park, first addressed the issues of scalability
and modularity.  He noted the difficulty of anticipating the effects of
orders-of-magnitude growth, reflecting on the twenty years of experience
with the Arpanet and Internet.  Recalling the day's demonstrations of
CD-ROM and optical disk material, he went on to ask if the field has yet
learned how to scale new systems to enable delivery and dissemination
across large-scale networks.

LARSEN focused on the geometric growth of the Internet from its inception
circa 1969 to the present, and the adjustments required to respond to
that rapid growth.  To illustrate the issue of scalability, LARSEN
considered computer networks as including three generic components: 
computers, network communication nodes, and communication media.  Each
component scales (e.g., computers range from PCs to supercomputers;
network nodes scale from interface cards in a PC through sophisticated
routers and gateways; and communication media range from 2,400-baud
dial-up facilities through 4.5-Mbps backbone links, and eventually to
multigigabit-per-second communication lines), and architecturally, the
components are organized to scale hierarchically from local area networks
to international-scale networks.  Such growth is made possible by
building layers of communication protocols, as BESSER pointed out.
By layering both physically and logically, a sense of scalability is
maintained from local area networks in offices, across campuses, through
bridges, routers, campus backbones, fiber-optic links, etc., up into
regional networks and ultimately into national and international
networks.

LARSEN then illustrated the geometric growth over a two-year period--
through September 1991--of the number of networks that comprise the
Internet.  This growth has been sustained largely by the availability of
three basic functions:  electronic mail, file transfer (ftp), and remote
log-on (telnet).  LARSEN also reviewed the growth in the kind of traffic
that occurs on the network.  Network traffic reflects the joint contributions
of a larger population of users and increasing use per user.  Today one sees
serious applications involving moving images across the network--a rarity
ten years ago.  LARSEN recalled and concurred with BESSER's main point
that the interesting problems occur at the application level.

LARSEN then illustrated a model of a library's roles and functions in a
network environment.  He noted, in particular, the placement of on-line
catalogues onto the network and patrons obtaining access to the library
increasingly through local networks, campus networks, and the Internet. 
LARSEN supported LYNCH's earlier suggestion that we need to address
fundamental questions of networked information in order to build
environments that scale in the information sense as well as in the
physical sense.

LARSEN supported the role of the library system as the access point into
the nation's electronic collections.  Implementation of the Z39.50
protocol for information retrieval would make such access practical and
feasible.  For example, this would enable patrons in Maryland to search
California libraries, or other libraries around the world that are
conformant with Z39.50 in a manner that is familiar to University of
Maryland patrons.  This client-server model also supports moving beyond
secondary content into primary content.  (The notion of how one links
from secondary content to primary content, LARSEN said, represents a
fundamental problem that requires rigorous thought.)  After noting
numerous network experiments in accessing full-text materials, including
projects supporting the ordering of materials across the network, LARSEN
revisited the issue of transmitting high-density, high-resolution color
images across the network and the large amounts of bandwidth they
require.  He went on to address the bandwidth and synchronization
problems inherent in sending full-motion video across the network.

LARSEN illustrated the trade-off between volumes of data in bytes or
orders of magnitude and the potential usage of that data.  He discussed
transmission rates (particularly, the time it takes to move various forms
of information), and what one could do with a network supporting
multigigabit-per-second transmission.  At the moment, the network
environment includes a composite of data-transmission requirements,
volumes and forms, going from steady to bursty (high-volume) and from
very slow to very fast.  This aggregate must be considered in the design,
construction, and operation of multigigabyte networks.

LARSEN's objective is to use the networks and library systems now being
constructed to increase access to resources wherever they exist, and
thus, to evolve toward an on-line electronic virtual library.

LARSEN concluded by offering a snapshot of current trends:  continuing
geometric growth in network capacity and number of users; slower
development of applications; and glacial development and adoption of
standards.  The challenge is to design and develop each new application
system with network access and scalability in mind.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BROWNRIGG * Access to the Internet cannot be taken for granted * Packet
radio and the development of MELVYL in 1980-81 in the Division of Library
Automation at the University of California  *  Design criteria for packet
radio * A demonstration project in San Diego and future plans * Spread
spectrum * Frequencies at which the radios will run and plans to
reimplement the WAIS server software in the public domain * Need for an
infrastructure of radios that do not move around * 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Edwin BROWNRIGG, executive director, Memex Research Institute, first
polled the audience in order to seek out regular users of the Internet as
well as those planning to use it some time in the future.  With nearly
everybody in the room falling into one category or the other, BROWNRIGG
made a point re access, namely that numerous individuals, especially those
who use the Internet every day, take for granted their access to it, the
speeds with which they are connected, and how well it all works. 
However, as BROWNRIGG discovered between 1987 and 1989 in Australia,
if one wants access to the Internet but cannot afford it or has some
physical boundary that prevents her or him from gaining access, it can
be extremely frustrating.  He suggested that because of economics and
physical barriers we were beginning to create a world of haves and have-nots
in the process of scholarly communication, even in the United States.

BROWNRIGG detailed the development of MELVYL in academic year 1980-81 in
the Division of Library Automation at the University of California, in
order to underscore the issue of access to the system, which at the
outset was extremely limited.  In short, the project needed to build a
network, which at that time entailed use of satellite technology, that is,
putting earth stations on campus and also acquiring some terrestrial links
from the State of California's microwave system.  The installation of
satellite links, however, did not solve the problem (which actually
formed part of a larger problem involving politics and financial resources).
For while the project team could get a signal onto a campus, it had no means
of distributing the signal throughout the campus.  The solution involved
adopting a recent development in wireless communication called packet radio,
which combined the basic notion of packet-switching with radio.  The project
used this technology to get the signal from a point on campus where it
came down, an earth station for example, into the libraries, because it
found that wiring the libraries, especially the older marble buildings,
would cost $2,000-$5,000 per terminal.

BROWNRIGG noted that, ten years ago, the project had neither the public
policy nor the technology that would have allowed it to use packet radio
in any meaningful way.  Since then much had changed.  He proceeded to
detail research and development of the technology, how it is being
deployed in California, and what direction he thought it would take.
The design criteria are to produce a high-speed, one-time, low-cost,
high-quality, secure, license-free device (packet radio) that one can
plug in and play today, forget about it, and have access to the Internet. 
By high speed, BROWNRIGG meant 1 megabyte and 1.5 megabytes.  Those units
have been built, he continued, and are in the process of being
type-certified by an independent underwriting laboratory so that they can
be type-licensed by the Federal Communications Commission.  As is the
case with citizens band, one will be able to purchase a unit and not have
to worry about applying for a license.

The basic idea, BROWNRIGG elaborated, is to take high-speed radio data
transmission and create a backbone network that at certain strategic
points in the network will "gateway" into a medium-speed packet radio
(i.e., one that runs at 38.4 kilobytes), so that perhaps by 1994-1995
people, like those in the audience for the price of a VCR could purchase
a medium-speed radio for the office or home, have full network connectivity
to the Internet, and partake of all its services, with no need for an FCC
license and no regular bill from the local common carrier.  BROWNRIGG
presented several details of a demonstration project currently taking
place in San Diego and described plans, pending funding, to install a
full-bore network in the San Francisco area.  This network will have 600
nodes running at backbone speeds, and 100 of these nodes will be libraries,
which in turn will be the gateway ports to the 38.4 kilobyte radios that
will give coverage for the neighborhoods surrounding the libraries.

BROWNRIGG next explained Part 15.247, a new rule within Title 47 of the
Code of Federal Regulations enacted by the FCC in 1985.  This rule
challenged the industry, which has only now risen to the occasion, to
build a radio that would run at no more than one watt of output power and
use a fairly exotic method of modulating the radio wave called spread
spectrum.  Spread spectrum in fact permits the building of networks so
that numerous data communications can occur simultaneously, without
interfering with each other, within the same wide radio channel.

BROWNRIGG explained that the frequencies at which the radios would run
are very short wave signals.  They are well above standard microwave and
radar.  With a radio wave that small, one watt becomes a tremendous punch
per bit and thus makes transmission at reasonable speed possible.  In
order to minimize the potential for congestion, the project is
undertaking to reimplement software which has been available in the
networking business and is taken for granted now, for example, TCP/IP,
routing algorithms, bridges, and gateways.  In addition, the project
plans to take the WAIS server software in the public domain and
reimplement it so that one can have a WAIS server on a Mac instead of a
Unix machine.  The Memex Research Institute believes that libraries, in
particular, will want to use the WAIS servers with packet radio.  This
project, which has a team of about twelve people, will run through 1993
and will include the 100 libraries already mentioned as well as other
professionals such as those in the medical profession, engineering, and
law.  Thus, the need is to create an infrastructure of radios that do not
move around, which, BROWNRIGG hopes, will solve a problem not only for
libraries but for individuals who, by and large today, do not have access
to the Internet from their homes and offices.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Project operating frequencies *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During a brief discussion period, which also concluded the day's
proceedings, BROWNRIGG stated that the project was operating in four
frequencies.  The slow speed is operating at 435 megahertz, and it would
later go up to 920 megahertz.  With the high-speed frequency, the
one-megabyte radios will run at 2.4 gigabits, and 1.5 will run at 5.7. 
At 5.7, rain can be a factor, but it would have to be tropical rain,
unlike what falls in most parts of the United States.

                                 ******

SESSION IV.  IMAGE CAPTURE, TEXT CAPTURE, OVERVIEW OF TEXT AND
             IMAGE STORAGE FORMATS

William HOOTON, vice president of operations, I-NET, moderated this session.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
KENNEY * Factors influencing development of CXP * Advantages of using
digital technology versus photocopy and microfilm * A primary goal of
CXP; publishing challenges * Characteristics of copies printed * Quality
of samples achieved in image capture * Several factors to be considered
in choosing scanning * Emphasis of CXP on timely and cost-effective
production of black-and-white printed facsimiles * Results of producing
microfilm from digital files * Advantages of creating microfilm * Details
concerning production * Costs * Role of digital technology in library
preservation *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Anne KENNEY, associate director, Department of Preservation and
Conservation, Cornell University, opened her talk by observing that the
Cornell Xerox Project (CXP) has been guided by the assumption that the
ability to produce printed facsimiles or to replace paper with paper
would be important, at least for the present generation of users and
equipment.  She described three factors that influenced development of
the project:  1) Because the project has emphasized the preservation of
deteriorating brittle books, the quality of what was produced had to be
sufficiently high to return a paper replacement to the shelf.  CXP was
only interested in using:  2) a system that was cost-effective, which
meant that it had to be cost-competitive with the processes currently
available, principally photocopy and microfilm, and 3) new or currently
available product hardware and software.

KENNEY described the advantages that using digital technology offers over
both photocopy and microfilm:  1) The potential exists to create a higher
quality reproduction of a deteriorating original than conventional
light-lens technology.  2) Because a digital image is an encoded
representation, it can be reproduced again and again with no resulting
loss of quality, as opposed to the situation with light-lens processes,
in which there is discernible difference between a second and a
subsequent generation of an image.  3) A digital image can be manipulated
in a number of ways to improve image capture; for example, Xerox has
developed a windowing application that enables one to capture a page
containing both text and illustrations in a manner that optimizes the
reproduction of both.  (With light-lens technology, one must choose which
to optimize, text or the illustration; in preservation microfilming, the
current practice is to shoot an illustrated page twice, once to highlight
the text and the second time to provide the best capture for the
illustration.)  4) A digital image can also be edited, density levels
adjusted to remove underlining and stains, and to increase legibility for
faint documents.  5) On-screen inspection can take place at the time of
initial setup and adjustments made prior to scanning, factors that
substantially reduce the number of retakes required in quality control.

A primary goal of CXP has been to evaluate the paper output printed on
the Xerox DocuTech, a high-speed printer that produces 600-dpi pages from
scanned images at a rate of 135 pages a minute.  KENNEY recounted several
publishing challenges to represent faithful and legible reproductions of
the originals that the 600-dpi copy for the most part successfully
captured.  For example, many of the deteriorating volumes in the project
were heavily illustrated with fine line drawings or halftones or came in
languages such as Japanese, in which the buildup of characters comprised
of varying strokes is difficult to reproduce at lower resolutions; a
surprising number of them came with annotations and mathematical
formulas, which it was critical to be able to duplicate exactly.

KENNEY noted that 1) the copies are being printed on paper that meets the
ANSI standards for performance, 2) the DocuTech printer meets the machine
and toner requirements for proper adhesion of print to page, as described
by the National Archives, and thus 3) paper product is considered to be
the archival equivalent of preservation photocopy.

KENNEY then discussed several samples of the quality achieved in the
project that had been distributed in a handout, for example, a copy of a
print-on-demand version of the 1911 Reed lecture on the steam turbine,
which contains halftones, line drawings, and illustrations embedded in
text; the first four loose pages in the volume compared the capture
capabilities of scanning to photocopy for a standard test target, the
IEEE standard 167A 1987 test chart.  In all instances scanning proved
superior to photocopy, though only slightly more so in one.

Conceding the simplistic nature of her review of the quality of scanning
to photocopy, KENNEY described it as one representation of the kinds of
settings that could be used with scanning capabilities on the equipment
CXP uses.  KENNEY also pointed out that CXP investigated the quality
achieved with binary scanning only, and noted the great promise in gray
scale and color scanning, whose advantages and disadvantages need to be
examined.  She argued further that scanning resolutions and file formats
can represent a complex trade-off between the time it takes to capture
material, file size, fidelity to the original, and on-screen display; and
printing and equipment availability.  All these factors must be taken
into consideration.

CXP placed primary emphasis on the production in a timely and
cost-effective manner of printed facsimiles that consisted largely of
black-and-white text.  With binary scanning, large files may be
compressed efficiently and in a lossless manner (i.e., no data is lost in
the process of compressing [and decompressing] an image--the exact
bit-representation is maintained) using Group 4 CCITT (i.e., the French
acronym for International Consultative Committee for Telegraph and
Telephone) compression.  CXP was getting compression ratios of about
forty to one.  Gray-scale compression, which primarily uses JPEG, is much
less economical and can represent a lossy compression (i.e., not
lossless), so that as one compresses and decompresses, the illustration
is subtly changed.  While binary files produce a high-quality printed
version, it appears 1) that other combinations of spatial resolution with
gray and/or color hold great promise as well, and 2) that gray scale can
represent a tremendous advantage for on-screen viewing.  The quality
associated with binary and gray scale also depends on the equipment used. 
For instance, binary scanning produces a much better copy on a binary
printer.

Among CXP's findings concerning the production of microfilm from digital
files, KENNEY reported that the digital files for the same Reed lecture
were used to produce sample film using an electron beam recorder.  The
resulting film was faithful to the image capture of the digital files,
and while CXP felt that the text and image pages represented in the Reed
lecture were superior to that of the light-lens film, the resolution
readings for the 600 dpi were not as high as standard microfilming. 
KENNEY argued that the standards defined for light-lens technology are
not totally transferable to a digital environment.  Moreover, they are
based on definition of quality for a preservation copy.  Although making
this case will prove to be a long, uphill struggle, CXP plans to continue
to investigate the issue over the course of the next year.

KENNEY concluded this portion of her talk with a discussion of the
advantages of creating film:  it can serve as a primary backup and as a
preservation master to the digital file; it could then become the print
or production master and service copies could be paper, film, optical
disks, magnetic media, or on-screen display.

Finally, KENNEY presented details re production:

     * Development and testing of a moderately-high resolution production
     scanning workstation represented a third goal of CXP; to date, 1,000
     volumes have been scanned, or about 300,000 images.

     * The resulting digital files are stored and used to produce
     hard-copy replacements for the originals and additional prints on
     demand; although the initial costs are high, scanning technology
     offers an affordable means for reformatting brittle material.

     * A technician in production mode can scan 300 pages per hour when
     performing single-sheet scanning, which is a necessity when working
     with truly brittle paper; this figure is expected to increase
     significantly with subsequent iterations of the software from Xerox;
     a three-month time-and-cost study of scanning found that the average
     300-page book would take about an hour and forty minutes to scan
     (this figure included the time for setup, which involves keying in
     primary bibliographic data, going into quality control mode to
     define page size, establishing front-to-back registration, and
     scanning sample pages to identify a default range of settings for
     the entire book--functions not dissimilar to those performed by
     filmers or those preparing a book for photocopy).

     * The final step in the scanning process involved rescans, which
     happily were few and far between, representing well under 1 percent
     of the total pages scanned.

In addition to technician time, CXP costed out equipment, amortized over
four years, the cost of storing and refreshing the digital files every
four years, and the cost of printing and binding, book-cloth binding, a
paper reproduction.  The total amounted to a little under $65 per single
300-page volume, with 30 percent overhead included--a figure competitive
with the prices currently charged by photocopy vendors.

Of course, with scanning, in addition to the paper facsimile, one is left
with a digital file from which subsequent copies of the book can be
produced for a fraction of the cost of photocopy, with readers afforded
choices in the form of these copies.

KENNEY concluded that digital technology offers an electronic means for a
library preservation effort to pay for itself.  If a brittle-book program
included the means of disseminating reprints of books that are in demand
by libraries and researchers alike, the initial investment in capture
could be recovered and used to preserve additional but less popular
books.  She disclosed that an economic model for a self-sustaining
program could be developed for CXP's report to the Commission on
Preservation and Access (CPA).

KENNEY stressed that the focus of CXP has been on obtaining high quality
in a production environment.  The use of digital technology is viewed as
an affordable alternative to other reformatting options.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ANDRE * Overview and history of NATDP * Various agricultural CD-ROM
products created inhouse and by service bureaus * Pilot project on
Internet transmission * Additional products in progress *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Pamela ANDRE, associate director for automation, National Agricultural
Text Digitizing Program (NATDP), National Agricultural Library (NAL),
presented an overview of NATDP, which has been underway at NAL the last
four years, before Judith ZIDAR discussed the technical details.  ANDRE
defined agricultural information as a broad range of material going from
basic and applied research in the hard sciences to the one-page pamphlets
that are distributed by the cooperative state extension services on such
things as how to grow blueberries.

NATDP began in late 1986 with a meeting of representatives from the
land-grant library community to deal with the issue of electronic
information.  NAL and forty-five of these libraries banded together to
establish this project--to evaluate the technology for converting what
were then source documents in paper form into electronic form, to provide
access to that digital information, and then to distribute it. 
Distributing that material to the community--the university community as
well as the extension service community, potentially down to the county
level--constituted the group's chief concern.

Since January 1988 (when the microcomputer-based scanning system was
installed at NAL), NATDP has done a variety of things, concerning which
ZIDAR would provide further details.  For example, the first technology
considered in the project's discussion phase was digital videodisc, which
indicates how long ago it was conceived.

Over the four years of this project, four separate CD-ROM products on
four different agricultural topics were created, two at a
scanning-and-OCR station installed at NAL, and two by service bureaus. 
Thus, NATDP has gained comparative information in terms of those relative
costs.  Each of these products contained the full ASCII text as well as
page images of the material, or between 4,000 and 6,000 pages of material
on these disks.  Topics included aquaculture, food, agriculture and
science (i.e., international agriculture and research), acid rain, and
Agent Orange, which was the final product distributed (approximately
eighteen months before the Workshop).

The third phase of NATDP focused on delivery mechanisms other than
CD-ROM.  At the suggestion of Clifford LYNCH, who was a technical
consultant to the project at this point, NATDP became involved with the
Internet and initiated a project with the help of North Carolina State
University, in which fourteen of the land-grant university libraries are
transmitting digital images over the Internet in response to interlibrary
loan requests--a topic for another meeting.  At this point, the pilot
project had been completed for about a year and the final report would be
available shortly after the Workshop.  In the meantime, the project's
success had led to its extension.  (ANDRE noted that one of the first
things done under the program title was to select a retrieval package to
use with subsequent products; Windows Personal Librarian was the package
of choice after a lengthy evaluation.)
  
Three additional products had been planned and were in progress:

     1) An arrangement with the American Society of Agronomy--a
     professional society that has published the Agronomy Journal since
     about 1908--to scan and create bit-mapped images of its journal. 
     ASA granted permission first to put and then to distribute this
     material in electronic form, to hold it at NAL, and to use these
     electronic images as a mechanism to deliver documents or print out
     material for patrons, among other uses.  Effectively, NAL has the
     right to use this material in support of its program. 
     (Significantly, this arrangement offers a potential cooperative
     model for working with other professional societies in agriculture
     to try to do the same thing--put the journals of particular interest
     to agriculture research into electronic form.)

     2) An extension of the earlier product on aquaculture.

     3) The George Washington Carver Papers--a joint project with
     Tuskegee University to scan and convert from microfilm some 3,500
     images of Carver's papers, letters, and drawings.

It was anticipated that all of these products would appear no more than
six months after the Workshop.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ZIDAR * (A separate arena for scanning) * Steps in creating a database *
Image capture, with and without performing OCR * Keying in tracking data
* Scanning, with electronic and manual tracking * Adjustments during
scanning process * Scanning resolutions * Compression * De-skewing and
filtering * Image capture from microform:  the papers and letters of
George Washington Carver * Equipment used for a scanning system * 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Judith ZIDAR, coordinator, National Agricultural Text Digitizing Program
(NATDP), National Agricultural Library (NAL), illustrated the technical
details of NATDP, including her primary responsibility, scanning and
creating databases on a topic and putting them on CD-ROM.

(ZIDAR remarked a separate arena from the CD-ROM projects, although the
processing of the material is nearly identical, in which NATDP is also
scanning material and loading it on a Next microcomputer, which in turn
is linked to NAL's integrated library system.  Thus, searches in NAL's
bibliographic database will enable people to pull up actual page images
and text for any documents that have been entered.)

In accordance with the session's topic, ZIDAR focused her illustrated
talk on image capture, offering a primer on the three main steps in the
process:  1) assemble the printed publications; 2) design the database
(database design occurs in the process of preparing the material for
scanning; this step entails reviewing and organizing the material,
defining the contents--what will constitute a record, what kinds of
fields will be captured in terms of author, title, etc.); 3) perform a
certain amount of markup on the paper publications.  NAL performs this
task record by record, preparing work sheets or some other sort of
tracking material and designing descriptors and other enhancements to be
added to the data that will not be captured from the printed publication. 
Part of this process also involves determining NATDP's file and directory
structure:  NATDP attempts to avoid putting more than approximately 100
images in a directory, because placing more than that on a CD-ROM would
reduce the access speed.

This up-front process takes approximately two weeks for a
6,000-7,000-page database.  The next step is to capture the page images. 
How long this process takes is determined by the decision whether or not
to perform OCR.  Not performing OCR speeds the process, whereas text
capture requires greater care because of the quality of the image:  it
has to be straighter and allowance must be made for text on a page, not
just for the capture of photographs.

NATDP keys in tracking data, that is, a standard bibliographic record
including the title of the book and the title of the chapter, which will
later either become the access information or will be attached to the
front of a full-text record so that it is searchable.

Images are scanned from a bound or unbound publication, chiefly from
bound publications in the case of NATDP, however, because often they are
the only copies and the publications are returned to the shelves.  NATDP
usually scans one record at a time, because its database tracking system
tracks the document in that way and does not require further logical
separating of the images.  After performing optical character
recognition, NATDP moves the images off the hard disk and maintains a
volume sheet.  Though the system tracks electronically, all the
processing steps are also tracked manually with a log sheet.

ZIDAR next illustrated the kinds of adjustments that one can make when
scanning from paper and microfilm, for example, redoing images that need
special handling, setting for dithering or gray scale, and adjusting for
brightness or for the whole book at one time.

NATDP is scanning at 300 dots per inch, a standard scanning resolution. 
Though adequate for capturing text that is all of a standard size, 300
dpi is unsuitable for any kind of photographic material or for very small
text.  Many scanners allow for different image formats, TIFF, of course,
being a de facto standard.  But if one intends to exchange images with
other people, the ability to scan other image formats, even if they are
less common, becomes highly desirable.

CCITT Group 4 is the standard compression for normal black-and-white
images, JPEG for gray scale or color.   ZIDAR recommended 1) using the
standard compressions, particularly if one attempts to make material
available and to allow users to download images and reuse them from
CD-ROMs; and 2) maintaining the ability to output an uncompressed image,
because in image exchange uncompressed images are more likely to be able
to cross platforms.

ZIDAR emphasized the importance of de-skewing and filtering as
requirements on NATDP's upgraded system.  For instance, scanning bound
books, particularly books published by the federal government whose pages
are skewed, and trying to scan them straight if OCR is to be performed,
is extremely time-consuming.  The same holds for filtering of
poor-quality or older materials.

ZIDAR described image capture from microform, using as an example three
reels from a sixty-seven-reel set of the papers and letters of George
Washington Carver that had been produced by Tuskegee University.  These
resulted in approximately 3,500 images, which NATDP had had scanned by
its service contractor, Science Applications International Corporation
(SAIC).  NATDP also created bibliographic records for access.  (NATDP did
not have such specialized equipment as a microfilm scanner.

Unfortunately, the process of scanning from microfilm was not an
unqualified success, ZIDAR reported:  because microfilm frame sizes vary,
occasionally some frames were missed, which without spending much time
and money could not be recaptured.

OCR could not be performed from the scanned images of the frames.  The
bleeding in the text simply output text, when OCR was run, that could not
even be edited.  NATDP tested for negative versus positive images,
landscape versus portrait orientation, and single- versus dual-page
microfilm, none of which seemed to affect the quality of the image; but
also on none of them could OCR be performed.

In selecting the microfilm they would use, therefore, NATDP had other
factors in mind.  ZIDAR noted two factors that influenced the quality of
the images:  1) the inherent quality of the original and 2) the amount of
size reduction on the pages.

The Carver papers were selected because they are informative and visually
interesting, treat a single subject, and are valuable in their own right. 
The images were scanned and divided into logical records by SAIC, then
delivered, and loaded onto NATDP's system, where bibliographic
information taken directly from the images was added.  Scanning was
completed in summer 1991 and by the end of summer 1992 the disk was
scheduled to be published.

Problems encountered during processing included the following:  Because
the microfilm scanning had to be done in a batch, adjustment for
individual page variations was not possible.  The frame size varied on
account of the nature of the material, and therefore some of the frames
were missed while others were just partial frames.  The only way to go
back and capture this material was to print out the page with the
microfilm reader from the missing frame and then scan it in from the
page, which was extremely time-consuming.  The quality of the images
scanned from the printout of the microfilm compared unfavorably with that
of the original images captured directly from the microfilm.  The
inability to perform OCR also was a major disappointment.  At the time,
computer output microfilm was unavailable to test.

The equipment used for a scanning system was the last topic addressed by
ZIDAR.  The type of equipment that one would purchase for a scanning
system included:  a microcomputer, at least a 386, but preferably a 486;
a large hard disk, 380 megabyte at minimum; a multi-tasking operating
system that allows one to run some things in batch in the background
while scanning or doing text editing, for example, Unix or OS/2 and,
theoretically, Windows; a high-speed scanner and scanning software that
allows one to make the various adjustments mentioned earlier; a
high-resolution monitor (150 dpi ); OCR software and hardware to perform
text recognition; an optical disk subsystem on which to archive all the
images as the processing is done; file management and tracking software.

ZIDAR opined that the software one purchases was more important than the
hardware and might also cost more than the hardware, but it was likely to
prove critical to the success or failure of one's system.  In addition to
a stand-alone scanning workstation for image capture, then, text capture
requires one or two editing stations networked to this scanning station
to perform editing.  Editing the text takes two or three times as long as
capturing the images.

Finally, ZIDAR stressed the importance of buying an open system that allows
for more than one vendor, complies with standards, and can be upgraded.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
WATERS *Yale University Library's master plan to convert microfilm to
digital imagery (POB) * The place of electronic tools in the library of
the future * The uses of images and an image library * Primary input from
preservation microfilm * Features distinguishing POB from CXP and key
hypotheses guiding POB * Use of vendor selection process to facilitate
organizational work * Criteria for selecting vendor * Finalists and
results of process for Yale * Key factor distinguishing vendors *
Components, design principles, and some estimated costs of POB * Role of
preservation materials in developing imaging market * Factors affecting
quality and cost * Factors affecting the usability of complex documents
in image form * 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Donald WATERS, head of the Systems Office, Yale University Library,
reported on the progress of a master plan for a project at Yale to
convert microfilm to digital imagery, Project Open Book (POB).  Stating
that POB was in an advanced stage of planning, WATERS detailed, in
particular, the process of selecting a vendor partner and several key
issues under discussion as Yale prepares to move into the project itself. 
He commented first on the vision that serves as the context of POB and
then described its purpose and scope.

WATERS sees the library of the future not necessarily as an electronic
library but as a place that generates, preserves, and improves for its
clients ready access to both intellectual and physical recorded
knowledge.  Electronic tools must find a place in the library in the
context of this vision.  Several roles for electronic tools include
serving as:  indirect sources of electronic knowledge or as "finding"
aids (the on-line catalogues, the article-level indices, registers for
documents and archives); direct sources of recorded knowledge; full-text
images; and various kinds of compound sources of recorded knowledge (the
so-called compound documents of Hypertext, mixed text and image,
mixed-text image format, and multimedia).

POB is looking particularly at images and an image library, the uses to
which images will be put (e.g., storage, printing, browsing, and then use
as input for other processes), OCR as a subsequent process to image
capture, or creating an image library, and also possibly generating
microfilm.

While input will come from a variety of sources, POB is considering
especially input from preservation microfilm.  A possible outcome is that
the film and paper which provide the input for the image library
eventually may go off into remote storage, and that the image library may
be the primary access tool.

The purpose and scope of POB focus on imaging.  Though related to CXP,
POB has two features which distinguish it:  1) scale--conversion of
10,000 volumes into digital image form; and 2) source--conversion from
microfilm.  Given these features, several key working hypotheses guide
POB, including:  1) Since POB is using microfilm, it is not concerned with
the image library as a preservation medium.  2) Digital imagery can improve
access to recorded knowledge through printing and network distribution at
a modest incremental cost of microfilm.  3) Capturing and storing documents
in a digital image form is necessary to further improvements in access.
(POB distinguishes between the imaging, digitizing process and OCR,
which at this stage it does not plan to perform.)

Currently in its first or organizational phase, POB found that it could
use a vendor selection process to facilitate a good deal of the
organizational work (e.g., creating a project team and advisory board,
confirming the validity of the plan, establishing the cost of the project
and a budget, selecting the materials to convert, and then raising the
necessary funds).

POB developed numerous selection criteria, including:  a firm committed
to image-document management, the ability to serve as systems integrator
in a large-scale project over several years, interest in developing the
requisite software as a standard rather than a custom product, and a
willingness to invest substantial resources in the project itself.

Two vendors, DEC and Xerox, were selected as finalists in October 1991,
and with the support of the Commission on Preservation and Access, each
was commissioned to generate a detailed requirements analysis for the
project and then to submit a formal proposal for the completion of the
project, which included a budget and costs. The terms were that POB would
pay the loser.  The results for Yale of involving a vendor included: 
broad involvement of Yale staff across the board at a relatively low
cost, which may have long-term significance in carrying out the project
(twenty-five to thirty university people are engaged in POB); better
understanding of the factors that affect corporate response to markets
for imaging products; a competitive proposal; and a more sophisticated
view of the imaging markets.

The most important factor that distinguished the vendors under
consideration was their identification with the customer.  The size and
internal complexity of the company also was an important factor.  POB was
looking at large companies that had substantial resources.  In the end,
the process generated for Yale two competitive proposals, with Xerox's
the clear winner.  WATERS then described the components of the proposal,
the design principles, and some of the costs estimated for the process.

Components are essentially four:  a conversion subsystem, a
network-accessible storage subsystem for 10,000 books (and POB expects
200 to 600 dpi storage), browsing stations distributed on the campus
network, and network access to the image printers.

Among the design principles, POB wanted conversion at the highest
possible resolution.  Assuming TIFF files, TIFF files with Group 4
compression, TCP/IP, and ethernet network on campus, POB wanted a
client-server approach with image documents distributed to the
workstations and made accessible through native workstation interfaces
such as Windows.  POB also insisted on a phased approach to
implementation:  1) a stand-alone, single-user, low-cost entry into the
business with a workstation focused on conversion and allowing POB to
explore user access; 2) movement into a higher-volume conversion with
network-accessible storage and multiple access stations; and 3) a
high-volume conversion, full-capacity storage, and multiple browsing
stations distributed throughout the campus.

The costs proposed for start-up assumed the existence of the Yale network
and its two DocuTech image printers.  Other start-up costs are estimated
at $1 million over the three phases.  At the end of the project, the annual
operating costs estimated primarily for the software and hardware proposed
come to about $60,000, but these exclude costs for labor needed in the
conversion process, network and printer usage, and facilities management.

Finally, the selection process produced for Yale a more sophisticated
view of the imaging markets:  the management of complex documents in
image form is not a preservation problem, not a library problem, but a
general problem in a broad, general industry.  Preservation materials are
useful for developing that market because of the qualities of the
material.  For example, much of it is out of copyright.  The resolution
of key issues such as the quality of scanning and image browsing also
will affect development of that market.

The technology is readily available but changing rapidly.  In this
context of rapid change, several factors affect quality and cost, to
which POB intends to pay particular attention, for example, the various
levels of resolution that can be achieved.  POB believes it can bring
resolution up to 600 dpi, but an interpolation process from 400 to 600 is
more likely.  The variation quality in microfilm will prove to be a
highly important factor.  POB may reexamine the standards used to film in
the first place by looking at this process as a follow-on to microfilming.

Other important factors include:  the techniques available to the
operator for handling material, the ways of integrating quality control
into the digitizing work flow, and a work flow that includes indexing and
storage.  POB's requirement was to be able to deal with quality control
at the point of scanning.  Thus, thanks to Xerox, POB anticipates having
a mechanism which will allow it not only to scan in batch form, but to
review the material as it goes through the scanner and control quality
from the outset.

The standards for measuring quality and costs depend greatly on the uses
of the material, including subsequent OCR, storage, printing, and
browsing.  But especially at issue for POB is the facility for browsing. 
This facility, WATERS said, is perhaps the weakest aspect of imaging
technology and the most in need of development.

A variety of factors affect the usability of complex documents in image
form, among them:  1) the ability of the system to handle the full range
of document types, not just monographs but serials, multi-part
monographs, and manuscripts; 2) the location of the database of record
for bibliographic information about the image document, which POB wants
to enter once and in the most useful place, the on-line catalog; 3) a
document identifier for referencing the bibliographic information in one
place and the images in another; 4) the technique for making the basic
internal structure of the document accessible to the reader; and finally,
5) the physical presentation on the CRT of those documents.  POB is ready
to complete this phase now.  One last decision involves deciding which
material to scan.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * TIFF files constitute de facto standard * NARA's experience
with image conversion software and text conversion * RFC 1314 *
Considerable flux concerning available hardware and software solutions *
NAL through-put rate during scanning * Window management questions *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

In the question-and-answer period that followed WATERS's presentation,
the following points emerged:

     * ZIDAR's statement about using TIFF files as a standard meant de
     facto standard.  This is what most people use and typically exchange
     with other groups, across platforms, or even occasionally across
     display software.

     * HOLMES commented on the unsuccessful experience of NARA in
     attempting to run image-conversion software or to exchange between
     applications:  What are supposedly TIFF files go into other software
     that is supposed to be able to accept TIFF but cannot recognize the
     format and cannot deal with it, and thus renders the exchange
     useless.  Re text conversion, he noted the different recognition
     rates obtained by substituting the make and model of scanners in
     NARA's recent test of an "intelligent" character-recognition product
     for a new company.  In the selection of hardware and software,
     HOLMES argued, software no longer constitutes the overriding factor
     it did until about a year ago; rather it is perhaps important to
     look at both now.

     * Danny Cohen and Alan Katz of the University of Southern California
     Information Sciences Institute began circulating as an Internet RFC
     (RFC 1314) about a month ago a standard for a TIFF interchange
     format for Internet distribution of monochrome bit-mapped images,
     which LYNCH said he believed would be used as a de facto standard.

     * FLEISCHHAUER's impression from hearing these reports and thinking
     about AM's experience was that there is considerable flux concerning
     available hardware and software solutions.  HOOTON agreed and
     commented at the same time on ZIDAR's statement that the equipment
     employed affects the results produced.  One cannot draw a complete
     conclusion by saying it is difficult or impossible to perform OCR
     from scanning microfilm, for example, with that device,  that set of
     parameters, and system requirements, because numerous other people
     are accomplishing just that, using other components, perhaps. 
     HOOTON opined that both the hardware and the software were highly
     important.  Most of the problems discussed today have been solved in
     numerous different ways by other people.  Though it is good to be
     cognizant of various experiences, this is not to say that it will
     always be thus.

     * At NAL, the through-put rate of the scanning process for paper,
     page by page, performing OCR, ranges from 300 to 600 pages per day;
     not performing OCR is considerably faster, although how much faster
     is not known.  This is for scanning from bound books, which is much
     slower.

     * WATERS commented on window management questions:  DEC proposed an
     X-Windows solution which was problematical for two reasons.  One was
     POB's requirement to be able to manipulate images on the workstation
     and bring them down to the workstation itself and the other was
     network usage.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
THOMA * Illustration of deficiencies in scanning and storage process *
Image quality in this process * Different costs entailed by better image
quality * Techniques for overcoming various de-ficiencies:  fixed
thresholding, dynamic thresholding, dithering, image merge * Page edge
effects *   
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

George THOMA, chief, Communications Engineering Branch, National Library
of Medicine (NLM), illustrated several of the deficiencies discussed by
the previous speakers.  He introduced the topic of special problems by
noting the advantages of electronic imaging.  For example, it is regenerable
because it is a coded file, and real-time quality control is possible with
electronic capture, whereas in photographic capture it is not.

One of the difficulties discussed in the scanning and storage process was
image quality which, without belaboring the obvious, means different
things for maps, medical X-rays, or broadcast television.  In the case of
documents, THOMA said, image quality boils down to legibility of the
textual parts, and fidelity in the case of gray or color photo print-type
material.  Legibility boils down to scan density, the standard in most
cases being 300 dpi.  Increasing the resolution with scanners that
perform 600 or 1200 dpi, however, comes at a cost.

Better image quality entails at least four different kinds of costs:  1)
equipment costs, because the CCD (i.e., charge-couple device) with
greater number of elements costs more;  2) time costs that translate to
the actual capture costs, because manual labor is involved (the time is
also dependent on the fact that more data has to be moved around in the
machine in the scanning or network devices that perform the scanning as
well as the storage);  3) media costs, because at high resolutions larger
files have to be stored; and 4) transmission costs, because there is just
more data to be transmitted.

But while resolution takes care of the issue of legibility in image
quality, other deficiencies have to do with contrast and elements on the
page scanned or the image that needed to be removed or clarified.  Thus,
THOMA proceeded to illustrate various deficiencies, how they are
manifested, and several techniques to overcome them.

Fixed thresholding was the first technique described, suitable for
black-and-white text, when the contrast does not vary over the page.  One
can have many different threshold levels in scanning devices.  Thus,
THOMA offered an example of extremely poor contrast, which resulted from
the fact that the stock was a heavy red.  This is the sort of image that
when microfilmed fails to provide any legibility whatsoever.  Fixed
thresholding is the way to change the black-to-red contrast to the
desired black-to-white contrast.

Other examples included material that had been browned or yellowed by
age.  This was also a case of contrast deficiency, and correction was
done by fixed thresholding.  A final example boils down to the same
thing, slight variability, but it is not significant.  Fixed thresholding
solves this problem as well.  The microfilm equivalent is certainly legible,
but it comes with dark areas.  Though THOMA did not have a slide of the
microfilm in this case, he did show the reproduced electronic image.

When one has variable contrast over a page or the lighting over the page
area varies, especially in the case where a bound volume has light
shining on it, the image must be processed by a dynamic thresholding
scheme.  One scheme, dynamic averaging, allows the threshold level not to
be fixed but to be recomputed for every pixel from the neighboring
characteristics.  The neighbors of a pixel determine where the threshold
should be set for that pixel.

THOMA showed an example of a page that had been made deficient by a
variety of techniques, including a burn mark, coffee stains, and a yellow
marker.  Application of a fixed-thresholding scheme, THOMA argued, might
take care of several deficiencies on the page but not all of them. 
Performing the calculation for a dynamic threshold setting, however,
removes most of the deficiencies so that at least the text is legible.

Another problem is representing a gray level with black-and-white pixels
by a process known as dithering or electronic screening.  But dithering
does not provide good image quality for pure black-and-white textual
material.  THOMA illustrated this point with examples. Although its
suitability for photoprint is the reason for electronic screening or
dithering, it cannot be used for every compound image.  In the document
that was distributed by CXP, THOMA noticed that the dithered image of the
IEEE test chart evinced some deterioration in the text.  He presented an
extreme example of deterioration in the text in which compounded
documents had to be set right by other techniques.  The technique
illustrated by the present example was an image merge in which the page
is scanned twice and the settings go from fixed threshold to the
dithering matrix; the resulting images are merged to give the best
results with each technique.

THOMA illustrated how dithering is also used in nonphotographic or
nonprint materials with an example of a grayish page from a medical text,
which was reproduced to show all of the gray that appeared in the
original.  Dithering provided a reproduction of all the gray in the
original of another example from the same text.

THOMA finally illustrated the problem of bordering, or page-edge,
effects.  Books and bound volumes that are placed on a photocopy machine
or a scanner produce page-edge effects that are undesirable for two
reasons:  1) the aesthetics of the image; after all, if the image is to
be preserved, one does not necessarily want to keep all of its
deficiencies; 2) compression (with the bordering problem THOMA
illustrated, the compression ratio deteriorated tremendously).  One way
to eliminate this more serious problem is to have the operator at the
point of scanning window the part of the image that is desirable and
automatically turn all of the pixels out of that picture to white. 

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
FLEISCHHAUER * AM's experience with scanning bound materials * Dithering
*
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Carl FLEISCHHAUER, coordinator, American Memory, Library of Congress,
reported AM's experience with scanning bound materials, which he likened
to the problems involved in using photocopying machines.  Very few
devices in the industry offer book-edge scanning, let alone book cradles. 
The problem may be unsolvable, FLEISCHHAUER said, because a large enough
market does not exist for a preservation-quality scanner.  AM is using a
Kurzweil scanner, which is a book-edge scanner now sold by Xerox.

Devoting the remainder of his brief presentation to dithering,
FLEISCHHAUER related AM's experience with a contractor who was using
unsophisticated equipment and software to reduce moire patterns from
printed halftones.  AM took the same image and used the dithering
algorithm that forms part of the same Kurzweil Xerox scanner; it
disguised moire patterns much more effectively.

FLEISCHHAUER also observed that dithering produces a binary file which is
useful for numerous purposes, for example, printing it on a laser printer
without having to "re-halftone" it.  But it tends to defeat efficient
compression, because the very thing that dithers to reduce moire patterns
also tends to work against compression schemes.  AM thought the
difference in image quality was worth it.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Relative use as a criterion for POB's selection of books to
be converted into digital form *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the discussion period, WATERS noted that one of the criteria for
selecting books among the 10,000 to be converted into digital image form
would be how much relative use they would receive--a subject still
requiring evaluation.  The challenge will be to understand whether
coherent bodies of material will increase usage or whether POB should
seek material that is being used, scan that, and make it more accessible. 
POB might decide to digitize materials that are already heavily used, in
order to make them more accessible and decrease wear on them.  Another
approach would be to provide a large body of intellectually coherent
material that may be used more in digital form than it is currently used
in microfilm.  POB would seek material that was out of copyright.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BARONAS * Origin and scope of AIIM * Types of documents produced in
AIIM's standards program * Domain of AIIM's standardization work * AIIM's
structure * TC 171 and MS23 * Electronic image management standards *
Categories of EIM standardization where AIIM standards are being
developed *  
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Jean BARONAS, senior manager, Department of Standards and Technology,
Association for Information and Image Management (AIIM), described the
not-for-profit association and the national and international programs
for standardization in which AIIM is active.

Accredited for twenty-five years as the nation's standards development
organization for document image management, AIIM began life in a library
community developing microfilm standards.  Today the association
maintains both its library and business-image management standardization
activities--and has moved into electronic image-management
standardization (EIM).

BARONAS defined the program's scope.  AIIM deals with:  1) the
terminology of standards and of the technology it uses; 2) methods of
measurement for the systems, as well as quality; 3) methodologies for
users to evaluate and measure quality; 4) the features of apparatus used
to manage and edit images; and 5) the procedures used to manage images.

BARONAS noted that three types of documents are produced in the AIIM
standards program:  the first two, accredited by the American National
Standards Institute (ANSI), are standards and standard recommended
practices.  Recommended practices differ from standards in that they
contain more tutorial information.  A technical report is not an ANSI
standard.  Because AIIM's policies and procedures for developing
standards are approved by ANSI, its standards are labeled ANSI/AIIM,
followed by the number and title of the standard.

BARONAS then illustrated the domain of AIIM's standardization work.  For
example, AIIM is the administrator of the U.S. Technical Advisory Group
(TAG) to the International Standards Organization's (ISO) technical
committee, TC l7l Micrographics and Optical Memories for Document and
Image Recording, Storage, and Use.  AIIM officially works through ANSI in
the international standardization process.

BARONAS described AIIM's structure, including its board of directors, its
standards board of twelve individuals active in the image-management
industry, its strategic planning and legal admissibility task forces, and
its National Standards Council, which is comprised of the members of a
number of organizations who vote on every AIIM standard before it is
published.  BARONAS pointed out that AIIM's liaisons deal with numerous
other standards developers, including the optical disk community, office
and publishing systems, image-codes-and-character set committees, and the
National Information Standards Organization (NISO).

BARONAS illustrated the procedures of TC l7l, which covers all aspects of
image management.  When AIIM's national program has conceptualized a new
project, it is usually submitted to the international level, so that the
member countries of TC l7l can simultaneously work on the development of
the standard or the technical report.  BARONAS also illustrated a classic
microfilm standard, MS23, which deals with numerous imaging concepts that
apply to electronic imaging.  Originally developed in the l970s, revised
in the l980s, and revised again in l991, this standard is scheduled for
another revision.  MS23 is an active standard whereby users may propose
new density ranges and new methods of evaluating film images in the
standard's revision.

BARONAS detailed several electronic image-management standards, for
instance, ANSI/AIIM MS44, a quality-control guideline for scanning 8.5"
by 11" black-and-white office documents.  This standard is used with the
IEEE fax image--a continuous tone photographic image with gray scales,
text, and several continuous tone pictures--and AIIM test target number
2, a representative document used in office document management.

BARONAS next outlined the four categories of EIM standardization in which
AIIM standards are being developed:  transfer and retrieval, evaluation,
optical disc and document scanning applications, and design and
conversion of documents.  She detailed several of the main projects of
each:  1) in the category of image transfer and retrieval, a bi-level
image transfer format, ANSI/AIIM MS53, which is a proposed standard that
describes a file header for image transfer between unlike systems when
the images are compressed using G3 and G4 compression; 2) the category of
image evaluation, which includes the AIIM-proposed TR26 tutorial on image
resolution (this technical report will treat the differences and
similarities between classical or photographic and electronic imaging);
3) design and conversion, which includes a proposed technical report
called "Forms Design Optimization for EIM" (this report considers how
general-purpose business forms can be best designed so that scanning is
optimized; reprographic characteristics such as type, rules, background,
tint, and color will likewise be treated in the technical report); 4)
disk and document scanning applications includes a project a) on planning
platters and disk management, b) on generating an application profile for
EIM when images are stored and distributed on CD-ROM, and c) on
evaluating SCSI2, and how a common command set can be generated for SCSI2
so that document scanners are more easily integrated.  (ANSI/AIIM MS53
will also apply to compressed images.)

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
BATTIN * The implications of standards for preservation * A major
obstacle to successful cooperation * A hindrance to access in the digital
environment * Standards a double-edged sword for those concerned with the
preservation of the human record * Near-term prognosis for reliable
archival standards * Preservation concerns for electronic media * Need
for reconceptualizing our preservation principles * Standards in the real
world and the politics of reproduction * Need to redefine the concept of
archival and to begin to think in terms of life cycles * Cooperation and
the La Guardia Eight * Concerns generated by discussions on the problems
of preserving text and image * General principles to be adopted in a
world without standards *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Patricia BATTIN, president, the Commission on Preservation and Access
(CPA), addressed the implications of standards for preservation.  She
listed several areas where the library profession and the analog world of
the printed book had made enormous contributions over the past hundred
years--for example, in bibliographic formats, binding standards, and, most
important, in determining what constitutes longevity or archival quality.

Although standards have lightened the preservation burden through the
development of national and international collaborative programs,
nevertheless, a pervasive mistrust of other people's standards remains a
major obstacle to successful cooperation, BATTIN said.

The zeal to achieve perfection, regardless of the cost, has hindered
rather than facilitated access in some instances, and in the digital
environment, where no real standards exist, has brought an ironically
just reward.

BATTIN argued that standards are a double-edged sword for those concerned
with the preservation of the human record, that is, the provision of
access to recorded knowledge in a multitude of media as far into the
future as possible.  Standards are essential to facilitate
interconnectivity and access, but, BATTIN said, as LYNCH pointed out
yesterday, if set too soon they can hinder creativity, expansion of
capability, and the broadening of access.  The characteristics of
standards for digital imagery differ radically from those for analog
imagery.  And the nature of digital technology implies continuing
volatility and change.  To reiterate, precipitous standard-setting can
inhibit creativity, but delayed standard-setting results in chaos.

Since in BATTIN'S opinion the near-term prognosis for reliable archival
standards, as defined by librarians in the analog world, is poor, two
alternatives remain:  standing pat with the old technology, or
reconceptualizing.

Preservation concerns for electronic media fall into two general domains. 
One is the continuing assurance of access to knowledge originally
generated, stored, disseminated, and used in electronic form.  This
domain contains several subdivisions, including 1) the closed,
proprietary systems discussed the previous day, bundled information such
as electronic journals and government agency records, and electronically
produced or captured raw data; and 2) the application of digital
technologies to the reformatting of materials originally published on a
deteriorating analog medium such as acid paper or videotape.

The preservation of electronic media requires a reconceptualizing of our
preservation principles during a volatile, standardless transition which
may last far longer than any of us envision today.  BATTIN urged the
necessity of shifting focus from assessing, measuring, and setting
standards for the permanence of the medium to the concept of managing
continuing access to information stored on a variety of media and
requiring a variety of ever-changing hardware and software for access--a
fundamental shift for the library profession.

BATTIN offered a primer on how to move forward with reasonable confidence
in a world without standards.  Her comments fell roughly into two sections:
1) standards in the real world and 2) the politics of reproduction.

In regard to real-world standards, BATTIN argued the need to redefine the
concept of archive and to begin to think in terms of life cycles.  In
the past, the naive assumption that paper would last forever produced a
cavalier attitude toward life cycles.  The transient nature of the
electronic media has compelled people to recognize and accept upfront the
concept of life cycles in place of permanency.

Digital standards have to be developed and set in a cooperative context
to ensure efficient exchange of information.  Moreover, during this
transition period, greater flexibility concerning how concepts such as
backup copies and archival copies in the CXP are defined is necessary,
or the opportunity to move forward will be lost.

In terms of cooperation, particularly in the university setting, BATTIN
also argued the need to avoid going off in a hundred different
directions.  The CPA has catalyzed a small group of universities called
the La Guardia Eight--because La Guardia Airport is where meetings take
place--Harvard, Yale, Cornell, Princeton, Penn State, Tennessee,
Stanford, and USC, to develop a digital preservation consortium to look
at all these issues and develop de facto standards as we move along,
instead of waiting for something that is officially blessed.  Continuing
to apply analog values and definitions of standards to the digital
environment, BATTIN said, will effectively lead to forfeiture of the
benefits of digital technology to research and scholarship.

Under the second rubric, the politics of reproduction, BATTIN reiterated
an oft-made argument concerning the electronic library, namely, that it
is more difficult to transform than to create, and nowhere is that belief
expressed more dramatically than in the conversion of brittle books to
new media.  Preserving information published in electronic media involves
making sure the information remains accessible and that digital
information is not lost through reproduction.  In the analog world of
photocopies and microfilm, the issue of fidelity to the original becomes
paramount, as do issues of "Whose fidelity?" and "Whose original?"

BATTIN elaborated these arguments with a few examples from a recent study
conducted by the CPA on the problems of preserving text and image. 
Discussions with scholars, librarians, and curators in a variety of
disciplines dependent on text and image generated a variety of concerns,
for example:  1) Copy what is, not what the technology is capable of. 
This is very important for the history of ideas.  Scholars wish to know
what the author saw and worked from.  And make available at the
workstation the opportunity to erase all the defects and enhance the
presentation.  2) The fidelity of reproduction--what is good enough, what
can we afford, and the difference it makes--issues of subjective versus
objective resolution.  3) The differences between primary and secondary
users.  Restricting the definition of primary user to the one in whose
discipline the material has been published runs one headlong into the
reality that these printed books have had a host of other users from a
host of other disciplines, who not only were looking for very different
things, but who also shared values very different from those of the
primary user.  4) The relationship of the standard of reproduction to new
capabilities of scholarship--the browsing standard versus an archival
standard.  How good must the archival standard be?  Can a distinction be
drawn between potential users in setting standards for reproduction? 
Archival storage, use copies, browsing copies--ought an attempt to set
standards even be made?  5) Finally, costs.  How much are we prepared to
pay to capture absolute fidelity?  What are the trade-offs between vastly
enhanced access, degrees of fidelity, and costs?

These standards, BATTIN concluded, serve to complicate further the
reproduction process, and add to the long list of technical standards
that are necessary to ensure widespread access.  Ways to articulate and
analyze the costs that are attached to the different levels of standards
must be found.

Given the chaos concerning standards, which promises to linger for the
foreseeable future, BATTIN urged adoption of the following general
principles:

     * Strive to understand the changing information requirements of
     scholarly disciplines as more and more technology is integrated into
     the process of research and scholarly communication in order to meet
     future scholarly needs, not to build for the past.  Capture
     deteriorating information at the highest affordable resolution, even
     though the dissemination and display technologies will lag.

     * Develop cooperative mechanisms to foster agreement on protocols
     for document structure and other interchange mechanisms necessary
     for widespread dissemination and use before official standards are
     set.

     * Accept that, in a transition period, de facto standards will have
     to be developed.

     * Capture information in a way that keeps all options open and
     provides for total convertibility:  OCR, scanning of microfilm,
     producing microfilm from scanned documents, etc.

     * Work closely with the generators of information and the builders
     of networks and databases to ensure that continuing accessibility is
     a primary concern from the beginning.

     * Piggyback on standards under development for the broad market, and
     avoid library-specific standards; work with the vendors, in order to
     take advantage of that which is being standardized for the rest of
     the world.

     * Concentrate efforts on managing permanence in the digital world,
     rather than perfecting the longevity of a particular medium.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Additional comments on TIFF *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the brief discussion period that followed BATTIN's presentation,
BARONAS explained that TIFF was not developed in collaboration with or
under the auspices of AIIM.  TIFF is a company product, not a standard,
is owned by two corporations, and is always changing.  BARONAS also
observed that ANSI/AIIM MS53, a bi-level image file transfer format that
allows unlike systems to exchange images, is compatible with TIFF as well
as with DEC's architecture and IBM's MODCA/IOCA.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
HOOTON * Several questions to be considered in discussing text conversion
*
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

HOOTON introduced the final topic, text conversion, by noting that it is
becoming an increasingly important part of the imaging business.  Many
people now realize that it enhances their system to be able to have more
and more character data as part of their imaging system.  Re the issue of
OCR versus rekeying, HOOTON posed several questions:  How does one get
text into computer-readable form?  Does one use automated processes? 
Does one attempt to eliminate the use of operators where possible? 
Standards for accuracy, he said, are extremely important:  it makes a
major difference in cost and time whether one sets as a standard 98.5
percent acceptance or 99.5 percent.  He mentioned outsourcing as a
possibility for converting text.  Finally, what one does with the image
to prepare it for the recognition process is also important, he said,
because such preparation changes how recognition is viewed, as well as
facilitates recognition itself.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LESK * Roles of participants in CORE * Data flow * The scanning process *
The image interface * Results of experiments involving the use of
electronic resources and traditional paper copies * Testing the issue of
serendipity * Conclusions *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Michael LESK, executive director, Computer Science Research, Bell
Communications Research, Inc. (Bellcore), discussed the Chemical Online
Retrieval Experiment (CORE), a cooperative project involving Cornell
University, OCLC, Bellcore, and the American Chemical Society (ACS).

LESK spoke on 1) how the scanning was performed, including the unusual
feature of page segmentation, and 2) the use made of the text and the
image in experiments.

Working with the chemistry journals (because ACS has been saving its
typesetting tapes since the mid-1970s and thus has a significant back-run
of the most important chemistry journals in the United States), CORE is
attempting to create an automated chemical library.  Approximately a
quarter of the pages by square inch are made up of images of
quasi-pictorial material; dealing with the graphic components of the
pages is extremely important.  LESK described the roles of participants
in CORE:  1) ACS provides copyright permission, journals on paper,
journals on microfilm, and some of the definitions of the files; 2) at
Bellcore, LESK chiefly performs the data preparation, while Dennis Egan
performs experiments on the users of chemical abstracts, and supplies the
indexing and numerous magnetic tapes;  3) Cornell provides the site of the
experiment; 4) OCLC develops retrieval software and other user interfaces.
Various manufacturers and publishers have furnished other help.

Concerning data flow, Bellcore receives microfilm and paper from ACS; the
microfilm is scanned by outside vendors, while the paper is scanned
inhouse on an Improvision scanner, twenty pages per minute at 300 dpi,
which provides sufficient quality for all practical uses.  LESK would
prefer to have more gray level, because one of the ACS journals prints on
some colored pages, which creates a problem.

Bellcore performs all this scanning, creates a page-image file, and also
selects from the pages the graphics, to mix with the text file (which is
discussed later in the Workshop).  The user is always searching the ASCII
file, but she or he may see a display based on the ASCII or a display
based on the images.

LESK illustrated how the program performs page analysis, and the image
interface.  (The user types several words, is presented with a list--
usually of the titles of articles contained in an issue--that derives
from the ASCII, clicks on an icon and receives an image that mirrors an
ACS page.)  LESK also illustrated an alternative interface, based on text
on the ASCII, the so-called SuperBook interface from Bellcore.

LESK next presented the results of an experiment conducted by Dennis Egan
and involving thirty-six students at Cornell, one third of them
undergraduate chemistry majors, one third senior undergraduate chemistry
majors, and one third graduate chemistry students.  A third of them
received the paper journals, the traditional paper copies and chemical
abstracts on paper.  A third received image displays of the pictures of
the pages, and a third received the text display with pop-up graphics.

The students were given several questions made up by some chemistry
professors.  The questions fell into five classes, ranging from very easy
to very difficult, and included questions designed to simulate browsing
as well as a traditional information retrieval-type task.

LESK furnished the following results.  In the straightforward question
search--the question being, what is the phosphorus oxygen bond distance
and hydroxy phosphate?--the students were told that they could take
fifteen minutes and, then, if they wished, give up.  The students with
paper took more than fifteen minutes on average, and yet most of them
gave up.  The students with either electronic format, text or image,
received good scores in reasonable time, hardly ever had to give up, and
usually found the right answer.

In the browsing study, the students were given a list of eight topics,
told to imagine that an issue of the Journal of the American Chemical
Society had just appeared on their desks, and were also told to flip
through it and to find topics mentioned in the issue.  The average scores
were about the same.  (The students were told to answer yes or no about
whether or not particular topics appeared.)  The errors, however, were
quite different.  The students with paper rarely said that something
appeared when it had not.  But they often failed to find something
actually mentioned in the issue.  The computer people found numerous
things, but they also frequently said that a topic was mentioned when it
was not.  (The reason, of course, was that they were performing word
searches.  They were finding that words were mentioned and they were
concluding that they had accomplished their task.)

This question also contained a trick to test the issue of serendipity. 
The students were given another list of eight topics and instructed,
without taking a second look at the journal, to recall how many of this
new list of eight topics were in this particular issue.  This was an
attempt to see if they performed better at remembering what they were not
looking for.  They all performed about the same, paper or electronics,
about 62 percent accurate.  In short, LESK said, people were not very
good when it came to serendipity, but they were no worse at it with
computers than they were with paper.

(LESK gave a parenthetical illustration of the learning curve of students
who used SuperBook.)

The students using the electronic systems started off worse than the ones
using print, but by the third of the three sessions in the series had
caught up to print.  As one might expect, electronics provide a much
better means of finding what one wants to read; reading speeds, once the
object of the search has been found, are about the same.

Almost none of the students could perform the hard task--the analogous
transformation.  (It would require the expertise of organic chemists to
complete.)  But an interesting result was that the students using the text
search performed terribly, while those using the image system did best.
That the text search system is driven by text offers the explanation.
Everything is focused on the text; to see the pictures, one must press
on an icon.  Many students found the right article containing the answer
to the question, but they did not click on the icon to bring up the right
figure and see it.  They did not know that they had found the right place,
and thus got it wrong.

The short answer demonstrated by this experiment was that in the event
one does not know what to read, one needs the electronic systems; the
electronic systems hold no advantage at the moment if one knows what to
read, but neither do they impose a penalty.

LESK concluded by commenting that, on one hand, the image system was easy
to use.  On the other hand, the text display system, which represented
twenty man-years of work in programming and polishing, was not winning,
because the text was not being read, just searched.  The much easier
system is highly competitive as well as remarkably effective for the
actual chemists.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ERWAY * Most challenging aspect of working on AM * Assumptions guiding
AM's approach * Testing different types of service bureaus * AM's
requirement for 99.95 percent accuracy * Requirements for text-coding *
Additional factors influencing AM's approach to coding * Results of AM's
experience with rekeying * Other problems in dealing with service bureaus
* Quality control the most time-consuming aspect of contracting out
conversion * Long-term outlook uncertain *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

To Ricky ERWAY, associate coordinator, American Memory, Library of
Congress, the constant variety of conversion projects taking place
simultaneously represented perhaps the most challenging aspect of working
on AM.  Thus, the challenge was not to find a solution for text
conversion but a tool kit of solutions to apply to LC's varied
collections that need to be converted.  ERWAY limited her remarks to the
process of converting text to machine-readable form, and the variety of
LC's text collections, for example, bound volumes, microfilm, and
handwritten manuscripts.

Two assumptions have guided AM's approach, ERWAY said:  1) A desire not
to perform the conversion inhouse.  Because of the variety of formats and
types of texts, to capitalize the equipment and have the talents and
skills to operate them at LC would be extremely expensive.  Further, the
natural inclination to upgrade to newer and better equipment each year
made it reasonable for AM to focus on what it did best and seek external
conversion services.  Using service bureaus also allowed AM to have
several types of operations take place at the same time.  2) AM was not a
technology project, but an effort to improve access to library
collections.  Hence, whether text was converted using OCR or rekeying
mattered little to AM.  What mattered were cost and accuracy of results.

AM considered different types of service bureaus and selected three to
perform several small tests in order to acquire a sense of the field. 
The sample collections with which they worked included handwritten
correspondence, typewritten manuscripts from the 1940s, and
eighteenth-century printed broadsides on microfilm.  On none of these
samples was OCR performed; they were all rekeyed.  AM had several special
requirements for the three service bureaus it had engaged.  For instance,
any errors in the original text were to be retained.  Working from bound
volumes or anything that could not be sheet-fed also constituted a factor
eliminating companies that would have performed OCR.

AM requires 99.95 percent accuracy, which, though it sounds high, often
means one or two errors per page.  The initial batch of test samples
contained several handwritten materials for which AM did not require
text-coding.  The results, ERWAY reported, were in all cases fairly
comparable:  for the most part, all three service bureaus achieved 99.95
percent accuracy.  AM was satisfied with the work but surprised at the cost.

As AM began converting whole collections, it retained the requirement for
99.95 percent accuracy and added requirements for text-coding.  AM needed
to begin performing work more than three years ago before LC requirements
for SGML applications had been established.  Since AM's goal was simply
to retain any of the intellectual content represented by the formatting
of the document (which would be lost if one performed a straight ASCII
conversion), AM used "SGML-like" codes.  These codes resembled SGML tags
but were used without the benefit of document-type definitions.  AM found
that many service bureaus were not yet SGML-proficient.

Additional factors influencing the approach AM took with respect to
coding included:  1) the inability of any known microcomputer-based
user-retrieval software to take advantage of SGML coding; and 2) the
multiple inconsistencies in format of the older documents, which
confirmed AM in its desire not to attempt to force the different formats
to conform to a single document-type definition (DTD) and thus create the
need for a separate DTD for each document. 

The five text collections that AM has converted or is in the process of
converting include a collection of eighteenth-century broadsides, a
collection of pamphlets, two typescript document collections, and a
collection of 150 books.

ERWAY next reviewed the results of AM's experience with rekeying, noting
again that because the bulk of AM's materials are historical, the quality
of the text often does not lend itself to OCR.  While non-English
speakers are less likely to guess or elaborate or correct typos in the
original text, they are also less able to infer what we would; they also
are nearly incapable of converting handwritten text.  Another
disadvantage of working with overseas keyers is that they are much less
likely to telephone with questions, especially on the coding, with the
result that they develop their own rules as they encounter new
situations.

Government contracting procedures and time frames posed a major challenge
to performing the conversion.  Many service bureaus are not accustomed to
retaining the image, even if they perform OCR.  Thus, questions of image
format and storage media were somewhat novel to many of them.  ERWAY also
remarked other problems in dealing with service bureaus, for example,
their inability to perform text conversion from the kind of microfilm
that LC uses for preservation purposes.

But quality control, in ERWAY's experience, was the most time-consuming
aspect of contracting out conversion.  AM has been attempting to perform
a 10-percent quality review, looking at either every tenth document or
every tenth page to make certain that the service bureaus are maintaining
99.95 percent accuracy.  But even if they are complying with the
requirement for accuracy, finding errors produces a desire to correct
them and, in turn, to clean up the whole collection, which defeats the
purpose to some extent.  Even a double entry requires a
character-by-character comparison to the original to meet the accuracy
requirement.  LC is not accustomed to publish imperfect texts, which
makes attempting to deal with the industry standard an emotionally
fraught issue for AM.  As was mentioned in the previous day's discussion,
going from 99.95 to 99.99 percent accuracy usually doubles costs and
means a third keying or another complete run-through of the text.

Although AM has learned much from its experiences with various collections
and various service bureaus, ERWAY concluded pessimistically that no
breakthrough has been achieved.   Incremental improvements have occurred
in some of the OCR technology, some of the processes, and some of the
standards acceptances, which, though they may lead to somewhat lower costs,
do not offer much encouragement to many people who are anxiously awaiting
the day that the entire contents of LC are available on-line.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ZIDAR * Several answers to why one attempts to perform full-text
conversion * Per page cost of performing OCR * Typical problems
encountered during editing * Editing poor copy OCR vs. rekeying *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Judith ZIDAR, coordinator, National Agricultural Text Digitizing Program
(NATDP), National Agricultural Library (NAL), offered several answers to
the question of why one attempts to perform full-text conversion:  1)
Text in an image can be read by a human but not by a computer, so of
course it is not searchable and there is not much one can do with it.  2)
Some material simply requires word-level access.  For instance, the legal
profession insists on full-text access to its material; with taxonomic or
geographic material, which entails numerous names, one virtually requires
word-level access.  3) Full text permits rapid browsing and searching,
something that cannot be achieved in an image with today's technology. 
4) Text stored as ASCII and delivered in ASCII is standardized and highly
portable.  5) People just want full-text searching, even those who do not
know how to do it.  NAL, for the most part, is performing OCR at an
actual cost per average-size page of approximately $7.  NAL scans the
page to create the electronic image and passes it through the OCR device.

ZIDAR next rehearsed several typical problems encountered during editing. 
Praising the celerity of her student workers, ZIDAR observed that editing
requires approximately five to ten minutes per page, assuming that there
are no large tables to audit.  Confusion among the three characters I, 1, 
and l, constitutes perhaps the most common problem encountered.  Zeroes
and  O's also are  frequently confused.  Double M's create a particular
problem, even on clean pages.  They are so wide in most fonts that they
touch, and the system simply cannot tell where one letter ends and the
other begins.  Complex page formats occasionally fail to columnate
properly, which entails rescanning as though one were working with a
single column, entering the ASCII, and decolumnating for better
searching.  With proportionally spaced text, OCR can have difficulty
discerning what is a space and what are merely spaces between letters, as
opposed to spaces between words, and therefore will merge text or break
up words where it should not.

ZIDAR said that it can often take longer to edit a poor-copy OCR than to
key it from scratch.  NAL has also experimented with partial editing of
text, whereby project workers go into and clean up the format, removing
stray characters but not running a spell-check.  NAL corrects typos in
the title and authors' names, which provides a foothold for searching and
browsing.  Even extremely poor-quality OCR (e.g., 60-percent accuracy)
can still be searched, because numerous words are correct, while the
important words are probably repeated often enough that they are likely
to be found correct somewhere.  Librarians, however, cannot tolerate this
situation, though end users seem more willing to use this text for
searching, provided that NAL indicates that it is unedited.  ZIDAR
concluded that rekeying of text may be the best route to take, in spite
of numerous problems with quality control and cost.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Modifying an image before performing OCR * NAL's costs per
page *AM's costs per page and experience with Federal Prison Industries *
Elements comprising NATDP's costs per page * OCR and structured markup *
Distinction between the structure of a document and its representation
when put on the screen or printed *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

HOOTON prefaced the lengthy discussion that followed with several
comments about modifying an image before one reaches the point of
performing OCR.  For example, in regard to an application containing a
significant amount of redundant data, such as form-type data, numerous
companies today are working on various kinds of form renewal, prior to
going through a recognition process, by using dropout colors.  Thus,
acquiring access to form design or using electronic means are worth
considering.  HOOTON also noted that conversion usually makes or breaks
one's imaging system.  It is extremely important, extremely costly in
terms of either capital investment or service, and determines the quality
of the remainder of one's system, because it determines the character of
the raw material used by the system.

Concerning the four projects undertaken by NAL, two inside and two
performed by outside contractors, ZIDAR revealed that an in-house service
bureau executed the first at a cost between $8 and $10 per page for
everything, including building of the database.  The project undertaken
by the Consultative Group on International Agricultural Research (CGIAR)
cost approximately $10 per page for the conversion, plus some expenses
for the software and building of the database.  The Acid Rain Project--a
two-disk set produced by the University of Vermont, consisting of
Canadian publications on acid rain--cost $6.70 per page for everything,
including keying of the text, which was double keyed, scanning of the
images, and building of the database.  The in-house project offered
considerable ease of convenience and greater control of the process.  On
the other hand, the service bureaus know their job and perform it
expeditiously, because they have more people.

As a useful comparison, ERWAY revealed AM's costs as follows:  $0.75
cents to $0.85 cents per thousand characters, with an average page
containing 2,700 characters.  Requirements for coding and imaging
increase the costs.  Thus, conversion of the text, including the coding,
costs approximately $3 per page.  (This figure does not include the
imaging and database-building included in the NAL costs.)  AM also
enjoyed a happy experience with Federal Prison Industries, which
precluded the necessity of going through the request-for-proposal process
to award a contract, because it is another government agency.  The
prisoners performed AM's rekeying just as well as other service bureaus
and proved handy as well.  AM shipped them the books, which they would
photocopy on a book-edge scanner.  They would perform the markup on
photocopies, return the books as soon as they were done with them,
perform the keying, and return the material to AM on WORM disks.

ZIDAR detailed the elements that constitute the previously noted cost of
approximately $7 per page.  Most significant is the editing, correction
of errors, and spell-checkings, which though they may sound easy to
perform require, in fact, a great deal of time.  Reformatting text also
takes a while, but a significant amount of NAL's expenses are for equipment,
which was extremely expensive when purchased because it was one of the few
systems on the market.  The costs of equipment are being amortized over
five years but are still quite high, nearly $2,000 per month.

HOCKEY raised a general question concerning OCR and the amount of editing
required (substantial in her experience) to generate the kind of
structured markup necessary for manipulating the text on the computer or
loading it into any retrieval system.  She wondered if the speakers could
extend the previous question about the cost-benefit of adding or exerting
structured markup.  ERWAY noted that several OCR systems retain italics,
bolding, and other spatial formatting.  While the material may not be in
the format desired, these systems possess the ability to remove the
original materials quickly from the hands of the people performing the
conversion, as well as to retain that information so that users can work
with it.  HOCKEY rejoined that the current thinking on markup is that one
should not say that something is italic or bold so much as why it is that
way.  To be sure, one needs to know that something was italicized, but
how can one get from one to the other?  One can map from the structure to
the typographic representation.

FLEISCHHAUER suggested that, given the 100 million items the Library
holds, it may not be possible for LC to do more than report that a thing
was in italics as opposed to why it was italics, although that may be
desirable in some contexts.  Promising to talk a bit during the afternoon
session about several experiments OCLC performed on automatic recognition
of document elements, and which they hoped to extend, WEIBEL said that in
fact one can recognize the major elements of a document with a fairly
high degree of reliability, at least as good as OCR.  STEVENS drew a
useful distinction between standard, generalized markup (i.e., defining
for a document-type definition the structure of the document), and what
he termed a style sheet, which had to do with italics, bolding, and other
forms of emphasis.  Thus, two different components are at work, one being
the structure of the document itself (its logic), and the other being its
representation when it is put on the screen or printed.

                                 ******

SESSION V.  APPROACHES TO PREPARING ELECTRONIC TEXTS

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
HOCKEY * Text in ASCII and the representation of electronic text versus
an image * The need to look at ways of using markup to assist retrieval *
The need for an encoding format that will be reusable and multifunctional
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Susan HOCKEY, director, Center for Electronic Texts in the Humanities
(CETH), Rutgers and Princeton Universities, announced that one talk
(WEIBEL's) was moved into this session from the morning and that David
Packard was unable to attend.  The session would attempt to focus more on
what one can do with a text in ASCII and the representation of electronic
text rather than just an image, what one can do with a computer that
cannot be done with a book or an image.  It would be argued that one can
do much more than just read a text, and from that starting point one can
use markup and methods of preparing the text to take full advantage of
the capability of the computer.  That would lead to a discussion of what
the European Community calls REUSABILITY, what may better be termed
DURABILITY, that is, how to prepare or make a text that will last a long
time and that can be used for as many applications as possible, which
would lead to issues of improving intellectual access.

HOCKEY urged the need to look at ways of using markup to facilitate retrieval,
not just for referencing or to help locate an item that is retrieved, but also to put markup tags in
a text to help retrieve the thing sought either with linguistic tagging or
interpretation.  HOCKEY also argued that little advancement had occurred in
the software tools currently available for retrieving and searching text.
She pressed the desideratum of going beyond Boolean searches and performing
more sophisticated searching, which the insertion of more markup in the text
would facilitate.  Thinking about electronic texts as opposed to images means
considering material that will never appear in print form, or print will not
be its primary form, that is, material which only appears in electronic form.
HOCKEY alluded to the history and the need for markup and tagging and
electronic text, which was developed through the use of computers in the
humanities; as MICHELSON had observed, Father Busa had started in 1949
to prepare the first-ever text on the computer.

HOCKEY remarked several large projects, particularly in Europe, for the
compilation of dictionaries, language studies, and language analysis, in
which people have built up archives of text and have begun to recognize
the need for an encoding format that will be reusable and multifunctional,
that can be used not just to print the text, which may be assumed to be a
byproduct of what one wants to do, but to structure it inside the computer
so that it can be searched, built into a Hypertext system, etc.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
WEIBEL * OCLC's approach to preparing electronic text:  retroconversion,
keying of texts, more automated ways of developing data * Project ADAPT
and the CORE Project * Intelligent character recognition does not exist *
Advantages of SGML * Data should be free of procedural markup;
descriptive markup strongly advocated * OCLC's interface illustrated *
Storage requirements and costs for putting a lot of information on line *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Stuart WEIBEL, senior research scientist, Online Computer Library Center,
Inc. (OCLC), described OCLC's approach to preparing electronic text.  He
argued that the electronic world into which we are moving must
accommodate not only the future but the past as well, and to some degree
even the present.  Thus, starting out at one end with retroconversion and
keying of texts, one would like to move toward much more automated ways
of developing data.

For example, Project ADAPT had to do with automatically converting
document images into a structured document database with OCR text as
indexing and also a little bit of automatic formatting and tagging of
that text.  The CORE project hosted by Cornell University, Bellcore,
OCLC, the American Chemical Society, and Chemical Abstracts, constitutes
WEIBEL's principal concern at the moment.  This project is an example of
converting text for which one already has a machine-readable version into
a format more suitable for electronic delivery and database searching. 
(Since Michael LESK had previously described CORE, WEIBEL would say
little concerning it.)  Borrowing a chemical phrase, de novo synthesis,
WEIBEL cited the Online Journal of Current Clinical Trials as an example
of de novo electronic publishing, that is, a form in which the primary
form of the information is electronic.

Project ADAPT, then, which OCLC completed a couple of years ago and in
fact is about to resume, is a model in which one takes page images either
in paper or microfilm and converts them automatically to a searchable
electronic database, either on-line or local.  The operating assumption
is that accepting some blemishes in the data, especially for
retroconversion of materials, will make it possible to accomplish more. 
Not enough money is available to support perfect conversion.

WEIBEL related several steps taken to perform image preprocessing
(processing on the image before performing optical character
recognition), as well as image postprocessing.  He denied the existence
of intelligent character recognition and asserted that what is wanted is
page recognition, which is a long way off.  OCLC has experimented with
merging of multiple optical character recognition systems that will
reduce errors from an unacceptable rate of 5 characters out of every
l,000 to an unacceptable rate of 2 characters out of every l,000, but it
is not good enough.  It will never be perfect.

Concerning the CORE Project, WEIBEL observed that Bellcore is taking the
topography files, extracting the page images, and converting those
topography files to SGML markup.  LESK hands that data off to OCLC, which
builds that data into a Newton database, the same system that underlies
the on-line system in virtually all of the reference products at OCLC. 
The long-term goal is to make the systems interoperable so that not just
Bellcore's system and OCLC's system can access this data, but other
systems can as well, and the key to that is the Z39.50 common command
language and the full-text extension.  Z39.50 is fine for MARC records,
but is not enough to do it for full text (that is, make full texts
interoperable).

WEIBEL next outlined the critical role of SGML for a variety of purposes,
for example, as noted by HOCKEY, in the world of extremely large
databases, using highly structured data to perform field searches. 
WEIBEL argued that by building the structure of the data in (i.e., the
structure of the data originally on a printed page), it becomes easy to
look at a journal article even if one cannot read the characters and know
where the title or author is, or what the sections of that document would be.
OCLC wants to make that structure explicit in the database, because it will
be important for retrieval purposes.

The second big advantage of SGML is that it gives one the ability to
build structure into the database that can be used for display purposes
without contaminating the data with instructions about how to format
things.  The distinction lies between procedural markup, which tells one
where to put dots on the page, and descriptive markup, which describes
the elements of a document.

WEIBEL believes that there should be no procedural markup in the data at
all, that the data should be completely unsullied by information about
italics or boldness.  That should be left up to the display device,
whether that display device is a page printer or a screen display device. 
By keeping one's database free of that kind of contamination, one can
make decisions down the road, for example, reorganize the data in ways
that are not cramped by built-in notions of what should be italic and
what should be bold.  WEIBEL strongly advocated descriptive markup.  As
an example, he illustrated the index structure in the CORE data.  With
subsequent illustrated examples of markup, WEIBEL acknowledged the common
complaint that SGML is hard to read in its native form, although markup
decreases considerably once one gets into the body.  Without the markup,
however, one would not have the structure in the data.  One can pass
markup through a LaTeX processor and convert it relatively easily to a
printed version of the document.

WEIBEL next illustrated an extremely cluttered screen dump of OCLC's
system, in order to show as much as possible the inherent capability on
the screen.  (He noted parenthetically that he had become a supporter of
X-Windows as a result of the progress of the CORE Project.)  WEIBEL also
illustrated the two major parts of the interface:  l) a control box that
allows one to generate lists of items, which resembles a small table of
contents based on key words one wishes to search, and 2) a document
viewer, which is a separate process in and of itself.  He demonstrated
how to follow links through the electronic database simply by selecting
the appropriate button and bringing them up.  He also noted problems that
remain to be accommodated in the interface (e.g., as pointed out by LESK,
what happens when users do not click on the icon for the figure).

Given the constraints of time, WEIBEL omitted a large number of ancillary
items in order to say a few words concerning storage requirements and
what will be required to put a lot of things on line.  Since it is
extremely expensive to reconvert all of this data, especially if it is
just in paper form (and even if it is in electronic form in typesetting
tapes), he advocated building journals electronically from the start.  In
that case, if one only has text graphics and indexing (which is all that
one needs with de novo electronic publishing, because there is no need to
go back and look at bit-maps of pages), one can get 10,000 journals of
full text, or almost 6 million pages per year.  These pages can be put in
approximately 135 gigabytes of storage, which is not all that much,
WEIBEL said.  For twenty years, something less than three terabytes would
be required.  WEIBEL calculated the costs of storing this information as
follows:  If a gigabyte costs approximately $1,000, then a terabyte costs
approximately $1 million to buy in terms of hardware.  One also needs a
building to put it in and a staff like OCLC to handle that information. 
So, to support a terabyte, multiply by five, which gives $5 million per
year for a supported terabyte of data.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Tapes saved by ACS are the typography files originally
supporting publication of the journal * Cost of building tagged text into
the database *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the question-and-answer period that followed WEIBEL's
presentation, these clarifications emerged.  The tapes saved by the
American Chemical Society are the typography files that originally
supported the publication of the journal.  Although they are not tagged
in SGML, they are tagged in very fine detail.  Every single sentence is
marked, all the registry numbers, all the publications issues, dates, and
volumes.  No cost figures on tagging material on a per-megabyte basis
were available.  Because ACS's typesetting system runs from tagged text,
there is no extra cost per article.  It was unknown what it costs ACS to
keyboard the tagged text rather than just keyboard the text in the
cheapest process.  In other words, since one intends to publish things
and will need to build tagged text into a typography system in any case,
if one does that in such a way that it can drive not only typography but
an electronic system (which is what ACS intends to do--move to SGML
publishing), the marginal cost is zero.  The marginal cost represents the
cost of building tagged text into the database, which is small.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SPERBERG-McQUEEN * Distinction between texts and computers * Implications
of recognizing that all representation is encoding * Dealing with
complicated representations of text entails the need for a grammar of
documents * Variety of forms of formal grammars * Text as a bit-mapped
image does not represent a serious attempt to represent text in
electronic form * SGML, the TEI, document-type declarations, and the
reusability and longevity of data * TEI conformance explicitly allows
extension or modification of the TEI tag set * Administrative background
of the TEI * Several design goals for the TEI tag set * An absolutely
fixed requirement of the TEI Guidelines * Challenges the TEI has
attempted to face * Good texts not beyond economic feasibility * The
issue of reproducibility or processability * The issue of mages as
simulacra for the text redux * One's model of text determines what one's
software can do with a text and has economic consequences *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Prior to speaking about SGML and markup, Michael SPERBERG-McQUEEN, editor,
Text Encoding Initiative (TEI), University of Illinois-Chicago, first drew
a distinction between texts and computers:  Texts are abstract cultural
and linguistic objects while computers are complicated physical devices,
he said.  Abstract objects cannot be placed inside physical devices; with
computers one can only represent text and act upon those representations.

The recognition that all representation is encoding, SPERBERG-McQUEEN
argued, leads to the recognition of two things:  1) The topic description
for this session is slightly misleading, because there can be no discussion
of pros and cons of text-coding unless what one means is pros and cons of
working with text with computers.  2) No text can be represented in a
computer without some sort of encoding; images are one way of encoding text,
ASCII is another, SGML yet another.  There is no encoding without some
information loss, that is, there is no perfect reproduction of a text that
allows one to do away with the original.  Thus, the question becomes,
What is the most useful representation of text for a serious work?
This depends on what kind of serious work one is talking about.

The projects demonstrated the previous day all involved highly complex
information and fairly complex manipulation of the textual material.
In order to use that complicated information, one has to calculate it
slowly or manually and store the result.  It needs to be stored, therefore,
as part of one's representation of the text.  Thus, one needs to store the
structure in the text.  To deal with complicated representations of text,
one needs somehow to control the complexity of the representation of a text;
that means one needs a way of finding out whether a document and an
electronic representation of a document is legal or not; and that
means one needs a grammar of documents.

SPERBERG-McQUEEN discussed the variety of forms of formal grammars,
implicit and explicit, as applied to text, and their capabilities.  He
argued that these grammars correspond to different models of text that
different developers have.  For example, one implicit model of the text
is that there is no internal structure, but just one thing after another,
a few characters and then perhaps a start-title command, and then a few
more characters and an end-title command.  SPERBERG-McQUEEN also
distinguished several kinds of text that have a sort of hierarchical
structure that is not very well defined, which, typically, corresponds
to grammars that are not very well defined, as well as hierarchies that
are very well defined (e.g., the Thesaurus Linguae Graecae) and extremely
complicated things such as SGML, which handle strictly hierarchical data
very nicely.

SPERBERG-McQUEEN conceded that one other model not illustrated on his two
displays was the model of text as a bit-mapped image, an image of a page,
and confessed to having been converted to a limited extent by the
Workshop to the view that electronic images constitute a promising,
probably superior alternative to microfilming.  But he was not convinced
that electronic images represent a serious attempt to represent text in
electronic form.  Many of their problems stem from the fact that they are
not direct attempts to represent the text but attempts to represent the
page, thus making them representations of representations.

In this situation of increasingly complicated textual information and the
need to control that complexity in a useful way (which begs the question
of the need for good textual grammars), one has the introduction of SGML. 
With SGML, one can develop specific document-type declarations
for specific text types or, as with the TEI, attempts to generate
general document-type declarations that can handle all sorts of text.
The TEI is an attempt to develop formats for text representation that
will ensure the kind of reusability and longevity of data discussed earlier.
It offers a way to stay alive in the state of permanent technological
revolution.

It has been a continuing challenge in the TEI to create document grammars
that do some work in controlling the complexity of the textual object but
also allowing one to represent the real text that one will find. 
Fundamental to the notion of the TEI is that TEI conformance allows one
the ability to extend or modify the TEI tag set so that it fits the text
that one is attempting to represent.

SPERBERG-McQUEEN next outlined the administrative background of the TEI. 
The TEI is an international project to develop and disseminate guidelines
for the encoding and interchange of machine-readable text.  It is
sponsored by the Association for Computers in the Humanities, the
Association for Computational Linguistics, and the Association for
Literary and Linguistic Computing.  Representatives of numerous other
professional societies sit on its advisory board.  The TEI has a number
of affiliated projects that have provided assistance by testing drafts of
the guidelines.

Among the design goals for the TEI tag set, the scheme first of all must
meet the needs of research, because the TEI came out of the research
community, which did not feel adequately served by existing tag sets. 
The tag set must be extensive as well as compatible with existing and
emerging standards.  In 1990, version 1.0 of the Guidelines was released
(SPERBERG-McQUEEN illustrated their contents).

SPERBERG-McQUEEN noted that one problem besetting electronic text has
been the lack of adequate internal or external documentation for many
existing electronic texts.  The TEI guidelines as currently formulated
contain few fixed requirements, but one of them is this:  There must
always be a document header, an in-file SGML tag that provides
1) a bibliographic description of the electronic object one is talking
about (that is, who included it, when, what for, and under which title);
and 2) the copy text from which it was derived, if any.  If there was
no copy text or if the copy text is unknown, then one states as much.
Version 2.0 of the Guidelines was scheduled to be completed in fall 1992
and a revised third version is to be presented to the TEI advisory board
for its endorsement this coming winter.  The TEI itself exists to provide
a markup language, not a marked-up text.

Among the challenges the TEI has attempted to face is the need for a
markup language that will work for existing projects, that is, handle the
level of markup that people are using now to tag only chapter, section,
and paragraph divisions and not much else.  At the same time, such a
language also will be able to scale up gracefully to handle the highly
detailed markup which many people foresee as the future destination of
much electronic text, and which is not the future destination but the
present home of numerous electronic texts in specialized areas.

SPERBERG-McQUEEN dismissed the lowest-common-denominator approach as
unable to support the kind of applications that draw people who have
never been in the public library regularly before, and make them come
back.  He advocated more interesting text and more intelligent text. 
Asserting that it is not beyond economic feasibility to have good texts,
SPERBERG-McQUEEN noted that the TEI Guidelines listing 200-odd tags
contains tags that one is expected to enter every time the relevant
textual feature occurs.  It contains all the tags that people need now,
and it is not expected that everyone will tag things in the same way.

The question of how people will tag the text is in large part a function
of their reaction to what SPERBERG-McQUEEN termed the issue of
reproducibility.  What one needs to be able to reproduce are the things
one wants to work with.  Perhaps a more useful concept than that of
reproducibility or recoverability is that of processability, that is,
what can one get from an electronic text without reading it again
in the original.  He illustrated this contention with a page from
Jan Comenius's bilingual Introduction to Latin.

SPERBERG-McQUEEN returned at length to the issue of images as simulacra
for the text, in order to reiterate his belief that in the long run more
than images of pages of particular editions of the text are needed,
because just as second-generation photocopies and second-generation
microfilm degenerate, so second-generation representations tend to
degenerate, and one tends to overstress some relatively trivial aspects
of the text such as its layout on the page, which is not always
significant, despite what the text critics might say, and slight other
pieces of information such as the very important lexical ties between the
English and Latin versions of Comenius's bilingual text, for example. 
Moreover, in many crucial respects it is easy to fool oneself concerning
what a scanned image of the text will accomplish.  For example, in order
to study the transmission of texts, information concerning the text
carrier is necessary, which scanned images simply do not always handle. 
Further, even the high-quality materials being produced at Cornell use
much of the information that one would need if studying those books as
physical objects.  It is a choice that has been made.  It is an arguably
justifiable choice, but one does not know what color those pen strokes in
the margin are or whether there was a stain on the page, because it has
been filtered out.  One does not know whether there were rips in the page
because they do not show up, and on a couple of the marginal marks one
loses half of the mark because the pen is very light and the scanner
failed to pick it up, and so what is clearly a checkmark in the margin of
the original becomes a little scoop in the margin of the facsimile. 
Standard problems for facsimile editions, not new to electronics, but
also true of light-lens photography, and are remarked here because it is
important that we not fool ourselves that even if we produce a very nice
image of this page with good contrast, we are not replacing the
manuscript any more than microfilm has replaced the manuscript.

The TEI comes from the research community, where its first allegiance
lies, but it is not just an academic exercise.  It has relevance far
beyond those who spend all of their time studying text, because one's
model of text determines what one's software can do with a text.  Good
models lead to good software.  Bad models lead to bad software.  That has
economic consequences, and it is these economic consequences that have
led the European Community to help support the TEI, and that will lead,
SPERBERG-McQUEEN hoped, some software vendors to realize that if they
provide software with a better model of the text they can make a killing.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Implications of different DTDs and tag sets * ODA versus SGML *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

During the discussion that followed, several additional points were made. 
Neither AAP (i.e., Association of American Publishers) nor CALS (i.e.,
Computer-aided Acquisition and Logistics Support) has a document-type
definition for ancient Greek drama, although the TEI will be able to
handle that.  Given this state of affairs and assuming that the
technical-journal producers and the commercial vendors decide to use the
other two types, then an institution like the Library of Congress, which
might receive all of their publications, would have to be able to handle
three different types of document definitions and tag sets and be able to
distinguish among them.

Office Document Architecture (ODA) has some advantages that flow from its
tight focus on office documents and clear directions for implementation. 
Much of the ODA standard is easier to read and clearer at first reading
than the SGML standard, which is extremely general.  What that means is
that if one wants to use graphics in TIFF and ODA, one is stuck, because
ODA defines graphics formats while TIFF does not, whereas SGML says the
world is not waiting for this work group to create another graphics format.
What is needed is an ability to use whatever graphics format one wants.

The TEI provides a socket that allows one to connect the SGML document to
the graphics.  The notation that the graphics are in is clearly a choice
that one needs to make based on her or his environment, and that is one
advantage.  SGML is less megalomaniacal in attempting to define formats
for all kinds of information, though more megalomaniacal in attempting to
cover all sorts of documents.  The other advantage is that the model of
text represented by SGML is simply an order of magnitude richer and more
flexible than the model of text offered by ODA.  Both offer hierarchical
structures, but SGML recognizes that the hierarchical model of the text
that one is looking at may not have been in the minds of the designers,
whereas ODA does not.

ODA is not really aiming for the kind of document that the TEI wants to
encompass.  The TEI can handle the kind of material ODA has, as well as a
significantly broader range of material.  ODA seems to be very much
focused on office documents, which is what it started out being called--
office document architecture.

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CALALUCA * Text-encoding from a publisher's perspective *
Responsibilities of a publisher * Reproduction of Migne's Latin series
whole and complete with SGML tags based on perceived need and expected
use * Particular decisions arising from the general decision to produce
and publish PLD *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

The final speaker in this session, Eric CALALUCA, vice president,
Chadwyck-Healey, Inc., spoke from the perspective of a publisher re
text-encoding, rather than as one qualified to discuss methods of
encoding data, and observed that the presenters sitting in the room,
whether they had chosen to or not, were acting as publishers:  making
choices, gathering data, gathering information, and making assessments. 
CALALUCA offered the hard-won conviction that in publishing very large
text files (such as PLD), one cannot avoid making personal judgments of
appropriateness and structure.

In CALALUCA's view, encoding decisions stem from prior judgments.  Two
notions have become axioms for him in the consideration of future sources
for electronic publication:  1) electronic text publishing is as personal
as any other kind of publishing, and questions of if and how to encode
the data are simply a consequence of that prior decision;  2) all
personal decisions are open to criticism, which is unavoidable.

CALALUCA rehearsed his role as a publisher or, better, as an intermediary
between what is viewed as a sound idea and the people who would make use
of it.  Finding the specialist to advise in this process is the core of
that function.  The publisher must monitor and hug the fine line between
giving users what they want and suggesting what they might need.  One
responsibility of a publisher is to represent the desires of scholars and
research librarians as opposed to bullheadedly forcing them into areas
they would not choose to enter.

CALALUCA likened the questions being raised today about data structure
and standards to the decisions faced by the Abbe Migne himself during
production of the Patrologia series in the mid-nineteenth century. 
Chadwyck-Healey's decision to reproduce Migne's Latin series whole and
complete with SGML tags was also based upon a perceived need and an
expected use.  In the same way that Migne's work came to be far more than
a simple handbook for clerics, PLD is already far more than a database
for theologians.  It is a bedrock source for the study of Western
civilization, CALALUCA asserted.

In regard to the decision to produce and publish PLD, the editorial board
offered direct judgments on the question of appropriateness of these
texts for conversion, their encoding and their distribution, and
concluded that the best possible project was one that avoided overt
intrusions or exclusions in so important a resource.  Thus, the general
decision to transmit the original collection as clearly as possible with
the widest possible avenues for use led to other decisions:  1) To encode
the data or not, SGML or not, TEI or not.  Again, the expected user
community asserted the need for normative tagging structures of important
humanities texts, and the TEI seemed the most appropriate structure for
that purpose.  Research librarians, who are trained to view the larger
impact of electronic text sources on 80 or 90 or 100 doctoral
disciplines, loudly approved the decision to include tagging.  They see
what is coming better than the specialist who is completely focused on
one edition of Ambrose's De Anima, and they also understand that the
potential uses exceed present expectations.  2) What will be tagged and
what will not.  Once again, the board realized that one must tag the
obvious.  But in no way should one attempt to identify through encoding
schemes every single discrete area of a text that might someday be
searched.  That was another decision.  Searching by a column number, an
author, a word, a volume, permitting combination searches, and tagging
notations seemed logical choices as core elements.  3) How does one make
the data available?  Tieing it to a CD-ROM edition creates limitations,
but a magnetic tape file that is very large, is accompanied by the
encoding specifications, and that allows one to make local modifications
also allows one to incorporate any changes one may desire within the
bounds of private research, though exporting tag files from a CD-ROM
could serve just as well.  Since no one on the board could possibly
anticipate each and every way in which a scholar might choose to mine
this data bank, it was decided to satisfy the basics and make some
provisions for what might come.  4) Not to encode the database would rob
it of the interchangeability and portability these important texts should
accommodate.  For CALALUCA, the extensive options presented by full-text
searching require care in text selection and strongly support encoding of
data to facilitate the widest possible search strategies.  Better
software can always be created, but summoning the resources, the people,
and the energy to reconvert the text is another matter.

PLD is being encoded, captured, and distributed, because to
Chadwyck-Healey and the board it offers the widest possible array of
future research applications that can be seen today.  CALALUCA concluded
by urging the encoding of all important text sources in whatever way
seems most appropriate and durable at the time, without blanching at the
thought that one's work may require emendation in the future.  (Thus,
Chadwyck-Healey produced a very large humanities text database before the
final release of the TEI Guidelines.)

                                 ******

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DISCUSSION * Creating texts with markup advocated * Trends in encoding *
The TEI and the issue of interchangeability of standards * A
misconception concerning the TEI * Implications for an institution like
LC in the event that a multiplicity of DTDs develops * Producing images
as a first step towards possible conversion to full text through
character recognition * The AAP tag sets as a common starting point and
the need for caution *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

HOCKEY prefaced the discussion that followed with several comments in
favor of creating texts with markup and on trends in encoding.  In the
future, when many more texts are available for on-line searching, real
problems in finding what is wanted will develop, if one is faced with
millions of words of data.  It therefore becomes important to consider
putting markup in texts to help searchers home in on the actual things
they wish to retrieve.  Various approaches to refining retrieval methods
toward this end include building on a computer version of a dictionary
and letting the computer look up words in it to obtain more information
about the semantic structure or semantic field of a word, its grammatical
structure, and syntactic structure.

HOCKEY commented on the present keen interest in the encoding world
in creating:  1) machine-readable versions of dictionaries that can be
initially tagged in SGML, which gives a structure to the dictionary entry;
these entries can then be converted into a more rigid or otherwise
different database structure inside the computer, which can be treated as
a dynamic tool for searching mechanisms; 2) large bodies of text to study
the language.  In order to incorporate more sophisticated mechanisms,
more about how words behave needs to be known, which can be learned in
part from information in dictionaries.  However, the last ten years have
seen much interest in studying the structure of printed dictionaries
converted into computer-readable form.  The information one derives about
many words from those is only partial, one or two definitions of the
common or the usual meaning of a word, and then numerous definitions of
unusual usages.  If the computer is using a dictionary to help retrieve
words in a text, it needs much more information about the common usages,
because those are the ones that occur over and over again.  Hence the
current interest in developing large bodies of text in computer-readable
form in order to study the language.  Several projects are engaged in
compiling, for example, 100 million words. HOCKEY described one with
which she was associated briefly at Oxford University involving
compilation of 100 million words of British English:  about 10 percent of
that will contain detailed linguistic tagging encoded in SGML; it will
have word class taggings, with words identified as nouns, verbs,
adjectives, or other parts of speech.  This tagging can then be used by
programs which will begin to learn a bit more about the structure of the
language, and then, can go to tag more text.

HOCKEY said that the more that is tagged accurately, the more one can
refine the tagging process and thus the bigger body of text one can build
up with linguistic tagging incorporated into it.  Hence, the more tagging
or annotation there is in the text, the more one may begin to learn about
language and the more it will help accomplish more intelligent OCR.  She
recommended the development of software tools that will help one begin to
understand more about a text, which can then be applied to scanning
images of that text in that format and to using more intelligence to help
one interpret or understand the text.

HOCKEY posited the need to think about common methods of text-encoding
for a long time to come, because building these large bodies of text is
extremely expensive and will only be done once.

In the more general discussion on approaches to encoding that followed,
these points were made:

BESSER identified the underlying problem with standards that all have to
struggle with in adopting a standard, namely, the tension between a very
highly defined standard that is very interchangeable but does not work
for everyone because something is lacking, and a standard that is less
defined, more open, more adaptable, but less interchangeable.  Contending
that the way in which people use SGML is not sufficiently defined, BESSER
wondered 1) if people resist the TEI because they think it is too defined
in certain things they do not fit into, and 2) how progress with
interchangeability can be made without frightening people away.

SPERBERG-McQUEEN replied that the published drafts of the TEI had met
with surprisingly little objection on the grounds that they do not allow
one to handle X or Y or Z.  Particular concerns of the affiliated
projects have led, in practice, to discussions of how extensions are to
be made; the primary concern of any project has to be how it can be
represented locally, thus making interchange secondary.  The TEI has
received much criticism based on the notion that everything in it is
required or even recommended, which, as it happens, is a misconception
from the beginning,   because none of it is required and very little is
actually actively recommended for all cases, except that one document
one's source.

SPERBERG-McQUEEN agreed with BESSER about this trade-off:  all the
projects in a set of twenty TEI-conformant projects will not necessarily
tag the material in the same way.  One result of the TEI will be that the
easiest problems will be solved--those dealing with the external form of
the information; but the problem that is hardest in interchange is that
one is not encoding what another wants, and vice versa.  Thus, after
the adoption of a common notation, the differences in the underlying
conceptions of what is interesting about texts become more visible.
The success of a standard like the TEI will lie in the ability of
the recipient of interchanged texts to use some of what it contains
and to add the information that was not encoded that one wants, in a
layered way, so that texts can be gradually enriched and one does not
have to put in everything all at once.  Hence, having a well-behaved
markup scheme is important.

STEVENS followed up on the paradoxical analogy that BESSER alluded to in
the example of the MARC records, namely, the formats that are the same
except that they are different.  STEVENS drew a parallel between
document-type definitions and MARC records for books and serials and maps,
where one has a tagging structure and there is a text-interchange. 
STEVENS opined that the producers of the information will set the terms
for the standard (i.e., develop document-type definitions for the users
of their products), creating a situation that will be problematical for
an institution like the Library of Congress, which will have to deal with
the DTDs in the event that a multiplicity of them develops.  Thus,
numerous people are seeking a standard but cannot find the tag set that
will be acceptable to them and their clients.  SPERBERG-McQUEEN agreed
with this view, and said that the situation was in a way worse:  attempting
to unify arbitrary DTDs resembled attempting to unify a MARC record with a
bibliographic record done according to the Prussian instructions. 
According to STEVENS, this situation occurred very early in the process.

WATERS recalled from early discussions on Project Open Book the concern
of many people that merely by producing images, POB was not really
enhancing intellectual access to the material.  Nevertheless, not wishing
to overemphasize the opposition between imaging and full text, WATERS
stated that POB views getting the images as a first step toward possibly
converting to full text through character recognition, if the technology
is appropriate.  WATERS also emphasized that encoding is involved even
with a set of images.

SPERBERG-McQUEEN agreed with WATERS that one can create an SGML document
consisting wholly of images.  At first sight, organizing graphic images
with an SGML document may not seem to offer great advantages, but the
advantages of the scheme WATERS described would be precisely that
ability to move into something that is more of a multimedia document:
a combination of transcribed text and page images.  WEIBEL concurred in
this judgment, offering evidence from Project ADAPT, where a page is
divided into text elements and graphic elements, and in fact the text
elements are organized by columns and lines.  These lines may be used as
the basis for distributing documents in a network environment.  As one
develops software intelligent enough to recognize what those elements
are, it makes sense to apply SGML to an image initially, that may, in
fact, ultimately become more and more text, either through OCR or edited
OCR or even just through keying.  For WATERS, the labor of composing the
document and saying this set of documents or this set of images belongs
to this document constitutes a significant investment.

WEIBEL also made the point that the AAP tag sets, while not excessively
prescriptive, offer a common starting point; they do not define the
structure of the documents, though.  They have some recommendations about
DTDs one could use as examples, but they do just suggest tag sets.   For
example, the CORE project attempts to use the AAP markup as much as
possible, but there are clearly areas where structure must be added. 
That in no way contradicts the use of AAP tag sets.

SPERBERG-McQUEEN noted that the TEI prepared a long working paper early
on about the AAP tag set and what it lacked that the TEI thought it
needed, and a fairly long critique of the naming conventions, which has
led to a very different style of naming in the TEI.  He stressed the
importance of the opposition between prescriptive markup, the kind that a
publisher or anybody can do when producing documents de novo, and
descriptive markup, in which one has to take what the text carrier
provides.  In these particular tag sets it is easy to overemphasize this
opposition, because the AAP tag set is extremely flexible.  Even if one
just used the DTDs, they allow almost anything to appear almost anywhere.

                                 ******

SESSION VI.  COPYRIGHT ISSUES

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PETERS * Several cautions concerning copyright in an electronic
environment * Review of copyright law in the United States * The notion
of the public good and the desirability of incentives to promote it *
What copyright protects * Works not protected by copyright * The rights
of copyright holders * Publishers' concerns in today's electronic
environment * Compulsory licenses * The price of copyright in a digital
medium and the need for cooperation * Additional clarifications *  Rough
justice oftentimes the outcome in numerous copyright matters * Copyright
in an electronic society * Copyright law always only sets up the
boundaries; anything can be changed by contract *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Marybeth PETERS, policy planning adviser to the Register of Copyrights,
Library of Congress,   made several general comments and then opened the
floor to discussion of subjects of interest to the audience.

Having attended several sessions in an effort to gain a sense of what
people did and where copyright would affect their lives, PETERS expressed
the following cautions:

     * If one takes and converts materials and puts them in new forms,
     then, from a copyright point of view, one is creating something and
     will receive some rights.

     * However, if what one is converting already exists, a question
     immediately arises about the status of the materials in question.

     * Putting something in the public domain in the United States offers
     some freedom from anxiety, but distributing it throughout the world
     on a network is another matter, even if one has put it in the public
     domain in the United States.  Re foreign laws, very frequently a
     work can be in the public domain in the United States but protected
     in other countries.  Thus, one must consider all of the places a
     work may reach, lest one unwittingly become liable to being faced
     with a suit for copyright infringement, or at least a letter
     demanding discussion of what one is doing.

PETERS reviewed copyright law in the United States.  The U.S.
Constitution effectively states that Congress has the power to enact
copyright laws for two purposes:  1) to encourage the creation and
dissemination of intellectual works for the good of society as a whole;
and, significantly, 2) to give creators and those who package and
disseminate materials the economic rewards that are due them.

Congress strives to strike a balance, which at times can become an
emotional issue.  The United States has never accepted the notion of the
natural right of an author so much as it has accepted the notion of the
public good and the desirability of incentives to promote it.  This state
of affairs, however, has created strains on the international level and
is the reason for several of the differences in the laws that we have. 
Today the United States protects almost every kind of work that can be
called an expression of an author.  The standard for gaining copyright
protection is simply originality.  This is a low standard and means that
a work is not copied from something else, as well as shows a certain
minimal amount of authorship.  One can also acquire copyright protection
for making a new version of preexisting material, provided it manifests
some spark of creativity.

However, copyright does not protect ideas, methods, systems--only the way
that one expresses those things.  Nor does copyright protect anything
that is mechanical, anything that does not involve choice, or criteria
concerning whether or not one should do a thing.  For example, the
results of a process called declicking, in which one mechanically removes
impure sounds from old recordings, are not copyrightable.  On the other
hand, the choice to record a song digitally and to increase the sound of
violins or to bring up the tympani constitutes the results of conversion
that are copyrightable.  Moreover, if a work is protected by copyright in
the United States, one generally needs the permission of the copyright
owner to convert it.  Normally, who will own the new--that is, converted-
-material is a matter of contract.  In the absence of a contract, the
person who creates the new material is the author and owner.  But people
do not generally think about the copyright implications until after the
fact.  PETERS stressed the need when dealing with copyrighted works to
think about copyright in advance.  One's bargaining power is much greater
up front than it is down the road.

PETERS next discussed works not protected by copyright, for example, any
work done by a federal employee as part of his or her official duties is
in the public domain in the United States.  The issue is not wholly free
of doubt concerning whether or not the work is in the public domain
outside the United States.  Other materials in the public domain include: 
any works published more than seventy-five years ago, and any work
published in the United States more than twenty-eight years ago, whose
copyright was not renewed.  In talking about the new technology and
putting material in a digital form to send all over the world, PETERS
cautioned, one must keep in mind that while the rights may not be an
issue in the United States, they may be in different parts of the world,
where most countries previously employed a copyright term of the life of
the author plus fifty years.

PETERS next reviewed the economics of copyright holding.  Simply,
economic rights are the rights to control the reproduction of a work in
any form.  They belong to the author, or in the case of a work made for
hire, the employer.  The second right, which is critical to conversion,
is the right to change a work.  The right to make new versions is perhaps
one of the most significant rights of authors, particularly in an
electronic world.  The third right is the right to publish the work and
the right to disseminate it, something that everyone who deals in an
electronic medium needs to know.  The basic rule is if a copy is sold,
all rights of distribution are extinguished with the sale of that copy. 
The key is that it must be sold.  A number of companies overcome this
obstacle by leasing or renting their product.  These companies argue that
if the material is rented or leased and not sold, they control the uses
of a work.  The fourth right, and one very important in a digital world,
is a right of public performance, which means the right to show the work
sequentially.  For example, copyright owners control the showing of a
CD-ROM product in a public place such as a public library.  The reverse
side of public performance is something called the right of public
display.  Moral rights also exist, which at the federal level apply only
to very limited visual works of art, but in theory may apply under
contract and other principles.  Moral rights may include the right of an
author to have his or her name on a work, the right of attribution, and
the right to object to distortion or mutilation--the right of integrity.

The way copyright law is worded gives much latitude to activities such as
preservation; to use of material for scholarly and research purposes when
the user does not make multiple copies; and to the generation of
facsimile copies of unpublished works by libraries for themselves and
other libraries.  But the law does not allow anyone to become the
distributor of the product for the entire world.  In today's electronic
environment, publishers are extremely concerned that the entire world is
networked and can obtain the information desired from a single copy in a
single library.  Hence, if there is to be only one sale, which publishers
may choose to live with, they will obtain their money in other ways, for
example, from access and use.  Hence, the development of site licenses
and other kinds of agreements to cover what publishers believe they
should be compensated for.  Any solution that the United States takes
today has to consider the international arena.

Noting that the United States is a member of the Berne Convention and
subscribes to its provisions, PETERS described the permissions process. 
She also defined compulsory licenses.  A compulsory license, of which the
United States has had a few, builds into the law the right to use a work
subject to certain terms and conditions.  In the international arena,
however, the ability to use compulsory licenses is extremely limited. 
Thus, clearinghouses and other collectives comprise one option that has
succeeded in providing for use of a work.  Often overlooked when one
begins to use copyrighted material and put products together is how
expensive the permissions process and managing it is.  According to
PETERS, the price of copyright in a digital medium, whatever solution is
worked out, will include managing and assembling the database.  She
strongly recommended that publishers and librarians or people with
various backgrounds cooperate to work out administratively feasible
systems, in order to produce better results.

In the lengthy question-and-answer period that followed PETERS's
presentation, the following points emerged:

     * The Copyright Office maintains that anything mechanical and
     totally exhaustive probably is not protected.  In the event that
     what an individual did in developing potentially copyrightable
     material is not understood, the Copyright Office will ask about the
     creative choices the applicant chose to make or not to make.  As a
     practical matter, if one believes she or he has made enough of those
     choices, that person has a right to assert a copyright and someone
     else must assert that the work is not copyrightable.  The more
     mechanical, the more automatic, a thing is, the less likely it is to
     be copyrightable.

     * Nearly all photographs are deemed to be copyrightable, but no one
     worries about them much, because everyone is free to take the same
     image.  Thus, a photographic copyright represents what is called a
     "thin" copyright.  The photograph itself must be duplicated, in
     order for copyright to be violated.

     * The Copyright Office takes the position that X-rays are not
     copyrightable because they are mechanical.  It  can be argued
     whether or not image enhancement in scanning can be protected.  One
     must exercise care with material created with public funds and
     generally in the public domain.  An article written by a federal
     employee, if written as part of official duties, is not
     copyrightable.  However, control over a scientific article written
     by a National Institutes of Health grantee (i.e., someone who
     receives money from the U.S. government), depends on NIH policy.  If
     the government agency has no policy (and that policy can be
     contained in its regulations, the contract, or the grant), the
     author retains copyright.  If a provision of the contract, grant, or
     regulation states that there will be no copyright, then it does not
     exist.  When a work is created, copyright automatically comes into
     existence unless something exists that says it does not.

     * An enhanced electronic copy of a print copy of an older reference
     work in the public domain that does not contain copyrightable new
     material is a purely mechanical rendition of the original work, and
     is not copyrightable.

     * Usually, when a work enters the public domain, nothing can remove
     it.  For example, Congress recently passed into law the concept of
     automatic renewal, which means that copyright on any work published
     between l964 and l978 does not have to be renewed in order to
     receive a seventy-five-year term.  But any work not renewed before
     1964 is in the public domain.

     * Concerning whether or not the United States keeps track of when
     authors die, nothing was ever done, nor is anything being done at
     the moment by the Copyright Office.

     * Software that drives a mechanical process is itself copyrightable. 
     If one changes platforms, the software itself has a copyright.  The
     World Intellectual Property Organization will hold a symposium 28
     March through 2 April l993, at Harvard University, on digital
     technology, and will study this entire issue.  If one purchases a
     computer software package, such as MacPaint, and creates something
     new, one receives protection only for that which has been added.

PETERS added that often in copyright matters, rough justice is the
outcome, for example, in collective licensing, ASCAP (i.e., American
Society of Composers, Authors, and Publishers), and BMI (i.e., Broadcast
Music, Inc.), where it may seem that the big guys receive more than their
due.  Of course, people ought not to copy a creative product without
paying for it; there should be some compensation.  But the truth of the
world, and it is not a great truth, is that the big guy gets played on
the radio more frequently than the little guy, who has to do much more
until he becomes a big guy.  That is true of every author, every
composer, everyone, and, unfortunately, is part of life.

Copyright always originates with the author, except in cases of works
made for hire.  (Most software falls into this category.)  When an author
sends his article to a journal, he has not relinquished copyright, though
he retains the right to relinquish it.  The author receives absolutely
everything.  The less prominent the author, the more leverage the
publisher will have in contract negotiations.  In order to transfer the
rights, the author must sign an agreement giving them away.

In an electronic society, it is important to be able to license a writer
and work out deals.  With regard to use of a work, it usually is much
easier when a publisher holds the rights.  In an electronic era, a real
problem arises when one is digitizing and making information available. 
PETERS referred again to electronic licensing clearinghouses.  Copyright
ought to remain with the author, but as one moves forward globally in the
electronic arena, a middleman who can handle the various rights becomes
increasingly necessary.

The notion of copyright law is that it resides with the individual, but
in an on-line environment, where a work can be adapted and tinkered with
by many individuals, there is concern.  If changes are authorized and
there is no agreement to the contrary, the person who changes a work owns
the changes.  To put it another way, the person who acquires permission
to change a work technically will become the author and the owner, unless
some agreement to the contrary has been made.  It is typical for the
original publisher to try to control all of the versions and all of the
uses.  Copyright law always only sets up the boundaries.  Anything can be
changed by contract.

                                 ******

SESSION VII.  CONCLUSION

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GENERAL DISCUSSION * Two questions for discussion * Different emphases in
the Workshop * Bringing the text and image partisans together *
Desiderata in planning the long-term development of something * Questions
surrounding the issue of electronic deposit * Discussion of electronic
deposit as an allusion to the issue of standards * Need for a directory
of preservation projects in digital form and for access to their
digitized files * CETH's catalogue of machine-readable texts in the
humanities * What constitutes a publication in the electronic world? *
Need for LC to deal with the concept of on-line publishing * LC's Network
Development Office  exploring the limits of MARC as a standard in terms
of handling electronic information * Magnitude of the problem and the
need for distributed responsibility in order to maintain and store
electronic information * Workshop participants to be viewed as a starting
point * Development of a network version of AM urged * A step toward AM's
construction of some sort of apparatus for network access * A delicate
and agonizing policy question for LC * Re the issue of electronic
deposit, LC urged to initiate a catalytic process in terms of distributed
responsibility * Suggestions for cooperative ventures * Commercial
publishers' fears * Strategic questions for getting the image and text
people to think through long-term cooperation * Clarification of the
driving force behind both the Perseus and the Cornell Xerox projects *
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

In his role as moderator of the concluding session, GIFFORD raised two
questions he believed would benefit from discussion:  1) Are there enough
commonalities among those of us that have been here for two days so that
we can see courses of action that should be taken in the future?  And, if
so, what are they and who might take them?  2) Partly derivative from
that, but obviously very dangerous to LC as host, do you see a role for
the Library of Congress in all this?  Of course, the Library of Congress
holds a rather special status in a number of these matters, because it is
not perceived as a player with an economic stake in them, but are there
roles that LC can play that can help advance us toward where we are heading?

Describing himself as an uninformed observer of the technicalities of the
last two days, GIFFORD detected three different emphases in the Workshop: 
1) people who are very deeply committed to text; 2) people who are almost
passionate about images; and 3) a few people who are very committed to
what happens to the networks.  In other words, the new networking
dimension, the accessibility of the processability, the portability of
all this across the networks.  How do we pull those three together?

Adding a question that reflected HOCKEY's comment that this was the
fourth workshop she had attended in the previous thirty days, FLEISCHHAUER
wondered to what extent this meeting had reinvented the wheel, or if it
had contributed anything in the way of bringing together a different group
of people from those who normally appear on the workshop circuit.

HOCKEY confessed to being struck at this meeting and the one the
Electronic Pierce Consortium organized the previous week that this was a
coming together of people working on texts and not images.  Attempting to
bring the two together is something we ought to be thinking about for the
future:  How one can think about working with image material to begin
with, but structuring it and digitizing it in such a way that at a later
stage it can be interpreted into text, and find a common way of building
text and images together so that they can be used jointly in the future,
with the network support to begin there because that is how people will
want to access it.

In planning the long-term development of something, which is what is
being done in electronic text, HOCKEY stressed the importance not only
of discussing the technical aspects of how one does it but particularly
of thinking about what the people who use the stuff will want to do.
But conversely, there are numerous things that people start to do with
electronic text or material that nobody ever thought of in the beginning.

LESK, in response to the question concerning the role of the Library of
Congress, remarked the often suggested desideratum of having electronic
deposit:  Since everything is now computer-typeset, an entire decade of
material that was machine-readable exists, but the publishers frequently
did not save it; has LC taken any action to have its copyright deposit
operation start collecting these machine-readable versions?  In the
absence of PETERS, GIFFORD replied that the question was being
actively considered but that that was only one dimension of the problem.
Another dimension is the whole question of the integrity of the original
electronic document.  It becomes highly important in science to prove
authorship.  How will that be done?

ERWAY explained that, under the old policy, to make a claim for a
copyright for works that were published in electronic form, including
software, one had to submit a paper copy of the first and last twenty
pages of code--something that represented the work but did not include
the entire work itself and had little value to anyone.  As a temporary
measure, LC has claimed the right to demand electronic versions of
electronic publications.  This measure entails a proactive role for the
Library to say that it wants a particular electronic version.  Publishers
then have perhaps a year to submit it.  But the real problem for LC is
what to do with all this material in all these different formats.  Will
the Library mount it?  How will it give people access to it?  How does LC
keep track of the appropriate computers, software, and media?  The situation
is so hard to control, ERWAY said, that it makes sense for each publishing
house to maintain its own archive.  But LC cannot enforce that either.

GIFFORD acknowledged LESK's suggestion that establishing a priority
offered the solution, albeit a fairly complicated one.  But who maintains
that register?, he asked.  GRABER noted that LC does attempt to collect a
Macintosh version and the IBM-compatible version of software.  It does
not collect other versions.  But while true for software, BYRUM observed,
this reply does not speak to materials, that is, all the materials that
were published that were on somebody's microcomputer or driver tapes
at a publishing office across the country.  LC does well to acquire
specific machine-readable products selectively that were intended to be
machine-readable.  Materials that were in machine-readable form at one time,
BYRUM said, would be beyond LC's capability at the moment, insofar as
attempting to acquire, organize, and preserve them are concerned--and
preservation would be the most important consideration.  In this
connection, GIFFORD reiterated the need to work out some sense of
distributive responsibility for a number of these issues, which
inevitably will require significant cooperation and discussion.
Nobody can do it all.

LESK suggested that some publishers may look with favor on LC beginning
to serve as a depository of tapes in an electronic manuscript standard. 
Publishers may view this as a service that they did not have to perform
and they might send in tapes.  However, SPERBERG-McQUEEN countered,
although publishers have had equivalent services available to them for a
long time, the electronic text archive has never turned away or been
flooded with tapes and is forever sending feedback to the depositor. 
Some publishers do send in tapes.

ANDRE viewed this discussion as an allusion to the issue of standards. 
She recommended that the AAP standard and the TEI, which has already been
somewhat harmonized internationally and which also shares several
compatibilities with the AAP, be harmonized to ensure sufficient
compatibility in the software.  She drew the line at saying LC ought to
be the locus or forum for such harmonization.

Taking the group in a slightly different direction, but one where at
least in the near term LC might play a helpful role, LYNCH remarked the
plans of a number of projects to carry out preservation by creating
digital images that will end up in on-line or near-line storage at some
institution.   Presumably, LC will link this material somehow to its
on-line catalog in most cases.  Thus, it is in a digital form.  LYNCH had
the impression that many of these institutions would be willing to make
those files accessible to other people outside the institution, provided
that there is no copyright problem.  This desideratum will require
propagating the knowledge that those digitized files exist, so that they
can end up in other on-line catalogs.  Although uncertain about the
mechanism for achieving this result, LYNCH said that it warranted
scrutiny because it seemed to be connected to some of the basic issues of
cataloging and distribution of records.  It would be  foolish, given the
amount of work that all of us have to do and our meager resources, to
discover multiple institutions digitizing the same work.  Re microforms,
LYNCH said, we are in pretty good shape.

BATTIN called this a big problem and noted that the Cornell people (who
had already departed) were working on it.  At issue from the beginning
was to learn how to catalog that information into RLIN and then into
OCLC, so that it would be accessible.  That issue remains to be resolved. 
LYNCH rejoined that putting it into OCLC or RLIN was helpful insofar as
somebody who is thinking of performing preservation activity on that work
could learn about it.  It is not necessarily helpful for institutions to
make that available.  BATTIN opined that the idea was that it not only be
for preservation purposes but for the convenience of people looking for
this material.  She endorsed LYNCH's dictum that duplication of this
effort was to be avoided by every means.

HOCKEY informed the Workshop about one major current activity of CETH,
namely a catalogue of machine-readable texts in the humanities.  Held on
RLIN at present, the catalogue has been concentrated on ASCII as opposed
to digitized images of text.  She is exploring ways to improve the
catalogue and make it more widely available, and welcomed suggestions
about these concerns.  CETH owns the records, which are not just
restricted to RLIN, and can distribute them however it wishes.

Taking up LESK's earlier question, BATTIN inquired whether LC, since it
is accepting electronic files and designing a mechanism for dealing with
that rather than putting books on shelves, would become responsible for
the National Copyright Depository of Electronic Materials.  Of course
that could not be accomplished overnight, but it would be something LC
could plan for.  GIFFORD acknowledged that much thought was being devoted
to that set of problems and returned the discussion to the issue raised
by LYNCH--whether or not putting the kind of records that both BATTIN and
HOCKEY have been talking about in RLIN is not a satisfactory solution. 
It seemed to him that RLIN answered LYNCH's original point concerning
some kind of directory for these kinds of materials.  In a situation
where somebody is attempting to decide whether or not to scan this or
film that or to learn whether or not someone has already done so, LYNCH
suggested, RLIN is helpful, but it is not helpful in the case of a local,
on-line catalogue.  Further, one would like to have her or his system be
aware that that exists in digital form, so that one can present it to a
patron, even though one did not digitize it, if it is out of copyright. 
The only way to make those linkages would be to perform a tremendous
amount of real-time look-up, which would be awkward at best, or
periodically to yank the whole file from RLIN and match it against one's
own stuff, which is a nuisance.

But where, ERWAY inquired, does one stop including things that are
available with Internet, for instance, in one's local catalogue?
It almost seems that that is LC's means to acquire access to them.
That represents LC's new form of library loan.  Perhaps LC's new on-line
catalogue is an amalgamation of all these catalogues on line.  LYNCH
conceded that perhaps that was true in the very long term, but was not
applicable to scanning in the short term.  In his view, the totals cited
by Yale, 10,000 books over perhaps a four-year period, and 1,000-1,500
books from Cornell, were not big numbers, while searching all over
creation for relatively rare occurrences will prove to be less efficient. 
As GIFFORD wondered if this would not be a separable file on RLIN and
could be requested from them, BATTIN interjected that it was easily
accessible to an institution.  SEVERTSON pointed out that that file, cum
enhancements, was available with reference information on CD-ROM, which
makes it a little more available.

In HOCKEY's view, the real question facing the Workshop is what to put in
this catalogue, because that raises the question of what constitutes a
publication in the electronic world.  (WEIBEL interjected that Eric Joule
in OCLC's Office of Research is also wrestling with this particular
problem, while GIFFORD thought it sounded fairly generic.)  HOCKEY
contended that a majority of texts in the humanities are in the hands
of either a small number of large research institutions or individuals
and are not generally available for anyone else to access at all.
She wondered if these texts ought to be catalogued.

After argument proceeded back and forth for several minutes over why
cataloguing might be a necessary service, LEBRON suggested that this
issue involved the responsibility of a publisher.  The fact that someone
has created something electronically and keeps it under his or her
control does not constitute publication.  Publication implies
dissemination.  While it would be important for a scholar to let other
people know that this creation exists, in many respects this is no
different from an unpublished manuscript.  That is what is being accessed
in there, except that now one is not looking at it in the hard-copy but
in the electronic environment.

LEBRON expressed puzzlement at the variety of ways electronic publishing
has been viewed.  Much of what has been discussed throughout these two
days has concerned CD-ROM publishing, whereas in the on-line environment
that she confronts, the constraints and challenges are very different. 
Sooner or later LC will have to deal with the concept of on-line
publishing.  Taking up the comment ERWAY made earlier about storing
copies, LEBRON gave her own journal as an example.  How would she deposit
OJCCT for copyright?, she asked, because the journal will exist in the
mainframe at OCLC and people will be able to access it.  Here the
situation is different, ownership versus access, and is something that
arises with publication in the on-line environment, faster than is
sometimes realized.  Lacking clear answers to all of these questions
herself, LEBRON did not anticipate that LC would be able to take a role
in helping to define some of them for quite a while.

GREENFIELD observed that LC's Network Development Office is attempting,
among other things, to explore the limits of MARC as a standard in terms
of handling electronic information.  GREENFIELD also noted that Rebecca
GUENTHER from that office gave a paper to the American Society for
Information Science (ASIS) summarizing several of the discussion papers
that were coming out of the Network Development Office.  GREENFIELD said
he understood that that office had a list-server soliciting just the kind
of feedback received today concerning the difficulties of identifying and
cataloguing electronic information.  GREENFIELD hoped that everybody
would be aware of that and somehow contribute to that conversation.

Noting two of LC's roles, first, to act as a repository of record for
material that is copyrighted in this country, and second, to make
materials it holds available in some limited form to a clientele that
goes beyond Congress, BESSER suggested that it was incumbent on LC to
extend those responsibilities to all the things being published in
electronic form.  This would mean eventually accepting electronic
formats.  LC could require that at some point they be in a certain
limited set of formats, and then develop mechanisms for allowing people
to access those in the same way that other things are accessed.  This
does not imply that they are on the network and available to everyone. 
LC does that with most of its bibliographic records, BESSER said, which
end up migrating to the utility (e.g., OCLC) or somewhere else.  But just
as most of LC's books are available in some form through interlibrary
loan or some other mechanism, so in the same way electronic formats ought
to be available to others in some format, though with some copyright
considerations.  BESSER was not suggesting that these mechanisms be
established tomorrow, only that they seemed to fall within LC's purview,
and that there should be long-range plans to establish them.

Acknowledging that those from LC in the room agreed with BESSER
concerning the need to confront difficult questions, GIFFORD underscored
the magnitude of the problem of what to keep and what to select.  GIFFORD
noted that LC currently receives some 31,000 items per day, not counting
electronic materials, and argued for much more distributed responsibility
in order to maintain and store electronic information.

BESSER responded that the assembled group could be viewed as a starting
point, whose initial operating premise could be helping to move in this
direction and defining how LC could do so, for example, in areas of
standardization or distribution of responsibility.

FLEISCHHAUER added that AM was fully engaged, wrestling with some of the
questions that pertain to the conversion of older historical materials,
which would be one thing that the Library of Congress might do.  Several
points mentioned by BESSER and several others on this question have a
much greater impact on those who are concerned with cataloguing and the
networking of bibliographic information, as well as preservation itself.

Speaking directly to AM, which he considered was a largely uncopyrighted
database, LYNCH urged development of a network version of AM, or
consideration of making the data in it available to people interested in
doing network multimedia.  On account of the current great shortage of
digital data that is both appealing and unencumbered by complex rights
problems, this course of action could have a significant effect on making
network multimedia a reality.

In this connection, FLEISCHHAUER reported on a fragmentary prototype in
LC's Office of Information Technology Services that attempts to associate
digital images of photographs with cataloguing information in ways that
work within a local area network--a step, so to say, toward AM's
construction of some sort of apparatus for access.  Further, AM has
attempted to use standard data forms in order to help make that
distinction between the access tools and the underlying data, and thus
believes that the database is networkable.

A delicate and agonizing policy question for LC, however, which comes
back to resources and unfortunately has an impact on this, is to find
some appropriate, honorable, and legal cost-recovery possibilities.  A
certain skittishness concerning cost-recovery has made people unsure
exactly what to do.  AM would be highly receptive to discussing further
LYNCH's offer to test or demonstrate its database in a network
environment, FLEISCHHAUER said.

Returning the discussion to what she viewed as the vital issue of
electronic deposit, BATTIN recommended that LC initiate a catalytic
process in terms of distributed responsibility, that is, bring together
the distributed organizations and set up a study group to look at all
these issues and see where we as a nation should move.  The broader
issues of how we deal with the management of electronic information will
not disappear, but only grow worse.

LESK took up this theme and suggested that LC attempt to persuade one
major library in each state to deal with its state equivalent publisher,
which might produce a cooperative project that would be equitably
distributed around the country, and one in which LC would be dealing with
a minimal number of publishers and minimal copyright problems.

GRABER remarked the recent development in the scientific community of a
willingness to use SGML and either deposit or interchange on a fairly
standardized format.  He wondered if a similar movement was taking place
in the humanities.  Although the National Library of Medicine found only
a few publishers to cooperate in a like venture two or three years ago, a
new effort might generate a much larger number willing to cooperate.

KIMBALL recounted his unit's (Machine-Readable Collections Reading Room)
troubles with the commercial publishers of electronic media in acquiring
materials for LC's collections, in particular the publishers' fear that
they would not be able to cover their costs and would lose control of
their products, that LC would give them away or sell them and make
profits from them.  He doubted that the publishing industry was prepared
to move into this area at the moment, given its resistance to allowing LC
to use its machine-readable materials as the Library would like.

The copyright law now addresses compact disk as a medium, and LC can
request one copy of that, or two copies if it is the only version, and
can request copies of software, but that fails to address magazines or
books or anything like that which is in machine-readable form.

GIFFORD acknowledged the thorny nature of this issue, which he illustrated
with the example of the cumbersome process involved in putting a copy of a
scientific database on a LAN in LC's science reading room.  He also
acknowledged that LC needs help and could enlist the energies and talents
of Workshop participants in thinking through a number of these problems.

GIFFORD returned the discussion to getting the image and text people to
think through together where they want to go in the long term.  MYLONAS
conceded that her experience at the Pierce Symposium the previous week at
Georgetown University and this week at LC had forced her to reevaluate
her perspective on the usefulness of text as images.  MYLONAS framed the
issues in a series of questions:  How do we acquire machine-readable
text?  Do we take pictures of it and perform OCR on it later?  Is it
important to obtain very high-quality images and text, etc.? 
FLEISCHHAUER agreed with MYLONAS's framing of strategic questions, adding
that a large institution such as LC probably has to do all of those
things at different times.  Thus, the trick is to exercise judgment.  The
Workshop had added to his and AM's considerations in making those
judgments.  Concerning future meetings or discussions, MYLONAS suggested
that screening priorities would be helpful.

WEIBEL opined that the diversity reflected in this group was a sign both
of the health and of the immaturity of the field, and more time would
have to pass before we convince one another concerning standards.

An exchange between MYLONAS and BATTIN clarified the point that the
driving force behind both the Perseus and the Cornell Xerox projects was
the preservation of knowledge for the future, not simply for particular
research use.  In the case of Perseus, MYLONAS said, the assumption was
that the texts would not be entered again into electronically readable
form.  SPERBERG-McQUEEN added that a scanned image would not serve as an
archival copy for purposes of preservation in the case of, say, the Bill
of Rights, in the sense that the scanned images are effectively the
archival copies for the Cornell mathematics books.


               ***   ***   ***   ******   ***   ***   ***


                          Appendix I:  PROGRAM



                                WORKSHOP
                                   ON
                               ELECTRONIC
                                  TEXTS



                             9-10 June 1992

                           Library of Congress
                            Washington, D.C.



    Supported by a Grant from the David and Lucile Packard Foundation


Tuesday, 9 June 1992

NATIONAL DEMONSTRATION LAB, ATRIUM, LIBRARY MADISON

8:30 AM   Coffee and Danish, registration

9:00 AM   Welcome

          Prosser Gifford, Director for Scholarly Programs, and Carl
             Fleischhauer, Coordinator, American Memory, Library of
             Congress

9:l5 AM   Session I.  Content in a New Form:  Who Will Use It and What
          Will They Do?

          Broad description of the range of electronic information. 
          Characterization of who uses it and how it is or may be used. 
          In addition to a look at scholarly uses, this session will
          include a presentation on use by students (K-12 and college)
          and the general public.

          Moderator:  James Daly
          Avra Michelson, Archival Research and Evaluation Staff,
             National Archives and Records Administration (Overview)
          Susan H. Veccia, Team Leader, American Memory, User Evaluation,
             and
          Joanne Freeman, Associate Coordinator, American Memory, Library
             of Congress (Beyond the scholar)

10:30-
11:00 AM  Break

11:00 AM  Session II.  Show and Tell.

          Each presentation to consist of a fifteen-minute
          statement/show; group discussion will follow lunch.

          Moderator:  Jacqueline Hess, Director, National Demonstration
             Lab

            1.  A classics project, stressing texts and text retrieval
                more than multimedia:  Perseus Project, Harvard
                University
                Elli Mylonas, Managing Editor

            2.  Other humanities projects employing the emerging norms of
                the Text Encoding Initiative (TEI):  Chadwyck-Healey's
                The English Poetry Full Text Database and/or Patrologia
                Latina Database
                Eric M. Calaluca, Vice President, Chadwyck-Healey, Inc.

            3.  American Memory
                Carl Fleischhauer, Coordinator, and
                Ricky Erway, Associate Coordinator, Library of Congress

            4.  Founding Fathers example from Packard Humanities
                Institute:  The Papers of George Washington, University
                of Virginia
                Dorothy Twohig, Managing Editor, and/or
                David Woodley Packard

            5.  An electronic medical journal offering graphics and
                full-text searchability:  The Online Journal of Current
                Clinical Trials, American Association for the Advancement
                of Science
                Maria L. Lebron, Managing Editor

            6.  A project that offers facsimile images of pages but omits
                searchable text:  Cornell math books
                Lynne K. Personius, Assistant Director, Cornell
                   Information Technologies for Scholarly Information
                   Sources, Cornell University

12:30 PM  Lunch  (Dining Room A, Library Madison 620.  Exhibits
          available.)

1:30 PM   Session II.  Show and Tell (Cont'd.).

3:00-
3:30 PM   Break

3:30-
5:30 PM   Session III.  Distribution, Networks, and Networking:  Options
          for Dissemination.

          Published disks:  University presses and public-sector
             publishers, private-sector publishers
          Computer networks

          Moderator:  Robert G. Zich, Special Assistant to the Associate
             Librarian for Special Projects, Library of Congress
          Clifford A. Lynch, Director, Library Automation, University of
             California
          Howard Besser, School of Library and Information Science,
             University of Pittsburgh
          Ronald L. Larsen, Associate Director of Libraries for
             Information Technology, University of Maryland at College
             Park
          Edwin B. Brownrigg, Executive Director, Memex Research
             Institute

6:30 PM   Reception  (Montpelier Room, Library Madison 619.)

                                 ******

Wednesday, 10 June 1992

DINING ROOM A, LIBRARY MADISON 620

8:30 AM   Coffee and Danish

9:00 AM   Session IV.  Image Capture, Text Capture, Overview of Text and
          Image Storage Formats.

          Moderator:  William L. Hooton, Vice President of Operations,
             I-NET

          A) Principal Methods for Image Capture of Text:
             Direct scanning
             Use of microform

          Anne R. Kenney, Assistant Director, Department of Preservation
             and Conservation, Cornell University
          Pamela Q.J. Andre, Associate Director, Automation, and
          Judith A. Zidar, Coordinator, National Agricultural Text
             Digitizing Program (NATDP), National Agricultural Library
             (NAL)
          Donald J. Waters, Head, Systems Office, Yale University Library

          B) Special Problems:
             Bound volumes
             Conservation
             Reproducing printed halftones

          Carl Fleischhauer, Coordinator, American Memory, Library of
             Congress
          George Thoma, Chief, Communications Engineering Branch,
             National Library of Medicine (NLM)

10:30-
11:00 AM  Break

11:00 AM  Session IV.  Image Capture, Text Capture, Overview of Text and
          Image Storage Formats (Cont'd.).

          C) Image Standards and Implications for Preservation

          Jean Baronas, Senior Manager, Department of Standards and
             Technology, Association for Information and Image Management
             (AIIM)
          Patricia Battin, President, The Commission on Preservation and
             Access (CPA)

          D) Text Conversion:
             OCR vs. rekeying
             Standards of accuracy and use of imperfect texts
             Service bureaus

          Stuart Weibel, Senior Research Specialist, Online Computer
             Library Center, Inc. (OCLC)
          Michael Lesk, Executive Director, Computer Science Research,
             Bellcore
          Ricky Erway, Associate Coordinator, American Memory, Library of
             Congress
          Pamela Q.J. Andre, Associate Director, Automation, and
          Judith A. Zidar, Coordinator, National Agricultural Text
             Digitizing Program (NATDP), National Agricultural Library
             (NAL)

12:30-
1:30 PM   Lunch

1:30 PM   Session V.  Approaches to Preparing Electronic Texts.

          Discussion of approaches to structuring text for the computer;
          pros and cons of text coding, description of methods in
          practice, and comparison of text-coding methods.

          Moderator:  Susan Hockey, Director, Center for Electronic Texts
             in the Humanities (CETH), Rutgers and Princeton Universities
          David Woodley Packard
          C.M. Sperberg-McQueen, Editor, Text Encoding Initiative (TEI),
             University of Illinois-Chicago
          Eric M. Calaluca, Vice President, Chadwyck-Healey, Inc.

3:30-
4:00 PM   Break

4:00 PM   Session VI.  Copyright Issues.

          Marybeth Peters, Policy Planning Adviser to the Register of
             Copyrights, Library of Congress

5:00 PM   Session VII. Conclusion.

          General discussion.
          What topics were omitted or given short shrift that anyone
             would like to talk about now?
          Is there a "group" here?  What should the group do next, if
             anything?  What should the Library of Congress do next, if
             anything?
          Moderator:  Prosser Gifford, Director for Scholarly Programs,
             Library of Congress

6:00 PM   Adjourn


               ***   ***   ***   ******   ***   ***   ***


                         Appendix II:  ABSTRACTS


SESSION I

Avra MICHELSON           Forecasting the Use of Electronic Texts by
                         Social Sciences and Humanities Scholars

This presentation explores the ways in which electronic texts are likely
to be used by the non-scientific scholarly community.  Many of the
remarks are drawn from a report the speaker coauthored with Jeff
Rothenberg, a computer scientist at The RAND Corporation.

The speaker assesses 1) current scholarly use of information technology
and 2) the key trends in information technology most relevant to the
research process, in order to predict how social sciences and humanities
scholars are apt to use electronic texts.  In introducing the topic,
current use of electronic texts is explored broadly within the context of
scholarly communication.  From the perspective of scholarly
communication, the work of humanities and social sciences scholars
involves five processes:  1) identification of sources, 2) communication
with colleagues, 3) interpretation and analysis of data, 4) dissemination
of research findings, and 5) curriculum development and instruction.  The
extent to which computation currently permeates aspects of scholarly
communication represents a viable indicator of the prospects for
electronic texts.

The discussion of current practice is balanced by an analysis of key
trends in the scholarly use of information technology.  These include the
trends toward end-user computing and connectivity, which provide a
framework for forecasting the use of electronic texts through this
millennium.  The presentation concludes with a summary of the ways in
which the nonscientific scholarly community can be expected to use
electronic texts, and the implications of that use for information
providers.

Susan VECCIA and Joanne FREEMAN    Electronic Archives for the Public: 
                                   Use of American Memory in Public and
                                   School Libraries

This joint discussion focuses on nonscholarly applications of electronic
library materials, specifically addressing use of the Library of Congress
American Memory (AM) program in a small number of public and school
libraries throughout the United States.  AM consists of selected Library
of Congress primary archival materials, stored on optical media
(CD-ROM/videodisc), and presented with little or no editing.  Many
collections are accompanied by electronic introductions and user's guides
offering background information and historical context.  Collections
represent a variety of formats including photographs, graphic arts,
motion pictures, recorded sound, music, broadsides and manuscripts,
books, and pamphlets.

In 1991, the Library of Congress began a nationwide evaluation of AM in
different types of institutions.  Test sites include public libraries,
elementary and secondary school libraries, college and university
libraries, state libraries, and special libraries.  Susan VECCIA and
Joanne FREEMAN will discuss their observations on the use of AM by the
nonscholarly community, using evidence gleaned from this ongoing
evaluation effort.

VECCIA will comment on the overall goals of the evaluation project, and
the types of public and school libraries included in this study.  Her
comments on nonscholarly use of AM will focus on the public library as a
cultural and community institution, often bridging the gap between formal
and informal education.  FREEMAN will discuss the use of AM in school
libraries.  Use by students and teachers has revealed some broad
questions about the use of electronic resources, as well as definite
benefits gained by the "nonscholar."  Topics will include the problem of
grasping content and context in an electronic environment, the stumbling
blocks created by "new" technologies, and the unique skills and interests
awakened through use of electronic resources.

SESSION II

Elli MYLONAS             The Perseus Project:  Interactive Sources and
                         Studies in Classical Greece

The Perseus Project (5) has just released Perseus 1.0, the first publicly
available version of its hypertextual database of multimedia materials on
classical Greece.  Perseus is designed to be used by a wide audience,
comprised of readers at the student and scholar levels.  As such, it must
be able to locate information using different strategies, and it must
contain enough detail to serve the different needs of its users.  In
addition, it must be delivered so that it is affordable to its target
audience.  [These problems and the solutions we chose are described in
Mylonas, "An Interface to Classical Greek Civilization," JASIS 43:2,
March 1992.]

In order to achieve its objective, the project staff decided to make a
conscious separation between selecting and converting textual, database,
and image data on the one hand, and putting it into a delivery system on
the other.  That way, it is possible to create the electronic data
without thinking about the restrictions of the delivery system.  We have
made a great effort to choose system-independent formats for our data,
and to put as much thought and work as possible into structuring it so
that the translation from paper to electronic form will enhance the value
of the data. [A discussion of these solutions as of two years ago is in
Elli Mylonas, Gregory Crane, Kenneth Morrell, and D. Neel Smith, "The
Perseus Project:  Data in the Electronic Age," in Accessing Antiquity: 
The Computerization of Classical Databases, J. Solomon and T. Worthen
(eds.),  University of Arizona Press, in press.]

Much of the work on Perseus is focused on collecting and converting the
data on which the project is based.  At the same time, it is necessary to
provide means of access to the information, in order to make it usable,
and them to investigate how it is used.  As we learn more about what
students and scholars from different backgrounds do with Perseus, we can
adjust our data collection, and also modify the system to accommodate
them.  In creating a delivery system for general use, we have tried to
avoid favoring any one type of use by allowing multiple forms of access
to and navigation through the system.

The way text is handled exemplifies some of these principles.  All text
in Perseus is tagged using SGML, following the guidelines of the Text
Encoding Initiative (TEI).  This markup is used to index the text, and
process it so that it can be imported into HyperCard.  No SGML markup
remains in the text that reaches the user, because currently it would be
too expensive to create a system that acts on SGML in real time. 
However, the regularity provided by SGML is essential for verifying the
content of the texts, and greatly speeds all the processing performed on
them.  The fact that the texts exist in SGML ensures that they will be
relatively easy to port to different hardware and software, and so will
outlast the current delivery platform.  Finally, the SGML markup
incorporates existing canonical reference systems (chapter, verse, line,
etc.); indexing and navigation are based on these features.  This ensures
that the same canonical reference will always resolve to the same point
within a text, and that all versions of our texts, regardless of delivery
platform (even paper printouts) will function the same way.

In order to provide tools for users, the text is processed by a
morphological analyzer, and the results are stored in a database. 
Together with the index, the Greek-English Lexicon, and the index of all
the English words in the definitions of the lexicon, the morphological
analyses comprise a set of linguistic tools that allow users of all
levels to work with the textual information, and to accomplish different
tasks.  For example, students who read no Greek may explore a concept as
it appears in Greek texts by using the English-Greek index, and then
looking up works in the texts and translations, or scholars may do
detailed morphological studies of word use by using the morphological
analyses of the texts.  Because these tools were not designed for any one
use, the same tools and the same data can be used by both students and
scholars.

NOTES:
     (5)  Perseus is based at Harvard University, with collaborators at
     several other universities.  The project has been funded primarily
     by the Annenberg/CPB Project, as well as by Harvard University,
     Apple Computer, and others.  It is published by Yale University
     Press.  Perseus runs on Macintosh computers, under the HyperCard
     program.

Eric CALALUCA

Chadwyck-Healey embarked last year on two distinct yet related full-text
humanities database projects.

The English Poetry Full-Text Database and the Patrologia Latina Database
represent new approaches to linguistic research resources.  The size and
complexity of the projects present problems for electronic publishers,
but surmountable ones if they remain abreast of the latest possibilities
in data capture and retrieval software techniques.

The issues which required address prior to the commencement of the
projects were legion:

     1.   Editorial selection (or exclusion) of materials in each
          database

     2.   Deciding whether or not to incorporate a normative encoding
          structure into the databases?
               A.  If one is selected, should it be SGML?
               B.  If SGML, then the TEI?
     
     3.   Deliver as CD-ROM, magnetic tape, or both?

     4.   Can one produce retrieval software advanced enough for the
          postdoctoral linguist, yet accessible enough for unattended
          general use?  Should one try?

     5.   Re fair and liberal networking policies, what are the risks to
          an electronic publisher?

     6.   How does the emergence of national and international education
          networks affect the use and viability of research projects
          requiring high investment?  Do the new European Community
          directives concerning database protection necessitate two
          distinct publishing projects, one for North America and one for
          overseas?

From new notions of "scholarly fair use" to the future of optical media,
virtually every issue related to electronic publishing was aired.  The
result is two projects which have been constructed to provide the quality
research resources with the fewest encumbrances to use by teachers and
private scholars.

Dorothy TWOHIG

In spring 1988 the editors of the papers of George Washington, John
Adams, Thomas Jefferson, James Madison, and Benjamin Franklin were
approached by classics scholar David Packard on behalf of the Packard
Humanities Foundation with a proposal to produce a CD-ROM edition of the
complete papers of each of the Founding Fathers.  This electronic edition
will supplement the published volumes, making the documents widely
available to students and researchers at reasonable cost.  We estimate
that our CD-ROM edition of Washington's Papers will be substantially
completed within the next two years and ready for publication.  Within
the next ten years or so, similar CD-ROM editions of the Franklin, Adams,
Jefferson, and Madison papers also will be available.  At the Library of
Congress's session on technology, I would like to discuss not only the
experience of the Washington Papers in producing the CD-ROM edition, but
the impact technology has had on these major editorial projects. 
Already, we are editing our volumes with an eye to the material that will
be readily available in the CD-ROM edition.  The completed electronic
edition will provide immense possibilities for the searching of documents
for information in a way never possible before.  The kind of technical
innovations that are currently available and on the drawing board will
soon revolutionize historical research and the production of historical
documents.  Unfortunately, much of this new technology is not being used
in the planning stages of historical projects, simply because many
historians are aware only in the vaguest way of its existence.  At least
two major new historical editing projects are considering microfilm
editions, simply because they are not aware of the possibilities of
electronic alternatives and the advantages of the new technology in terms
of flexibility and research potential compared to microfilm.  In fact,
too many of us in history and literature are still at the stage of
struggling with our PCs.  There are many historical editorial projects in
progress presently, and an equal number of literary projects.  While the
two fields have somewhat different approaches to textual editing, there
are ways in which electronic technology can be of service to both.

Since few of the editors involved in the Founding Fathers CD-ROM editions
are technical experts in any sense, I hope to point out in my discussion
of our experience how many of these electronic innovations can be used
successfully by scholars who are novices in the world of new technology. 
One of the major concerns of the sponsors of the multitude of new
scholarly editions is the limited audience reached by the published
volumes.  Most of these editions are being published in small quantities
and the publishers' price for them puts them out of the reach not only of
individual scholars but of most public libraries and all but the largest
educational institutions.  However, little attention is being given to
ways in which technology can bypass conventional publication to make
historical and literary documents more widely available.

What attracted us most to the CD-ROM edition of The Papers of George
Washington was the fact that David Packard's aim was to make a complete
edition of all of the 135,000 documents we have collected available in an
inexpensive format that would be placed in public libraries, small
colleges, and even high schools.  This would provide an audience far
beyond our present 1,000-copy, $45 published edition.  Since the CD-ROM
edition will carry none of the explanatory annotation that appears in the
published volumes, we also feel that the use of the CD-ROM will lead many
researchers to seek out the published volumes.

In addition to ignorance of new technical advances, I have found that too
many editors--and historians and literary scholars--are resistant and
even hostile to suggestions that electronic technology may enhance their
work.  I intend to discuss some of the arguments traditionalists are
advancing to resist technology, ranging from distrust of the speed with
which it changes (we are already wondering what is out there that is
better than CD-ROM) to suspicion of the technical language used to
describe electronic developments.

Maria LEBRON

The Online Journal of Current Clinical Trials, a joint venture of the
American Association for the Advancement of Science (AAAS) and the Online
Computer Library Center, Inc. (OCLC), is the first peer-reviewed journal
to provide full text, tabular material, and line illustrations on line. 
This presentation will discuss the genesis and start-up period of the
journal.  Topics of discussion will include historical overview,
day-to-day management of the editorial peer review, and manuscript
tagging and publication.  A demonstration of the journal and its features
will accompany the presentation.

Lynne PERSONIUS

Cornell University Library, Cornell Information Technologies, and Xerox
Corporation, with the support of the Commission on Preservation and
Access, and Sun Microsystems, Inc., have been collaborating in a project
to test a prototype system for recording brittle books as digital images
and producing, on demand, high-quality archival paper replacements.  The
project goes beyond that, however, to investigate some of the issues
surrounding scanning, storing, retrieving, and providing access to
digital images in a network environment.

The Joint Study in Digital Preservation began in January 1990.  Xerox
provided the College Library Access and Storage System (CLASS) software,
a prototype 600-dots-per-inch (dpi) scanner, and the hardware necessary
to support network printing on the DocuTech printer housed in Cornell's
Computing and Communications Center (CCC).

The Cornell staff using the hardware and software became an integral part
of the development and testing process for enhancements to the CLASS
software system.  The collaborative nature of this relationship is
resulting in a system that is specifically tailored to the preservation
application.

A digital library of 1,000 volumes (or approximately 300,000 images) has
been created and is stored on an optical jukebox that resides in CCC. 
The library includes a collection of select mathematics monographs that
provides mathematics faculty with an opportunity to use the electronic
library.  The remaining volumes were chosen for the library to test the
various capabilities of the scanning system.

One project objective is to provide users of the Cornell library and the
library staff with the ability to request facsimiles of digitized images
or to retrieve the actual electronic image for browsing.  A prototype
viewing workstation has been created by Xerox, with input into the design
by a committee of Cornell librarians and computer professionals.  This
will allow us to experiment with patron access to the images that make up
the digital library.  The viewing station provides search, retrieval, and
(ultimately) printing functions with enhancements to facilitate
navigation through multiple documents.

Cornell currently is working to extend access to the digital library to
readers using workstations from their offices.  This year is devoted to
the development of a network resident image conversion and delivery
server, and client software that will support readers who use Apple
Macintosh computers, IBM windows platforms, and Sun workstations. 
Equipment for this development was provided by Sun Microsystems with
support from the Commission on Preservation and Access.

During the show-and-tell session of the Workshop on Electronic Texts, a
prototype view station will be demonstrated.  In addition, a display of
original library books that have been digitized will be available for
review with associated printed copies for comparison.  The fifteen-minute
overview of the project will include a slide presentation that
constitutes a "tour" of the preservation digitizing process.

The final network-connected version of the viewing station will provide
library users with another mechanism for accessing the digital library,
and will also provide the capability of viewing images directly.  This
will not require special software, although a powerful computer with good
graphics will be needed.

The Joint Study in Digital Preservation has generated a great deal of
interest in the library community.  Unfortunately, or perhaps
fortunately, this project serves to raise a vast number of other issues
surrounding the use of digital technology for the preservation and use of
deteriorating library materials, which subsequent projects will need to
examine.  Much work remains.

SESSION III

Howard BESSER                      Networking Multimedia Databases

What do we have to consider in building and distributing databases of
visual materials in a multi-user environment?  This presentation examines
a variety of concerns that need to be addressed before a multimedia
database can be set up in a networked environment.

In the past it has not been feasible to implement databases of visual
materials in shared-user environments because of technological barriers. 
Each of the two basic models for multi-user multimedia databases has
posed its own problem.  The analog multimedia storage model (represented
by Project Athena's parallel analog and digital networks) has required an
incredibly complex (and expensive) infrastructure.  The economies of
scale that make multi-user setups cheaper per user served do not operate
in an environment that requires a computer workstation, videodisc player,
and two display devices for each user.

The digital multimedia storage model has required vast amounts of storage
space (as much as one gigabyte per thirty still images).  In the past the
cost of such a large amount of storage space made this model a
prohibitive choice as well.  But plunging storage costs are finally
making this second alternative viable.

If storage no longer poses such an impediment, what do we need to
consider in building digitally stored multi-user databases of visual
materials?  This presentation will examine the networking and
telecommunication constraints that must be overcome before such databases
can become commonplace and useful to a large number of people.

The key problem is the vast size of multimedia documents, and how this
affects not only storage but telecommunications transmission time. 
Anything slower than T-1 speed is impractical for files of 1 megabyte or
larger (which is likely to be small for a multimedia document).  For
instance, even on a 56 Kb line it would take three minutes to transfer a
1-megabyte file.  And these figures assume ideal circumstances, and do
not take into consideration other users contending for network bandwidth,
disk access time, or the time needed for remote display.  Current common
telephone transmission rates would be completely impractical; few users
would be willing to wait the hour necessary to transmit a single image at
2400 baud.

This necessitates compression, which itself raises a number of other
issues.  In order to decrease file sizes significantly, we must employ
lossy compression algorithms.  But how much quality can we afford to
lose?  To date there has been only one significant study done of
image-quality needs for a particular user group, and this study did not
look at loss resulting from compression.  Only after identifying
image-quality needs can we begin to address storage and network bandwidth
needs.

Experience with X-Windows-based applications (such as Imagequery, the
University of California at Berkeley image database) demonstrates the
utility of a client-server topology, but also points to the limitation of
current software for a distributed environment.  For example,
applications like Imagequery can incorporate compression, but current X
implementations do not permit decompression at the end user's
workstation.  Such decompression at the host computer alleviates storage
capacity problems while doing nothing to address problems of
telecommunications bandwidth.

We need to examine the effects on network through-put of moving
multimedia documents around on a network.  We need to examine various
topologies that will help us avoid bottlenecks around servers and
gateways.  Experience with applications such as these raise still broader
questions. How closely is the multimedia document tied to the software
for viewing it?  Can it be accessed and viewed from other applications? 
Experience with the MARC format (and more recently with the Z39.50
protocols) shows how useful it can be to store documents in a form in
which they can be accessed by a variety of application software.

Finally, from an intellectual-access standpoint, we need to address the
issue of providing access to these multimedia documents in
interdisciplinary environments.  We need to examine terminology and
indexing strategies that will allow us to provide access to this material
in a cross-disciplinary way.

Ronald LARSEN            Directions in High-Performance Networking for
                         Libraries

The pace at which computing technology has advanced over the past forty
years shows no sign of abating.  Roughly speaking, each five-year period
has yielded an order-of-magnitude improvement in price and performance of
computing equipment.  No fundamental hurdles are likely to prevent this
pace from continuing for at least the next decade.  It is only in the
past five years, though, that computing has become ubiquitous in
libraries, affecting all staff and patrons, directly or indirectly.

During these same five years, communications rates on the Internet, the
principal academic computing network, have grown from 56 kbps to 1.5
Mbps, and the NSFNet backbone is now running 45 Mbps.  Over the next five
years, communication rates on the backbone are expected to exceed 1 Gbps. 
Growth in both the population of network users and the volume of network
traffic  has continued to grow geometrically, at rates approaching 15
percent per month.  This flood of capacity and use, likened by some to
"drinking from a firehose,"  creates immense opportunities and challenges
for libraries.  Libraries must anticipate the future implications of this
technology, participate in its development, and deploy it to ensure
access to the world's information resources.

The infrastructure for the information age is being put in place. 
Libraries face strategic decisions about their role in the development,
deployment, and use of this infrastructure.  The emerging infrastructure
is much more than computers and communication lines.  It is more than the
ability to compute at a remote site, send electronic mail to a peer
across the country, or move a file from one library to another.  The next
five years will witness substantial development of the information
infrastructure of the network.

In order to provide appropriate leadership, library professionals must
have a fundamental understanding of and appreciation for computer
networking, from local area networks to the National Research and
Education Network (NREN).  This presentation addresses these
fundamentals, and how they relate to libraries today and in the near
future.

Edwin BROWNRIGG               Electronic Library Visions and Realities

The electronic library has been a vision desired by many--and rejected by
some--since Vannevar Bush coined the term memex to describe an automated,
intelligent, personal information system.  Variations on this vision have
included Ted Nelson's Xanadau, Alan Kay's Dynabook, and Lancaster's
"paperless library," with the most recent incarnation being the
"Knowledge Navigator" described by John Scully of Apple.  But the reality
of library service has been less visionary and the leap to the electronic
library has eluded universities, publishers, and information technology
files.

The Memex Research Institute (MemRI), an independent, nonprofit research
and development organization, has created an Electronic Library Program
of shared research and development in order to make the collective vision
more concrete.  The program is working toward the creation of large,
indexed publicly available electronic image collections of published
documents in academic, special, and public libraries.  This strategic
plan is the result of the first stage of the program, which has been an
investigation of the information technologies available to support such
an effort, the economic parameters of electronic service compared to
traditional library operations, and the business and political factors
affecting the shift from print distribution to electronic networked
access.

The strategic plan envisions a combination of publicly searchable access
databases, image (and text) document collections stored on network "file
servers," local and remote network access, and an intellectual property
management-control system.  This combination of technology and
information content is defined in this plan as an E-library or E-library
collection.  Some participating sponsors are already developing projects
based on MemRI's recommended directions.

The E-library strategy projected in this plan is a visionary one that can
enable major changes and improvements in academic, public, and special
library service.  This vision is, though, one that can be realized with
today's technology.  At the same time, it will challenge the political
and social structure within which libraries operate:  in academic
libraries, the traditional emphasis on local collections, extending to
accreditation issues; in public libraries, the potential of electronic
branch and central libraries fully available to the public; and for
special libraries, new opportunities for shared collections and networks.

The environment in which this strategic plan has been developed is, at
the moment, dominated by a sense of library limits.  The continued
expansion and rapid growth of local academic library collections is now
clearly at an end.  Corporate libraries, and even law libraries, are
faced with operating within a difficult economic climate, as well as with
very active competition from commercial information sources.  For
example, public libraries may be seen as a desirable but not critical
municipal service in a time when the budgets of safety and health
agencies are being cut back.

Further, libraries in general have a very high labor-to-cost ratio in
their budgets, and labor costs are still increasing, notwithstanding
automation investments.  It is difficult for libraries to obtain capital,
startup, or seed funding for innovative activities, and those
technology-intensive initiatives that offer the potential of decreased
labor costs can provoke the opposition of library staff.

However, libraries have achieved some considerable successes in the past
two decades by improving both their service and their credibility within
their organizations--and these positive changes have been accomplished
mostly with judicious use of information technologies.  The advances in
computing and information technology have been well-chronicled:  the
continuing precipitous drop in computing costs, the growth of the
Internet and private networks, and the explosive increase in publicly
available information databases.

For example, OCLC has become one of the largest computer network
organizations in the world by creating a cooperative cataloging network
of more than 6,000 libraries worldwide.  On-line public access catalogs
now serve millions of users on more than 50,000 dedicated terminals in
the United States alone.  The University of California MELVYL on-line
catalog system has now expanded into an index database reference service
and supports more than six million searches a year.  And, libraries have
become the largest group of customers of CD-ROM publishing technology;
more than 30,000 optical media publications such as those offered by
InfoTrac and Silver Platter are subscribed to by U.S. libraries.

This march of technology continues and in the next decade will result in
further innovations that are extremely difficult to predict.  What is
clear is that libraries can now go beyond automation of their order files
and catalogs to automation of their collections themselves--and it is
possible to circumvent the fiscal limitations that appear to obtain
today.

This Electronic Library Strategic Plan recommends a paradigm shift in
library service, and demonstrates the steps necessary to provide improved
library services with limited capacities and operating investments.

SESSION IV-A

Anne KENNEY

The Cornell/Xerox Joint Study in Digital Preservation resulted in the
recording of 1,000 brittle books as 600-dpi digital images and the
production, on demand, of high-quality and archivally sound paper
replacements.  The project, which was supported by the Commission on
Preservation and Access, also investigated some of the issues surrounding
scanning, storing, retrieving, and providing access to digital images in
a network environment.

Anne Kenney will focus on some of the issues surrounding direct scanning
as identified in the Cornell Xerox Project.  Among those to be discussed
are:  image versus text capture; indexing and access; image-capture
capabilities; a comparison to photocopy and microfilm; production and
cost analysis; storage formats, protocols, and standards; and the use of
this scanning technology for preservation purposes.

The 600-dpi digital images produced in the Cornell Xerox Project proved
highly acceptable for creating paper replacements of deteriorating
originals.  The 1,000 scanned volumes provided an array of image-capture
challenges that are common to nineteenth-century printing techniques and
embrittled material, and that defy the use of text-conversion processes. 
These challenges include diminished contrast between text and background,
fragile and deteriorated pages, uneven printing, elaborate type faces,
faint and bold text adjacency, handwritten text and annotations, nonRoman
languages, and a proliferation of illustrated material embedded in text. 
The latter category included high-frequency and low-frequency halftones,
continuous tone photographs, intricate mathematical drawings, maps,
etchings, reverse-polarity drawings, and engravings.

The Xerox prototype scanning system provided a number of important
features for capturing this diverse material.  Technicians used multiple
threshold settings, filters, line art and halftone definitions,
autosegmentation, windowing, and software-editing programs to optimize
image capture.  At the same time, this project focused on production. 
The goal was to make scanning as affordable and acceptable as
photocopying and microfilming for preservation reformatting.  A
time-and-cost study conducted during the last three months of this
project confirmed the economic viability of digital scanning, and these
findings will be discussed here.

From the outset, the Cornell Xerox Project was predicated on the use of
nonproprietary standards and the use of common protocols when standards
did not exist.  Digital files were created as TIFF images which were
compressed prior to storage using Group 4 CCITT compression.  The Xerox
software is MS DOS based and utilizes off-the shelf programs such as
Microsoft Windows and Wang Image Wizard.  The digital library is designed
to be hardware-independent and to provide interchangeability with other
institutions through network connections.  Access to the digital files
themselves is two-tiered:  Bibliographic records for the computer files
are created in RLIN and Cornell's local system and access into the actual
digital images comprising a book is provided through a document control
structure and a networked image file-server, both of which will be
described.

The presentation will conclude with a discussion of some of the issues
surrounding the use of this technology as a preservation tool (storage,
refreshing, backup).

Pamela ANDRE and Judith ZIDAR

The National Agricultural Library (NAL) has had extensive experience with
raster scanning of printed materials.  Since 1987, the Library has
participated in the National Agricultural Text Digitizing Project (NATDP)
a cooperative effort between NAL and forty-five land grant university
libraries.  An overview of the project will be presented, giving its
history and NAL's strategy for the future.

An in-depth discussion of NATDP will follow, including a description of
the scanning process, from the gathering of the printed materials to the
archiving of the electronic pages.  The type of equipment required for a
stand-alone scanning workstation and the importance of file management
software will be discussed.  Issues concerning the images themselves will
be addressed briefly, such as image format; black and white versus color;
gray scale versus dithering; and resolution.

Also described will be a study currently in progress by NAL to evaluate
the usefulness of converting microfilm to electronic images in order to
improve access.  With the cooperation of Tuskegee University, NAL has
selected three reels of microfilm from a collection of sixty-seven reels
containing the papers, letters, and drawings of George Washington Carver. 
The three reels were converted into 3,500 electronic images using a
specialized microfilm scanner.  The selection, filming, and indexing of
this material will be discussed.

Donald WATERS

Project Open Book, the Yale University Library's effort to convert 10,
000 books from microfilm to digital imagery, is currently in an advanced
state of planning and organization.  The Yale Library has selected a
major vendor to serve as a partner in the project and as systems
integrator.  In its proposal, the successful vendor helped isolate areas
of risk and uncertainty as well as key issues to be addressed during the
life of the project.  The Yale Library is now poised to decide what
material it will convert to digital image form and to seek funding,
initially for the first phase and then for the entire project.

The proposal that Yale accepted for the implementation of Project Open
Book will provide at the end of three phases a conversion subsystem,
browsing stations distributed on the campus network within the Yale
Library, a subsystem for storing 10,000 books at 200 and 600 dots per
inch, and network access to the image printers.  Pricing for the system
implementation assumes the existence of Yale's campus ethernet network
and its high-speed image printers, and includes other requisite hardware
and software, as well as system integration services.  Proposed operating
costs include hardware and software maintenance, but do not include
estimates for the facilities management of the storage devices and image
servers.

Yale selected its vendor partner in a formal process, partly funded by
the Commission for Preservation and Access.  Following a request for
proposal, the Yale Library selected two vendors as finalists to work with
Yale staff to generate a detailed analysis of requirements for Project
Open Book.  Each vendor used the results of the requirements analysis to
generate and submit a formal proposal for the entire project.  This
competitive process not only enabled the Yale Library to select its
primary vendor partner but also revealed much about the state of the
imaging industry, about the varying, corporate commitments to the markets
for imaging technology, and about the varying organizational dynamics
through which major companies are responding to and seeking to develop
these markets.

Project Open Book is focused specifically on the conversion of images
from microfilm to digital form.  The technology for scanning microfilm is
readily available but is changing rapidly.  In its project requirements,
the Yale Library emphasized features of the technology that affect the
technical quality of digital image production and the costs of creating
and storing the image library:  What levels of digital resolution can be
achieved by scanning microfilm?  How does variation in the quality of
microfilm, particularly in film produced to preservation standards,
affect the quality of the digital images?  What technologies can an
operator effectively and economically apply when scanning film to
separate two-up images and to control for and correct image
imperfections?  How can quality control best be integrated into
digitizing work flow that includes document indexing and storage?

The actual and expected uses of digital images--storage, browsing,
printing, and OCR--help determine the standards for measuring their
quality.  Browsing is especially important, but the facilities available
for readers to browse image documents is perhaps the weakest aspect of
imaging technology and most in need of development.  As it defined its
requirements, the Yale Library concentrated on some fundamental aspects
of usability for image documents:  Does the system have sufficient
flexibility to handle the full range of document types, including
monographs, multi-part and multivolume sets, and serials, as well as
manuscript collections?  What conventions are necessary to identify a
document uniquely for storage and retrieval?  Where is the database of
record for storing bibliographic information about the image document? 
How are basic internal structures of documents, such as pagination, made
accessible to the reader?  How are the image documents physically
presented on the screen to the reader?

The Yale Library designed Project Open Book on the assumption that
microfilm is more than adequate as a medium for preserving the content of
deteriorated library materials.  As planning in the project has advanced,
it is increasingly clear that the challenge of digital image technology
and the key to the success of efforts like Project Open Book is to
provide a means of both preserving and improving access to those
deteriorated materials.

SESSION IV-B

George THOMA

In the use of electronic imaging for document preservation, there are
several issues to consider, such as:  ensuring adequate image quality,
maintaining substantial conversion rates (through-put), providing unique
identification for automated access and retrieval, and accommodating
bound volumes and fragile material.

To maintain high image quality, image processing functions are required
to correct the deficiencies in the scanned image.  Some commercially
available systems include these functions, while some do not.  The
scanned raw image must be processed to correct contrast deficiencies--
both poor overall contrast resulting from light print and/or dark
background, and variable contrast resulting from stains and
bleed-through.  Furthermore, the scan density must be adequate to allow
legibility of print and sufficient fidelity in the pseudo-halftoned gray
material.  Borders or page-edge effects must be removed for both
compactibility and aesthetics.  Page skew must be corrected for aesthetic
reasons and to enable accurate character recognition if desired. 
Compound images consisting of both two-toned text and gray-scale
illustrations must be processed appropriately to retain the quality of
each.

SESSION IV-C

Jean BARONAS

Standards publications being developed by scientists, engineers, and
business managers in Association for Information and Image Management
(AIIM) standards committees can be applied to electronic image management
(EIM) processes including:  document (image) transfer, retrieval and
evaluation; optical disk and document scanning; and document design and
conversion.  When combined with EIM system planning and operations,
standards can assist in generating image databases that are
interchangeable among a variety of systems.  The applications of
different approaches for image-tagging, indexing, compression, and
transfer often cause uncertainty concerning EIM system compatibility,
calibration, performance, and upward compatibility, until standard
implementation parameters are established.  The AIIM standards that are
being developed for these applications can be used to decrease the
uncertainty, successfully integrate imaging processes, and promote "open
systems."  AIIM is an accredited American National Standards Institute
(ANSI) standards developer with more than twenty committees comprised of
300 volunteers representing users, vendors, and manufacturers.  The
standards publications that are developed in these committees have
national acceptance and provide the basis for international harmonization
in the development of new International Organization for Standardization
(ISO) standards.

This presentation describes the development of AIIM's EIM standards and a
new effort at AIIM, a database on standards projects in a wide framework
of imaging industries including capture, recording, processing,
duplication, distribution, display, evaluation, and preservation.  The
AIIM Imagery Database will cover imaging standards being developed by
many organizations in many different countries.  It will contain
standards publications' dates, origins, related national and
international projects, status, key words, and abstracts.  The ANSI Image
Technology Standards Board requested that such a database be established,
as did the ISO/International Electrotechnical Commission Joint Task Force
on Imagery.  AIIM will take on the leadership role for the database and
coordinate its development with several standards developers.

Patricia BATTIN

     Characteristics of standards for digital imagery:

          * Nature of digital technology implies continuing volatility.

          * Precipitous standard-setting not possible and probably not
          desirable.

          * Standards are a complex issue involving the medium, the
          hardware, the software, and the technical capacity for
          reproductive fidelity and clarity.

          * The prognosis for reliable archival standards (as defined by
          librarians) in the foreseeable future is poor.

     Significant potential and attractiveness of digital technology as a
     preservation medium and access mechanism.

     Productive use of digital imagery for preservation requires a
     reconceptualizing of preservation principles in a volatile,
     standardless world.

     Concept of managing continuing access in the digital environment
     rather than focusing on the permanence of the medium and long-term
     archival standards developed for the analog world.

     Transition period:  How long and what to do?

          *  Redefine "archival."

          *  Remove the burden of "archival copy" from paper artifacts.

          *  Use digital technology for storage, develop management
          strategies for refreshing medium, hardware and software.

          *  Create acid-free paper copies for transition period backup
          until we develop reliable procedures for ensuring continuing
          access to digital files.

SESSION IV-D

Stuart WEIBEL            The Role of SGML Markup in the CORE Project (6)

The emergence of high-speed telecommunications networks as a basic
feature of the scholarly workplace is driving the demand for electronic
document delivery.  Three distinct categories of electronic
publishing/republishing are necessary to support access demands in this
emerging environment:

     1.)  Conversion of paper or microfilm archives to electronic format
     2.)  Conversion of electronic files to formats tailored to
          electronic retrieval and display
     3.)  Primary electronic publishing (materials for which the
          electronic version is the primary format)

OCLC has experimental or product development activities in each of these
areas.  Among the challenges that lie ahead is the integration of these
three types of information stores in coherent distributed systems.

The CORE (Chemistry Online Retrieval Experiment) Project is a model for
the conversion of large text and graphics collections for which
electronic typesetting files are available (category 2).  The American
Chemical Society has made available computer typography files dating from
1980 for its twenty journals.  This collection of some 250 journal-years
is being converted to an electronic format that will be accessible
through several end-user applications.

The use of Standard Generalized Markup Language (SGML) offers the means
to capture the structural richness of the original articles in a way that
will support a variety of retrieval, navigation, and display options
necessary to navigate effectively in very large text databases.

An SGML document consists of text that is marked up with descriptive tags
that specify the function of a given element within the document.  As a
formal language construct, an SGML document can be parsed against a
document-type definition (DTD) that unambiguously defines what elements
are allowed and where in the document they can (or must) occur.  This
formalized map of article structure allows the user interface design to
be uncoupled from the underlying database system, an important step
toward interoperability.  Demonstration of this separability is a part of
the CORE project, wherein user interface designs born of very different
philosophies will access the same database.

NOTES:
     (6)  The CORE project is a collaboration among Cornell University's
     Mann Library, Bell Communications Research (Bellcore), the American
     Chemical Society (ACS), the Chemical Abstracts Service (CAS), and
     OCLC.

Michael LESK                  The CORE Electronic Chemistry Library

A major on-line file of chemical journal literature complete with
graphics is being developed to test the usability of fully electronic
access to documents, as a joint project of Cornell University, the
American Chemical Society, the Chemical Abstracts Service, OCLC, and
Bellcore (with additional support from Sun Microsystems, Springer-Verlag,
DigitaI Equipment Corporation, Sony Corporation of America, and Apple
Computers).  Our file contains the American Chemical Society's on-line
journals, supplemented with the graphics from the paper publication.  The
indexing of the articles from Chemical Abstracts Documents is available
in both image and text format, and several different interfaces can be
used.  Our goals are (1) to assess the effectiveness and acceptability of
electronic access to primary journals as compared with paper, and (2) to
identify the most desirable functions of the user interface to an
electronic system of journals, including in particular a comparison of
page-image display with ASCII display interfaces.  Early experiments with
chemistry students on a variety of tasks suggest that searching tasks are
completed much faster with any electronic system than with paper, but
that for reading all versions of the articles are roughly equivalent.

Pamela ANDRE and Judith ZIDAR

Text conversion is far more expensive and time-consuming than image
capture alone.  NAL's experience with optical character recognition (OCR)
will be related and compared with the experience of having text rekeyed. 
What factors affect OCR accuracy?  How accurate does full text have to be
in order to be useful?  How do different users react to imperfect text? 
These are questions that will be explored.  For many, a service bureau
may be a better solution than performing the work inhouse; this will also
be discussed.

SESSION VI

Marybeth PETERS

Copyright law protects creative works.  Protection granted by the law to
authors and disseminators of works includes the right to do or authorize
the following:  reproduce the work, prepare derivative works, distribute
the work to the public, and publicly perform or display the work.  In
addition, copyright owners of sound recordings and computer programs have
the right to control rental of their works.  These rights are not
unlimited; there are a number of exceptions and limitations.

An electronic environment places strains on the copyright system. 
Copyright owners want to control uses of their work and be paid for any
use; the public wants quick and easy access at little or no cost.  The
marketplace is working in this area.  Contracts, guidelines on electronic
use, and collective licensing are in use and being refined.

Issues concerning the ability to change works without detection are more
difficult to deal with.  Questions concerning the integrity of the work
and the status of the changed version under the copyright law are to be
addressed.  These are public policy issues which require informed
dialogue.


               ***   ***   ***   ******   ***   ***   ***


                Appendix III:  DIRECTORY OF PARTICIPANTS
                         

PRESENTERS:

     Pamela Q.J. Andre
     Associate Director, Automation
     National Agricultural Library
     10301 Baltimore Boulevard
     Beltsville, MD 20705-2351
     Phone:  (301) 504-6813
     Fax:  (301) 504-7473
     E-mail:  INTERNET:  PANDRE@ASRR.ARSUSDA.GOV

     Jean Baronas, Senior Manager
     Department of Standards and Technology
     Association for Information and Image Management (AIIM)
     1100 Wayne Avenue, Suite 1100
     Silver Spring, MD 20910
     Phone:  (301) 587-8202
     Fax:  (301) 587-2711
     
     Patricia Battin, President
     The Commission on Preservation and Access
     1400 16th Street, N.W.
     Suite 740
     Washington, DC 20036-2217
     Phone:  (202) 939-3400
     Fax:  (202) 939-3407
     E-mail:  CPA@GWUVM.BITNET

     Howard Besser
     Centre Canadien d'Architecture
     (Canadian Center for Architecture)
     1920, rue Baile
     Montreal, Quebec H3H 2S6
     CANADA
     Phone:  (514) 939-7001
     Fax:  (514) 939-7020
     E-mail:  howard@lis.pitt.edu

     Edwin B. Brownrigg, Executive Director
     Memex Research Institute
     422 Bonita Avenue
     Roseville, CA 95678
     Phone:  (916) 784-2298
     Fax:  (916) 786-7559
     E-mail:  BITNET:  MEMEX@CALSTATE.2

     Eric M. Calaluca, Vice President
     Chadwyck-Healey, Inc.
     1101 King Street
     Alexandria, VA 223l4
     Phone:  (800) 752-05l5
     Fax:  (703) 683-7589

     James Daly
     4015 Deepwood Road
     Baltimore, MD 21218-1404
     Phone:  (410) 235-0763

     Ricky Erway, Associate Coordinator
     American Memory
     Library of Congress
     Phone:  (202) 707-6233
     Fax:  (202) 707-3764

     Carl Fleischhauer, Coordinator
     American Memory
     Library of Congress
     Phone:  (202) 707-6233
     Fax:  (202) 707-3764

     Joanne Freeman
     2000 Jefferson Park Avenue, No. 7
     Charlottesville, VA  22903
     
     Prosser Gifford
     Director for Scholarly Programs
     Library of Congress
     Phone:  (202) 707-1517
     Fax:  (202) 707-9898
     E-mail:  pgif@seq1.loc.gov

     Jacqueline Hess, Director
     National Demonstration Laboratory
       for Interactive Information Technologies
     Library of Congress
     Phone:  (202) 707-4157
     Fax:  (202) 707-2829
     
     Susan Hockey, Director
     Center for Electronic Texts in the Humanities (CETH)
     Alexander Library
     Rutgers University
     169 College Avenue
     New Brunswick, NJ 08903
     Phone:  (908) 932-1384
     Fax:  (908) 932-1386
     E-mail:  hockey@zodiac.rutgers.edu

     William L. Hooton, Vice President
     Business & Technical Development
       Imaging & Information Systems Group
     I-NET
     6430 Rockledge Drive, Suite 400
     Bethesda, MD 208l7
     Phone:  (301) 564-6750
     Fax:  (513) 564-6867

     Anne R. Kenney, Associate Director
     Department of Preservation and Conservation
     701 Olin Library
     Cornell University
     Ithaca, NY 14853
     Phone:  (607) 255-6875
     Fax:  (607) 255-9346
     E-mail:  LYDY@CORNELLA.BITNET

     Ronald L. Larsen
     Associate Director for Information Technology
     University of Maryland at College Park
     Room B0224, McKeldin Library
     College Park, MD 20742-7011
     Phone:  (301) 405-9194
     Fax:  (301) 314-9865
     E-mail:  rlarsen@libr.umd.edu

     Maria L. Lebron, Managing Editor
     The Online Journal of Current Clinical Trials
     l333 H Street, N.W.
     Washington, DC 20005
     Phone:  (202) 326-6735
     Fax:  (202) 842-2868
     E-mail:  PUBSAAAS@GWUVM.BITNET

     Michael Lesk, Executive Director
     Computer Science Research
     Bell Communications Research, Inc.
     Rm 2A-385
     445 South Street
     Morristown, NJ 07960-l9l0     
     Phone:  (201) 829-4070
     Fax:  (201) 829-5981
     E-mail:  lesk@bellcore.com (Internet) or bellcore!lesk (uucp)

     Clifford A. Lynch
     Director, Library Automation
     University of California,
        Office of the President
     300 Lakeside Drive, 8th Floor
     Oakland, CA 94612-3350
     Phone:  (510) 987-0522
     Fax:  (510) 839-3573
     E-mail:  calur@uccmvsa

     Avra Michelson
     National Archives and Records Administration
     NSZ Rm. 14N
     7th & Pennsylvania, N.W.
     Washington, D.C. 20408
     Phone:  (202) 501-5544
     Fax:  (202) 501-5533
     E-mail:  tmi@cu.nih.gov
     
     Elli Mylonas, Managing Editor
     Perseus Project
     Department of the Classics
     Harvard University
     319 Boylston Hall
     Cambridge, MA 02138
     Phone:  (617) 495-9025, (617) 495-0456 (direct)
     Fax:  (617) 496-8886
     E-mail:  Elli@IKAROS.Harvard.EDU or elli@wjh12.harvard.edu

     David Woodley Packard
     Packard Humanities Institute
     300 Second Street, Suite 201
     Los Altos, CA 94002
     Phone:  (415) 948-0150 (PHI)
     Fax:  (415) 948-5793

     Lynne K. Personius, Assistant Director
     Cornell Information Technologies for
      Scholarly Information Sources
     502 Olin Library
     Cornell University
     Ithaca, NY 14853
     Phone:  (607) 255-3393
     Fax:  (607) 255-9346
     E-mail:  JRN@CORNELLC.BITNET

     Marybeth Peters
     Policy Planning Adviser to the
       Register of Copyrights
     Library of Congress
     Office LM 403
     Phone:  (202) 707-8350
     Fax:  (202) 707-8366

     C. Michael Sperberg-McQueen
     Editor, Text Encoding Initiative
     Computer Center (M/C 135)
     University of Illinois at Chicago
     Box 6998
     Chicago, IL 60680
     Phone:  (312) 413-0317
     Fax:  (312) 996-6834
     E-mail:  u35395@uicvm..cc.uic.edu or u35395@uicvm.bitnet

     George R. Thoma, Chief
     Communications Engineering Branch
     National Library of Medicine
     8600 Rockville Pike
     Bethesda, MD 20894
     Phone:  (301) 496-4496
     Fax:  (301) 402-0341
     E-mail:  thoma@lhc.nlm.nih.gov

     Dorothy Twohig, Editor
     The Papers of George Washington
     504 Alderman Library
     University of Virginia
     Charlottesville, VA 22903-2498
     Phone:  (804) 924-0523
     Fax:  (804) 924-4337

     Susan H. Veccia, Team leader
     American Memory, User Evaluation
     Library of Congress
     American Memory Evaluation Project
     Phone:  (202) 707-9104
     Fax:  (202) 707-3764
     E-mail:  svec@seq1.loc.gov

     Donald J. Waters, Head
     Systems Office
     Yale University Library
     New Haven, CT 06520
     Phone:  (203) 432-4889
     Fax:  (203) 432-7231
     E-mail:  DWATERS@YALEVM.BITNET or DWATERS@YALEVM.YCC.YALE.EDU

     Stuart Weibel, Senior Research Scientist
     OCLC
     6565 Frantz Road
     Dublin, OH 43017
     Phone:  (614) 764-608l
     Fax:  (614) 764-2344
     E-mail:  INTERNET:  Stu@rsch.oclc.org

     Robert G. Zich
     Special Assistant to the Associate Librarian
       for Special Projects
     Library of Congress
     Phone:  (202) 707-6233
     Fax:  (202) 707-3764
     E-mail:  rzic@seq1.loc.gov

     Judith A. Zidar, Coordinator
     National Agricultural Text Digitizing Program
     Information Systems Division
     National Agricultural Library
     10301 Baltimore Boulevard
     Beltsville, MD 20705-2351
     Phone:  (301) 504-6813 or 504-5853
     Fax:  (301) 504-7473
     E-mail:  INTERNET:  JZIDAR@ASRR.ARSUSDA.GOV


OBSERVERS:

     Helen Aguera, Program Officer
     Division of Research
     Room 318
     National Endowment for the Humanities
     1100 Pennsylvania Avenue, N.W.
     Washington, D.C. 20506
     Phone:  (202) 786-0358
     Fax:  (202) 786-0243

     M. Ellyn Blanton, Deputy Director
     National Demonstration Laboratory
       for Interactive Information Technologies
     Library of Congress
     Phone:  (202) 707-4157
     Fax:  (202) 707-2829

     Charles M. Dollar
     National Archives and Records Administration
     NSZ Rm. 14N
     7th & Pennsylvania, N.W.
     Washington, DC 20408
     Phone:  (202) 501-5532
     Fax:  (202) 501-5512

     Jeffrey Field, Deputy to the Director
     Division of Preservation and Access
     Room 802
     National Endowment for the Humanities
     1100 Pennsylvania Avenue, N.W.
     Washington, DC 20506
     Phone:  (202) 786-0570
     Fax:  (202) 786-0243

     Lorrin Garson
     American Chemical Society
     Research and Development Department
     1155 16th Street, N.W.
     Washington, D.C. 20036
     Phone:  (202) 872-4541
     Fax:  E-mail:  INTERNET:  LRG96@ACS.ORG

     William M. Holmes, Jr.
     National Archives and Records Administration
     NSZ Rm. 14N
     7th & Pennsylvania, N.W.
     Washington, DC 20408
     Phone:  (202) 501-5540
     Fax:  (202) 501-5512
     E-mail:  WHOLMES@AMERICAN.EDU

     Sperling Martin
     Information Resource Management
     20030 Doolittle Street
     Gaithersburg, MD 20879
     Phone:  (301) 924-1803

     Michael Neuman, Director
     The Center for Text and Technology
     Academic Computing Center
     238 Reiss Science Building
     Georgetown University
     Washington, DC 20057
     Phone:  (202) 687-6096
     Fax:  (202) 687-6003
     E-mail:  neuman@guvax.bitnet, neuman@guvax.georgetown.edu

     Barbara Paulson, Program Officer
     Division of Preservation and Access
     Room 802
     National Endowment for the Humanities
     1100 Pennsylvania Avenue, N.W.
     Washington, DC 20506
     Phone:  (202) 786-0577
     Fax:  (202) 786-0243
     
     Allen H. Renear
     Senior Academic Planning Analyst
     Brown University Computing and Information Services
     115 Waterman Street
     Campus Box 1885
     Providence, R.I. 02912
     Phone:  (401) 863-7312
     Fax:  (401) 863-7329
     E-mail:  BITNET:  Allen@BROWNVM or           
     INTERNET:  Allen@brownvm.brown.edu

     Susan M. Severtson, President
     Chadwyck-Healey, Inc.
     1101 King Street
     Alexandria, VA 223l4
     Phone:  (800) 752-05l5
     Fax:  (703) 683-7589     

     Frank Withrow
     U.S. Department of Education
     555 New Jersey Avenue, N.W.
     Washington, DC 20208-5644
     Phone:  (202) 219-2200
     Fax:  (202) 219-2106


(LC STAFF)
     
     Linda L. Arret
     Machine-Readable Collections Reading Room LJ 132
     (202) 707-1490

     John D. Byrum, Jr.
     Descriptive Cataloging Division LM 540
     (202) 707-5194

     Mary Jane Cavallo
     Science and Technology Division LA 5210
     (202) 707-1219

     Susan Thea David
     Congressional Research Service LM 226
     (202) 707-7169

     Robert Dierker
     Senior Adviser for Multimedia Activities LM 608
     (202) 707-6151

     William W. Ellis
     Associate Librarian for Science and Technology LM 611
     (202) 707-6928

     Ronald Gephart
     Manuscript Division LM 102
     (202) 707-5097

     James Graber
     Information Technology Services LM G51
     (202) 707-9628

     Rich Greenfield
     American Memory LM 603
     (202) 707-6233

     Rebecca Guenther
     Network Development LM 639
     (202) 707-5092

     Kenneth E. Harris
     Preservation LM G21
     (202) 707-5213

     Staley Hitchcock
     Manuscript Division LM 102
     (202) 707-5383

     Bohdan Kantor
     Office of Special Projects LM 612
     (202) 707-0180

     John W. Kimball, Jr
     Machine-Readable Collections Reading Room LJ 132
     (202) 707-6560

     Basil Manns
     Information Technology Services LM G51
     (202) 707-8345

     Sally Hart McCallum
     Network Development LM 639
     (202) 707-6237

     Dana J. Pratt
     Publishing Office LM 602
     (202) 707-6027

     Jane Riefenhauser
     American Memory LM 603
     (202) 707-6233

     William Z. Schenck
     Collections Development LM 650
     (202) 707-7706

     Chandru J. Shahani
     Preservation Research and Testing Office (R&T) LM G38
     (202) 707-5607

     William J. Sittig
     Collections Development LM 650
     (202) 707-7050

     Paul Smith
     Manuscript Division LM 102
     (202) 707-5097

     James L. Stevens
     Information Technology Services LM G51
     (202) 707-9688

     Karen Stuart
     Manuscript Division LM 130
     (202) 707-5389

     Tamara Swora
     Preservation Microfilming Office LM G05
     (202) 707-6293

     Sarah Thomas
     Collections Cataloging LM 642
     (202) 707-5333


                                   END
      *************************************************************

Note:  This file has been edited for use on computer networks.  This
editing required the removal of diacritics, underlining, and fonts such
as italics and bold.  

kde 11/92

[A few of the italics (when used for emphasis) were replaced by CAPS mh]

*End of The Project Gutenberg Etext of LOC WORKSHOP ON ELECTRONIC ETEXTS

