计算机研究与发展
JOURNAL OF COMPUTER RESEARCH AND DEVELOPMENT
1999年 第36卷 第9期 Vol.36 No.9 1999



基于文档目录树的WWW文档协同写作机制
杨文清　黄宜华　冯坚　卢坚　张福炎
摘　要　协同写作是CSCW的一个重要研究领域.文中针对WWW文档的协同写作提出了一种文档目录树技术，不仅为WWW文档扩充了表示其全局结构的层次式目录结构，还为文档的分工协作写作提供了良好的数据组织结构.文中详细讨论了基于文档目录树结构对一个WWW文档进行协同写作时的协同机制，研究了多用户界面设计、协作方式、以及使用“目录路径锁定法”实现的并发控制等主要技术.
关键词　CSCW，协同写作，WWW文档，文档目录树
中图法分类号　TP393
COOPERATIVE AUTHORING OF WWW DOCUMENT BASED ON DOCUMENT CATALOG TREE
YANG Wen-Qing, HUANG Yi-Hua, FENG Jian, LU Jian, and ZHANG Fu-Yan
(Department of Computer Science and Technology, Nanjing University, Nanjing　210093)
(State Key Laboratory for Novel Software Technology, Nanjing University, Nanjing　210093)
Abstract　Cooperative authoring is one branch of CSCW. In the present paper, a technique of document catalog tree is proposed in cooperative authoring of WWW document, a hierarchical directory structure is extended for common WWW document to express its global structure, and a perfect infrastructure is provided for cooperative authoring. Also discussed are the details of the cooperation technique in team authoring based on document catalog tree, including the design of multi-user interface, cooperation mechanism, and the concurrent control method of catalog path locking.
Key words　CSCW, cooperative authoring, WWW document, document catalog tree
1　引言
　　计算机支持的协同工作（CSCW）自80年代提出以来，已经发展成为当今最富生机和前景的多学科前沿研究领域之一.从应用角度出发，文献［1］将CSCW分为4类，其中一类为协同写作与讨论系统，用于支持协作成员之间的协商和讨论，其典型应用就是文档的协同写作，它以最终完成一个共同的文档作为协作的目的.　　
　　超文本技术的广泛使用是协同写作系统的一个重要特征［1］.超文本结构为协同写作提供了理想的数据组织机制，它可以提供一种基于文档结构的分工协作和分布管理方法.超文本文档比常规文档更适合于进行协同工作，因为常规文档是连续的线性结构，文档在组织结构上没有划分手段，因而协同写作时，难以进行分工.而超文本文档的离散化节点和超链接组织有利于多人协作时文档任务的划分，多成员可在一个分布环境下分担完成文档中的不同部分，通过超链接将各部分链接起来，保持超文本文档的整体性［2］，尤其是具有良好的层次组织结构的大型超文本文档更有利于实现分工协作和存储管理［3］.
　　WWW（world wide web）网是目前世界上规模最大、应用最广泛的超文本文档系统，但是由于WWW文档信息量巨大，结构复杂，其写作及内容组织还存在许多的困难.现有的一些实用WWW写作工具，大多数不能有效地支持一组人员协同地进行写作，只能以人工合并的方式完成大规模WWW文档的写作.一些著名的大型工具如Microsoft FrontPage等，可以支持基于工作组的简单的文档协作写作，由一组人员各自划分一个固定部分进行写作，各部分独立完成后一起发布到WWW服务器上，但写作中难以方便地访问或链接其他人员的文档，难于在各部分独自完成以后一起发布到WWW服务器上.这种协同写作方式还较为简单，限制较大，难以满足协作程度要求较高的应用.
　　针对WWW文档应用的这个问题，我们提出一种文档目录树技术，扩充了WWW文档的层次式结构，并提供可视化的文档目录树以支持WWW文档的协同写作.本文主要讨论文档目录树技术，以及基于这种目录树结构进行WWW文档协同写作时的协作管理技术和并发控制策略.
2　WWW文档目录树及文档组织管理
　　一个好的超文本文档应当具有良好的连贯性［4,5］，所谓文档连贯性（coherence），是指文档本身在内部组织结构和外部表现结构上具有整体上的连续一致性，使用户阅读时易于理解和掌握文档的事实和语义［5］.而HTML语言自身恰恰存在一些系统性缺陷，并带来文档连贯性问题［6］.常规的HTML文档仅支持文档节点间的交叉链接关系，而不能支持层次链接关系，浏览时只能基于文档间无规则的交叉链接关系进行交叉跳转，虽然WWW浏览器通常会提供一些浏览导航手段，但读者始终缺少对一定范围内文档信息的全局结构的清晰把握，在反复的跳转后，读者常常难以把握当前的位置，容易引起迷航［6］.
　　文档目录树技术通过在常规的WWW文档外围增加一个文档结构包装，扩充了WWW文档的全局层次结构，在文档内部组织结构上提供对一个WWW文档的层次式目录结构组织，并通过可视化文档目录树为用户提供基于文档全局结构的图形化浏览，有效地提高了WWW文档的连贯性.
　　基于文档目录树技术的一个WWW文档包括两个组成部分，即表示文档目录层次结构的文档目录树和常规的HTML文档文件.每个WWW文档采用一个集中式目录树以表示其全局层次结构，文档目录树上的分支节点称为目录节点，而叶节点称为正文节点.目录节点主要用来描述文档的层次结构，正文节点则表示文档的内容部分.无论是目录节点还是正文节点都对应于一个HTML文档文件，目录节点对应的文档文件一般由系统自动生成和维护，记录该节点的创建者、创建时间等属性，并包含下层节点的目录列表；而正文节点对应的文档文件则是成员所写作的实际内容.
　　文档目录树也为写作时的分工协作提供了良好的数据组织机制.我们采用集中式的体系结构［7］，将整个WWW文档集中存放在一个写作服务器上并进行统一管理，这种集中式文档目录树避免了分布式情况下目录树链接时的复杂处理.写作时，各成员在各自的本地机上使用专用的写作程序连接到该服务器，对文档目录树进行共享访问和编辑，并申请对某个节点进行写作.在一般状态下任一成员可以在整个文档目录树的任意位置进行编辑操作，当多成员同时编辑时，需要进行并发控制以保持文档目录树的一致性.
3　协作管理
3.1　多用户界面设计
　　WYSIWIS(What you see is what I see,你见即我见)是CSCW中设计多用户界面的一个著名标准，WYSIWIS分为严格的和松散的两种层次.通过对实际系统的研究表明，严格的WYSIWIS在很多情况下是不必要的［8］，尤其对于协同写作系统，各个成员通常都有自己的任务划分，因此一般采用松散的WYSIWIS.基于这种思想，在一个成员进行写作时，并不需要将整个文档目录树下载到本地机上，我们将成员所实际见到的目录树称为屏幕目录树，屏幕目录树是整个文档目录树的一个子集，仅包含运行时刻用户操作中已涉及到的部分，它随着目录树层次的展开而动态扩充.
　　写作时，成员运行本地写作程序登录到服务器，首先从服务器取得根节点和第一层节点的信息，并将其作为屏幕目录树显示在工作窗口中，当成员在屏幕目录树上进行目录节点展开操作时，如果本地机尚无该节点下层分支信息，则请求服务器将该下层分支传送过来.写作过程中对屏幕目录树的编辑操作请求将立即提交到服务器，由服务器确认后更新到文档目录树中；而且，服务器还需要将目录树的更新情况实时发送到所有其他同时也在工作的成员的客户端，这些客户端根据各自屏幕目录树的当前状态作出响应，如果本地的屏幕目录树涉及到该更新部分，则要根据接收到的信息进行刷新，以保证屏幕目录树的有效性.
　　当成员从屏幕目录树上选择一个正文节点打开进行编辑时，则请求服务器将该正文节点对应的HTML文档文件传送到本地机，编辑完成后也立即提交到服务器并保存到相应的HTML文件中.
3.2　协同写作方式
　　在实际的协同写作中，对于某个确定的节点而言，同一时刻一般仅允许有一个成员对它进行编辑，这是一种异步的写作方式，我们主要对这种异步协同写作进行了研究，提出两种协同写作方式――全文档目录共享方式和目录分支保护方式.
　　协同写作的理想境地是不给用户设置任何限制，充分满足用户的操作愿望.全文档目录共享方式正是基于这种思想而设计的，它允许成员在全文档目录树范围内的任意位置进行节点的插入、删除、移动、修改等编辑访问，不限制各成员的工作范围，集中式的文档目录树易于支持并实现这种工作方式.其优点是减少了为实现协同工作给用户带来的种种限制，用户对文档的编辑操作自由度较大.但从另一个角度讲，这种方式不利于各成员间相对独立地工作，各成员缺少分工工作区以有效地管理和保护自己的编辑结果、设置访问权限来阻止其他成员在不希望时强行修改自己的内容.
　　与此相对应，目录分支保护方式允许一个成员将自己所编辑管理的目录分支设置为保护分支，阻止其他成员对该分支的修改，但不阻止其他成员的浏览访问.这种方式相当于一种分工工作方式，可以为成员提供相对独立的分工工作区，减少相互间的干扰.
　　这两种协同写作方式各有所长，全文档目录共享方式允许多个成员方便地对同一个节点进行异步写作，而目录分支保护方式能有效保护自己写作的内容不被别的成员任意改变.在实际写作过程中，各成员可以根据所编辑的节点在协作性上的特点，通过设置/取消保护在两种工作方式间自由切换.
　　为了记录文档目录树上的协同编辑情况，每个节点都要保存一个保护状态，同时还要记录创建成员的成员名，当一个成员设定自己创建的目录分支为保护分支时，设置相应的保护状态.可以通过检查当前成员名与待保护节点中记录的成员名是否一致来决定设置保护分支的申请是否合法.
4　并发控制
4.1　目录路径锁定法
　　在协同编辑方式下，多成员的同时性编辑访问会引起访问冲突，导致文档目录数据的不一致性，因此必须采用一定的并发控制策略来消除这种冲突.在常规文档协同编辑中，一般常采用“块锁”或“位锁”［9］控制，但对于超文本文档则可以基于超文本网结构、尤其是规则的层次式超文本结构考虑更为合适和有效的控制策略.
　　针对文档目录树的特点，我们提出了一种“目录路径锁定法”的并发控制策略.如图1所示，当一个成员M申请编辑一个正文节点A成功后，首先要对该节点进行锁定，这可以有效地阻止其他成员对节点A的编辑访问申请（但不阻止其他成员的只读访问）.但这并没有完全解决问题，因为另一成员N可能会删除节点A所在的上层目录节点B，一旦删除了B，A就成为一个无效节点，这时成员M再编辑写入节点A就会出现数据混乱.为此，成员M申请节点A成功后，必须向文档的根节点R回溯，锁定根节点R到节点A之间的目录路径上的所有目录节点，当成员N需要删除或修改这一路径上的某个目录节点时，将不能申请成功.对节点A到根节点R间目录路径的锁定并不影响对目录路径外的其它任何节点的编辑访问，如节点C，D，E等.

图 1　目录路径锁定并发控制
　　为了有效地实现这一目录路径锁定方法，为每个节点设置一个锁定计数器，当对节点A编辑访问申请成功后，对节点R到节点A之间目录路径上的所有节点的锁定计数器加1，当释放节点A时，则对这些锁定计数器减1.当任一成员需要申请任一节点进行编辑访问时，只要判断该节点的锁定计数器是否大于0.
4.2　基于目录路径锁定法的并发写作控制
　　根据操作对象及操作的特点，我们将成员的写作请求分为两类，一类为节点编辑，是对节点内容进行的编辑写作；另一类为目录树编辑，包括节点的增加、删除、移动等操作.下面分别讨论这两种编辑操作的并发控制处理.
4.2.1　节点编辑
　　对于节点编辑的情况，其特点是从开始操作到最后完成需要经过一段时间，在整个操作期间，不允许其他成员对该节点进行编辑，也不允许其他成员编辑该节点的上层节点，以免造成数据的混乱，因此，在编辑前需要对该节点以及该节点到根节点之间的所有节点进行锁定，并在编辑完成以后再加以解锁.
　　使用目录路径锁定法申请一个节点进行编辑时，综合考虑有成员工作在目录分支保护方式下的情况，其基本处理方法是：当一个成员申请一个节点时，先从该节点向根节点回溯检查该节点是否属于一个成员的保护分支，若是本地成员的保护分支，则申请成功，若属于一个非本地成员的保护分支，则申请失败；当不属于任何成员的保护分支时，则按照如前所述的锁定方法，对该节点与根节点之间的所有节点加以锁定.释放时，对于本地成员保护分支中的节点不需作任何处理，只需处理目录路径锁定法锁定的节点.主要申请处理过程描述如下：
　　/* Node: 要申请的节点　*/
　　Request　Node(Node)
　　{
　　　　if (IsProtected(Node))　　　　 /* 检查是否属于某个成员的保护分支？*/
　　　　　　if (IsLocalProtected(Node)) /* 是否为本地成员的保护分支？*/
　　　　　　return(SUCCESS); /* 申请成功 */
　　　　　　else return(FAIL); /* 申请失败 */
　　　　/* 无任何成员锁定，继续按目录路径锁定法处理 */
　　　　if (IsLocked(Node))　　　　　　　 /* 该节点已被锁定，申请失败返回 */
　　　　　　return(FAIL);
　　　　else{
　　　　　　LockPathNodes(Node);/* 申请成功，锁定相应路径上的所有节点 */
　　　　　　return(SUCCESS);
　　　　}
　　}
　　在对节点进行锁定操作时，为了保证数据的一致性和完整性，需要使用操作系统或编程语言提供的同步及互斥机制，对有关共享数据和操作处理设置临界区或并发控制锁，以实现共享数据的并发访问，防止因同时访问而可能产生的冲突和错误，并保证某些操作处理不被打断地连续完成.例如，在图1中，当一个成员M申请编辑节点A成功后，先锁定了节点A，接着锁定根节点R到节点A之间的所有节点，这一操作过程应该连续完成，操作时将不允许其他成员同时也对这一分支上的节点进行操作；否则，如果锁定节点A后，在锁定节点B前，有另一成员N锁定节点B并获得了对其操作的权限，将会导致进一步操作时发生错误.
4.2.2　目录树编辑
　　与节点编辑相比，目录树编辑是一种瞬间操作，因此，目录树编辑只要在操作前检查操作对象的锁定状态，以确认该操作在该时刻是可以正常进行的即可，而不需要对有关节点进行加锁.
　　当一个成员申请对某个节点进行删除、移动等操作时，需要检查该节点是否属于某个成员的保护分支，如果是本地成员的保护分支，则申请成功，若属于其他成员的保护分支，则申请失败.当不属于任何成员的保护分支时，检查该节点的锁定计数器，如果等于0，则编辑操作可以进行，如果大于0，表明该节点已经被锁定，申请失败.
　　节点移动、删除时，从开始申请到整个操作完成这一全过程也应该设计成为不可中断的连续操作，防止多成员并发访问可能带来的数据不一致性.
5　应用实例
　　我们将本文的研究成果应用于WWW文档协同写作系统WWWDOC的设计与开发中.该系统面向Internet网，以Windows NT为服务器平台，Win95或Windows NT为客户机平台，支持若干个成员协作完成一个WWW文档的写作.WWWDOC系统已经在一定范围内进行了试用，如新华社江苏分社等，得到了用户的好评.
　　WWWDOC系统的体系结构如图2所示，它是一种集中式体系结构，采用基于Internet的客户/服务器结构，客户和服务器之间以TCP/IP协议进行连接和数据通信.写作的WWW文档由文档目录树和常规的HTML文档文件两部分组成，集中存放在WWW服务器上.

图 2　WWWDOC协同写作系统的体系结构
　　系统主要包括两部分：客户机上的文档写作程序和服务器上的协同写作服务程序.每个客户机上各自运行相同的写作程序，负责实时地从服务器取得所需的文档目录树结构并进行显示，用户可以对该目录树进行交互的编辑操作，也可以从目录树上每次申请一个节点在本地进行写作，并在写作完成后将节点内容提交到服务器.服务器端的协同写作服务程序则负责管理和存储整个文档的目录树结构和所有的HTML文档文件，处理客户机写作程序的请求，传送相应的文档数据，并负责多成员协同写作时的并发控制，以及各客户端文档目录树的同步更新等.
　　写作完成后的WWW文档经过发行转换以后，普通用户就可以使用通用浏览器连接到服务器进行阅读.由于扩充的文档目录树是一种私有格式数据，不能为通用浏览器识别，因此系统使用Java Applet将这种扩充的层次结构以可视化的文档目录树形式显示在浏览器中，为用户提供有效的图形化浏览导航.
6　结束语
　　本文对WWW文档的协同写作进行了研究，使用文档目录树技术有效地改进了现有WWW文档在超文本内部表示结构和外部用户表现结构上的缺陷，在内部表示结构上对WWW文档扩充了一种层次式超文本结构，在用户表现结构上使用了可视化文档目录树；这种文档目录树结构提供了良好的分工协作和并发控制基础，可以有效地支持多成员的协同写作，针对此结构而采用的“目录路径锁定法”有效实现了对多成员的协同写作的并发控制.我们已将该技术应用于WWW文档协同写作系统WWWDOC中，取得了良好的效果，实践表明，文档目录树及以其为基础的协同写作机制为WWW文档协同写作提供了方便有效的支持.
注：本课题得到国家“八六三”计划基金(项目编号863-306-02-01-3)资助.
作者简介：杨文清，男，1974年6月生，博士研究生，主要研究方向为多媒体技术.
黄宜华，男，1962年12月生，教授，主要研究领域为超文本/超媒体技术和中文信息处理技术.
冯坚，男，1962年9月生，副教授，主要研究领域为图像处理和网络技术.
卢坚，男，1974年11月生，博士研究生，主要研究领域为多媒体技术.
张福炎，男，1939年9月生，教授，博士生导师，主要研究领域为多媒体技术、计算机图形学等.
作者单位；南京大学计算机科学与技术系　南京　210093
南京大学计算机软件新技术国家重点实验室　南京　210093
参考文献
1　　Rodden T, Blair G S. Distributed system support for computer supported cooperative work. Computer Communications, 1992, 15(8): 527～538
2　　Khoshafian S, Bucjiewicz M. Groupware,Workflow, and Workgroup Computing. New York: John Wiley & Sons, 1995
3　　Huang Yihua, Zhang Fuyan, Ji Yuan, You Xiaobai. The distribution, cooperation and hyperlinking mechanism for a hypermedia document system based on CSCW. In: Proceedings of International Workshop on CSCW in Design, Beijing, 1996. 531～539
4　　Hannemann J, Thuring M. What matters in developing interfaces for hyperdocument presentation. In: Schuler W, Hannemann J, Streitz N eds. Designing User Interfaces for Hypermedia. Berlin: Springer-Verlag, 1994
5　　Thuring M, Hannemana J, Jorg M. Hypermedia and cognition: Designing for comprehension. Communications of the ACM, 1995, 38(8): 57～73
6　　Kahn P. Visual cues for local and global coherence in the WWW. Communications of the ACM, 1995, 38(8): 67～69
7　　Bentley R, Rodden T, Sawyer P, Sommerville I. Architectural support for cooperative multiuser interface. IEEE Transactions on Computer, 1994, 27(5): 37～45
8　　Stefik M, Bobrow D G, Foster G et al. WYSIWIS revised: Early experiences with multiuser interfaces. ACM Transactions on Office Information System, 1987, 5(2): 147～167
9　　Santos A. Cooperative hypermedia editing with CoMEdiA. Journal of Computer Science & Technology, 1993, 8(3): 257～269 
原稿收到日期：1998-12-24；修改稿收到日期：1999-05-31.
