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"> </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">
</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">
</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 Christian Egli, 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 ©
2003 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>