Standard URI scheme

Christian Egli <[email protected]> 05 Mar 2003 19:23:48 +0100
Newsgroups gmane.comp.cms.wyona.devel
Message-ID <[email protected]>
Hi all

We want to standardize CMS functionality across different publications
so that we can consolidate them in a standard root sitemap.

In order to achieve this one precondition is to _standardize_ on the
URIs how the CMS functionality is invoked.

Felix and I sat together to flesh out a proposal for a standard URI
scheme. Find the attached (forrest :-) version of it. The xml version
is attached also (patches welcome :-). 

Please comment.


-- 
Christian Egli
wyona: research & development
http://www.wyona.com
sample.html (text/html, 21.7 KB)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>URI Scheme</title>
<link type="text/css" href="skin/page.css" rel="stylesheet">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<!--================= start Navigation Path ==================-->
<table summary="navigation path" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td nowrap="nowrap" valign="middle" bgcolor="#CFDCED" height="20"><img height="1" width="5" alt="" border="0" src="skin/images/spacer.gif"><!--===== breadcrumb trail (javascript-generated) ====--><font size="2" face="Arial, Helvetica, Sans-serif"><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script></font></td>
</tr>
<tr>
<td bgcolor="#4C6C8F" height="2"><img height="2" width="2" alt="" border="0" src="skin/images/spacer.gif"></td>
</tr>
</table>
<!--================= end Navigation Path ==================-->
<!--================= start Banner ==================-->
<table summary="header with logos" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<!--================= start Group Logo ==================-->
<td bgcolor="#294563"><a href="http://www.wyona.org/"><img border="0" class="logoImage" alt="Wyona.org" src="images/wyona_org.gif"></a></td>
<!--================= end Group Logo ==================-->
<!--================= start Project Logo ==================--><td width="100%" align="center" bgcolor="#294563"><a href="http://www.wyona.org/"><img border="0" class="logoImage" alt="Wyona.org" src="images/project-logo.gif"></a></td>
<!--================= end Project Logo ==================-->
<!--================= start Search ==================--><td valign="top" rowspan="2" bgcolor="#294563">
<form target="_blank" action="http://www.google.com/search" method="get">
<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
<tr>
<td colspan="3"><img height="10" width="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
<tr>
<td><img height="1" width="1" alt="" src="skin/images/spacer.gif"></td><td nowrap="nowrap"><input value="www.wyona.org" name="sitesearch" type="hidden"><input size="15" name="q" id="query" type="text"><img height="1" width="5" alt="" src="skin/images/spacer.gif"><input name="Search" value="Search" type="submit">
<br>
<font face="Arial, Helvetica, Sans-serif" size="2" color="white">
                      the Wyona.org site
                      
                      
                    </font></td><td><img height="1" width="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
<tr>
<td><img alt="" border="0" height="10" width="9" src="skin/images/search-left.gif"></td><td><img height="1" width="1" alt="" src="skin/images/spacer.gif"></td><td><img alt="" border="0" height="10" width="9" src="skin/images/search-right.gif"></td>
</tr>
</table>
</form>
</td>
<!--================= start Search ==================--><td bgcolor="#294563"><img height="10" width="10" alt="" src="skin/images/spacer.gif"></td>
</tr>
<tr>
<td valign="bottom" bgcolor="#294563" colspan="2">
<!--================= start Tabs ==================-->
<div class="tab">
<table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="8"><img alt="" height="8" width="8" src="skin/images/spacer.gif"></td><td valign="bottom">
<table summary="selected tab" style="height: 1.7em" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="skin/images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b><a href="index.html"><font color="#000000">Home</font></a></b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="skin/images/tabSel-right.gif"></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<!--================= end Tabs ==================-->
</td><td bgcolor="#294563"><img alt="" width="1" height="1" src="skin/images/spacer.gif"></td>
</tr>
<tr>
<td bgcolor="#4C6C8F" colspan="4"><img width="1" height="10" alt="" src="skin/images/spacer.gif"></td>
</tr>
</table>
<!--================= end Banner ==================-->
<!--================= start Menu, NavBar, Content ==================-->
<table summary="page content" bgcolor="#ffffff" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="top">
<table summary="menu" border="0" cellspacing="0" cellpadding="0">
<tr>
<!--================= start left top NavBar ==================-->
<td rowspan="3" valign="top">
<table summary="blue line" border="0" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#294563"><img width="10" height="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
<tr>
<td bgcolor="#CFDCED"><font color="#4C6C8F" size="4" face="Arial, Helvetica, Sans-serif">&nbsp;</font></td>
</tr>
<tr>
<td bgcolor="#294563"><img width="10" height="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
</table>
</td>
<!--================= end left top NavBar ==================--><td bgcolor="#294563"><img width="1" height="1" alt="" src="skin/images/spacer.gif"></td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="skin/images/spacer.gif"></td><td nowrap="nowrap" valign="top" bgcolor="#4C6C8F">
<!--================= start Menu items ==================-->
<div class="menu">
<ul>
<li>
<font color="#CFDCED">About</font>
<ul>
    
<li>
<a href="index.html">Index</a>
</li>
    
<li>
<span class="sel"><font color="#ffcc00">Sample page</font></span>
</li>
    
<li>
<a href="ihtml-sample.html">Sample ihtml page</a>
</li>
    
<li>
<a href="ehtml-sample.html">Sample ehtml page</a>
</li>
    
<li>
<a href="faq.html">NZZ FAQ</a>
</li>
    
<li>
<a href="changes.html">Changes</a>
</li>
    
<li>
<a href="todo.html">Todo</a>
</li>
  
</ul>
</li>
<li>
<font color="#CFDCED">Subdir</font>
<ul>
    
<li>
<a href="subdir/index.html">Index</a>
</li>
  
</ul>
</li>
</ul>
</div>
<!--================= end Menu items ==================-->
</td><td valign="bottom" bgcolor="#4C6C8F"><img width="10" height="10" alt="" src="skin/images/spacer.gif"></td><td bgcolor="#294563"><img width="1" height="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
<tr>
<td valign="bottom" align="left" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="skin/images/menu-left.gif"></td><td bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="skin/images/spacer.gif"></td><td valign="bottom" align="right" colspan="2" rowspan="2" bgcolor="#4C6C8F"><img height="10" width="10" border="0" alt="" src="skin/images/menu-right.gif"></td>
</tr>
<tr>
<td height="1" bgcolor="#294563"><img width="1" height="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
</table>
</td><td valign="top" width="100%">
<table summary="content" width="100%" border="0" cellpadding="0" cellspacing="0">
<!--================= start middle NavBar ==================-->
<tr>
<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
<tr>
<td align="left" width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="skin/images/spacer.gif"></td><td align="left" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
                &nbsp;
                
                </font><img width="10" height="8" alt="" src="skin/images/spacer.gif"></td><td align="right" width="50%" bgcolor="#CFDCED"><font color="#4C6C8F" size="3" face="Arial, Helvetica, Sans-serif">
                &nbsp;
                
                </font><img width="10" height="8" alt="" src="skin/images/spacer.gif"></td><td width="10" bgcolor="#CFDCED"><img width="10" height="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
<tr>
<td colspan="4" bgcolor="#294563"><img width="10" height="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
<!--================= end middle NavBar ==================-->
<!--================= start Content==================-->
<tr>
<td align="left" width="10"><img width="10" height="1" alt="" src="skin/images/spacer.gif"></td><td align="left" width="100%">
<div class="content">
<table class="title" summary="">
<tr>
<td valign="middle">
<h1>URI Scheme</h1>
</td><td nowrap="nowrap" width="80" align="center"><a class="dida" href="sample.pdf"><img alt="printer" src="skin/images/printer.gif" border="0"><br>
          print-friendly<br>
          PDF</a></td>
</tr>
</table>
<p>
<font size="-2">by&nbsp;Christian Egli,&nbsp;Felix Maeder</font>
</p>
<ul class="minitoc">
<li>
<a href="#Introduction">Introduction</a>
</li>
<li>
<a href="#uri_definition">URI definition</a>
</li>
<li>
<a href="#Overview+of+use+cases">Overview of use cases</a>
</li>
<li>
<a href="#Use+cases">Use cases</a>
<ul class="minitoc">
<li>
<a href="#Resource+upload">Resource upload</a>
</li>
<li>
<a href="#Create">Create</a>
</li>
<li>
<a href="#Rollback">Rollback</a>
</li>
</ul>
</li>
</ul> 

    
<a name="N101CC"></a><a name="Introduction"></a>
<h3>Introduction</h3>
<div style="margin-left: 0 ; border: 2px">
<p>We want to standardize CMS functionality across different
      publications so that we can consolidate them in a standard root
      sitemap.</p>
<p>In order to achieve this one precondition is to standardize
      on the URIs how the CMS functionality is invoked.</p>
<p>There are different ways to achieve this. We either reserve
      part of the URI space (e.g. /lenya/foo) or we reserve part of
      the request parameter space (e.g. /foo?lenya=bar)</p>
<p>We decided to go for the second solution so that we can leave
      the URI space as required by the publication and use request
      parameters to invoke CMS actions.</p>
<p>We define two standard request parameters which we use to
      invoke all CMS actions in a standard way:</p>
<dl>
	
<dt>
<span class="codefrag">lenya.usecase</span>
</dt>
	
<dd>The name of the use case, e.g. "publish"</dd>
	
<dt>
<span class="codefrag">lenya.step</span>
</dt>
	
<dd>Each use case can have multiple steps,
	  e.g. "showscreen"</dd> 
      
</dl>
</div>

    
<a name="N101F3"></a><a name="uri_definition"></a>
<h3>URI definition</h3>
<div style="margin-left: 0 ; border: 2px">
<p>Given the URI
      <span class="codefrag">/lenya/computerworld/authoring/news/foo.html</span> we
      define the following parts:</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
	
<tr>
	  
<th colspan="1" rowspan="1">URI fragment</th>
	  <th colspan="1" rowspan="1">Name</th>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">lenya</td>
	  <td colspan="1" rowspan="1"><span class="codefrag">context-prefix</span></td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">computerworld</td>
	  <td colspan="1" rowspan="1"><span class="codefrag">publicationid</span></td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">authoring</td>
	  <td colspan="1" rowspan="1"><span class="codefrag">environment</span></td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">news/foo</td>
	  <td colspan="1" rowspan="1"><span class="codefrag">documentid</span></td>
	
</tr>
      
</table>
</div>

    
<a name="N10248"></a><a name="Overview+of+use+cases"></a>
<h3>Overview of use cases</h3>
<div style="margin-left: 0 ; border: 2px">
<p>The following use cases are know:</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
	
<tr>
	  
<th colspan="1" rowspan="1">Use case</th>
	  <th colspan="1" rowspan="1"><span class="codefrag">lenya.usecase=</span></th>
	  <th colspan="1" rowspan="1"><span class="codefrag">lenya.step=</span></th>
	  <th colspan="1" rowspan="1">Comment</th>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Publish</td>
	  <td colspan="1" rowspan="1">publish</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Confirm the publication of this document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">publish</td>
	  <td colspan="1" rowspan="1">Publish this document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Create</td>
	  <td colspan="1" rowspan="1">create</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Show a form allowing to specify the parameters for
	    creation of a document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">create</td>
	  <td colspan="1" rowspan="1">Create the document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Resource upload</td>
	  <td colspan="1" rowspan="1">upload</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Show a form allowing to specify the parameters for
	    uploading of a resource</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">upload</td>
	  <td colspan="1" rowspan="1">Upload the resource</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Rollback</td>
	  <td colspan="1" rowspan="1">rollback</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Show a list of all versions of this document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">view</td>
	  <td colspan="1" rowspan="1">View a particular version of this document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">rollback</td>
	  <td colspan="1" rowspan="1">Roll back to a particular version of this document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Checkin</td>
	  <td colspan="1" rowspan="1">checkin</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Confirm the checkin of this document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">checkin</td>
	  <td colspan="1" rowspan="1"></td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Checkout</td>
	  <td colspan="1" rowspan="1">checkout</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Confirm the checkout of this document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">checkout</td>
	  <td colspan="1" rowspan="1"></td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Schedule</td>
	  <td colspan="1" rowspan="1">schedule</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Show a list of all task scheduled for this document</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">add</td>
	  <td colspan="1" rowspan="1">Add a new task</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">modify</td>
	  <td colspan="1" rowspan="1">Modify an existing task</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">delete</td>
	  <td colspan="1" rowspan="1">Delete an existing task</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Edit</td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">User Admin</td>
	  <td colspan="1" rowspan="1">user-admin</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Show an overview page listing all users</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">add</td>
	  <td colspan="1" rowspan="1">Add a user</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">modify</td>
	  <td colspan="1" rowspan="1">Modify a user</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1"></td>
	  <td colspan="1" rowspan="1">delete</td>
	  <td colspan="1" rowspan="1">Delete a user</td>
	
</tr>
	
<tr>
	  
<td colspan="1" rowspan="1">Logout</td>
	  <td colspan="1" rowspan="1">logout</td>
	  <td colspan="1" rowspan="1">showscreen</td>
	  <td colspan="1" rowspan="1">Confirm the logout</td>
	
</tr>
      
</table>
<div class="frame fixme">
<div class="label">Fixme (
               ce

               )</div>
<div class="content">Can the authenticate process done in a
      similar way?</div>
</div>
</div>

    
<a name="N10460"></a><a name="Use+cases"></a>
<h3>Use cases</h3>
<div style="margin-left: 0 ; border: 2px">
<a name="N10466"></a><a name="Resource+upload"></a>
<h4>Resource upload</h4>
<div style="margin-left: 0 ; border: 2px">
<p>
<span class="codefrag">lenya.usecase=upload</span>
</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
	  
<tr>
	    
<th colspan="1" rowspan="1"><span class="codefrag">lenya.step=</span></th>
	    <th colspan="1" rowspan="1">additional parameters</th>
	    <th colspan="1" rowspan="1">sample value</th>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1">showscreen</td>
	    <td colspan="1" rowspan="1">xpath</td>
	    <td colspan="1" rowspan="1">/NewsML/body.content/block[1]/*[1]</td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1">insertBefore [optional]</td>
	    <td colspan="1" rowspan="1">true</td>
	  
</tr>

	  
<tr>
	    
<td colspan="1" rowspan="1">upload</td>
	    <td colspan="1" rowspan="1">documentid</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1">xpath</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1">insertBefore [optional]</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1">uploadFile</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1">identifier [optional]</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="2" rowspan="1">All Dublin core identifiers are also accepted</td>
	  
</tr>
	
</table>
<div class="frame fixme">
<div class="label">Fixme (
               ce

               )</div>
<div class="content">We assume that we can get the documentid
	  from the request URI (given the standardized <a href="#uri_definition">URI definition</a>). Is this
	  ok?</div>
</div>
</div>
<a name="N1050F"></a><a name="Create"></a>
<h4>Create</h4>
<div style="margin-left: 0 ; border: 2px">
<p>
<span class="codefrag">lenya.usecase=create</span>
</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
	  
<tr>
	    
<th colspan="1" rowspan="1"><span class="codefrag">lenya.step=</span></th>
	    <th colspan="1" rowspan="1">additional parameters</th>
	    <th colspan="1" rowspan="1">sample value</th>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1">showscreen</td>
	    <td colspan="1" rowspan="1">parentid</td>
	    <td colspan="1" rowspan="1">/dossiers/2003</td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1">doctype</td>
	    <td colspan="1" rowspan="1">Dossier</td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1">create</td>
	    <td colspan="1" rowspan="1">parentid</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1">childid</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1">doctype</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	
</table>
</div>
<a name="N10584"></a><a name="Rollback"></a>
<h4>Rollback</h4>
<div style="margin-left: 0 ; border: 2px">
<p>
<span class="codefrag">lenya.usecase=rollback</span>
</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
	  
<tr>
	    
<th colspan="1" rowspan="1"><span class="codefrag">lenya.step=</span></th>
	    <th colspan="1" rowspan="1">additional parameters</th>
	    <th colspan="1" rowspan="1">sample value</th>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1">showscreen</td>
	    <td colspan="1" rowspan="1"></td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	  
<tr>
	    
<td colspan="1" rowspan="1">view</td>
	    <td colspan="1" rowspan="1">version</td>
	    <td colspan="1" rowspan="1"></td>
	  
</tr>
	
</table>
</div>
<div class="frame fixme">
<div class="label">Fixme (
               ce

               )</div>
<div class="content">Add remaining use cases</div>
</div>
</div>
  
</div>
</td><td width="10"><img width="10" height="1" alt="" src="skin/images/spacer.gif"></td>
</tr>
<!--================= end Content==================-->
</table>
</td>
</tr>
</table>
<!--================= end Menu, NavBar, Content ==================-->
<!--================= start Footer ==================-->
<table summary="footer" cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td colspan="2" height="1" bgcolor="#4C6C8F"><img height="1" width="1" alt="" src="skin/images/spacer.gif"><a href="skin/images/label.gif"></a><a href="skin/images/page.gif"></a><a href="skin/images/chapter.gif"></a><a href="skin/images/chapter_open.gif"></a><a href="skin/images/current.gif"></a><a href="/favicon.ico"></a></td>
</tr>
<tr>
<td colspan="2" bgcolor="#CFDCED" class="copyright" align="center"><font size="2" face="Arial, Helvetica, Sans-Serif">Copyright &copy;
          2003&nbsp;wyona.org All rights reserved.<script type="text/javascript" language="JavaScript"><!--
              document.write(" - "+"Last Published: " + document.lastModified);
            //  --></script></font></td>
</tr>
<tr>
<td colspan="2" align="left" bgcolor="#CFDCED" class="logos"></td>
</tr>
</table>
<!--================= end Footer ==================-->
</body>
</html>
sample.xml (text/xml, 7 KB)
<?xml version="1.0"?>
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "dtd/document-v11.dtd">
<document> 
  <header> 
    <title>URI Scheme</title> 
    <authors><person name="Christian Egli" email=""/>
      <person name="Felix Maeder" email=""/>
    </authors> 
    <notice></notice> 
    <abstract></abstract> 
  </header> 
  <body> 

    <section>
      <title>Introduction</title>
      <p>We want to standardize CMS functionality across different
      publications so that we can consolidate them in a standard root
      sitemap.</p>

      <p>In order to achieve this one precondition is to standardize
      on the URIs how the CMS functionality is invoked.</p>

      <p>There are different ways to achieve this. We either reserve
      part of the URI space (e.g. /lenya/foo) or we reserve part of
      the request parameter space (e.g. /foo?lenya=bar)</p>

      <p>We decided to go for the second solution so that we can leave
      the URI space as required by the publication and use request
      parameters to invoke CMS actions.</p>

      <p>We define two standard request parameters which we use to
      invoke all CMS actions in a standard way:</p>
      <dl>
	<dt><code>lenya.usecase</code></dt>
	<dd>The name of the use case, e.g. "publish"</dd>
	<dt><code>lenya.step</code></dt>
	<dd>Each use case can have multiple steps,
	  e.g. "showscreen"</dd> 
      </dl>
    </section>

    <section id="uri_definition">
      <title>URI definition</title>
      
      <p>Given the URI
      <code>/lenya/computerworld/authoring/news/foo.html</code> we
      define the following parts:</p>
      <table>
	<tr>
	  <th>URI fragment</th>
	  <th>Name</th>
	</tr>
	<tr>
	  <td>lenya</td>
	  <td><code>context-prefix</code></td>
	</tr>
	<tr>
	  <td>computerworld</td>
	  <td><code>publicationid</code></td>
	</tr>
	<tr>
	  <td>authoring</td>
	  <td><code>environment</code></td>
	</tr>
	<tr>
	  <td>news/foo</td>
	  <td><code>documentid</code></td>
	</tr>
      </table>
    </section>

    <section>
      <title>Overview of use cases</title>
      <p>The following use cases are know:</p>

      <table>
	<tr>
	  <th>Use case</th>
	  <th><code>lenya.usecase=</code></th>
	  <th><code>lenya.step=</code></th>
	  <th>Comment</th>
	</tr>
	<tr>
	  <td>Publish</td>
	  <td>publish</td>
	  <td>showscreen</td>
	  <td>Confirm the publication of this document</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>publish</td>
	  <td>Publish this document</td>
	</tr>
	<tr>
	  <td>Create</td>
	  <td>create</td>
	  <td>showscreen</td>
	  <td>Show a form allowing to specify the parameters for
	    creation of a document</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>create</td>
	  <td>Create the document</td>
	</tr>
	<tr>
	  <td>Resource upload</td>
	  <td>upload</td>
	  <td>showscreen</td>
	  <td>Show a form allowing to specify the parameters for
	    uploading of a resource</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>upload</td>
	  <td>Upload the resource</td>
	</tr>
	<tr>
	  <td>Rollback</td>
	  <td>rollback</td>
	  <td>showscreen</td>
	  <td>Show a list of all versions of this document</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>view</td>
	  <td>View a particular version of this document</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>rollback</td>
	  <td>Roll back to a particular version of this document</td>
	</tr>
	<tr>
	  <td>Checkin</td>
	  <td>checkin</td>
	  <td>showscreen</td>
	  <td>Confirm the checkin of this document</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>checkin</td>
	  <td></td>
	</tr>
	<tr>
	  <td>Checkout</td>
	  <td>checkout</td>
	  <td>showscreen</td>
	  <td>Confirm the checkout of this document</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>checkout</td>
	  <td></td>
	</tr>
	<tr>
	  <td>Schedule</td>
	  <td>schedule</td>
	  <td>showscreen</td>
	  <td>Show a list of all task scheduled for this document</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>add</td>
	  <td>Add a new task</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>modify</td>
	  <td>Modify an existing task</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>delete</td>
	  <td>Delete an existing task</td>
	</tr>
	<tr>
	  <td>Edit</td>
	  <td></td>
	  <td></td>
	</tr>
	<tr>
	  <td>User Admin</td>
	  <td>user-admin</td>
	  <td>showscreen</td>
	  <td>Show an overview page listing all users</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>add</td>
	  <td>Add a user</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>modify</td>
	  <td>Modify a user</td>
	</tr>
	<tr>
	  <td></td>
	  <td></td>
	  <td>delete</td>
	  <td>Delete a user</td>
	</tr>
	<tr>
	  <td>Logout</td>
	  <td>logout</td>
	  <td>showscreen</td>
	  <td>Confirm the logout</td>
	</tr>
      </table>
      
      <fixme author="ce">Can the authenticate process done in a
      similar way?</fixme>

    </section>

    <section>
      <title>Use cases</title>

      <section>
	<title>Resource upload</title>

	<p><code>lenya.usecase=upload</code></p>

	<table>
	  <tr>
	    <th><code>lenya.step=</code></th>
	    <th>additional parameters</th>
	    <th>sample value</th>
	  </tr>
	  <tr>
	    <td>showscreen</td>
	    <td>xpath</td>
	    <td>/NewsML/body.content/block[1]/*[1]</td>
	  </tr>
	  <tr>
	    <td></td>
	    <td>insertBefore [optional]</td>
	    <td>true</td>
	  </tr>

	  <tr>
	    <td>upload</td>
	    <td>documentid</td>
	    <td></td>
	  </tr>
	  <tr>
	    <td></td>
	    <td>xpath</td>
	    <td></td>
	  </tr>
	  <tr>
	    <td></td>
	    <td>insertBefore [optional]</td>
	    <td></td>
	  </tr>
	  <tr>
	    <td></td>
	    <td>uploadFile</td>
	    <td></td>
	  </tr>
	  <tr>
	    <td></td>
	    <td>identifier [optional]</td>
	    <td></td>
	  </tr>
	  <tr>
	    <td></td>
	    <td colspan="2">All Dublin core identifiers are also accepted</td>
	  </tr>
	</table>
	<fixme author="ce">We assume that we can get the documentid
	  from the request URI (given the standardized <link
	  href="#uri_definition">URI definition</link>). Is this
	  ok?</fixme>
      </section>

      <section>
	<title>Create</title>

	<p><code>lenya.usecase=create</code></p>

	<table>
	  <tr>
	    <th><code>lenya.step=</code></th>
	    <th>additional parameters</th>
	    <th>sample value</th>
	  </tr>
	  <tr>
	    <td>showscreen</td>
	    <td>parentid</td>
	    <td>/dossiers/2003</td>
	  </tr>
	  <tr>
	    <td></td>
	    <td>doctype</td>
	    <td>Dossier</td>
	  </tr>
	  <tr>
	    <td>create</td>
	    <td>parentid</td>
	    <td></td>
	  </tr>
	  <tr>
	    <td></td>
	    <td>childid</td>
	    <td></td>
	  </tr>
	  <tr>
	    <td></td>
	    <td>doctype</td>
	    <td></td>
	  </tr>
	</table>

      </section>
      
      <section>
	<title>Rollback</title>

	<p><code>lenya.usecase=rollback</code></p>

	<table>
	  <tr>
	    <th><code>lenya.step=</code></th>
	    <th>additional parameters</th>
	    <th>sample value</th>
	  </tr>
	  <tr>
	    <td>showscreen</td>
	    <td></td>
	    <td></td>
	  </tr>
	  <tr>
	    <td>view</td>
	    <td>version</td>
	    <td></td>
	  </tr>
	</table>
      </section>

      <fixme author="ce">Add remaining use cases</fixme>
    </section>
  </body> 
  <footer> 
    <legal>© 200 wyona.org</legal> 
  </footer>
</document>