I recently posted an article to a wide range of newsgroups asking for information for details about any documentation systems which used an "object oriented" approach to the documents themselves. I have had one of the best responses I have ever had to a request for information. In trying to track down this information, so many people expressed their interest in such a documentation system, and it was surprising how many said "it's such a simple and obvious idea, there must be something out there that can do what you want" but were then unable to come up with anything more concrete. Nevertheless, these people usually had some useful contacts who were then able to help me out. I would like to post a summary of the information that I have collected in the last two weeks. I am merely the "gopher" and have already passed this information on to the person who really wanted it, so I havn't followed up on any of these suggestions personally. As a result, I have no experience of using any of these products and techniques, nor can I give any specific recommendations. The replies that I had ranged from general comments about deciding what the documentation system is really intended for, pointers to various research work in the area, information about hypertext systems and tools encompassing SGML and database systems. I have attempted to incorporate as many of the relevant replies into this summary as possible. In most cases I have removed any quotation of my original article to save space so I apologise if some points may not be clear from the reply. You will need to read them in conjuntion with the original which you can find at the bottom of this particular article. I have grouped the relies into related topics and have split the complete summary over several parts: Part1: Introduction to the summary (this article) Part2: General comments about documentation systems Part3: Research work on such documentation systems Part4: Product information: 1 Part5: Product information: 2 Part6: Product information: 3 I would like to thank all of those people who took the time and effort to reply, even those whose contribution didn't make it into the summary because it duplicated someone else's, or who merely pointed me in the direction of someone else who knew more: "Bill Davis" <wdavis@dw3f.ess.harris.com> "Claude L. Bullard" <bullardc@source.asset.com> "Jared L. Black" <erpdjlb@moment.unocal.com> "Kevin Johnson" <krj@kevin.world.std.com> "Steven R. Newcomb" <srn@techno.com> Arthur Seaton <arthur@aiai.edinburgh.ac.uk> Bill Davis <wdavis@dw3f.ess.harris.com> Bradley Yearwood <bny@crl.com> Digitome Ltd <digitome@iol.ie> Fred K Weil <fredw@fred1.demon.co.uk> Jan Grootenhuis <jang@xs4all.nl> John Krieger <john.krieger@srs.gov> John Mertl/MSL <John_Mertl@newman.microstar.com> Mark Bullock <100273.722@compuserve.com> Mike McNamara <mike@xyvuk.com> alain godbout <sherpa@sherpa.synpase.net> anallon@nile.slate.tdtech.com aq083@freenet.carleton.ca (J. Arnold Free) bill.fernandez@documentum.com (Bill Fernandez) david@inf.rl.ac.uk design@mr.net (Mark Wright) dick@blaze.csci.csusb.edu (Dr. Richard Botting) freeman-eric@CS.YALE.EDU (Eric Freeman) haim@cc.bellcore.com (Haim Kilov) iphase!digi!talisman!garylion@uunet.uu.net jdking@space.honeywell.com jdry@aol.com (Jdry) jflavin@rain.org () john.newton@documentum.com (John Newton) john@thunderstone.com (John Turnbull) kjs@ebt.com (Kent Summers) kevind@zNET.com (Kevin Dick) kirchh@aol.com kliang@mercury.raynet.com (Kevin Liang) lupl@ensae.ericsson.se (Luitzen Planting) meldahl@idt.unit.no mvulpe@i4i.org (Michel Vulpe) nagarajg@versant.com parnas@qusunt.crl.McMaster.CA (David Parnas) paula@texcel.no (Paula Angerstein) robert@unisql.unisql.com (Robert Albach) sampson@nile.slate.tdtech.com (Mark Sampson) seixas@wolf.itg.ti.com (John Seixas) suthers+@pitt.edu tinkrkel@america.net (Kelly Caldwell) vam@inf.rl.ac.uk Please note that I tried to ask for permission via email to repost all of the replies which I received. Unfortunately some of the email didn't get through, so I do not feel able to include those people's contributions. This is a bit of a shame, because there are several interesting replies. If these people are reading, please follow-up this summary and post your replies. So, I hope that everyone out there will find this summary useful. Cheers Duncan This is my article, not my employer's, with my opinions and my disclaimer! -- Duncan Gibson, ESTEC/YCV, Postbus 299, 2200AG Noordwijk, The Netherlands Tel: +31 1719 84013 Fax: +31 1719 12142 Email: duncan@yc.estec.esa.nl ########################################################################### ########################################################################### Newsgroups: alt.cad,comp.databases.object,comp.groupware, comp.infosystems,comp.object, comp.programming.literate, comp.software-eng,comp.specification,comp.text,comp.text.sgml, sci.engr.civil,sci.engr.manufacturing,sci.engr.mech, sci.space.shuttle Subject: Question: is there a complete documentation system? Firstly I apologise for the wide cross-section of newsgroups, and I know that this might not be completely relevant to all of them, but I did choose them carefully. Documents used in large projects, whether the projects involve software, manufacturing processes, or complex pieces of hardware such as skyscrapers and the space shuttle, usually run to hundreds and thousands of pages. To make the documentation manageable, it is normally divided into a series of smaller documents. Typically these documents tend to be written by different groups of people, all involved in their own fields, and the documents tend to duplicate definitions for things, or describe interfaces between groups, systems or objects from both sides of the interface. Does anyone know whether there is a documentation system which supports a more object oriented view of such large projects? For example, if the hardware uses a switch, then the attributes of the switch are only described in one place. If the mechanical structures people need to know about the dimensions and weight of the switch, the information is retrieved from the switch document. If the electrical engineers need to find out what the operating parameters of the switch are, they get that information from the switch document. Of course there are all sorts of questions about configuration control for the documents if the switch manufacturer changes some of the properties of the switch and higher documents need to be consistent. We've been wracking our brains trying to work out who would even know about such a system - hence the assorted newsgroups - and apart from a vague assumption that this is the sort of thing that companies involved in huge manufacturing/construction projects might be interested in, we don't even have a handle on where to start looking. Does anyone have any ideas at all? There are quite a few ways in which I have idly considered that it could be done. It could boil down to an object oriented approach to documentation, but maybe without the information hiding that OO software systems tend to use. or maybe it's a documentation system built on top of a huge database with the means of naming objects and their attributes from the database. You could also consider it to be the ultimate in hypertext documents. I really don't know where to start thinking about such a system. Cheers Duncan This is my article, not my employer's, with my opinions and my disclaimer! - - From: Bill Davis <wdavis@dw3f.ess.harris.com> |> Documents used in large projects, whether the projects involve |> software, manufacturing processes, or complex pieces of hardware such |> as skyscrapers and the space shuttle, usually run to hundreds and |> thousands of pages. To make the documentation manageable, it is |> normally divided into a series of smaller documents. Typically these |> documents tend to be written by different groups of people, all |> involved in their own fields, and the documents tend to duplicate |> definitions for things, or describe interfaces between groups, systems |> or objects from both sides of the interface. The documents produced will depend on the work process used for a project. In large US government contract projects, there are often standards specified in the contract. |> Does anyone know whether there is a documentation system which |> supports a more object oriented view of such large projects? For |> example, if the hardware uses a switch, then the attributes of the |> switch are only described in one place. If the mechanical structures |> people need to know about the dimensions and weight of the switch, the |> information is retrieved from the switch document. If the electrical |> engineers need to find out what the operating parameters of the switch |> are, they get that information from the switch document. Of course |> there are all sorts of questions about configuration control for the |> documents if the switch manufacturer changes some of the properties of |> the switch and higher documents need to be consistent. I have worked on projects where the switch gets described in multiple documents. This may initially seem like a disadvantage, but when each document describes only the attributes of interest, then any switch can be substituted which meets the specified criteria. This is an over-simplified statement, but it shows the advantage of not having a single switch description. |> We've been wracking our brains trying to work out who would even know |> about such a system - hence the assorted newsgroups - and apart from a |> vague assumption that this is the sort of thing that companies involved |> in huge manufacturing/construction projects might be interested in, we |> don't even have a handle on where to start looking. Does anyone have |> any ideas at all? You could document something in the same way that NASA documents the space shuttle. You could document something the way an aircraft company documents a new airplane. The big question is whether you want that type of documentation. The more basic question you need to ask is "Why am I going to document this?" Detailed answers to that question tell you what you need in your documentation system. You may find that you have different audiences and thus need to describe the same switch in different documents from the point of view of the reader. The operator of a piece of equipment will have a different view of the switch from the designer. They will have different needs. |> There are quite a few ways in which I have idly considered that it |> could be done. It could boil down to an object oriented approach to |> documentation, but maybe without the information hiding that OO |> software systems tend to use. or maybe it's a documentation system |> built on top of a huge database with the means of naming objects and |> their attributes from the database. You could also consider it to be |> the ultimate in hypertext documents. I really don't know where to |> start thinking about such a system. Information hiding is similar to the idea of multiple views in a database. It has the same value when used properly because it provides a way to speak to different audiences. Decide what you are trying to accomplish with your documentation. Then you will be better able to determine what you need. Bill Davis wdavis@dw3f.ess.harris.com - - From: parnas@qusunt.crl.McMaster.CA (David Parnas) For the last 5 - 8 years, my group and I have been researching the topic of documentation and proposed both definitions of documents and some new notations for use in them. I feel confident in saying that our approach, while conventional in some ways, is quite consistent with OO approaches. However, our emphasis has been on the use of conventional mathematical concepts in this documentation. Prof. David Lorge Parnas Communications Research Laboratory Department of Electrical and Computer Engineering McMaster University, Hamilton, Ontario Canada L8S 4K1 Telephone: 905 525 9140 Ext. 27353 Telefax: 905 521 2922 Telephone at home: 905 648 5772 Telefax at home: 905 648 5943 email: parnas@triose.crl.mcmaster.ca ########################################################################### ########################################################################### From: dick@blaze.csci.csusb.edu (Dr. Richard Botting) I'm note sure if there is any tool capable of the job. The research is hardly of the ground yet! My Masters Student Graham Tyack in the 1970's at Brunel University, London, UK did some preliminary work on a design data base for large scale system: such as: A coffe pot or an Airfield control system. You might try the following book which is also heading in the same direction: Dasgupta 91, Subrata Dasgupta, Design Theory and Computer Science: Processes and Methodology of Computer Systems Design, Cambridge U Press NY NY 1991(Tracts in theoretical Comp Sci), engineering methodology, Reviews: CR9207-0475, Am Math Monthly V100n4(Apr 93) page 423 The term object oriented is a little misleading here since the idea of documenting a thing once and then refereing to it else where is found in data bases, data dictionaries, and some 1980's software design methods. You might get some ideas from: Klein 93, Mark Klein, Capturing Design Rationale in a Concurrent Engineering Teams , IEEE Computer Magazine V26n1(Jan 93)pp39-47 Tracz Coglianese & Young 93, Will Tracz & Lou Coglianese & Patrick Young<tracz@vnet.ibm.com>, A Domain-Specific Software Architecture Engineering Process Outline, ACM SIGSOFT Software Engineering Notes V18n2(Apr 93)pp40-49, Teamware Process Programming Language and diagrams Nerson 92, Jean-Marc Nerson, Applying Object-Oriented Analysis and Design, (Special Issue: Modelling) Comm ACM V35n9(Sep 92)pp63-74 For software only, the Feb issue of IEEE Trans on Software Engineering has a paper on design documenttion with hypertext and objects. The SIGCSE Software Engineering notes have had several papers on the value of hypertext in (software)design. My experiments with the rather over-simple WWW hypertext system and language make hypertext an attractive proposition. The link in my signature leads into a immature hypertext web of documentation... explore if you can. It'll be like wanering around a laboratory when experiments are going on however.... because it *is* my lab. As you can see this is a topic I'm interested in... please let me (or the comp.specification newsgroup) what you find. -- dick@csci.csusb.edu=rbotting@wiley.csusb.edu. Disclaimer::=`CSUSB may or may not agree with this message`. Copyright(1995)::=Copy this freely but include the following link to the <a href="http://www.csci.csusb.edu/dick/signature.html">author's signature</a> ########################################################################### ########################################################################### From: haim@cc.bellcore.com (Haim Kilov) Yes. These are the right questions about managing the _intellectual contents_ of documents. I don't know about a documentation system for doing so (yet), but we have recently published in Bellcore a description of the problems and some possible solutions based on information modeling. There have been also conference and journal publications. Obviously, system vendors are welcome! Here's an abstract of this Bellcore document: ST-2011, A Document Management Model, has been released in December 1994. This publication presents a document management model used to understand and manage (telecommunications) documents of any kind. The model is essential, in particular, for those who wish to become content providers. It applies both to traditional paper documents and to hypertext and hypermedia ones, but concentrates on the currently used traditional documents. The model clearly distinguishes between three big viewpoints: the intellectual content, the logical layout, and the physical presentation. The model clearly separates the concerns of document semantics (explicit concept map) from the concerns of document architectonics (logical layout): the business meaning of the information does not depend on its presentation. The concepts and approach presented in this publication are neutral with respect to tools and technology used for document management. Document users -- including document authors and managers -- acknowledge the need to understand documents by precisely specifying their intellectual contents. It has been stressed by many that businesses do not want or need fancy documents: they need solution of their business problems. All documents, regardless of medium (paper or electronic), have essentially the same semantic properties that have to be understood and explicitly dealt with. It is known how to understand and specify information semantics in other application areas, and this knowledge can be reused, leading to success and customer satisfaction. As a result, a document user (including the author!) will be able to understand, explicitly specify, and reuse the business meaning -- the intellectual content -- of the information contained in documents. This model is based on general information modeling concepts that have been developed in Bellcore and successfully used in other application areas, most notably, in telecommunications, with the goal of exposing appropriate business rules. The audience of this ST includes all kinds of document users: document authors, readers, browsers, and managers. It includes also specialists in standardization, in particular, technology (e.g., SGML) standardization. To obtain, call Bellcore customer service 1-800-521-2673, or fax 908-336-2559. -Haim Kilov haim@cc.bellcore.com ########################################################################### ########################################################################### From: duncan@yc.estec.esa.nl I talked to 'Toria Burril at RAL. They are currently working one extension to HTML to provide ways of printing a flat document from an HTML tree. You can find info in: http://www.cis.rl.ac.uk/proj/www/docs/lightweight She also said that it might be worth contacting Owl International about their GUIDE product, or just ask for info. No contact details yet, although I should be able to find something in BYTE or one of those journals. ########################################################################### ########################################################################### From: vam@inf.rl.ac.uk There shouldn't be a problem in advertising the Lightweight paper URL providing people realise that it's on-going research so likely to change. (But then many things do this anyway!) Victoria ########################################################################### ########################################################################### From: John Krieger <john.krieger@srs.gov> This sounds like a good application for the Standard Generalized Markup Language (SGML). I didn't see your post in comp.text.sgml, so you might want to trim it a bit and try there. Specifically, some people in the STEP/PDES community are working on some of these kinds of issues. On another tack, several years ago I and a couple of colleagues developed tools for diagrams and procedures that linked into an object-oriented database such that when you created a diagram or procedure, you incorporated references to all of the objects. When the diagrams or procedures were displayed, you could perform operations on the objects (e.g., start a pump, close a valve). Let me know if you would like more info; I may be able to provide some. John Krieger, Westinghouse ########################################################################### ########################################################################### From: Jan Grootenhuis <jang@xs4all.nl> I am not aware of all your exact requirements, but the following must be interesting. Some years ago, a Han Schouten made a data model of SGML. This enables one to store an SGML document in a semantically equivalent database, and giving you the best of both worlds. His work was published in the last SGML UG Bulletin, and discussed in Eric van Herwijnen's Practical SGML, _First_ Edition. Han and I built a prototype for Oracle Europe's R&D. However, Oracle's R&D Director and Han Schouten changed jobs, and our work was probably shelved; however, we still have all code. Han's ideas were also used to make a product SGML-DB used by Aerospatiale in France. I would be very interested in diwscussing this approach with you, if you like. Regards, Jan -- Jan Grootenhuis Kralenbeek 1873 1104 KJ AMSTERDAM The Netherlands Tel/fax (+31)20-699.89.66 Internet jang@xs4all.nl - - From: Fred K Weil <fredw@fred1.demon.co.uk> Information on SGML databases can be found here. http://galt.cs.nyu.edu/students/m-rd0107/sgmldbms.html. Some supplier information I am giving UK contacts as I assume from your address that you are in Holland Documentum Jane Sherry Rank Xerox Tel +44 1707 352235 Fax +44 1707 352497 Xyvision Stuart MacRae Tel +44 1753 820565 Fax +44 1753 694944 Trimco Alan Turner Tel +44 181 579 8788 Fax +44 181 566 2422 Interleaf UK Tel +44 1932 356800 Fax +44 1932 356810 Texcel David Bragg Tel +44 1753 833111 Fax +44 1753 854090 ########################################################################### ########################################################################### From: john.newton@documentum.com (John Newton) In response to your inquiry on the Net, we are a maker of Object-Oriented Enterprise Document Management Systems. Our architecture is client-server based with clients on Windows, Mac and Unix and servers on various flavors of Unix with NT coming soon. We expose the class hierarchy to the user as well as to the developer. We also have a graphical user interface to make it easy for end-users to manipulate and search for this information. For application developers there is Document-Object-Oriented version of SQL called DQL that allows the enumeration of classes as well as hierarchical structures such as a documentation bill of materials. We are concentrating our development and marketing efforts in the manufacturing area. Our first customer was Boeing with the technical documentation on the 777 aircraft. If you would like more information, you can contact our European Headquarters at: Documentum International Stockley Park Business Centre The Arena Forum, Stockley Park Uxbridge, Middlesex UB11 1AA UK +44 1 81 899 1743 Regards, John Newton Director, Product Development Documentum ########################################################################### ########################################################################### From: bill.fernandez@documentum.com (Bill Fernandez) Greetings-- The company I work for makes such a system. For example it is used by pharmeceutical companies around the world to manage their new-drug applications, which are half a million pages long. Boeing and other manufacturing companies also use our system. I'm in the engineering department, but I'll supply our main office phone number and address below, and they should be able to steer you to the European sales office that handles The Netherlands. Good Luck. --Bill Documentum, Inc. 4683 Chabot Drive #102 Pleasanton, CA 94588 USA Tel: 510-463-6800 or try Documentum Software Europe, Ltd. in England Tel: 44 181 899 1743 ########################################################################### ########################################################################### From: kirchh@aol.com Duncan - Project Xanadu, started in the '60s by visionary Ted Nelson (coiner of the terms 'hypertext' and 'hypermedia'), considered this kind of problem. Xanadu was taken on by Autodesk (makers of Autocad) in 1988, I believe, and then cut loose in 1992. Things get a little hazy here - I gather the commercialization of the Xanadu server fell to a newly formed company called Memex, changed to Filoli in 1994 (email: try Gary Olsen - Olson@filoli.com). When I last checked, the current incarnation of the product was called AIDEMemoir. It was touted as being a multimedia database, with support for all data types, versioning ('editions'), huge databases, full hypermedia linking, full action audit trail, etc. I recommend the Xanadu FAQ, found in rtfm.mit.edu/pub/usenet-by-hierarchy/comp/groupware/Xanadu_World_Publishin g_Repository_Frequently_Asked_Questions. Other (somewhat less exotic) systems which might be worth a look: - Documentum, a Xerox spinoff specializing in document management: try Tom Witmer at (201) 845-5300; tell him Trilon referred you. - Interleaf RDM, Intellecte, and WorldView: all document management products from Interleaf. Try 800-955-5323. We've had trouble getting in touch with knowledgeable people there, but give it a shot - their products sound intriguing. - Virtual Notebook, from the ForeFront group: A shared multimedia notebook metaphor of sorts, with hypertext linking, real-time document conferencing. 713-961-1101. My latest info is from December '93, but I've seen their name pop up now and again. - OpenMind: a client-server document management system. Gives users several views of the information: Explorer View, for navigating customizable subsections; Transcript View, which presents threaded discussions; Search View, for full-text queries; and Track View, which identifies new information on specific topics. OpenMind can display files created by 150 applications; users can launch, modify and save documents locally without having the creating program. Windows NT servers, Windows clients, supposed to have Mac clients in October '94 ($995/server, $295/Windows client;Digital Communications Associates (404) 475-8380) [info from 8/94] - MediaSphere: Doc mgmt system, centered on Adobe PDF (Acrobat format); uses Sybase, Sun server, Mac, Windows clients; Full-text; uses their own nat'l language search engine; "help publishers of electronic and paper documents search through text, images, audio, and video using natural language queries" ($64,000 to $112,000; Cascade, (508) 794-8000) [info from 10/94] Start with those - if you don't get anywhere, write and I'll rustle up some more. If you do get somewhere, let me know what you find out. --Daniel Kirchheimer Director of Technology Trilon, Inc. ########################################################################### ########################################################################### From: Bradley Yearwood <bny@crl.com> Symbolics had a documentation system called Concordia which ran in their Lisp machine environment. It appeared to support the notion of sharing common objects across multiple documents. Concordia was described in a paper in IEEE Computer or IEEE Micro circa 1987-1988. I cannot recall the author's name. I am not certain whether Concordia is among the surviving fragments (if any) of Symbolics. Brad Yearwood bny@crl.com Cotati, California ########################################################################### ########################################################################### From: jdry@aol.com (Jdry) For large paper trails, and or organization, I have seen a great object oriented program. Metaphase Series 2, resold by SDRC (and others). It is a data management system that will be enterprise wide. It sits ontop of Oracle and will be available ontop of other databases. You can access the database from Unix, Windows and Mac. Call SDRC at 1-800-543-0869 Jonathan Dry Designworks/USA jdry@aol.com ########################################################################### ########################################################################### From: "Jared L. Black" <erpdjlb@moment.unocal.com> I have seen a system on UNIX called PDMS (plant design and management system) that may be what you are interested in. It is from a UK company, CAD CENTRE; the only office I know of is in Houston Texas, USA. Their number is 713-977-1231, and the contact is Irv Levine. J. Black ########################################################################### ########################################################################### From: kevind@zNET.com (Kevin Dick) The need that you describe would, in my opinion, fall under the category of Product Information Management (PIM) systems. These systems can track documents in any format, arbitrary relationships between these documents, and the flow of these documents through the product development process. I am a consultant to Objectivity (maker of the Objectivity/DB ODBMS) and I know they have at least two customers who use Objectivity/DB as the storage engine for their commercially offered PIM system. I believe the names of these companies are Adra and Matra. Unfortunately, I do not have contact information for these companies. However, you can contact Objectivity and find out. They are located in Mountain View, CA, USA. Their phone number is (415) 254-7100. The best person to ask would be the Director of Marketing, Craig Woods. His email is craig@objy.com Hope this helps, Kevin Dick ########################################################################### ########################################################################### From: duncan@yc.estec.esa.nl I also received received information from Zwany de Graaf of Objectivity Europe In addition to the information from Kevin Dick (above), she also sent me some information about MATRIX. "MATRIX is an Information Management System for all kinds of applications. It includes a comprehensive workflow management cpapbility, which allows you to track any document and related images through your organisation. It operates with existing software on existing hardware in a fully distributed environment." Her address is: Zwany de Graaf Objectivity Europe Rondedans 3 2907 AA Capelle a/d IJssel The Netherlands Tel/Fax: +31 104 583 986 ########################################################################### ########################################################################### From: sampson@nile.slate.tdtech.com (Mark Sampson) We were forwarded your request via Versant (our OODB supplier). They felt that what you were describing in your message is what we supply in our SLATE tool (System Level Automation Tool for Engineers). SLATE was designed to support the Systems Engineering process--the capture of customer requirements, translation of those requirements into detailed design specifications, and generation of documents from that analysis. SLATE was built on top of a multi-user Versant OODB, is integrated with Framemaker, and has a GUI specifically tailored for the System Architects/Engineers that allows them to perform trade-off studies, document the results of those studies, and then manage projects to conform to those requirements. I will contact our European representatives and have them contact you and supply you with further information. In the mean time I suggest you browse our WWW Home page at: http://www.slate.tdtech.com or you can contact me or any or our marketing/sales folks directly via email or phone: sampson@slate.tdtech.com (214)669-9937 Regards from Texas, Mark Sampson TD Technologies (214)669-9937 sampson@slate.tdtech.com ########################################################################### ########################################################################### From: freeman-eric@CS.YALE.EDU (Eric Freeman) Hi, you might check into the CALS software project that is (was) done under DARPA or NRL. I've located the web site with CALS information: http://navysgml.dt.navy.mil/cals.html and I'm assuming you are already aware of OLE and OpenDoc. Thanks, Eric ########################################################################### ########################################################################### From: seixas@wolf.itg.ti.com (John Seixas) There used to be a tool called Context, which was specifically made to order for this purpose. It was used by Boeing in Sattle to handle manufacture and maintenance of aircraft. It is ny understanding that the company (Mentor Graphics) no longer supports this tool. The next best tool that I know of is Interleaf (UK +44 1932 356800, US 1 800 688 5151). It is set up to handle large interconnected sets of documents, and their Active Link Tool (bundled with the latest release 6.x) should support your hypertext needs. ########################################################################### ########################################################################### From: kjs@ebt.com (Kent Summers) We have a complete SGML-based e-publishing solution (that is, everything but the authoring component, several good ones of which we have integrated). BTW, the Context guys now work for EBT on Dynabase, our object-oriented SGML mgmt system built atop ODI's objectstore. email 'info@ebt.com' for more information. ########################################################################### ########################################################################### From: "Claude L. Bullard" <bullardc@source.asset.com> The current threads on adding procedural constructs to SGML and the questions about supporting documents used in large projects (which I call enterprise-wide documents), are interesting because they are the same issues from some perspectives. Since Kent Summers mentions that EBT is now the proud employer of some portions of the former Context Inc developers (Mentor Graphics spin-off company, not to be confused with InContext), there are some *war stories* that might be of interest. BTW, Kent, you have a coup in that group. They were in 1989, one of the most forward looking groups I knew and I learned much from them. Most of my outlook on what is *possible* with document systems was initially formed by that system and those people. At GE, we worked with the Context group to develop one of the first and most successful CALS authoring and delivery systems. To be honest, the acceptance of SGML by Context was grudging, but Charlie Sorgi published a paper on the subject that was direct and extremely prescient as he described most of the advantages and disadvantages of using SGML. Charlie coined the term "SGML Nazis" which was his view of standards groups. Still, they did an excellent job of tieing SGML to the side of the existing system. Historically, at a certain point in development as they were about six years ahead of the market, the original developers went on to work on the "object" projects for Mentor, and the SGML system languished, was broken (hardwiring tags was then and is now the single biggest stumbling block for OOPSMen), and was abandoned. Doing SGML for *real* with the Context system would have required complete redesign of the formatting engine which was a WYSIWYG system with a very powerful scripting language. The database side of the design, which was Greg Lloyd's baby at the time, was very powerful but somewhat hard to set up and maintain and seemingly, difficult to integrate with the SGML *bag* on the system design. It did work with care. However, the scripting language integration was superior. I used some of those concepts to design the MID. With it, we were able to take the original scripts given to us by Context, extend them, and completely automate the production of SGML documents and raster-based hypermedia. The results of the customization efforts achieved by technical writers with very shallow programming backgrounds were astonishing. Interfaces to the LSAR database and automatic document construction (No Hands, Ma! Honest!!) were achieved. The capabilities that WebHeads find astonishing were common fare and it was possible to manage the documents as well as the graphics. While the implementation of SGML was rudimentary, it implemented the 10% that does 90% of the work. DTDs were used to parameterize the editors so each author worked with only the constructs they needed for a document type. The SGML could be hidden or visible. The print version worked without the need for a FOSI, and the system could be maintained and extended by the technical writing staff. The project delivered complete documents ahead of the hardware, and at validation/verification, it was the TMs that were used to test the hardware as they were superior in every respect to the other CDRL-required data products. We got a 10 for 1 improvement in productivity, and at the end, were mainly just entering information on lazy days while the tools did the grunt work. For a frankly, very small up front investment of time and learning, we possessed an extremely powerful production tool. The works that I published (Enterprise Engineering and Beyond the Book Metaphor) were based on the lessons learned from that system. My point here is that script integration can provide much of the capabilities that Ms. Holstege and Mr. Prescod are debating. Scripting is a way to create highly interactive environments to support mission configured enterprise performances. Had the Context developers gone further with their SGML product development (for example, support for entities ... sigh, the same mistake being made by the Web developers), Mentor would own the document management market at this time. It has been said, that their closest competitor at the time, Datalogics, was greatly relieved when Context closed its doors. I've yet to see a system that can come close to what was achieved there and I have looked. I feel like Arne Saknussen on this one: follow the signs to the center of the Earth. I've been there and testify on my bleached bones. It would be interesting if some of the former Context employees could compare their current work with SGML products and their work at Context. While I don't usually support application mongering, the experience of these individuals is unique and could offer great insight into what is technically possible and where the "rocks are". Len Bullard ########################################################################### ########################################################################### From: Mike McNamara <mike@xyvuk.com> Let me introduce myself and my Company, I am Mike McNamara, Operations Manager for the European Offcie of Xyvision Inc., a Boston, USA based company. Xyvision is a UNIX software house specialising in software for Publication Production "Parlance Publisher" (XPP) and Document Management "Parlance Document Manager" (PDM). We sell our software into two main market areas; 1) Commercial Printing and Publishing for the production of Books, Learned Journals, Legal/Medical Looseleaf publications, Directories, Cataloguesand and Telephone Directories and 2) Corporate markets for Product Support Documentation such as Technical Documentation for Aerospace, Electronics, Utilities companies. We do have a WWW server setup which has a full set of information available, this can be found http://www.xyvision.com and in particular how PDM deals with "objects" and what can be done to them, I have included one one of those pages to this email. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Xyvision Publishing Systems Xyvision designs and markets two products for publishing professionals Parlance Publisher and Parlance Document Manager. Parlance Publisher goes beyond traditional composition and pagination systems by automating the entire publishing process--from input of text and graphics to output of fully composed paginated pages, film separations, or electronic output. Designed to operate in an open publishing environment, Parlance Publisher accepts most text, database, and graphic formats; enables live links to UNIX-based graphics programs, and outputs to a variety of post-processing applications including imposition software, electronic page turners, and online viewers. Its speed, power, and background processing capabilities have earned Parlance Publisher the reputation as the most versatile and powerful composition system available today. Parlance Document Manager (PDM) is a client/server information management system that stores document elements as information modules in a central database, allowing these elements to be shared and reused in multiple documents. PDM supports modules of varying sizes and formats, including SGML, and provides version control, built-in workflow, and content management that automate editorial processes for large, complex publishing projects. It is well suited for use in publishing environments with large amounts of text, graphics, and other data that are formatted and published in multiple versions or on multiple media. Xyvision software runs on Sun(R) SPARC(TM)stations and servers under Sun OS and Solaris(TM), IBM(R) RS/6000 servers under AIX(TM), and DEC(R) servers under ULTRIX(R). # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # We also have a distributor in the Netherland. I have sennt a copy of this email to Marcel Croese, the Slaes Manager of Mahez B.V. If you need to call them, the telephone number is +31-20-587-2222. Looking at the brief comment made in your email, I think that Xyvision does have a product that would meet you requirements, with that in mind I would like to send you a set of brochures if you can send me your address. Please feel free to call/email/fax me if you need more information. Regards * Michael J. McNamara Tel: +44-1753-820565 * * Senior Operations Manager, Europe Fax: +44-1753-694944 * * Xyvision Ltd, Mobile: +44-385-313352 * * 246 Bedford Ave. e-mail: mike.mcnamara@xyvision.com * * Slough, Berkshire. Compuserve: 100013,3502 * * SL1 4RJ. U.K. * ########################################################################### ########################################################################### From: mvulpe@i4i.org (Michel Vulpe) Infrastructures Company Introduction Thank you for your interest in Infrastructures products. The following information provides an introduction to our products and philosophy. Infrastructures was formed to address the single most important issue facing business' today, management of information as an intellectual asset. We offer database products that use native SGML object management technology to reuse information providing a system solution that develops, manages, and delivers complex documents independent of format, platform, or application. Management of Intellectual Assets -- An Introduction The primary use of computers by far is for document processing. According to Dataquest (San Jose, CA), 98% of business computer users employ word processing software on their personal computers and many use their PCs only for word processing. Industry analysts, note that at least 80% of corporate electronic information is in the form of documents, as opposed to structured database records. Because of advances in word processor technology, documents are no longer merely an electronic analog to paper, but rather dynamic, modular, multimedia entities. The current software file/application paradigm can create the information, but manages it very poorly or not at all. Any attempt to reuse the information requires a duplication of the original environment. The user community is driven by the need to manage its intellectual assets as a result of frustration with the growing glut of information that was expensive to manufacture and cannot be financially managed or tracked. Infrastructures' VISion technology advances the information management paradigm beyond the inherent limitations of files and applications. By combining the structured world of database technology with word processors and networks, Infrastructures creates an environment that fulfills the promise of technology as a means of improving productivity. Many organizations have access to large volumes of information. Relatively few can economically transform those knowledge resources into valuable products. The constant challenge for these organizations is to: > reuse their information resources > make their knowledge base accessible, > extend the useful lifetime of the information, > be capable of tailoring the knowledge to a specific user, and > create information that is not dependent on any specific media. Despite the cost of developing and publishing computer-based information products, rarely do these products leverage the information assets of the organization. The ability to economically reuse underlying information components is the key. Infrastructures provides a database environment integrating the underlying resources of text, images, and other materials into logical information products that can be delivered on paper or electronically via the Internet. Infrastructures Information Management Systems - The VISion Product Overview The VISion=A9 product family is an on-line client/server Document Manufacturing System that uses Virtual Information Space technology or VIS=A9. Built with the Application Development Tool Kit, it is designed to manage the efficient transformation of raw information into various useful information products. VISion products apply the discipline of the manufacturing environment to the business of document production, imposing clearly defined standards for both format and content, promoting reusability of components, and enforcing communication among all those involved in the process of building a document. VISion guides a document through every stage of its evolution, from a primary draft to a finished, published document. VISion gives its users electronic access to all the information components used in constructing document information: text, graphics, comments, approvals, and annotations. VISion combines groupware mail distribution functions with the structure of a document to create a framework for collaborative development. VISion stores, in a full function DBMS, each version of a document together with all the approvals, comments, and annotations associated with each stage. It also stores information on all its users, their organizational relationships, and the roles they play in building various documents. The VISion Product Family The Infrastructures' VISion family of products has been designed to provide a clearly defined implementation path. Building on the existing database and communications infrastructure, this implementation path offers two major advantages for Infrastructures' customers; functionality and migration strategy. The VISion family consists of three products: the first is a relatively inexpensive way for an organization to take the initial step into a world of information manufacturing and management. The next two steps compliment the first, moving in stages to exploit "virtual information space" or VIS technology to its fullest. Nothing is lost along the way. Staged implementation entails no waste of money or resources. The path begins with VISion 1; a system that offers simple, database-driven document management with automated distribution of documents. VISion 2 provides the user with SGML support, logical decomposition of documents, and algorithmic composition capabilities. Finally, VISion 3 technology manages documents as collections of reusable information objects or logical documents in a virtual information space, allowing communication between VISion Servers in either replication mode or as virtual information servers similar to the way the World Wide Web (WWW) uses HTML documents. =46inally, VISion is a complete document development, management, and distribution environment. Using tools resident on the desktop, the system builds a structured environment that allows an information product to be electronically distributed and maintained. VISion offers the ability to manipulate and link low level information objects or components without the limitations imposed by the traditional document/file paradigm and supports the following features: > authoring using your current desktop tools (including SGML/HTML) > document management (versioning, archiving, and approval) > media-independent publishing (paper, on-line, CD-ROM) > multi-media development > electronic distribution over existing Email systems > virtual document development The VISion Remote Client is a companion to the VISion Server and interacts with the server over public access networks such as the Internet or over local area networks. Together, these two products introduce a client/server solution dramatically improving traditional composition-based approaches to information management. Productivity Improvements The rational for adopting a systematic approach is economic in nature as the cost of developing information products increases. Gaining a productivity enhancement by automating the labor intensive aspects of the information development process and reducing the number of process steps is desirable. Infrastructures' systems establish a systematic method to maximize information reuse, automate composition and output, and allow the exchange of information electronically. If you would like additional information, please contact an Infrastructures representative. To Contact Infrastructures In the US: 990 Hayman Place Los Altos, CA 94024 tel 415.969.7363 fax 415.969.7003 Internet: syoung@i4i.org In Canada: 330 Dupont Street Suite 302 Toronto, Ontario M5R 1V9 tel 416.920.6489 fax 416.920.6493 Internet mvulpe@i4i.org - - From: "Steven R. Newcomb" <srn@techno.com> Sounds like you're looking for HyTime. I'm attaching first a letter about HyTime, and second a letter about HyMinder, our implementation of HyTime. Best regards, Steven R. Newcomb | TechnoTeacher, Inc. direct +1 716 389 0964 | (courier: 3800 Monroe Avenue, main +1 716 389 0961 | Pittsford, NY 14534-1330 USA) fax +1 716 389 0960 | P.O. Box 23795 Internet: srn@techno.com | Rochester, New York 14692-3795 USA ******************************************************************************** (The remainder of) This letter contains information about SGML, HyTime, and related matters. It is intended to help you find the information you are looking for. We send this letter to people like yourself who inquire about various matters. This letter does not discuss TechnoTeacher products and services and it is not trying to sell you anything. At your request we will gladly send you information about our International HyTime Workshop series (which is the best way to learn HyTime available today) and our HyMinder SGML/HyTime engine technology, a unique all-in-one SGML and HyTime services library of C++ classes. Best regards, NOTE NEW ADDRESS, PHONE NUMBERS: Steven R. Newcomb | TechnoTeacher, Inc. direct +1 716 389 0964 | (courier: 3800 Monroe Avenue, main +1 716 389 0961 | Pittsford, NY 14534-1330 USA) fax +1 716 389 0960 | P.O. Box 23795 Internet: srn@techno.com | Rochester, New York 14692-3795 USA ******************************************************************************** HyTime, SGML, etc. ``HyTime'' is the nickname of the ISO/IEC International Standard 10744:1992, whose long name is ``Hypermedia/Time-based Structuring Language.'' It provides a worldwide standard technical framework for integrated open hypermedia, including the ``SMDL'' Standard Music Description Language (ISO/IEC Committee Draft 10743). There is as yet only one authoritative reference work on HyTime: the HyTime standard itself. Copies of the standard can be obtained from your nation's standards organization. In the United States, this is the American National Standards Institute (ANSI), 13th Floor, 11 West 42nd Street, New York, New York 10036-8002 USA (tel: +1 212 642 4900, fax: +1 212 398 0023, Cable: Standards, New York, International Telex: 42 42 96 ANSI UI, D-U-N-S 07-329-4837. Last we heard, the ANSI price of the 10744 standard was $98. Introductory articles about HyTime can be found in the November 1991 issue of _Communications of the ACM_, and in the July 1991 issue of _IEEE Computer_. These articles are slightly inaccurate in some details; they were written prior to HyTime's final version as adopted the following year. One book about HyTime has appeared: _Making Hypermedia Work_, by Steven DeRose and David Durand, published by Wolters Kluwer. This book is well regarded in some respects, but its many technical errors and its tendency to confound addressing with linking make it unreliable as a reference work on the subject of HyTime. We are told that the authors have a new edition in the works that will appear shortly. Another book is in press at this writing: _Practical Hypermedia_, by Eliot Kimber, published by Simon & Schuster. We have seen drafts of this book and we like what we have seen. It is likely to be reliable, since it appears in a series edited by Charles Goldfarb, who chaired the HyTime committee. Courses, workshops, and conferences on HyTime (and SGML, see below), as well as on other topics of interest to the information industry, are presented by the Graphic Communications Association (GCA). For more information, please contact the GCA at 100 Daingerfield Road, 4th Floor, Alexandria, Virginia 22314-2228 (tel: +1 703 519 8160, fax: +1 703 548 2867, Telex: 510-600-0899, Internet: mern@well.sf.ca.us). Among its many other SGML-related services and activities, the GCA publishes a directory of commercially available SGML tools, software, and services. ``SGML'' is the nickname of the ISO/IEC International Standard 8879:1986, whose long name is ``Standard Generalized Markup Language.'' SGML, which forms the basis of a number of standards including HyTime, allows all kinds of information to be interchanged among dissimilar information processing systems. In effect, HyTime extends SGML by providing a set of ``SGML architectural forms,'' whose syntax and semantics are standardized by HyTime, and which allows system-independent expression of hyperlinks, information addresses, placement of information objects in time and space, etc. The standard, authoritative reference work on SGML is Charles Goldfarb's _The SGML Handbook_, published by Oxford University Press. We highly recommend this book, which contains the verbatim text of the ISO 8879 standard itself, along with considerable explanatory text. The ``SGML Users' Group'' is an international body which performs a number of important functions in promulgating the understanding and use of SGML, including sponsoring conferences and special interest groups, publishing public domain information, etc. To join the SGML Users' Group, contact Stephen G. Downie, Secretary, SGML Users' Group, c/o SoftQuad Inc., 56 Aberfoyle Cres., Suite 810, Toronto, Ontario, Canada M8X 2W4 (tel: +1 416 239 4801, fax: +1 416 239 7105). Other questions, concerns, and issues should be brought to the attention of Ms. Pamela L. Gennusa, President, International SGML Users Group, c/o Database Publishing Systems Ltd., 608 Delta Business Park, Great Western Way, Swindon, Wiltshire SN5 7XF, United Kingdom (tel: +44 793 512 515, fax: +44 793 512 516, Internet: dpsl!plg@visionware.co.uk). ``SGML SIGhyper'' is the nickname of the SGML Users' Group's ``Special Interest Group on Hypertext and Multimedia,'' which is the HyTime SIG. For more information about SGML SIGhyper, please contact Mr. Erik Naggum, Chairman, SGML SIGhyper, Naggum Software, Irisveien 12, POB 1570 Vika, 0118 Oslo, Norway (tel: +47 2295 0313, fax: +47 2216 2350, Internet: erik@naggum.no). SGML SIGhyper maintains an FTP site, as part of its mission to promulgate information about HyTime. The FTP site is ftp.ifi.uio.no in the directory ``pub/sgml/SIGhyper.'' This site is sponsored by the Department of Informatics at the University of Oslo, Norway. At this site can be found, among other things: * Free SGML parsers for a variety of platforms. These parsers are unsupported, and they do not support all of the features of SGML, but they really do work and they are quite useful. * An excellent bibliography of SGML source materials, created and maintained by Robin Cover. * A catalog of HyTime architectural forms (i.e., the HyTime meta-DTD, which constitutes the formal description of HyTime itself). * Other items of interest, such as draft CApH advisory documents. ``comp.text.sgml'' is a Usenet discussion group which is an absolute must for anyone who is serious about SGML or HyTime. If you can not receive this news group in the usual way, you can request to have it forwarded to your e-mail address daily. Please send such requests to the Internet address ``comp-text-sgml-request@naggum.no.'' (To contribute articles to comp.text.sgml, you can send them to ``comp-text-sgml@news.naggum.no.'') Copies of the comp.text.sgml archives can be recovered by anonymous FTP from ftp.ifi.uio.no. <TAG>, published monthly, is the only regular source of information for the SGML industry: articles, reviews, product news, tutorials, standards updates, user group information, case studies, and useful technical tips and information. <TAG> is designed to be an objective voice of the SGML community; it accepts no advertising and encourages frank and open debate on the issues faced by the information publisher. Please contact SGML Associates at +1 303 680 0875, fax: +1 303 680 4906, or Internet: tag@sgml.com. ``CApH'' is the nickname of the GCA Research Institute's (GCA-RI) ``Conventions for the Application of HyTime'' activity. This is an open industrial design committee whose purpose is to develop and publish advisory documents showing how HyTime can be used in particular contexts to do represent particular things, such as indexes based on knowledge bases, licensing information, tabular data, etc. etc. For more information about CApH, contact the GCA at the address given above. Another fascinating HyTime application is the US Department of Defense's ``Metafile for Interactive Documents (MID)'' initiative, intended to allow all databases of technical information for weapons systems to be ``plug-compatible'' (as it were) with all Interactive Electronic Technical Manual (IETM) delivery systems. A report about this work dated November 1994 is available via anonymous FTP from navysgml.dt.navy.mil in the pub/ietm/mid directory. This directory is also accessible from the NAVY DTD/FOSI Repository via the Wide World Web via http://navysgml.dt.navy.mil/ (Point of Contact for the NAVY DTD/FOSI Repository is Betty Harvey, CDNSWC Code 183, Bethesda, MD 20084-5000 or via email: harvey@oasys.dt.navy.mil .) The ``Davenport Group'' is a group of Unix system vendors and vendors of related hardware, software, and services whose purposes include the creation of SGML-based conventions for representing online software documentation. Some public participation is permitted. For more information, please contact Dale Dougherty, c/o O'Reilly & Associates, Inc., 103A Morris Street, Sebastopol, California 95472 USA (tel: +1 707 829 0515 or +1 800 998 9938 (home office: +1 707 829 3762 or +1 707 829 3762), fax: +1 707 829 0104, Internet: dale@ora.com) or Ralph Ferris, c/o Fujitsu Open Systems Solutions, Inc., 6121 Hollis Street, Emeryville, California 94608-2092 USA (tel: +1 510 652 6200 x421, fax +1 510 652 5532, Internet: ralph@ossi.com). ``SGML Open'' ``is a non-profit, international consortium of providers of products and services, dedicated to accelerating the further adoption, application and implementation of SGML, the international standard for open interchange of documents and structured information objects. SGML Open provides its members with an open forum to discuss market needs and directions, and to recommend guidelines for product interoperability. The consortium receives, coordinates and disseminates information describing SGML methodologies, technologies, and implementations.'' For more information, contact Larry Bohn, President, SGML Open, c/o Interleaf, Prospect Place, 9 Hillside Avenue, Waltham, MA 02154 (tel: +1 617 290 0710, fax: +1 617 290 4943). Some Implementations of HyTime: ``HyMinder,'' a HyTime engine. (TechnoTeacher, Inc., P. O. Box 23795 Rochester, New York 14692-3795 USA. hyminder@techno.com.) ``HyOctane,'' a HyTime engine. (Interactive Media Group, Center for Productivity Enhancement, University of Massachusetts--Lowell, One University Avenue, Lowell, Massachusetts 01854 USA. buford@uml.edu.) ``ObjectSGML,'' a HyTime/SGML parser. (Information Technology Research Center, Yuan-Ze Institute of Technology, 135 Far East Road, Neiti, Taoyuan, TAIWAN R.O.C. cssmju@cs.yzit.edu.tw.) ``SoftQuad Explorer,'' a HyTime document editor/browser. (SoftQuad Inc., 56 Aberfoyle Crescent, Suite 810, Toronto, Ontario, CANADA M8X 2W4, +1 416 239 4801, fax +1 416 239 7105, linda@sq.com, Applelink: SoftQuad.) Some HyTime consultants and other HyTime-related service providers: High Text S.A.R.L., 5, rue d'Alsace, 75010 Paris, FRANCE, +33 1 4205 9315, fax: +33 1 4205 9248, MBIEZUNSKI@MCIMail.com Martin Hensel Corporation, 233 Needham Street, Newton, Massachusetts 02164 USA, +1 617 527 3230, fax +1 617 527 1929, 71542.510@compuserve.com Passage Systems Inc., 9971 Quail Boulevard, Suite 903, Austin, Texas 78758 USA, +1 512 339 1400, fax +1 512 339 3618, kimber@passage.com. TechnoTeacher, Inc., (courier: 3800 Monroe Avenue, Pittsford, NY 14534-1330 USA), P.O. Box 23795, Rochester, New York 14692-3795 USA, +1 716 389 0961, fax +1 716 389 0960, hyminder@techno.com. Best regards, NOTE NEW ADDRESS, PHONE NUMBERS: Steven R. Newcomb | TechnoTeacher, Inc. direct +1 716 389 0964 | (courier: 3800 Monroe Avenue, main +1 716 389 0961 | Pittsford, NY 14534-1330 USA) fax +1 716 389 0960 | P.O. Box 23795 Internet: srn@techno.com | Rochester, New York 14692-3795 USA ******************************************************************************** ******************************************************************************** Thanks for your interest in TechnoTeacher's HyMinder SGML/HyTime engine. It can take the sting out of adding HyTime and SGML compliance to your C++ applications, because it can handle all the chores involved in parsing (importing), changing, reorganizing, processing, validating, and exporting information represented according to the ISO SGML and HyTime standards. In other words, application programmers can concentrate on the application-specific portions of their software, and still equip their applications with an ability to read and write information that can participate in the worldwide mainstream of information processing. This product, by itself, is useful only to C++ programmers. HyMinder has no end-user interface, although many applications can be readily built by adding a user interface. We are now shipping version 0.8.x of the HyMinder engine to customers whose planning cycles require that they begin evaluations as soon as possible. We will provide to these early customers all updates (including documentation improvements and bug fixes) until version 1.0, which they will also receive, and for one year thereafter, without additional charge. The HyMinder engine is the only SGML system available which was designed specifically to support the heavy demands of HyTime (ISO/IEC 10744) processing, while also supporting a comprehensive array of SGML functionalities. It is built to serve as the SGML-handling substrate of any application that requires any portion of the semantic processing implied by the HyTime standard, e.g., hyperlinking, scheduling and extended document management and validation. Best regards, Steven R. Newcomb | TechnoTeacher, Inc. direct +1 716 389 0964 | (courier: 3800 Monroe Avenue, main +1 716 389 0961 | Pittsford, NY 14534-1330 USA) fax +1 716 389 0960 | P.O. Box 23795 Internet: srn@techno.com | Rochester, New York 14692-3795 USA enc: HyMinder Technical Information sheet HyMinder License Information sheet sample MarkMinder/HyMinder system application: Browse.cc ******************************************************************************* HyMinder Technical Information TechnoTeacher, Inc.'s HyMinder HyTime engine is for those who wish to write applications that can create and/or process hypermedia documents represented in the internationally standard HyTime language, and for those who wish to create object-oriented SGML applications or retrofit existing applications so that data can be interchanged in the form of SGML documents. The HyMinder HyTime engine is a C++ library which offers an easy-to-use and comprehensive API to the information contained in SGML and HyTime documents. When using the HyMinder system, programmers can regard each syntactic and semantic construct (described by the SGML and HyTime standards) as a persistent C++ object, and all such objects can be manipulated, altered, validated, and/or automatically exported as SGML/HyTime-conforming documents. The HyMinder system incorporates TechnoTeacher's MarkMinder SGML engine, which contains an SGML parser and exporter and allows editing and validation of DTDs, elements, and attributes while in database form. The MarkMinder engine's SGML database technology allows it to rapidly and randomly read, write, and/or alter the structures, attribute values, contents, etc. of several databased SGML documents simultaneously. The HyMinder HyTime engine's object classes add the hyperlinking, scheduling, and extended document management and validation facilities of HyTime to the MarkMinder SGML engine substrate. The HyMinder engine performs validation and processing tasks that are specified and implied by the HyTime standard, such as verifying the compliance of elements with HyTime architectural forms, resolving hyperlinks, providing anchor notification, providing traversal services between separate documents, responding to queries expressed in HyTime's query language (HyQ), assisting applications in managing the rendition of events in time- and space-based documents, etc. Version 0.8.2 of the HyMinder C++ library is currently available on SPARCs running SunOS 4.1.x with GNU g++ 2.x, for SPARCs running Solaris 2.x with SPARCompiler C++ 3.0.1, and for 80386 and 80486 machines running Linux 0.99.14 (libc 4.4.4) with GNU g++ 2.x. Support for other platforms is planned, and an MS Windows version is about to be released; please make your needs known. TechnoTeacher, Inc. (courier: 3800 Monroe Avenue, Pittsford, NY 14534-1330 USA) P.O. Box 23795 Rochester, New York 14692-3795 USA voice +1 716 389 0961 fax +1 716 389 0960 Internet: HyMinder@techno.com Anticipated HyTime Module Support: Version | 0.8 | 0.9 | 1.0 | 2.0 Base | p | p | p | c Measurement | p | p | p | c Location Address | p | p | p | c Hyperlinks | p | p | p | c Scheduling | | | p | c Rendition | | | p | c Anticipated HyTime Module Option Support: Version | 0.8 | 0.9 | 1.0 | 2.0 BASE MODULE context | | | | c lextype | | | | c HyLex | | | | c lexord | | | | c refctl | | c | c | c exidrefs | | c | c | c dvlist | | | c | c desctxt | | | c | c activity | | c | c | c dcnatts | | | c | c xpropdef | | | | c HyPD | | | | c unparsed | | | | c MEASUREMENT MODULE dimref | | | | c markfun | | p | p | c HyOp | | p | p | c HyFunk | | p | p | c homogran | | | | c fcsmdu | | | | c axismdu | | | | c LOCATION ADDRESS MODULE multloc | p | c | c | c spanloc | | | | c anysgml | | | | c anydtd | c | c | c | c mixspace | | | | c coordloc | p | p | p | c pathloc | | c | c | c relloc | p | p | p | c notsrc | | | | c query | p | p | p | c HyQ | p | p | p | c mixcase | | | | c bigmatch | | | | c uassert | | | | c HYPERLINKS MODULE manyanch=NUMBER | c | c | c | c SCHEDULING MODULE manyaxes=NUMBER | | | | c splitfcs | | | | c grpdex | | | | c accanch | | | | c exrecon | | | | c calspec | | | | c juldate | | | | c RENDITION MODULE modify | | | | c patch | | | | c project | | | | c profun | | | | c scaleref | | | | c Table key: p=partial; c=complete. Support for the Scheduling and Rendition modules of HyTime will begin with version 1.0. ******************************************************************************* HyMinder License Information Licenses: The terms and conditions of specific Developer Licenses and Application Licenses are contained in written agreements. (The information in this circular is subject to modification by changes, additions and deletions without notice.) Not shown in the fee schedules below are shipping fees, media charges (a nominal charge for each actual copy of the HyMinder library and documentation on magnetic media), applicable taxes, and the additional costs of optional technical services. Developer Licenses: A HyMinder Developer License consists of the right to use the HyMinder library for the purpose of developing applications that contain and/or use the HyMinder engine, and for testing such applications prior to distribution or deployment for use. This nonexclusive, nontransferable license is good for a year at a time and allows for the use of the HyMinder library by one named person (or, alternatively, by one named machine to be used only by one person during any one period of time). Each Developer License is provided for one specific computer platform. Pricing: A HyMinder Developer License may be purchased annually for $5,500 [all amounts are shown in US dollars] plus $1,000 per developer (for a minimum of $6,500), with the total Developer License fees not to exceed $25,000 per year per software development site. Developer License fees include the cost of maintenance, all updates and new releases, technical support, and ten Distributable End User Licenses. Schedule of Developer License Fees: ($5,500 plus $1,000 per developer [minimum of $6,500]) number of developers | price per year 1 | $ 6,500 2 | $ 7,500 5 | $ 10,500 10 | $ 15,500 20 or more | $ 25,000 Unlimited Single Application Licenses: A HyMinder Unlimited Single Application License consists of the right to incorporate all or any portion of the HyMinder library in an unlimited number of copies of exactly one application, a description of which forms part of the license agreement. Pricing: A HyMinder Unlimited Single Application License may be purchased for $65,000. Each new Application costs an additional $65,000, with the total cost of Application Licenses not to exceed $250,000 per licensee. A license for unlimited numbers of copies of an unlimited number of applications may be purchased for $250,000. Schedule of Unlimited Single Application License Fees: ($65,000 per application) number of applications | price 1 | $65,000 2 | $130,000 3 | $195,000 4 or more | $250,000 Note: The applicable Developer License Fee must be paid annually for the continuation of maintenance. Refunds: License fees, and all taxes based on license fees, are refundable if all copies are destroyed and all original materials are returned to TTI within thirty days after the materials are first delivered to Licensee's address. No other charges are refundable. TechnoTeacher, Inc. (courier: 3800 Monroe Avenue, Pittsford, NY 14534-1330 USA) P.O. Box 23795 Rochester, New York 14692-3795 USA voice +1 716 389 0961 fax +1 716 389 0960 Internet: HyMinder@techno.com ******************************************************************************** A sample HyMinder engine application: Browse.cc Here is a sample session running the Browse.cc program (source code attached below). Browse.cc provides a very primitive user interface to a small portion of the HyMinder engine's functionality. In this session, the SGML document "poems.doc" (attached below) is browsed. (Please note that the Browse.cc program is not a product. It is merely intended to demonstrate a small portion of the MarkMinder and HyMinder API, a portion which contains only some of data retrieval methods of those systems, and none of the data and metadata storage and editing methods.) *** % browse poems.doc // first session begins here. Element: GI: "POEMDOC":1 // starts at document element browse> ? // get help info [H] Go to the hub node [P] Go to parent [N] Go to first child [F] Go to next sibling [B] Go to previous sibling [A] Show anchors (for a link) // see second session, below [L] Show links (for an anchor) // see second session, below [?] Show this help screen [Q] Quit Element: GI: "POEMDOC":1 browse> n // go to first child element Element: GI: "POEM":1 ID: "WALRUS" browse> n Element: GI: "TITLE":1 browse> n Pseudo-element: "The Walrus and the Carpenter^M " browse> p // go to parent element Element: GI: "TITLE":1 browse> f // go to next sibling Element: GI: "AUTHOR":1 browse> n Pseudo-element: "Lewis Carroll^M " browse> p Element: GI: "AUTHOR":1 browse> f Element: GI: "LI":1 browse> n Pseudo-element: ""The time has come," the Walrus said.^M " browse> p Element: GI: "LI":1 browse> f Element: GI: "LI":2 browse> n Pseudo-element: ""To speak of many things:^M " browse> p Element: GI: "LI":2 browse> f Element: GI: "LI":3 browse> f Element: GI: "LI":4 browse> f Element: GI: "LI":5 browse> f Element: GI: "LI":6 browse> f Element: GI: "LI":6 // ^G: bell rings; no next sibling browse> p Element: GI: "POEM":1 ID: "WALRUS" browse> f Element: GI: "POEM":2 ID: "JABWOCK" browse> q // quit % *** The second session, below, demonstrates the use of the HyMinder system (the MarkMinder system as enhanced for HyTime processing) in Browse.cc to traverse a link to a named element in another document, and back again. *** % browse annot.doc // second session begins here Element: GI: "ANNOTDOC":1 browse> n Element: GI: "P":1 browse> n Pseudo-element: "In this poem, " browse> f (LINK) Element: GI: "POEMREF":1 ID: "" browse> f Pseudo-element: " Lewis^MCarroll seemingly utters utter nonsense." browse> p Element: GI: "P":1 browse> n Pseudo-element: "In this poem, " browse> f (LINK) Element: GI: "POEMREF":1 ID: "" browse> n (ANCHOR) Pseudo-element: "Jabberwocky" browse> l // go to link of this anchor (LINK) Element: GI: "POEMREF":1 ID: "" browse> a // show anchors of this link Choose an Anchor: [ 0] Cancel [ 1] (ANCHOR) Pseudo-element: "Jabberwocky" [ 2] (ANCHOR) Element: GI: "POEM":2 ID: "JABWOCK" Anchor? 2 // go to other document (ANCHOR) Element: GI: "POEM":2 ID: "JABWOCK" browse> n Element: GI: "TITLE":2 browse> n Pseudo-element: "Jabberwocky^M " browse> p Element: GI: "TITLE":2 browse> p (ANCHOR) Element: GI: "POEM":2 ID: "JABWOCK" browse> l // go to link of this anchor (LINK) Element: GI: "POEMREF":1 ID: "" browse> a // show anchors of this link Choose an Anchor: [ 0] Cancel [ 1] (ANCHOR) Pseudo-element: "Jabberwocky" [ 2] (ANCHOR) Element: GI: "POEM":2 ID: "JABWOCK" Anchor? 1 (ANCHOR) Pseudo-element: "Jabberwocky" browse> p (LINK) Element: GI: "POEMREF":1 ID: "" browse> b Pseudo-element: "In this poem, " browse> p Element: GI: "P":1 browse> p Element: GI: "ANNOTDOC":1 // we're back where we started browse> q % *** The third session, below, demonstrates the use of the HyMinder system (the MarkMinder system as enhanced for HyTime processing) in Browse.cc to traverse a link in a HyTime document (annot.doc) to an unnamed element in an SGML document (poems.doc), and back again. The remote anchor is specified using the HyQ query language. (Note: HyQ, which is part of the ISO 10744 HyTime standard, is the only internationally standardized query language for use with SGML documents.) The query is found in the nameloc element (id=walrus3) at the end of the "annot.doc" element. *** % browse annot.doc Element: GI: "ANNOTDOC":1 browse> n Element: GI: "P":1 browse> f Element: GI: "P":2 browse> n Pseudo-element: "In " browse> f (LINK) Element: GI: "POEMREF":2 ID: "" browse> n (ANCHOR) Pseudo-element: "line 3" browse> p (LINK) Element: GI: "POEMREF":2 ID: "" browse> f Pseudo-element: " of the^M" browse> f (LINK) Element: GI: "POEMREF":3 ID: "" browse> n (ANCHOR) Pseudo-element: "poem" browse> p (LINK) Element: GI: "POEMREF":3 ID: "" browse> f Pseudo-element: ", sealing wax may mean the wax^Mthat seals the hulls of ships, but probably not." browse> p Element: GI: "P":2 browse> n Pseudo-element: "In " browse> f (LINK) Element: GI: "POEMREF":2 ID: "" browse> a Choose an Anchor: [ 0] Cancel [ 1] (ANCHOR) Pseudo-element: "line 3" [ 2] (ANCHOR) Element: GI: "LI":3 Anchor? 2 (ANCHOR) Element: GI: "LI":3 browse> n Pseudo-element: "Of shoes and ships and sealing wax,^M " browse> p (ANCHOR) Element: GI: "LI":3 browse> p (ANCHOR) Element: GI: "POEM":1 ID: "WALRUS" browse> p Element: GI: "POEMDOC":1 browse> n (ANCHOR) Element: GI: "POEM":1 ID: "WALRUS" browse> n Element: GI: "TITLE":1 browse> f Element: GI: "AUTHOR":1 browse> f Element: GI: "LI":1 browse> f Element: GI: "LI":2 browse> f (ANCHOR) Element: GI: "LI":3 browse> l (LINK) Element: GI: "POEMREF":2 ID: "" browse> a Choose an Anchor: [ 0] Cancel [ 1] (ANCHOR) Pseudo-element: "line 3" [ 2] (ANCHOR) Element: GI: "LI":3 Anchor? 1 (ANCHOR) Pseudo-element: "line 3" browse> p (LINK) Element: GI: "POEMREF":2 ID: "" browse> p Element: GI: "P":2 browse> p Element: GI: "ANNOTDOC":1 browse> q % *** Below is the full text of poems.doc: *** <!DOCTYPE poemdoc [ <!ELEMENT poemdoc - O (poem)*> <!ELEMENT poem - O (title, author, li*) > <!ATTLIST poem id ID #IMPLIED> <!ELEMENT li - O (#PCDATA)> <!ELEMENT (title,author) - O (#PCDATA)> ]> <poemdoc> <poem id = walrus> <title>The Walrus and the Carpenter <author>Lewis Carroll <li>"The time has come," the Walrus said. <li>"To speak of many things: <li>Of shoes and ships and sealing wax, <li>Of cabbages and kings, <li>And why the sea is boiling hot, <li>And whether pigs have wings. </poem> <poem id = jabwock> <title>Jabberwocky <author>Lewis Carroll <li>"Beware the Jabberwock, my son, <li>The jaws that bite, <li>The claws that catch; <li>Beware the jubjub bird, and shun <li>The frumious bandarsnatch." </poem> </poemdoc> *** Below is the full text of annot.doc: *** <!DOCTYPE annotdoc [ <!ELEMENT annotdoc - O ( p | poemref | nameloc)* > <!ELEMENT p - O ( #PCDATA | poemref)* > <!ELEMENT poemref - O ( #PCDATA) > <!ATTLIST poemref HyTime NAME #FIXED clink id ID #IMPLIED linkend IDREF #REQUIRED > <!ELEMENT nameloc - O ( nmlist | HyQ)* > <!ATTLIST nameloc id ID #REQUIRED HyTime NAME #FIXED nameloc ordering (ordered|noorder) noorder set (set|notset) notset aggloc (aggloc|agglink|nagg) agglink > <!ELEMENT nmlist - O ( #PCDATA) > <!ATTLIST nmlist HyTime NAME nmlist nametype (entity|element|unified) element obnames (obnames|nobnames) nobnames docorsub ENTITY #IMPLIED > <!NOTATION HyQ PUBLIC "+//ISO/IEC 10744:1992//NOTATION HyTime Query Notation//EN" > <!ELEMENT HyQ - O ( #PCDATA) > <!ATTLIST HyQ HyTime (nmquery|mrkquery) nmquery notation NAME #FIXED HyQ qdomain IDREFS #IMPLIED args IDREFS #IMPLIED > <!ENTITY poems SYSTEM "poems.doc" CDATA SGML> <!NOTATION SGML PUBLIC "+//ISO/IEC 8879:1986//NOTATION Standard Generalized Markup Language//EN"> ]> <annotdoc> <p>In this poem, <poemref linkend=jabloc>Jabberwocky</poemref> Lewis Carroll seemingly utters utter nonsense.</p> <p>In <poemref linkend=walrus3>line 3</poemref> of the <poemref linkend=walrus>poem</poemref>, sealing wax may mean the wax that seals the hulls of ships, but probably not.</p> <!-- Gets "Jabberwocky" from poems.doc --> <nameloc id=jabloc><nmlist element docorsub=poems>jabwock</nmlist></nameloc> <!-- Gets "Walrus and the Carpenter" from poems.doc --> <nameloc id=walrus><nmlist element docorsub=poems>walrus</nmlist></nameloc> <!-- Gets the third line from "Walrus" --> <nameloc id=walrus3><HyQ qdomain=walrus> Listloc( Select( Relloc( DOMROOT DOMROOT CHILDREN) EQ( Proploc( CAND GI EMPTY) "LI")) 3 1) </HyQ></nameloc> *** Below is the full source code of Browse.cc: *** -- begin Makefile -- # # NAME: Makefile # PROJECT: Example document browsing application with # very primitive user interface. # DESCRIPTION: An example use of the HyMinder system, `Browse' allows # a user to interactively browse an SGML/HyTime # document. # # Copyright (C) 1994 TechnoTeacher, Inc. # # RCS INFO: $Id: Makefile,v 1.1 1995/01/04 18:01:27 peter Exp peter $ # Prefix for include, lib and executable files PREFIX=/usr/techno/hyminder # HyMinder include files path. INCLUDEDIR=$(PREFIX)/include # HyMinder library path. LIBDIR=$(PREFIX)/lib # Executables path. BINDIR=$(PREFIX)/bin # C++ compiler and options. CXX = g++ CCOPTIONS = -g -Wall # Linker options. LDOPTIONS = -g ################################################### # You shouldn't need to change anything below here. PROG = browse OBJS = Browse.o CXXFLAGS = $(CCOPTIONS) -I$(INCLUDEDIR) LDFLAGS = $(LDOPTIONS) -L$(LIBDIR) LIBS = -lhyminder -lmarkminder -lmmexport -lmmparser -lhmentitymanager \ -lhmdocobj -lhmdtd -lhmsgmldecl -lhmruleman -lhmdb -lhmutil \ -lidf -lkeyf all: $(PROG) $(PROG): $(OBJS) $(CXX) $(LDFLAGS) -o $@ $^ $(LIBS) clean: -rm -f *.o $(PROG) -- end Makefile -- -- begin Browse.cc -- // // MODULE NAME: Browse.cc // PROJECT: Example document browsing application with // very primitive user interface. // DESCRIPTION: An example use of the HyMinder system, `Browse' allows // a user to interactively browse an SGML/HyTime // document. // // Copyright (C) 1993, 1994 TechnoTeacher, Inc. All rights reserved. // // Permission to reproduce and share this material is granted only for // purposes of evaluating the MarkMinder and/or HyMinder systems by // potential licensees of those systems, provided that no changes are // made to this material in any copy, and also provided that this notice // is reproduced with every copy. No other use of this material is // permitted. // // (Please note that the browse program is not a product. It is merely // intended to demonstrate a small portion of the MarkMinder and HyMinder // API, a portion which contains only some of data retrieval methods of // those systems, and none of the data and metadata storage and editing // methods.) // #include <HMError.h> #include <HMErrorHandler.h> #include <HMFile.h> #include <HMDocObj.h> #include <HMDocumentDatabase.h> #include <HMNode.h> #include <HMAttributeValue.h> #include <HMHyMinder.h> #include <HMHyMinderDefaultCallback.h> #include <HMHyTimeIndex.h> #include <HMNodePtrLinkedList.h> #include <HMIntStack.h> #include <HMLinkHandler.h> #include <HMDataObject.h> #include <HMLinkend.h> #include <HMLinkendPtrList.h> #include <HMIlink.h> #include <HMClink.h> // Browse application class. class Browse { // Contains the exit status of the most recently called method. HMError e; // Pointer to the application's callback object. HMHyMinderApplicationCallback * callback; // Pointer to the application's HyMinder object. HMHyMinder * hyMinder; // Pointer to the hub document's document element. HMNodePtr hubNode; // Prints out the relevent data for a node. (e.g. its GI, unique id, // data content, ...) int GetChoice( char * prompt, int max); // Prints out the relevent data for a node. (e.g. its GI, unique // id, data content, ...) HMError PrintNode( HMNodePtr & node); // Given an ilink in `ilinkNode', `GetAnchorFromIlink' retrieves the // anchors the link points to and allows the user to select one; it // is returned in `anchorNode'. `GetAnchorFromIlink' assumes that // `linkNode' is an ilink, i.e. no sanity checking is performed. HMError GetAnchorFromIlink( HMNodePtr & ilinkNode, HMNodePtr & anchorNode); // Given a clink in `clinkNode', `GetAnchorFromClink' retrieves the // anchors the link points to and allows the user to select one; it // is returned in `anchorNode'. `GetAnchorFromClink' assumes that // `linkNode' is a clink, i.e. no sanity checking is performed. HMError GetAnchorFromClink( HMNodePtr & clinkNode, HMNodePtr & anchorNode); // Given a linkend, `GetNodeFromLinkend' retrieves the // anchors the linkend points to and allows the user to select one; it // is returned in `anchorNode'. HMError GetAnchorFromLinkend( HMLinkend & linkend, HMNodePtr & anchor); public: // Constructor. Opens the document database `docName' and allows // the user to browse it. Browse( HMUChar * docName); // Destructor. Deletes the HyMinder object if it has been // instantiated. TildeBrowse(); // At an anchor, retrieves the links that point to it and allows // the user to select one, which is returned in `link'. HMError GetLink( HMNodePtr & anchor, HMNodePtr & link); // At a link, retrieves the anchors the link points to and allows // the user to select one, which is returned in `anchor'. HMError GetAnchor( HMNodePtr & link, HMNodePtr & anchor); // Returns the exit status of the most recently called method. inline HMError Status() { return e;} // Prints any accumulated error messages in the global hmError object. void PrintErrors(); // Prints out a menu of recognized commands. void Help(); }; // Prints any accumulated error messages in the global hmError object. void Browse:: PrintErrors() { // Print accumulated errors to standard error. hyMinder->PrintErrors( HMstderr); } // Constructor. Opens the document database `docName' and allows the // user to browse it. Browse:: Browse( HMUChar * docName) { // Create a callback object to give to HyMinder. callback = new HMHyMinderDefaultCallback; // Intantiate a HyMinder object, passing it the source system // identifier object of the hub document database. hyMinder = new HMHyMinder( callback); // Instantiate a system identifier object, passing it the system // identifier object of the session and hub document database. HMSystemIdentifier systemIdentifier; systemIdentifier.Assign( docName); // Open the session and hub document databases. if ( e = hyMinder->OpenSession( systemIdentifier)) { HMstderr.Printf( "Error occured while opening session or hub database \"%s\"\n", docName); return; } // Perform HyTime engine processing on the document. This allows // the engine to create hypermedia indexes of the document to // speed rendition. if ( e = hyMinder->DoEngineProcessing()) { HMstderr.Printf( "Error(s) occured while doing HyTime engine processing\n"); return; } // Print out non-fatal errors accumulated by engine processing. PrintErrors(); // Start browsing at the document element of the hub document. HMNodePtr node; if ( e = hyMinder->GetHubNode( node)) { HMstderr.Printf( "Couldn't get hub node: error %d\n", e); return; } // The main loop of the application. Describe the current node as // pointed to by `node', and then wait for a command. The // procedure associated with command makes `tmpNode' point to a // new node, which if not null is assigned to `node' at the end of // the loop, thus completing the cycle. HMNodePtr tmpNode; int command; for (;;) { // Print out the current node. if ( e = PrintNode( node)) return; // Prompt the user for a command. HMstdout.Printf( "browse> "); // Wait for a command. command = getchar(); // Catch any extra characters entered up to and including a newline. while ( getchar() != '\n'); // Process the command. switch ( command) { case 'h': case 'H': // Return to the hub node. if ( e = hyMinder->GetHubNode( tmpNode)) { HMstderr.Printf( "Couldn't get hub node: error %d\n", e); tmpNode = 0; } break; case 'p': case 'P': // Go to the parent of the current node. tmpNode = node->GetParent(); break; case 'b': case 'B': // Go to the previous sibling of the current node. tmpNode = node->GetPrevSib(); break; case 'f': case 'F': // Go to the next sibling of the current node. tmpNode = node->GetNextSib(); break; case 'n': case 'N': // Go to the first child of the current node. tmpNode = node->GetFirstChild(); break; case 'a': case 'A': // Choose an anchor of the current node, which must be a link. if ( e = GetAnchor( node, tmpNode)) return; break; case 'l': case 'L': // Choose a link of the current node, which must be an anchor. if ( e = GetLink( node, tmpNode)) return; break; case '?': // Print out a menu of commands. Help(); // Stay at the current node. tmpNode = node; break; case 'q': case 'Q': // Exit from the program. return; break; } // Set the current node to the node pointed to by tmpNode, // unless it's null, in which case beep (or do the equivalent // thereof). if ( tmpNode) node = tmpNode; else putchar(0x07); } } // Destructor. Deletes the HyMinder object if it has been // instantiated. Browse:: TildeBrowse() { // Close the session database. if ( e = hyMinder->CloseSession()) HMstderr.Printf( "Error occured while closing session database: error %d\n", e); // Delete the HyMinder object if it has been instantiated. if ( hyMinder) delete hyMinder; // Delete the callback object after deleting the HyMinder object, // as HyMinder may need to use the callback object duing deletion. if ( callback) delete callback; } // Prints to standard output a menu of recognized commands. void Browse:: Help() { HMstdout.Printf( "\ [ H]\tGo to the hub node\n\ [ P]\tGo to parent\n\ [ N]\tGo to first child\n\ [ F]\tGo to next sibling\n\ [ B]\tGo to previous sibling\n\ [ A]\tShow anchors (for a link)\n\ [ L]\tShow links (for an anchor)\n\ [ ?]\tShow this help screen\n\ [ Q]\tQuit\n"); } // At an anchor, retrieves the links that point to it and allows // the user to select one, which is returned in `link'. HMError Browse:: GetLink( HMNodePtr & anchor, HMNodePtr & link) { // Test to see if `anchor' is really an anchor. If not, return a // null ponter in link, but otherwise return ok. if ( !hyMinder->GetLinkHandler()->IsAnchor( anchor)) { link = 0; return e = HM_OK; } // An `HMNodePtrLinkedList' uses the HyMinder object to resolve // nodes over multiple documents. HMNodePtrLinkedList links( hyMinder); HMIntStack linkendNumbers; HMIntStack whichInAggregate; // Get all links which point to the node `anchor'. `links', // `linkendNumbers', and `whichAggregates' are parallel arrays // where `links' contains the link nodes, `linkendNumbers' // contains the linkend number of `anchor' within each link, and // `whichInAggregate' contains the number of `anchor' within its // aggregate location link, if any. if ( e = hyMinder->GetLinkHandler()->GetLinks( anchor, links, linkendNumbers, whichInAggregate)) { HMstderr.Printf( "Error occured while getting links from an anchor.\n"); return e; } // `HMNodePtrItemPtr' objects are used to index // `HMNodePtrLinkedList' objects. HMNodePtrItemPtr p; // If there is only one link to choose from, go directly to that // link, otherwise create a menu of links and ask the user to // select one. if ( links.Count() == 1) { // Set `link' to the first link. `p' must be used to hold the // object returned from `links.First()' in order to avoid // having it go out of scope before using it to index `links' // to get the actual node. link = links.GetNodePtr( p = links.First()); } else { // Start a link menu. HMstdout.Printf( "Choose a Link:\n"); HMstdout.Printf( "[ 0]\tCancel\n"); // Loop though the links, creating a menu. `p' is used to // index `links', and `i' is used to index the linkend and // aggregate numbers. int i = 0; for ( p = links.First(); p; p = links.Next( p)) { // Print menu, linkend, and aggregate numbers. HMstdout.Printf( "[%2d] (%d,%d) ", i+1, linkendNumbers[ i], whichInAggregate[ i]); // Print information about the link. PrintNode( link = links.GetNodePtr( p)); i++; } switch ( i = GetChoice( "Link? ", links.Count())) { case -1: // Got EOF; Exit. return e = HM_MACHINE_ENDS; case 0: // If the user entered 0, return the anchor as the link, i.e. // stay at the anchor. Otherwise return the selected link. link = anchor; break; default: link = links.GetNodePtr( p = links.Select( i - 1)); break; } } // Everything went ok. return e = HM_OK; } // Given a link in `linkNode', `GetAnchor' retrieves the anchors the // link points to and allows the user to select one, which is returned // in `anchorNode'. Otherwise `anchorNode' is set null. HMError Browse:: GetAnchor( HMNodePtr & linkNode, HMNodePtr & anchorNode) { // Find out what `linkNode' really is and do the appropriate thing. switch ( hyMinder->GetArchitecturalForm( linkNode) ) { case hme_hytime_ilink: return e = GetAnchorFromIlink( linkNode, anchorNode); case hme_hytime_clink: return e = GetAnchorFromClink( linkNode, anchorNode); default: // If it's not a link, return a null ponter in anchorNode, but // otherwise return ok. anchorNode = 0; return e = HM_OK; } } // Given an ilink in `linkNode', `GetAnchorFromIlink' retrieves the // anchors the link points to and allows the user to select one, which // is returned in `anchorNode'. `GetAnchorFromIlink' assumes that // `linkNode' is an ilink, i.e. no sanity checking is performed. HMError Browse:: GetAnchorFromIlink( HMNodePtr & ilinkNode, HMNodePtr & anchorNode) { // Create an `HMIlink' object out of `ilinkNode'. HMIlink ilink( hyMinder, ilinkNode); // Create a menu of anchors and ask the user to select one. // Start the anchor menu. HMstdout.Printf( "Choose an anchor:\n"); HMstdout.Printf( "[ 0] Cancel\n"); // Loop though the anchors, creating a menu. for ( int i = 0; i < ilink.GetLinkends().Count(); i++) { // Print menu number and anchrole of anchor. HMstdout.Printf( "[%2d] anchrole=\"%s\"\n", i+1, ilink.GetLinkends()[ i]->GetAnchorRole().Str()); } // `GetChoice()' prints out its first argument, then asks the user // for a number between 0 and its second argument. switch ( i = GetChoice( "Anchor? ", ilink.GetLinkends().Count())) { case -1: // Got EOF; Exit. return e = HM_MACHINE_ENDS; case 0: // If the user entered 0, return the link as the anchor, i.e. // stay at the link. Otherwise return the selected anchor. anchorNode = ilinkNode; break; default: return e = GetAnchorFromLinkend( *ilink.GetLinkends()[ i - 1], anchorNode); } // Everything went ok. return e = HM_OK; } // Given an ilink in `linkNode', `GetAnchorFromIlink' retrieves the // anchors the link points to and allows the user to select one, which // is returned in `anchorNode'. `GetAnchorFromIlink' assumes that // `linkNode' is an ilink, i.e. no sanity checking is performed. HMError Browse:: GetAnchorFromClink( HMNodePtr & clinkNode, HMNodePtr & anchorNode) { // Create an `HMIlink' object out of `ilinkNode'. HMClink clink( hyMinder, clinkNode); // Create a menu of anchors and ask the user to select one. HMstdout.Printf( "Choose an anchor:\n"); HMstdout.Printf( "[ 0] Cancel\n"); HMstdout.Printf( "[ 1] anchrole=\"%s\"\n", clink.GetRefMark().GetAnchorRole().Str()); HMstdout.Printf( "[ 2] anchrole=\"%s\"\n", clink.GetRefSub().GetAnchorRole().Str()); int i; // `GetChoice()' prints out its first argument, then asks the user // for a number between 0 and its second argument. switch ( i = GetChoice( "Anchor? ", 2)) { case -1: // Got EOF; Exit. return e = HM_MACHINE_ENDS; case 0: // If the user entered 0, return the link as the anchor, i.e. // stay at the link. Otherwise return the selected anchor. anchorNode = clinkNode; break; case 1: return e = GetAnchorFromLinkend( clink.GetRefMark(), anchorNode); case 2: return e = GetAnchorFromLinkend( clink.GetRefSub(), anchorNode); } // Everything went ok. return e = HM_OK; } // Given a linkend, `GetNodeFromLinkend' retrieves the // anchors the linkend points to and allows the user to select one; it // is returned in `anchorNode'. HMError Browse:: GetAnchorFromLinkend( HMLinkend & linkend, HMNodePtr & anchorNode) { HMNodePtrItemPtr p = linkend.GetAnchorNodes().First(); // If the anchor is an aggregate, and there is more than one node // in the list, create a menu and allow the user to select one. // Otherwise take the first node on the list. if ( linkend.IsAggregate() && linkend.GetAnchorNodes().Count() > 1 ) { // Create a menu of aggregate members; This assumes that aggtrav="agg". HMstdout.Printf( "Choose an aggregate member:\n"); HMstdout.Printf( "[ 0] Cancel\n"); for (int i = 1; linkend.GetAnchorNodes().GetNodePtr( p); i++) { HMstdout.Printf( "[%2d] ", i); PrintNode( linkend.GetAnchorNodes().GetNodePtr( p)); p = linkend.GetAnchorNodes().Next( p); } // `GetChoice()' prints out its first argument, then asks the user // for a number between 0 and its second argument. switch ( i = GetChoice( "Node? ", linkend.GetAnchorNodes().Count())) { case -1: // Got EOF; Exit. return e = HM_MACHINE_ENDS; case 0: // If the user entered 0, set anchorNode to 0, in effect // cancelling traversal. anchorNode = 0; break; default: // Get the appropriate node. p = linkend.GetAnchorNodes().Select( i - 1); anchorNode = linkend.GetAnchorNodes().GetNodePtr( p); break; } } else { switch ( linkend.GetAnchorNodes().Count()) { case 1: // Get the appropriate node. anchorNode = linkend.GetAnchorNodes().GetNodePtr( p); break; case 0: // Empty list. anchorNode = 0; HMstdout.Printf( "No nodes at this anchor!\n"); break; default: // Somehow got multiple nodes at a non-aggregate anchor; // Print out the offending nodes and return. anchorNode = 0; HMstdout.Printf( "More than one node at a non-aggregate anchor!\n"); for (int i = 1; linkend.GetAnchorNodes().GetNodePtr( p); i++) { HMstdout.Printf( "Node %2d: ", i); PrintNode( linkend.GetAnchorNodes().GetNodePtr( p)); p = linkend.GetAnchorNodes().Next( p); } break; } } return e = HM_OK; } // `GetChoice()' prints out its first argument, then asks the user // for a number between 0 and its second argument. int Browse:: GetChoice( char * prompt, int max) { // Get a number from the user from 0 to the number of anchors available. int choice = -1; while ( choice < 0 || choice > max) { HMstdout.Printf( prompt); switch ( scanf( "%d", &choice) ) { case EOF: // Exit. return -1; case 0: // `scanf' failed; clear any characters entered up to and // including a newline so we can try again. while ( getchar() != '\n'); choice = -1; break; default: break; } } // Catch any extra characters entered up to and including a newline. while ( getchar() != '\n'); return choice; } // Prints out the relevent data for a node. (e.g. its GI, unique id, // data content, ...) HMError Browse:: PrintNode( HMNodePtr & node) { // If this node is a link, display the fact. HMArchitecturalForm af = hyMinder->GetArchitecturalForm( node); if ( af == hme_hytime_ilink || af == hme_hytime_clink) { HMstdout.Printf( "(LINK) "); } // If this node is an anchor, display the fact. if ( hyMinder->GetLinkHandler()->IsAnchor( node)) { HMstdout.Printf( "(ANCHOR) "); } // Display the in different ways depending on the type of node it // is. switch ( node->GetType()) { case hme_node_type_element: // This node is an element. { // Show that this is an element. HMstdout.Printf( "Element:"); // Get the element's GI and print it out. HMName name; if ( e = node->GetGi( name)) { HMstderr.Printf( "Error occured while getting GI from a node.\n"); return e; } HMstdout.Printf( " GI: \"%s\":%d", name.Str(), node->GetOccurrenceNumber()); // Get the element's unique identifier, if it has one, and // print it out. HMAttributeValue attributeValue; if ( e = node->GetAttributeValue( hme_id, attributeValue)) { if ( e != HM_ATTRIBUTE_NOT_FOUND && e != HM_NO_ATTRIBUTES_DEFINED) { HMstderr.Printf( "Error occured while getting ID from a node.\n"); return e; } } else HMstdout.Printf( " ID: \"%s\"", attributeValue.Str()); } break; case hme_node_type_pelement: // This node is a psuedo-element. (e.g. PCDATA) { // Show that this is a psuedo-element. HMstdout.Printf( "Pseudo-element:"); // Get the psuedo-element's data and print it out. HMReplaceableData data; if ( e = node->GetData( data)) { HMstderr.Printf( "Error occured while getting data from a node.\n"); return e; } HMstdout.Printf( " \"%s\"", data.Str()); } break; default: // Anything else is either illegal or unimplemented. HMstdout.Printf( "Node type %d not implemented.", node->GetType()); break; } // Finish the line. HMstdout.Printf( "\n"); return e = HM_OK; } int main( int argc, char ** argv) { // Check that we have exactly one argument. if ( argc != 2) { HMstderr.Printf( "\ Usage: %s <doc>\n\ Where <doc> is a MarkMinder/HyMinder document database.\n", argv[0]); return 1; } // Run the application, passing the first argument to the program // as the document filename. Browse browse( ( HMUChar *) argv[1]); // Print any error messages accumulated while running the // application. browse.PrintErrors(); // If a serious error occured, report it and exit with a non-zero // exit status. Otherwise, exit with a zero exit status. if ( browse.Status()) { HMstderr.Printf( "%s: Error %d\n", argv[0], browse.Status()); return 1; } else return 0; } -- end Browse.cc -- - - From: paula@texcel.no (Paula Angerstein) Mr. Gibson, I believe you have spoken with Tushar Patel at Texcel briefly about out product Information Manager. I am the principal architect and project manager for Information Manager. I read with interest your recent posting on the net about the possibilities of managing documents as a set of objects. We have been thinking along these lines for several years based on requirements we have experienced with large manufacturing-based companies. I believe we are releasing one of the first commercially viable systems for integrating document management with engineering data, logistics information, and product support information. I would like to speak further with you about your requirements. I'm not the "sales rep" (that will come later), but I'd like to see how your needs fit into what we've seen with other companies. Let me know if it is okay to phone you, and if so, when it is convenient. Meanwhile, I'm sending you an email version of the Information Manager Product Overview. I'll get some nice-looking copy to you by post. Looking forward to talking with you, Paula Angerstein Texcel UK phone: +44 1753 833111 email: paula@texcel.no Information Manager Product Overview Texcel International ==================================== ==================== Texcel's Information Manager (IM) is an integrated suite of applications built around an SGML repository. Information Manager provides complete support for authoring, management, reuse, and auditing of documents and their constituent parts. End-user packages for workflow, collaborative authoring, electronic review, dynamic document assembly, document query and browsing, and repository administration are all included as a part of Information Manager. Key concepts ------------ Reusing information, business processes, software, and expertise is the key to leveraging existing investments. Taking advantage of new and enabling technology equips you to respond efficiently and rapidly to evolving requirements. Information Manager is designed to increase productivity and reduce overall cost of document authoring, management, and production through a combination of robust software components, a well-defined open architecture, adherence to international standards, and built-in extensible business processes. The result is a configurable system that carefully balances turnkey functionality with the necessary extensibility and customization capabilities to support large scale, site-specific solutions without having to "reinvent the wheel" with each system, site, project, or document. Standards compliance -------------------- Information Manager adheres to existing and emerging standards wherever possible to ensure the quality and longevity of its components as well as to open up the system to popular third-party tools, databases, and applications: - Information Manager rigorously supports the Standard Generalized Markup Language (SGML) - The data model is compliant with the Object Management Group (OMG) object model - ANSI SQL2 compliant access is supported between client and repository and between repository and third-party RDBMSs - The workflow applications comply with the Workflow Management Coalition reference model. Product Component Overview ========================== While each component of Information Manager offers a competitive solution to a subset of a broader set of requirements, it is Information Manager taken as a whole that enables new and innovative ways of managing the business of document authoring, management, and production. The following sections provide an outline of these components. Collaborative authoring ----------------------- Document authoring has traditionally been limited to copying material from older documents, altering that material, and, of course, creating original material. The Information Manager authoring package enables workgroups of authors to work concurrently on documents while being automatically tied into unlimited bodies of previous work. The ability to share information, version portions of documents, and stay current with collaborative efforts frees the author to focus attention on authoring rather than ancillary tasks of coordination and administration. Specifically, the authoring tool provides: Check-out with access control Check-out process finds documents and fragments in the repository External objects (SGML entities) are automatically included Verification of author's access privileges by project, role within project, and document content Compound document editing Text Graphics Tables Equations Document and DBMS Queries Interactive assembly of contents Query application retrieves and coordinates relevant components and metadata in the repository Configurable display window provides familiar and consistent interface to documents User access is defined result-by-result permitting updatable, read-only, and copy-on-demand objects Full SGML compliance Real-time context-sensitive editing ensures consistent document structure and full SGML compliance Guided editing simplifies authoring by dynamically indicating contextually valid document objects Show or hide SGML markup Outline-based editing and navigation based on SGML elements Highly flexible and extensible Automatically supports any SGML DTD Configurable menus and key mappings support site-specific interface guidelines Tracks document and component revisions Check-in of work generates new versions tied to version history simplifying collaborative work Version review permits browsing and reuse of earlier work, supplemental comments, and project-related metadata Document query and browsing --------------------------- Authoring is further enhanced by advanced database query capabilities carefully crafted to operate over large volumes of highly structured data. With Information Manager, users can find information no matter how deeply it is buried in a document anywhere in the repository. Extended Query Support All SGML constructs are completely accessible and referencable within a query Search criteria can be based upon content, attribute values, structure (context) within one or more documents, or any combination in this computationally complete query tool Automatic query optimization based upon type of query and cost-based optimizer assures scalability Easy to use Predefined queries can appear as menu choices Graphical user interface generates user-defined queries Advanced syntax for experts Dynamic document assembly ------------------------- Documents that assemble themselves automatically out of elements in the repository are an important component in the complete life-cycle of a document set, especially for documents dependent on rapidly changing data or that need to be produced periodically. Document assembly improves the accuracy and integrity of documents while improving productivity through automation of repetitive tasks. Information Manager offers a robust document assembly tool wherein templates dynamically retrieve document fragments and content via embedded queries, including the following features: Improved accuracy, integrity, and productivity Assembly template can contain boilerplate contents with which dynamically retrieved content is intermixed Any document fragment, individual element, or attribute value anywhere in the repository can be retrieved as content Completed document is fully SGML compliant and can be published (in print or online) by any SGML-aware publishing system Assembled document can be automatically placed in work queue for further review (see next section) Workflow Management ------------------- As the authoring and production of documents becomes more complex and the interaction among authors, documents, and viewers becomes more sophisticated and immediate, a reliable and configurable tool to manage document life-cycles and collaborative business processes becomes critical. Information Manager automatically tracks and routes documents as they move from desk to desk during their life-cycle based on a captured model of your organization and business processes. The workflow solution is comprised of sub-components corresponding to the functional areas detailed in the Workflow Management Coalition reference model. Each functional area has a standard API for programmatic interaction with the workflow engine. In addition, rich user interfaces are used to define processes; enter, modify, and query the state of any workflow object; and register users, projects, and roles. The following applications constitute Information Manager's workflow solution. Process definition tool Graphic design tool models workflows of your business processes Conditional workflows support parallel tracks with automatic synchronization of sub-tasks and dependencies Subprocesses within a workflow provide a hierarchical set of dependent tasks Business process validation rules automatically detect inconsistencies such as redundancies and loops Metadata and user-defined attributes are easily assigned to tasks and objects supporting complex and site-specific configurations Work queue Work queue acts as a primary user interface for authors and reviewers displaying tasks, their status, upcoming deadlines, owners, and descriptions Configurable GUI interface presents customized or standard presentation of tasks Work queue entries can be sorted by project, priority, status, or on any user-defined attribute Task status highlighted with color for easy identification of critical events and tasks All Information Manager tools can be automatically invoked providing single interface Deadline and other user defined notification can be sent to any individual or role in real time or through email Upcoming workload and what-if scenarios can be generated Forms-based interface allows altering routing and behaviors of specific tasks within broader projects Workflow management tool Enables managers to create or alter workflows Assigns users to tasks Sets attribute and other user defined values Establishes deadlines and milestones Enables audit trail data capture Generates status reports Connects to third-party reporting tools Electronic review ----------------- As documents are routed from person to person and documents are versioned across collaborative workgroups, an integrated tool to capture comments and correction and pass them along "in context" adds significant value to the entire process. Information Manager's comprehensive electronic review tool set enables authors, editors, and managers to iteratively review documents for comment and alteration. As an integrated part of Information Manager, the electronic review tool takes advantage of query and viewing capabilities to allow the reviewer to include in the actual comments such information as replacement text, more accurate references, and supporting documentation. Additionally, comments can be automatically generated by permitting a reviewer to "edit" a copy of the document; comments are automatically generated based on the difference between the true document and the temporary copy, an intuitive and powerful interface to improve the productivity of both the reviewer and the author applying the suggested changes. Reviewer creates comments Comments can be attached to any element of a document (for example, a paragraph, section, or chapter), conveying the scope of the comment Review document is retrieved as read-only to protect the original document Comments are SGML documents themselves, ensuring consistency and maximum reuse Automatic initialization of comment fields, such as those identifying the reviewer and date Suggested revisions stored as fully marked-up SGML content permitting immediate inclusion by author if suggested content is accepted Auto-commenting turns edits overlaid on the read-only document into comments Author reviews comments Comments indicated in document by configurable icon Point-and-click in document to read comments Listing of comments based on parameters such as priority, reviewer, and date Assign disposition to comment, such as accepted or rejected, triggering workflow actions Reply to reviewers with explanations, improving communication Status of comment, such as pending or closed, automatically maintained and fed to workflow Author updates documents Accepting a comment can automatically update the document with suggested revision and alter status of comment Differencing a revised document with earlier versions improves accuracy and completeness A history of comments and their disposition is maintained for auditing and recovery Repository architecture ----------------------- Tracking and managing thousands of documents, business processes, and the metadata associated with document life-cycle management requires a robust, scalable, and secure datastore. The Repository Manager serves as the central data management tool for Information Manager. Supporting the unique requirements of large volumes of highly structured documents requires a specialized model and access mechanism based on the best of both document and database technology. The answer can be found in the latest generation of DBMS technology known as Object-Relational Database Management Systems (ORDBMS). The principle behind ORDBMS technology is straightforward: incorporate advanced object-oriented modeling constructs by extending and evolving the proven data management and query processing techniques of RDBMS. This melding results in a DBMS with mature security, scalability, and recovery capabilities able to support mission-critical applications while providing the required modeling to support the complexity of highly structured documents. Information Manager's repository is fully object-relational and as a result can efficiently offer the following features: Open Architecture SGML documents can be easily inserted, updated, versioned, and retrieved, making the repository truly SGML-centric in its design Full element and entity management is supported to any depth or variety DTDs are specially recognized objects and thus maintain a version history through check-in and check-out Access to external databases is inherently supported including 2-phase commit where available Access control Privilege checking at the repository and application levels Hierarchical projects with inheritance of roles and privileges are inherently supported Content management Full version history maintenance is automatically generated Shared content across documents is easily done Inter-document links is also a natural component of the repository Application development features Arbitrary, application-defined metadata permits extensible management functionality Event notification to standard and application-defined protocols Full SGML-addressing query language with sensitivity to the difficult issues of mixing content and contextual selection criteria Structure-based retrieval and update at a programmatic level for navigational operations Repository administration ------------------------- The administration of a specialized document repository requires tools specialized for the job. Information Manager provides comprehensive tools for managing the repository, including the creation of projects, roles, and users, all with a fully graphical user interface. Specifically, the repository administration tool offers: Manage users and privileges Add or delete users Alter permissions and passwords SGML input Install or unload DTDs Search file systems and load selected SGML documents Associate a document with its DTD and appropriate application files such as a FOSI Audit trail generation Track different levels of activity, ranging from project creation to read access of a document or fragment Generate configurable reports on the access history for any elements in the repository Search and sort on any access history data Workflow Assign roles within a workflow Create or alter the workflow process Associate workflow with document types Create and assign triggers for notification on user-defined events Database management Monitor and optimize database usage Add database volumes Archive and dearchive to offline storage Application architecture ------------------------ In order to assure that Information Manager is open to any application, an API and a central broker called the Application Manager are included for advanced development and integration. Application Manager Simple but flexible communication channel that supports communication and notification between the Repository Manager and between multiple applications Message format is application-independent Launching of applications upon receipt of targeted message Channels are multi-threaded and can interoperate with more than one application at a time Information Manager in action ============================= Because Information Manager is highly flexible and configurable, any particular customization illustrates only one way the system can be put to use. Following is one example of how Information Manager is used in various ways throughout the life-cycle of a set of documents. A workgroup of authors produces a set of reports every month on funds managed by a financial services company. Using IM's authoring tool, an author uses last month's report for a financial regulatory agency as a "template" for this month's report. The template automatically brings with it the appropriate legal boilerplate through its shared content feature that retrieves paragraphs maintained by the legal department. Daily values of funds over the last month are automatically drawn from the financial SQL databases using IM's external database referencing features. Creating new information ------------------------ IM's authoring tool then provides an ideal environment for generating new material. SGML context-sensitive editing ensures the reports have all the required information in the proper order. When writing up the summary of the effect of the discovery of a new drug on the fund's performance, the author can find out quickly through IM's easy-to-use query interface whether discovery of a drug has been included as part of an impact assessment on this fund before. If so, the author can copy in the relevant material and edit it, or even simply reference an existing paragraph or diagram using the shared content feature. Several authors can work on a report at the same time, one perhaps writing up the fund results and another doing the analysis. Each author simply checks out the relevant section of material for editing. Meanwhile, the responsible lawyer can retrieve the entire report for viewing to quickly determine if there are any figures that need particular attention this month. Reviewing and updating ---------------------- As authors check in their sections noting that they are ready for review through the work queue, IM routes the sections to the lawyers and other reviewers through predefined workflows to ensure the material is authorized and correct. Reviewers are automatically notified that material is awaiting their review via their work queues. IM's electronic review tool provides the easy-to-use mechanism for reviewing the sections and attaching comments. When the author receives notification that his section is either approved or needs comments addressed, he can use the electronic review tool to browse the comments and apply them as necessary. When all sections have completed the proper review cycles and have been noted as approved, the report is routed to the production department for distribution. Automatic assembly ------------------ Having completed the report submitted to the financial regulatory agency, IM is now used to automatically pull together the shareholder report. Through the document assembly tool, much of the regulatory report is dynamically retrieved into the appropriate sections of the shareholder report. The assembled report is routed to the fund's manager for addition of introductory remarks. Traceability and accountability ------------------------------- For the year-end review of the fund by the regulatory agency, IM is used to gather the appropriate documents, recreating versions as they were delivered or as they were developed. The author and approver of every section, indeed paragraph, are determined as necessary. System Profile ============== The Information Manager runs on the following Unix servers: - Sun SPARCstation under Sun OS 4.1.1, 4.1.2 or 4.1.3, or Solaris 2 - IBM RS/6000 under AIX 3.2 - HP 9000 Series 700/800 under HPUX - DEC Alpha under OSF/1 - PC under Windows 3.1 (Client only) Minimum site requirements ------------------------- The following are minimum site requirements: Information Manager can run either as a stand-alone system, or as a client/server system. Client processes and the server process may run on the same or different machines, potentially of different types. A minimum of 16 Mbytes of main memory is recommended for the stand-alone version and for each process of the client/server version. A minimum of 32 Mbytes of swap space is recommended for the stand-alone version and for each process of the client/server version. The network protocol for TCP/IP must be available to run the client/server version for communication of clients and server. The server and clients must be connected by an installation network.