\documentclass[]{article}
\usepackage{amsmath,graphicx,supertabular,hyperref,tabularx,ifthen}
\title{TIP \#54: Using PURLs to Unite the Tcl Webspace}
\date{August 16, 2001}
\author{Andreas Kupries, Jeff Hobbs}
\urlstyle{sf}
\setlength{\parskip}{1ex}
\setlength{\parindent}{0pt}
\def\tipversion$#1${\texttt{\$#1\$}}
\def\tiplangle#1{\ensuremath{<}}
\def\tiprangle#1{\ensuremath{>}}
\def\tipbar#1{\ensuremath{|}}
\def\tipmail#1#2{\(\langle\){\small\expandafter\url{#1@#2}}\(\rangle\)}
\ifx\pdfoutput\undefined
\newcommand{\tipimage}[2]{\typeout{Make sure you download #1.eps}\ifthenelse{\lengthtest{0.8\textwidth>#2}\and\lengthtest{0pt<#2}}{\includegraphics{#1.eps}}{\includegraphics[width=0.8\textwidth]{#1.eps}}}
\newcommand{\tipxref}[1]{}
\newcommand{\tipxrefend}{}
\else
\newcommand{\tipimage}[2]{\typeout{Make sure you create #1.pdf}\ifthenelse{\lengthtest{0.8\textwidth>#2}\and\lengthtest{0pt<#2}}{\includegraphics{#1.pdf}}{\includegraphics[width=0.8\textwidth]{#1.pdf}}}
\pdfcatalog{/PageMode /UseOutlines}
\newcommand{\tipxref}[1]{\pdfannotlink attr {/C [0.5 0.5 1.0] /Border [0 0 1]} goto name {#1}}
\newcommand{\tipxrefend}{\pdfendlink}
\fi
\newenvironment{tipabstract}{\begin{abstract}}{\end{abstract}}
\begin{document}\maketitle
\begin{center}\begin{tabularx}{\linewidth}{|r@{: }X|}\hline
\textbf{TIP \#54}&\textbf{Using PURLs to Unite the Tcl Webspace}\\\hline
Author&

Andreas Kupries \tipmail{andreas_kupries}{users.sourceforge.net}
\par
Jeff Hobbs \tipmail{hobbs}{users.sourceforge.net}
\\
Created&Thursday, \(\text{16}^{\text{th}}\) August 2001\\
Type&Process\\
State&Withdrawn\\
Vote&Pending\\
Version&\tipversion$Revision: 1.8 $\\
Post History&\\
\hline\end{tabularx}\end{center}
\thispagestyle{empty}\pagestyle{empty}
\begin{tipabstract}

This TIP proposes the use of PURLs to unify the scattered landscape of Tcl URLs into a coherent set of information about the language, the community, extensions, etc.
\end{tipabstract}
\tableofcontents\setcounter{page}{0}\clearpage\pagestyle{plain}

\section{Background \& Rationale}

One of the recurring themes in the community in general (and \url{news:comp.lang.tcl} in particular) is the lack of central website people can turn to for an introduction to the language, the community, search for extensions and packages, et cetera.

Most of the solutions proposed so far have the distinctive disadvantage of not being able to use the existing sites and bind them into a whole. This is further aggravated by the fact that the 'natural' domain names, like for example \url{http://www.tcl.com/} and \url{http://www.tcl.org} are already taken by other entities, commercial and not, and thus not available anymore. We do have control of the \url{http://www.tcl-tk.net/} domain, provided by David Welton.

Instead of giving up at this point I propose to use PURLs a.k.a. \textit{Persistent URLs} to construct a virtual website (the \textit{Tcl space}) out of all the existing independent efforts. See \url{http://www.purl.org/} for more explanations of PURLs.

Note that PURLs not only can refer to single URLs but to entire sites. The latter is done through a technique called 'partial redirection'. This ... is emphasized here because partially redirected PURL have to be used with a trailing slash whereas PURLs referring to single URL must not have a trailing slash.

In the lists below partially redirected PURLs are indicated by a trailing slash.

A restriction we face is that PURLs are case insensitive. This means that the names we will have to come up with have to be unique even with case removed.

One of the most important features is the persistency. In real life however organizations, people, websites, etc. can disappear. According to \url{http://www.purl.org/OCLC/PURL/FAQ\#toc3.14} the PURL stays in existence but can be redirected to a page detailing the history of the purl. This would include the decommission. We could also do our own scheme and redirect the purl to a page explaining the history in a more Tcl-specific manner (like: Company went out of business, was acquired, etc.).

\section{Specification}

This TIP is driven by several conflicting needs:
\begin{itemize}
\item{}
The names will be persistent, so give them some thought before creating them; they cannot be undone. This also implies that we to set up a simple and minimal structure first so as not to block future enhancements and flexibility.
\item{}
Define the structure now before the URN space gets as scattered as the URL space is. Note that this process has already begun. The PURL resolver at \url{http://www.purl.org/} currently has registered 24 Tcl-related PURLs which are not bound together in the framework proposed here. Action is necessary to prevent further confusion.
\end{itemize}

Of the existing PURLs the PURL domain \textit{/tcl} created by Don Libes is the most promising one for the unification of the Tcl space. Six of the 24 aforementioned PURLs are defined below this domain too, providing a (good) framework on which to build.

The existing PURLs and sub-domains in the \textit{/tcl} domain are:
\begin{itemize}
\item{}
\textit{expect} --- reference to the homepage of the expect extension
\item{}
\textit{faq} --- reference to the main FAQ
\item{}
\textit{faqs} --- introduction to the available FAQ documents.
\item{}
\textit{home/} --- refers to the Tcl Developers Xchange
\item{}
\textit{tip/} --- refers to the TIP archives
\item{}
\textit{wiki} --- refers to the entry page of the Tcl'ers WIKI
\end{itemize}

With the exception of \textit{expect} all of these are general classes and/or refer to important sites. They are used as is, except for \textit{expect} which has to be redirected into the proposed sub-domain \textit{package}.

The following new sub-domains covering the most important general classes of information and/or websites are proposed here. Please note that the examples used in the list below are using purely informal everyday names to refer to entities in the proposed domain. These examples should not be seen as suggestions for the concrete naming scheme used by the domain.
\begin{itemize}
\item{}
\textit{announce} --- Direct reference to a page explaining how to announce packages, applications and other tcl-related news and linking to the relevant newsgroups, mail archives and submission addresses. This includes, but is not restricted to:
\begin{itemize}
\item{}
A link to the newsgroup \textit{comp.lang.tcl.announce}.
\item{}
A link to the eGroups/Yahoo archive of the c.l.t.a newsgroup.
\item{}
The submission address of c.l.t.a. to directly submit via email announcements.
\end{itemize}
\item{}
\textit{newsletter} --- Direct reference to an archive of \textit{Tcl-URL!}.
\item{}
\textit{package/} --- Sub-domain to contain references to the homepages of the known packages. This TIP makes no distinction between C-level extensions and script libraries. From the point of view of the core these are all packages to be required.

Examples of packages are \textit{Expect}, \textit{tcllib}, etc.
\item{}
\textit{application/} --- Sub-domain to contain references to the homepages of applications related to Tcl, written in Tcl or using it internally.

Examples of applications are \textit{frink}, \textit{tclHttpd}, \textit{AOLServer}, etc.
\item{}
\textit{person/} --- Sub-domain to contain references to the homepages of people active in the community, as far as they are interested in such a reference. References in this domain shall be personal and not organization-related. The latter will go into their own domain.

Examples of people are \textit{Larry Virden}, \textit{Cameron Laird}, etc.
\item{}
\textit{org/} --- Sub-domain to contain references to organizations important to the Tcl community.

Examples are the Tcl Core Team, the Tcl Core Maintainers, Tcl-based based companies (PhaseIt, ActiveState), companies and organizations using Tcl (NIST, CAS), etc.
\end{itemize}

\section{Management}

The \textit{/tcl} domain was created by Don Libes which made him automatically the maintainer of the domain [\url{http://www.purl.org/maint/search_user.pl.cgi?userid=}\textasciicircum{}LIBES\$]. He has already extended the maintainership to the entity TCLGROUP [\url{http://www.purl.org/maint/search_group.pl.cgi?groupid=}\textasciicircum{}TCLGROUP\$], currently consisting of
\begin{itemize}
\item{}
Gordon Johnstone \tipmail{gordonjohnstone}{earthling.net}
\item{}
Jeffrey Hobbs \tipmail{jeff}{hobbs.org}
\item{}
Don Libes \tipmail{libes}{nist.gov}
\item{}
Andreas Kupries \tipmail{andreas_kupries}{users.sourceforge.net}
\item{}
Larry Virden \tipmail{lvirden}{yahoo.com}
\item{}
Don G. Porter \tipmail{dgp}{nist.giv}
\item{}
Jean-Claude Wippler \tipmail{jcw}{equi4.com}
\end{itemize}

For the future I propose that
\begin{itemize}
\item{}
High-level changes to the Tcl space, like new sub-domains, have to go through the TCT and the TIP process for approval. This is also in line with \cite{tip0} declaring the responsibility of the TCT for the Tcl webspace.
\item{}
The day-to-day routine of adding new packages, persons, organizations, etc. is delegated to a new group, the \textit{Tcl Namespace Maintainers}.

Initially this group would consist of the people mentioned above, with membership open to volunteers from the community.
\end{itemize}

\section{Discussion}
\begin{itemize}
\item{}
All of the newly proposed sub-domains will be simple listings mapping from the names of the entities contained in them to the proper locations. Further categorization of the entities by topic, gender or other attributes is out of the scope of this TIP. This type of categorization rather is in the domain of general and specialized catalogs which can be set up later and then bound into the unified webspace proposed here.

Note that such catalogs can and should make use of the proposed domains to reduce the effort necessary by them to stay current with respect to the location of the referenced entities (people, packages, etc).
\item{}
The first pre-draft of this TIP contained definitions for the names to use in the various domains. These definitions have been removed on the grounds that their format and other issues like resolution of naming conflicts, order of precedence, etc. are best handled in one or more separate documents. The role of this TIP is to lay down a framework within which the community can operate and not to fill in every conceivable detail.

These details can be discussed and decided upon by the group of maintainers proposed in the last section.
\item{}
This proposal makes the Tcl community dependent on an external entity, namely the maintainers of \url{http://www.purl.org/.} This is considered acceptable.
\end{itemize}

\section{Example}

The following examples show how to use PURLs, using some of the already existing ones:
\begin{itemize}
\item{}
\url{http://www.purl.org/tcl/tip/} refers to the TIP archive.
\item{}
\url{http://www.purl.org/tcl/wiki/} refers to the Tcl'ers Wiki.
\end{itemize}

\section{Copyright}

This document is in the public domain.

\section{Colophon}

\textit{TIP AutoGenerator --- written by Donal K. Fellows}
\begin{thebibliography}{TIP \#1}
\addcontentsline{toc}{section}{References}
\bibitem[TIP \#0]{tip0}
John Ousterhout,
\emph{Tcl Core Team Basic Rules},
on-line at \url{http://purl.org/tcl/tip/0.html}
\end{thebibliography}
\end{document}
