Using the Web for Document Versioning: An Implementation

Download Report

Transcript Using the Web for Document Versioning: An Implementation

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:
–
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 versioningunaware Web and DAV clients
Protocol Implementation:
–
as extension of DAV, which itself extends HTTP
DeltaV Protocol
DeltaV
DAV
HTTP
XML
Starting Point
user
VRCE
RCE
server
archives
RMI
RCE
repository
RCE
server
client
file system
working files
Goal
user
attributed
file system
working
resources
VRCE
DeltaV- >RCE
Web
server
DeltaV
protocol
DeltaV
repository
RCE- >DeltaV
file system
archives
RCE
server
client
file system
working files
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 Graph
DeltaV
vs.
RCE
trunk
initial revision
rev01
1.1
branch
branch
branch 1.1.1
branch
rev02
rev03
branch
1.2
1.1.1.1
1.3
1.1.1.2
branch 1.2.1
rev05
rev04
rev06
1.2.1.1
merge
merge
rev07
rev08
1.2.1.2
1.4
wr01
rev09
1.2.1.3
1.5
rev10
wr02
1.5.1.1
1.6
wr03
Legend:
Legend:
wr02
working resource
rev08
revision
sucessor relation
working resource
of a revision
1.2.1.3
template
1.3
revision
sucessor relation
1.5.2.1
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:workingresource-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:
–
"
Solution:
–
"
no DeltaV equivalent for RCE's ARCH_USERS,
ARCH_COMMENT_LEADER attributes
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
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 most
one DAV:unlocked-update element and at most
one 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>
Marshalling
PROPFIND /foo.java HTTP/1.1
Content-Length: 0
HTTP/1.1 207 Multi-Status
Content-Type: text/xml
Content-Length: 1418
DAV: 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>