using the web for document versioning: an implementation report for deltav
DESCRIPTION
Using the Web for Document Versioning: An Implementation Report for DeltaV. James J. Hunt, Jürgen Reuter. Department of Computer Science Universität Karlsruhe. Task. Starting Point: client/server versioning system client/server communication via proprietary protocol over Java-RMI Task: - PowerPoint PPT PresentationTRANSCRIPT
Using the Web forDocument Versioning:
An Implementation Reportfor DeltaV
James J. Hunt, Jürgen Reuter
Department of Computer ScienceUniversität Karlsruhe
Task
Starting Point: client/server versioning system client/server communication via proprietary
protocol over Java-RMI
Task: replace Java-RMI with DeltaV standard
DeltaV Protocol
Protocol Design Goals: support most common versioning models provide versioning for Web and DAV clients in
standardized fashion ensure backwards compatibility to versioning-
unaware Web and DAV clients Protocol Implementation:
as extension of DAV, which itself extends HTTP
DeltaV Protocol
DeltaV
DAV
HTTP XML
Starting Point
RCE
VRCE
RCErepository
RCEserver
RMI
server client
file systemworking files
user
archives
Goal
RCE
VRCE
DeltaVrepository
Webserver
DeltaVprotocol
server client
file systemworking files
user
file system
working resources
archives
DeltaV- >RCE
RCE- >DeltaV
attributedfile system
Scope
implement early 04.5 draft of DeltaV focus on version control do not consider configuration
management focus on client-managed workspaces
Implementation Details
coded in Java code size:
core HTTP server: 16720 lines attributed file system: 5357 lines DAV implementation: >8500 lines DeltaV implementation: >10000 lines
DeltaV vs. RCE:Common Ground
use checkin/checkout model organize revisions as ancestral graph require unique initial revision provide storage space for meta data
Working Resources vs. Templates
in a checkin/checkout model DeltaV Working Resource:
server-side modifiable copy of existing version holds working resource properties
RCE Template: placeholder for new revision in archive;
modifiable copy of previous revision in user's file system space
holds pre-initialized revision attributes
Version GraphDeltaV vs. RCE
1.1
1.2
1.3
1.4
1.5
1.6
1.1.1.1
1.1.1.21.2.1.1
1.2.1.2
1.2.1.3
1.5.1.1 1.5.2.1
1.2.1.3
1.3
trunk
merge
Legend:
template
revision
sucessor relation
branch 1.2.1
branch 1.1.1
branch
branch
rev01
rev02
rev04
rev08
rev09
wr02
rev03
rev06rev05
rev07
wr01
rev10 wr03
wr02
rev08
merge
Legend:
working resource
revision
sucessor relation
branch
branch
working resourceof a revision
initial revision
Version Properties vs. Attributes
Trivial mapping: DAV:Author <-> REV_AUTHOR DAV:Comment <-> REV_DESCRIPTION
Needs date format conversion: DAV:creationdate <-> REV_DATE_IN DAV:getlastmodified <-> REV_TIMESTAMP
Version Properties vs. Attributes:
Version Tree Navigation DAV:successor-set property:
no designated line of development includes revisions only, use DAV:working-
resource-id-set to get working resources
RCE's REV_NEXT, REV_BRANCHES attribute: tracks current line of development with
REV_NEXT includes revisions and templates
Version Properties vs. Attributes
Problem: no DeltaV equivalent for RCE's ARCH_USERS,
ARCH_COMMENT_LEADER attributes
Solution: use user-defined resource properties
Drawback: client-specific use, interoperability problems
when incompatible clients share same server
XML Confusion
DAV, DeltaV: make heavy use of XML use XML namespaces specify DTD syntax informally do not consider namespaces in DTD do not support XML validation
XML Confusion
problems: unclear how to specify namespaces in DTD namespaces do not seem to be supported by
validating parser many people tend to disregard XML validation limited expressiveness of DTD
prospect: maybe XML schemata are more appropriate
Conclusion
applicability of DeltaV on RCE proven provided feedback for development of DeltaV issues left (mostly DAV issues) DeltaV ongoing effort various implementations underway (e.g.
Apache) ultimate test still pending: run our
client/server against someone else's server/client
Duplicate Use of XML Elements
DAV: <!ELEMENT set (prop) >
DeltaV: <!ELEMENT set (label-name)>
Limited Expressiveness
<!ELEMENT auto-checkout ANY>
ANY value: A sequence of elements with at mostone DAV:unlocked-update element and at mostone DAV:locked-update element.
<!ELEMENT unlocked-update EMPTY>
<!ELEMENT locked-update EMPTY>
Limited Expressiveness
<!ELEMENT auto-checkout (unlocked-update | locked-update)* >
<!ELEMENT unlocked-update EMPTY>
<!ELEMENT locked-update EMPTY>
MarshallingPROPFIND /foo.java HTTP/1.1Content-Length: 0
HTTP/1.1 207 Multi-StatusContent-Type: text/xmlContent-Length: 1418DAV: 1,2
<?xml version="1.0"?><A:multistatus xmlns:A="DAV:"> <A:response> <A:href>http://Rom.ira.uka.de:4711/foo.java</A:href> <A:propstat> <A:prop xmlns:B="RCE:"> <A:auto-version>F</A:auto-version> <A:working-resource-id-set /> <B:access-list>reuter(RWX),jjh(RW)</B:access-list> ... <A:revision-set> <A:href>http://Rom.ira.uka.de:4711/xkr1.1</A:href> <A:href>http://Rom.ira.uka.de:4711/xkr1.2</A:href> </A:revision-set> </A:prop> <A:status>HTTP/1.0 200 OK</A:status> </A:propstat> </A:response></A:multistatus>