% \iffalse meta-comment
% An Infrastructure for marking up Dublin Core Metadata in LaTeX documents
% $URL: https://svn.kwarc.info/repos/stex/trunk/sty/dcm/dcm.dtx $ 
% $Rev: 1999 $; last modified by $Author: kohlhase $ 
% $Date: 2012-01-28 08:32:11 +0100 (Sat, 28 Jan 2012) $
% Copyright (c) 2007-2011 Michael Kohlhase, all rights reserved
%               this file is released under the
%               LaTeX Project Public License (LPPL)
% \fi
% 
% \iffalse
%<*package>
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{dcm}[2012/01/28 v0.3 Dublin Core Metadata]
%</package>
%<*driver>
\documentclass{ltxdoc}
\usepackage{dcm,modules,stex-logo,url,array,float}
\usepackage[show]{ed}
\usepackage[hyperref=auto,style=alphabetic]{biblatex}
\bibliography{kwarc}
\usepackage{../ctansvn}
\usepackage{hyperref}
\importmodule[dcmi]{dcmi}
\usepackage[eso-foot,today]{svninfo}
\svnInfo $Id: dcm.dtx 1999 2012-01-28 07:32:11Z kohlhase $
\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/dcm/dcm.dtx $
\makeindex
\floatstyle{boxed}
\newfloat{exfig}{thp}{lop}
\floatname{exfig}{Example}
\WAperson[id=jdoe,affiliation=dfki,department=skss,
          url=http://dfki.de/jdoe]
         {John Doe}
\WAperson[id=miko,affiliation=jacu,department=case,
          url=http://kwarc.info/kohlhase]
         {Michael Kohlhase}
\WAinstitution[id=case,acronym=CASE,shortname=Center for Adv. Sys. Engineering,
               url=http://jacobs-university.de/ses/case,partof=jacu]
              {Center for Advanced Systems Engineering}
\WAinstitution[id=jacu,url=http://jacobs-university.de]
              {Jacobs University Bremen}
\WAinstitution[id=skss,url=http://dfki.de/sks,partof=dfki,shortname=Safe\&Secure Cognitive
Systems,acronym=SKS]
              {Safe and Secure Cognitive Systems}
\WAinstitution[id=dfki,url=http://dfki.de,shortname=DFKI,acronym=DFKI]
              {German Research Center for Artificial Intelligence}
\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}}
\begin{document}\DocInput{dcm.dtx}\end{document}
%</driver>
% \fi
%
%\CheckSum{337}
%
% \changes{v0.1}{2007/01/02}{First Hack for OMDoc spec}
% \changes{v0.2}{2008/06/17}{First Version with Documentation}
% \changes{v0.2}{2008/07/02}{Renamed to dcm}
% \changes{v0.3}{2009/09/21}{much more documentation of the user interface}
% \changes{v0.3}{2009/09/21}{Adding sref support and made generated headings configurable}
% \changes{v0.3}{2010/01/11}{Eliminating stub author index that never worked anyways}
% \changes{v0.4}{2011/11/05}{moving DCMperson and friends to the \texttt{workaddress} package}
% 
% \GetFileInfo{dcm.sty}
% 
% \MakeShortVerb{\|}
% \def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}}
% \def\latexml{\scsys{LaTeXML}}
%
% \begin{DCmetadata}[maketitle] 
%   \DCMtitle{{\texttt{dcm.sty}}: An Infrastructure for marking up Dublin Core Metadata in {\LaTeX}
%     documents\thanks{Version {\fileversion} (last revised {\filedate})}}
%   \DCMcreators{miko,jdoe}
%   \DCMabstract{The |dcm| package allows mark up Dublin
%     Core Metadata in {\LaTeX} documents that can be harvested by automated tools or
%     exported to PDF, while at the same time generating conventional title information.}
% \end{DCmetadata}
%
% \setcounter{tocdepth}{2}\tableofcontents\newpage
%
%\section[id=intro,creator=miko]{Introduction}
%
% The |dcm| package allows mark up Dublin Core Metadata~\cite{DCMI:dmt03} in {\LaTeX}
% documents so that it can be harvested by automated tools or exported to PDF\ednote{This
%   still needs to be implemented, see \texttt{http://www.wlug.org.nz/PdfLatexNotes} for
%   details}. This package allows to attribute authorship to arbitrary text
% fragments.\ednote{continue}
% 
% \section[id=user,creator={miko,jdoe}]{The User Interface}
% 
% \subsection[id=user.options]{Package Options}
% 
% The |dcm| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If this is
% set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for details and
% customization options).
%
% \subsection[id=user.dcm.mdblock]{The DC Metadata Block}
% 
% \DescribeEnv{DCmetadata} The |dcm| provides the environment |DCmetadata| for Dublin Core
% Metadata Blocks. |DCmetadata| defines local macros for the specifying the relevant
% Dublin Core metadata fields and takes an optional argument that specifies the
% presentation of the metadata block, see Figure~\ref{fig:dcmblock} for an example which
% would generate the title block for the |dcm| package. Let us now come to the macros themselves
%
% \DescribeMacro{\DCMcreators}\DescribeMacro{\DCMcontributors} The |\DCMcreators| and
% |\DCMcontributors| macros are used to specify the authors and contributors to a text
% fragments. These macros take one argument, the authorship of a document specified in
% terms of |id|s of persons specified via |\WAperson| before. They can occur multiply in
% a metadata block.
%
% \DescribeMacro{\DCMtitle} The |\DCMtitle| macro takes one argument, the 
%
% \DescribeMacro{\DCMshorttitle} The |\DCMshorttitle| macro takes one argument, the 
%
% \DescribeMacro{\DCMsubject} The |\DCMsubject| macro takes one argument, the 
%
% \DescribeMacro{\DCMdescription} The |\DCMdescription| macro takes one argument, the 
%
% \DescribeMacro{\DCMpublisher} The |\DCMpublisher| macro takes one argument, the 
%
% \DescribeMacro{\DCMdate} The |\DCMdate| macro takes one argument, the 
%
% \DescribeMacro{\DCMtype} The |\DCMtype| macro takes one argument, the 
%
% \DescribeMacro{\DCMidentifier} The |\DCMidentifier| macro takes two arguments, the first one
% is the identification system, and the second one the identifier string itself.
%
% \DescribeMacro{\DCMsource} The |\DCMsource| macro takes one argument, the 
%
% \DescribeMacro{\DCMlanguage} The |\DCMlanguage| macro takes one argument, the 
%
% \DescribeMacro{\DCMrelation} The |\DCMrelation| macro takes one argument, the 
%
% \DescribeMacro{\DCMrights} The |\DCMrights| macro takes one argument, the 
%
% \DescribeMacro{\DCMlicense} The |\DCMlicense| macro takes one argument, the 
%
% \DescribeMacro{\DCMabstract} The |\DCMabstract| macro takes one argument, the 
%
% \DescribeMacro{\DCMlicensenotice} The |\DCMlicensenotice| macro takes one argument, the 
%
% \DescribeMacro{\DCMcopyrightnotice} The |\DCMcopyrightnotice| macro takes one argument, the 
%
% \DescribeMacro{\DCMcclicense} The |\DCMcclicense| macro 
%
% \DescribeMacro{\attribution} 
%
% \DescribeMacro{\noncommercial}
%
% \DescribeMacro{\sharealike}
% 
% \DescribeMacro{\noderivativeworks}
% 
% \begin{exfig}[ht]
% \begin{verbatim}
% \begin{DCmetadata}[maketitle] 
%   \DCMtitle{An Infrastructure for marking up Dublin Core Metadata in 
%        {\LaTeX} documents\thanks{Version {\fileversion} 
%          (last revised {\filedate})}}
%   \DCMcreators{miko,jdoe}
%   \DCMdate{\today}
%   \DCMcopyrightnotice{2008}{Michael Kohlhase}
%   \DCMlicensenotice{Copyright (c) 2008 Michael Kohlhase, all rights 
%      reserved. This file is released under the LaTeX Project Public 
%      License (LPPL)}
%   \DCMabstract{The {\texttt{dcm}} packge allows mark up Dublin
%      Core Metadata in {\LaTeX} documents that can be harvested by 
%      automated tools or exported to PDF, while at the same time 
%      generating conventional title information.}
% \end{DCmetadata}
% \end{verbatim}
% \caption{The DC Metadata block for the {\texttt{dcm}} package documentation}
% \label{fig:dcmblock}
% \end{exfig}
%
% \subsection[creator=jdoe,id=user.blockstyles]{DCM Metadata Block Styles}
% 
% The |DCmetadata| environment takes an optional argument that specifies the style the
% metadata block is rendered in. The |dcm| package supplies two styles:
% \DescribeMacro{maketitle}|maketitle| and \DescribeMacro{titlepage}|titlepage|. The
% former uses the |\maketitle| macro from the calling class to assemble a title, whereas
% the latter builds a title page from scratch. The title block of this documentation has
% been created by the |maketitle| style.
% 
% To add a further metadata block style \meta{sty}, we simply have to supply a
% \DescribeMacro{\dcm@*@block}|\dcm@|\meta{sty}|@block| macro that expands to the intended
% presentation. This macro does not take any arguments, but can use the internal token
% registers defined by the |DCmetadata| environment. Generally, for any of the metadata
% commands |\DCM|\meta{md} defined in {\sref{user.dcm.mdblock}} there is a token register
% |\dcm@|\meta{md} that contains the value specified in the key.
% 
% \subsection[id=user.conig]{Configuration}
% 
% The |dcm| package provides a set of macros that customize (e.g. for multiple languages)
% the generated
% content. 
% \DescribeMacro{\dcm@abstract@heading}
% \DescribeMacro{\dcm@creators@heading}
% \DescribeMacro{\dcm@contributors@connector}
% \DescribeMacro{\dcm@chapter@heading}
% \DescribeMacro{\dcm@section@heading}
% \DescribeMacro{\dcm@subsection@heading}
% \DescribeMacro{\dcm@subsubsection@heading}
% \begin{center}\makeatletter
% \begin{tabular}{|l|l|}\hline
% Macro &  Default\\\hline\hline
% |\dcm@abstract@heading| &  \dcm@abstract@heading \\\hline
% |\dcm@creators@heading| &  \dcm@creators@heading \\\hline
% |\dcm@contributors@connector| & \dcm@contributors@connector \\\hline\hline
% |\dcm@chapter@heading| &  \dcm@chapter@heading \\\hline
% |\dcm@section@heading| &  \dcm@section@heading \\\hline
% |\dcm@subsection@heading| &  \dcm@subsection@heading \\\hline
% |\dcm@subsubsection@heading| &  \dcm@subsubsection@heading \\\hline
% \end{tabular}
% \end{center}
% 
%
% \section{Limitations}\label{sec:limitations}
% 
% In this section we document known limitations. If you want to help alleviate them,
% please feel free to contact the package author. Some of them are currently discussed in
% the \sTeX TRAC~\cite{sTeX:online}. 
% \begin{compactenum}
% \item none reported yet
% \end{compactenum}
% 
% \StopEventually{\printbibliography}
% 
% \section[creator=jdoe,id=impl]{The Implementation}
%
% The |dcm| package generates two files: the {\LaTeX} package (all the code between
% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the
% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and
%     $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together,
% since the documentation applies to both of them and to prevent them from getting out of
% sync.
%
% \subsection[id=impl.options]{Package Options}
% The first step is to declare (a few) package options that handle whether certain
% information is printed or not. They all come with their own conditionals that are set by
% the options.
%
%    \begin{macrocode}
%<*package>
\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}}
\ProcessOptions
%</package>
%    \end{macrocode}
%
% The first measure is to ensure that the |KeyVal| package is loaded (in the right
% version). For {\latexml} we also initialize the package inclusions.
%    \begin{macrocode}
%<*package>
\RequirePackage{workaddress}
\RequirePackage[sectioning]{rdfmeta}
%</package>
%<*ltxml>
# -*- CPERL -*-
package LaTeXML::Package::Pool;
use strict;
use LaTeXML::Global;
use LaTeXML::Package;
RequirePackage('rdfmeta');
RequirePackage('workaddress');
%</ltxml>
%    \end{macrocode}
%
% Furthermore, we need a couple of helper functions for the 
% 
%    \begin{macrocode}
%<*ltxml>
sub FishOutMetadata {
  my ($document,$keyvals)=@_;
  foreach my $role(qw(creators contributors)) {
    my $idlist_string=getKeyValue_noDelim($keyvals,$role);
    my @ids = split(/,\s*/, $idlist_string);
    foreach my $id(@ids) {
      my $name = LookupValue('DCM_'.$id.'_name');
      if ($name) {
        my $prop_role = $role;
	chop $prop_role if $prop_role;
        $document->insertElement("dc:$prop_role",$name) if $role;
      } else {print STDERR "Warning: no $role with 'id' $id !\n";}
    }
  }
  return;}#$
%</ltxml>
%    \end{macrocode}
% 
% \subsection{The DC Metadata Block}
% 
% Then we make an environment for defining the metadata.  Note that since we have defined
% the |omdoc:metadata| element to auto-open and auto-close, we do not have to (and should
% not for that matter) supply it in the |DCmetadata| element.
%
% \begin{environment}{DCmetadata}
%    \begin{macrocode}
%<*package>
\newenvironment{DCmetadata}[1][]%
{\def\@style{#1}}% to set the way things are presented.
{\@ifundefined{dcm@\@style @block}%
{\message{style {\@style} not defined}}%
{\csname dcm@\@style @block\endcsname}}
%</package>
%<*ltxml>
DefEnvironment('{DCmetadata}[]', "<omdoc:metadata>#body</omdoc:metadata>");
%</ltxml>
%    \end{macrocode}
% \end{environment}
% 
% Here come the constructors, most of them are relatively straightforward
%
% \begin{macro}{\DCMcreators}
%   the |\DCMcreators| macro checks whether all ids are defined.
%    \begin{macrocode}
%<*package>
\def\DCMcreators#1{\@for\@I:=#1\do{\wa@ref@test{person}\@I{id}}
\gdef\dcm@creators{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMcreators{}',sub{
  my ($document,$args,%properties) = @_;
  my $keyval = LaTeXML::KeyVals->new('wa@person',T_BEGIN,T_END,('creators'=>$args));
  FishOutMetadata($document,$keyval);
  return;});
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMcontributors}
%   the |\DCMcontributors| macro also checks whether all ids are defined.
%    \begin{macrocode}
%<*package>
\def\DCMcontributors#1{\@for\@I:=#1\do{\wa@ref@test{person}\@I{id}}%
\def\dcm@contributors{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMcontributors{}',sub{
  my ($document,$args,%properties) = @_;
  my $keyval = LaTeXML::KeyVals->new('wa@person',T_BEGIN,T_END,('contributors'=>$args));
  FishOutMetadata($document,$keyval);
  return;});
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMtitle}
%    \begin{macrocode}
%<*package>
\def\DCMtitle#1{\def\dcm@title{#1}\providecommand{\dcm@shorttitle}{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMtitle{}',"<dc:title>#1</dc:title>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMsubtitle}
%    \begin{macrocode}
%<*package>
\def\dcm@subtitle{}
\def\DCMsubtitle#1{\def\dcm@subtitle{#1}}
%</package>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMshorttitle}
%    \begin{macrocode}
%<*package>
\def\dcm@shorttitle{}
\def\DCMshorttitle#1{\def\dcm@shorttitle{#1}}
%</package>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMsubject}
%    \begin{macrocode}
%<*package>
\def\DCMsubject#1{\def\dcm@subject{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMsubject{}',"<dc:subject>#1</dc:subject>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMdescription}
%    \begin{macrocode}
%<*package>
\long\def\DCMdescription#1{\long\def\dcm@description{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMdescription{}',"<dc:description>#1</dc:description>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMpublisher}
%    \begin{macrocode}
%<*package>
\def\DCMpublisher#1{\def\dcm@publisher{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMpublisher{}',"<dc:publisher>#1</dc:publisher>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMdate}
%   the |\DCMdate| uses |\today| as a default\ednote{@DEYAN: do that in latexml}
%    \begin{macrocode}
%<*package>
\def\dcm@date{\today}
\def\DCMdate#1{\def\dcm@date{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMdate{}',"<dc:date>#1</dc:date>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMtype}
%    \begin{macrocode}
%<*package>
\def\DCMtype#1{\def\dcm@type{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMtype{}',"<dc:type>#1</dc:type>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMidentifier}
%    \begin{macrocode}
%<*package>
\def\DCMidentifier#1#2{\def\dcm@scheme{#1}\def\dcm@identifier{#2}}
%</package>
%<*ltxml>
DefConstructor('\DCMidentifier{}{}',"<dc:identifier scheme='#1'>#2</dc:identifier>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMsource}
%    \begin{macrocode}
%<*package>
\def\DCMsource#1{\def\dcm@source{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMsource{}',"<dc:source>#1</dc:source>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMlanguage}
%    \begin{macrocode}
%<*package>
\def\DCMlanguage#1{\def\dcm@language{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMlanguage{}',"<dc:language>#1</dc:language>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMrelation}
%    \begin{macrocode}
%<*package>
\def\DCMrelation#1{\def\dcm@relation{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMrelation{}',"<dc:relation>#1</dc:relation>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMrights}
%    \begin{macrocode}
%<*package>
\def\DCMrights#1{\long\def\dcm@rights{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMrights{}',"<dc:rights>#1</dc:rights>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMlicense}
%    \begin{macrocode}
%<*package>
\def\DCMlicense#1{\def\dcm@license{#1}}
%</package>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMlicensenotice}
%   here we have a default
%    \begin{macrocode}
%<*package>
\def\dcm@license{All rights reserved}
\def\DCMlicensenotice#1{\long\def\dcm@license{\\[1ex]License: #1}}
%</package>
%<*ltxml>
DefMacro('\DCMlicensenotice{}','\DCMrights{#1}');
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMcopyrightnotice}
%    \begin{macrocode}
%<*package>
\def\DCMcopyrightnotice#1#2{\DCMrights{Copyright {\copyright} #1: #2}}
%</package>
%<*ltxml>
DefMacro('\DCMcopyrightnotice{}{}','\DCMrights{Copyright {\copyright} #1: #2}'); 
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\cclicense}
%    \begin{macrocode}
%<*package>
\def\cclicense#1{\def\attribution{\def\dcm@by{yes}}
  \def\noncommercial{\def\dcm@nc{yes}}
  \def\sharealike{\defdcm@sharealike{yes}}
  \def\noderivativeworks{\def\dcm@derivatives{no}}}
%</package>
%<*ltxml>
DefConstructor('\cclicense{}',"<cc:license>#1</cc:license>");
DefConstructor('\attribution',"<cc:attribution/>");
DefConstructor('\noncommercial',"<cc:noncommercial/>");
DefConstructor('\sharealike',"<cc:sharealike/>");
DefConstructor('\noderivativeworks',"<cc:noderivativeworks>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\DCMabstract}
%    \begin{macrocode}
%<*package>
\long\def\DCMabstract#1{\long\def\dcm@abstract{#1}}
%</package>
%<*ltxml>
DefConstructor('\DCMabstract{}',"<dc:description>#1</dc:description>");
%</ltxml>
%    \end{macrocode}
% \end{macro}
% 
% \subsection[creator=jdoe,id=impl.blockstyles]{DCM Block Styles}
% 
% We now define various commonly used styles.  
%
% \begin{macro}{\dcm@titlepage@block}
% This style builds up a title page from scratch
%    \begin{macrocode}
%<*package>
\def\dcm@titlepage@block{\begin{titlepage}
    \null\vfil\vskip 60\p@
    \begin{center}
      \ifx\dcm@title\@empty
      \PackageWarning{dcm}{No title specified}{\LARGE Add title here\par}
      \else\LARGE \dcm@title \par\fi
      \ifx\dcm@subtitle\@empty
      \vskip 3em\Large \dcm@subtitle \par\vskip 3em
      \else\large\lineskip .75em\WAauthorblock\dcm@creators\vskip 1.5em\fi
      \ifx\dcm@date\@empty
      \PackageWarning{dcm}{No date specified}{\large\today\par}
      \else{\large\dcm@date\par}\vskip 2em\fi
  \end{center}\vskip2em
  \ifx\dcm@abstract\@empty
  \PackageWarning{dcm}{No Abstract specified}\else
  \begin{quote}\textbf\dcm@abstract@heading:\dcm@abstract\end{quote}\fi
  \vskip 2em\par\vfil\noindent
  {\small\noindent\dcm@rights\dcm@license}
  \end{titlepage}}
%</package>
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\dcm@maketitle@block}
%   This style makes use of the title facility of the document class.
%    \begin{macrocode}
%<*package>
\def\dcm@maketitle@block{\def\@title{\dcm@title\ifx\dcm@subtitle\empty\else\newline\dcm@subtitle\fi}%
\def\@author{\WAauthorblock\dcm@creators}%
\def\@date{\dcm@date}\maketitle}
%</package>
%    \end{macrocode}
% \end{macro}
%
% We have to make sure that the DCM metadata commands have IDs, so that we doc not get
% duplicates.
%
%    \begin{macrocode}
%<*ltxml>
Tag('dc:description',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:date',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:creator',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:contributor',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:title',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:subject',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:publisher',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:type',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:identifier',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:language',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
Tag('dc:rights',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1);
%</ltxml>
%    \end{macrocode}
%
% \subsection{Dealing with ISO Dates}
%
% The first step is to build a macro for making ISO dates.\ednote{make better ltxml}
%
%    \begin{macrocode}
%<ltxml>RawTeX('
%<*package|ltxml>
\def\ISOtimestamp{\count1=\time\divide\count1 by 60 % hours
\count2=\count1\multiply\count2 by 60% minutes in \count1 hours
\count3=\time\advance\count3 by -\count2 % minutes
\the\year -\ifnum\month>9\else0\fi\the\month-\ifnum\day>9\else0\fi\the\day
T\ifnum\count1>9\else0\fi\the\count1:\ifnum\count3>9\else0\fi\the\count3:00Z}
%</package|ltxml>
%<ltxml>');
%    \end{macrocode}
% 
%\subsection{Configuration}
%
%    \begin{macrocode}
%<*package>
\def\dcm@abstract@heading{Abstract}
\def\dcm@creators@heading{Author(s)}
\def\dcm@contributors@connector{with contributions from}
\def\dcm@chapter@heading{Chapter}
\def\dcm@section@heading{Section}
\def\dcm@subsection@heading{Subsection}
\def\dcm@subsubsection@heading{Subsubsection}
\def\dcm@paragraph@heading{Paragraph}
%</package>
%    \end{macrocode}
%
% \subsection[id=sec:impl:ids]{Providing IDs for {\omdoc} Elements}
% 
%   To provide default identifiers, we tag all {\omdoc} elements that allow |xml:id|
%   attributes by executing the |numberIt| procedure below.
% 
%    \begin{macrocode}
%<*ltxml>
Tag('dc:title',afterOpen=>\&numberIt,afterClose=>\&locateIt);
%</ltxml>
%    \end{macrocode}
%
%\subsection{Finale}
%
% Finally, we need to terminate the file with a success mark for perl.
%    \begin{macrocode}
%<ltxml>1;
%    \end{macrocode}
% \Finale
\endinput
% \iffalse
% LocalWords:  GPL structuresharing STR LaTeX dcm dtx keyval sref CPERL url qw
%%% Local Variables: 
%%% mode: doctex
%%% TeX-master: t
%%% End: 
% \fi

% LocalWords:  RequirePackage birthdate personaltitle academictitle workaddress
% LocalWords:  privaddress worktel privtel workfax privfax worktelfax noDelim
% LocalWords:  privtelfax getKeyValue valuelist ToString getValue affill STDERR
% LocalWords:  ExportMetadata AssignValue DCMperson DefConstructor afterDigest
% LocalWords:  getArg setValue FishOutMetadata keyvals foreach idlist tabline
% LocalWords:  LookupValue insertElement atabline bitabline shorttitle nc args
% LocalWords:  sharealike noderivativeworks DefMacro authorblock subsubsection
% LocalWords:  contribs OptionalKeyVals omgroup omdoc srcref xml RawTeX partof
% LocalWords:  openElement iffalse kohlhase Thu scsys sc sc latexml DCmetadata
% LocalWords:  maketitle DCMtitle texttt fileversion DCMcreators miko jdoe impl
% LocalWords:  DCMabstract setcounter tocdepth tableofcontents newpage dmt03
% LocalWords:  DCMsection ednote DCMsubsection exfig hline dcmblock Patashnik
% LocalWords:  DescribeEnv DCMcontributors DCMshorttitle DCMshorttitle DCMdate
% LocalWords:  DCMsubject DCMsubject DCMdescription DCMdescription DCMpublisher
% LocalWords:  DCMpublisher DCMdate DCMtype DCMtype DCMidentifier DCMidentifier
% LocalWords:  DCMsource DCMsource DCMlanguage DCMlanguage DCMrelation ctancite
% LocalWords:  DCMrelation DCMrights DCMrights DCMlicense DCMlicense titlepage
% LocalWords:  DCMlicensenotice DCMlicensenotice DCMcopyrightnotice titlepage
% LocalWords:  DCMcopyrightnotice DCMcclicense DCMcclicense user.blockstyles
% LocalWords:  DCMchapter DCMchatper DCMsubsubsection DCMsubsubsection ltxml
% LocalWords:  user.conig makeatletter printbibliography expandafter showmeta
% LocalWords:  xdef csname endcsname newcommand ifx ifundefined affs showmeta
% LocalWords:  Semiverbatim whatsit newenvironment mtabline providecommand vfil
% LocalWords:  DCMsubtitle cclicense defdcm impl.blockstyles newcounter vskip
% LocalWords:  stepcounter tabularnewline theauthors lineskip textbf noindent
% LocalWords:  omd omd srefaddidkey thechapter autoclose thesection ifnum ifnum
% LocalWords:  thesubsection thesubsubsection DCMparagraph ISOtimestamp doctex
% LocalWords:  DCMinstitution DCMinstitution compactenum textsf langle textsf
% LocalWords:  langle metakeys addmetakey metasetkeys countryshort townzip aff
% LocalWords:  streetaddress depts
