summaryrefslogtreecommitdiff
path: root/obsolete/help/Catalogue/catalogue.xsd
diff options
context:
space:
mode:
Diffstat (limited to 'obsolete/help/Catalogue/catalogue.xsd')
-rw-r--r--obsolete/help/Catalogue/catalogue.xsd1183
1 files changed, 1183 insertions, 0 deletions
diff --git a/obsolete/help/Catalogue/catalogue.xsd b/obsolete/help/Catalogue/catalogue.xsd
new file mode 100644
index 0000000000..f9dc849ca5
--- /dev/null
+++ b/obsolete/help/Catalogue/catalogue.xsd
@@ -0,0 +1,1183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+ <!--
+ Copyright (c) 2016-2018 The CTAN Team
+ Copyright (c) 1999-2004 Graham J. Williams
+
+ Change history
+ ==============
+
+ 2018-03-19 Manfred Lotz
+ - Add an alias element which provides an alternate name for a package
+ 2017-10-09 Manfred Lotz
+ - Made xpath in keyref 'XREF-REFID' fully generic, i.e. xref will be validated
+ no matter where it is found in the XML document.
+ 2017-08-06 Manfred Lotz
+ - Add an optional 'pseudonym' attribute to the author element
+ 2017-08-04 Manfred Lotz
+ - Add an optional 'note' attribute to the author element
+ 2017-07-29 Manfred Lotz
+ - Allow to add an optional date and/or note to authorref
+ 2017-07-24 Manfred Lotz
+ - Adding the same constraint for href in <a href...> element
+ - Enforce mailto: to contain a '@'
+ - href in <documentation> may have one of:
+ ctan:, http://, https://, or ftp://
+ 2017-07-23 Manfred Lotz
+ - Now, in contacts element the attribute href allows
+ only valid URLs. Specifically, the following URLs are
+ allowed: http://, https://, ftp://, nntp:, mailto:
+ or news:.
+ 2017-06-09 Manfred Lotz
+ - added <small> for a sort of small caps
+ 2017-04-29 Manfred Lotz
+ - removed home element which is now obsolete
+ 2017-04-15 Manfred Lotz
+ - added contact types: announce and development
+ 2017-04-04 Manfred Lotz
+ - the CC licenses were still wrong. Should be fixed now.
+ 2017-04-03 Manfred Lotz
+ - mixed up '_' and '-' in license names.
+ Now, we have all '-'.
+ 2017-04-01 Manfred Lotz
+ - added licenses bsd4, gpl1, gpl1+, gpl2+, gpl3+,
+ lppl1.3a and lppl1.3b
+ 2017-03-30 Manfred Lotz
+ - added license lppl1.3c
+ 2017-03-29 Manfred Lotz
+ - corrected a typo: "cc_by_2.0" -> "cc_by_3.0"
+ 2017-03-28 Manfred Lotz
+ - added more Creative Commons licenses
+ 2017-03-26 Manfred Lotz
+ - added Creative Commons licenses
+ 2017-01-06 Manfred Lotz
+ - nested lists were not possible. Now fixed.
+ 2016-12-17 Manfred Lotz
+ - license MIT added
+ 2016-12-04 Manfred Lotz
+ - added a very poor man's email address validation check in the authors realm
+ (finally, decided to accept ascii characters only, as 'international email addresses'
+ are not widely accepted by mail servers)
+ - removed obsolete emaildomain and emailname
+ 2016-10-29 Manfred Lotz
+ - Now the description text may contain the following html elements
+ - em emphasis
+ - i italic
+ - u underline
+ - b bold
+ - a hypertext link
+ - p paragraph
+ - pre preformatted text
+ - code programming code, commands (usually in fixed fonts)
+ - tt fixed font
+ - br break or line break
+ - ul unordered list
+ - ol ordered list
+ - li list items, used in ul and ol
+ - dl descriptive or definition list
+ - dt term in definition list
+ - dd definition in definition list
+
+ 2016-10-08 Manfred Lotz
+ - changed author element to be able keep more than a single email address.
+ Mostly done to keep additional information for unsual situations.
+ For a short while we keep the combination of emailname and emaildomain
+ till this XSD schema is distributed.
+ 2016-07-10 Manfred Lotz
+ - added support for <b/>, <i/>, <u/>
+ 2016-06-12 Manfred Lotz
+ - Paragraph element p was defined as simple type which could
+ produce an unwanted validation error in certain situations.
+ 2016-05-15 Manfred Lotz
+ - Converted from catalogue.dtd by using the RELAX NG Compact Syntax
+ and then using trang to create the XSD.
+ - Documentation of the various elements was taken from the DTD
+ and in many cases adjusted.
+ - Added a new element contacts which will be the successor of
+ of the home element
+
+ -->
+ <xs:attributeGroup name="language">
+ <xs:attribute name="language">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="aa"/>
+ <xs:enumeration value="ab"/>
+ <xs:enumeration value="ae"/>
+ <xs:enumeration value="af"/>
+ <xs:enumeration value="af-za"/>
+ <xs:enumeration value="ak"/>
+ <xs:enumeration value="am"/>
+ <xs:enumeration value="an"/>
+ <xs:enumeration value="ar"/>
+ <xs:enumeration value="ar-ae"/>
+ <xs:enumeration value="ar-bh"/>
+ <xs:enumeration value="ar-dz"/>
+ <xs:enumeration value="ar-eg"/>
+ <xs:enumeration value="ar-iq"/>
+ <xs:enumeration value="ar-jo"/>
+ <xs:enumeration value="ar-kw"/>
+ <xs:enumeration value="ar-lb"/>
+ <xs:enumeration value="ar-ly"/>
+ <xs:enumeration value="ar-ma"/>
+ <xs:enumeration value="ar-om"/>
+ <xs:enumeration value="ar-qa"/>
+ <xs:enumeration value="ar-sa"/>
+ <xs:enumeration value="ar-sy"/>
+ <xs:enumeration value="ar-tn"/>
+ <xs:enumeration value="ar-ye"/>
+ <xs:enumeration value="as"/>
+ <xs:enumeration value="av"/>
+ <xs:enumeration value="ay"/>
+ <xs:enumeration value="az"/>
+ <xs:enumeration value="az-az"/>
+ <xs:enumeration value="ba"/>
+ <xs:enumeration value="be"/>
+ <xs:enumeration value="be-by"/>
+ <xs:enumeration value="bg"/>
+ <xs:enumeration value="bg-bg"/>
+ <xs:enumeration value="bh"/>
+ <xs:enumeration value="bi"/>
+ <xs:enumeration value="bm"/>
+ <xs:enumeration value="bn"/>
+ <xs:enumeration value="bo"/>
+ <xs:enumeration value="br"/>
+ <xs:enumeration value="bs-ba"/>
+ <xs:enumeration value="ca"/>
+ <xs:enumeration value="ca-es"/>
+ <xs:enumeration value="ce"/>
+ <xs:enumeration value="co"/>
+ <xs:enumeration value="cr"/>
+ <xs:enumeration value="cs"/>
+ <xs:enumeration value="cs-cz"/>
+ <xs:enumeration value="cv"/>
+ <xs:enumeration value="cy"/>
+ <xs:enumeration value="cy-gb"/>
+ <xs:enumeration value="da"/>
+ <xs:enumeration value="da-dk"/>
+ <xs:enumeration value="de"/>
+ <xs:enumeration value="de-at"/>
+ <xs:enumeration value="de-ch"/>
+ <xs:enumeration value="de-de"/>
+ <xs:enumeration value="de-li"/>
+ <xs:enumeration value="de-lu"/>
+ <xs:enumeration value="dv"/>
+ <xs:enumeration value="dv-mv"/>
+ <xs:enumeration value="dz"/>
+ <xs:enumeration value="ee"/>
+ <xs:enumeration value="el"/>
+ <xs:enumeration value="el-gr"/>
+ <xs:enumeration value="en"/>
+ <xs:enumeration value="en-au"/>
+ <xs:enumeration value="en-bz"/>
+ <xs:enumeration value="en-ca"/>
+ <xs:enumeration value="en-cb"/>
+ <xs:enumeration value="en-gb"/>
+ <xs:enumeration value="en-ie"/>
+ <xs:enumeration value="en-jm"/>
+ <xs:enumeration value="en-nz"/>
+ <xs:enumeration value="en-ph"/>
+ <xs:enumeration value="en-tt"/>
+ <xs:enumeration value="en-us"/>
+ <xs:enumeration value="en-za"/>
+ <xs:enumeration value="en-zw"/>
+ <xs:enumeration value="eo"/>
+ <xs:enumeration value="es"/>
+ <xs:enumeration value="es-ar"/>
+ <xs:enumeration value="es-bo"/>
+ <xs:enumeration value="es-cl"/>
+ <xs:enumeration value="es-co"/>
+ <xs:enumeration value="es-cr"/>
+ <xs:enumeration value="es-do"/>
+ <xs:enumeration value="es-ec"/>
+ <xs:enumeration value="es-es"/>
+ <xs:enumeration value="es-gt"/>
+ <xs:enumeration value="es-hn"/>
+ <xs:enumeration value="es-mx"/>
+ <xs:enumeration value="es-ni"/>
+ <xs:enumeration value="es-pa"/>
+ <xs:enumeration value="es-pe"/>
+ <xs:enumeration value="es-pr"/>
+ <xs:enumeration value="es-py"/>
+ <xs:enumeration value="es-sv"/>
+ <xs:enumeration value="es-uy"/>
+ <xs:enumeration value="es-ve"/>
+ <xs:enumeration value="et"/>
+ <xs:enumeration value="et-ee"/>
+ <xs:enumeration value="eu"/>
+ <xs:enumeration value="eu-es"/>
+ <xs:enumeration value="fa"/>
+ <xs:enumeration value="fa-ir"/>
+ <xs:enumeration value="ff"/>
+ <xs:enumeration value="fi"/>
+ <xs:enumeration value="fi-fi"/>
+ <xs:enumeration value="fj"/>
+ <xs:enumeration value="fo"/>
+ <xs:enumeration value="fo-fo"/>
+ <xs:enumeration value="fr"/>
+ <xs:enumeration value="fr-be"/>
+ <xs:enumeration value="fr-ca"/>
+ <xs:enumeration value="fr-ch"/>
+ <xs:enumeration value="fr-fr"/>
+ <xs:enumeration value="fr-lu"/>
+ <xs:enumeration value="fr-mc"/>
+ <xs:enumeration value="fy"/>
+ <xs:enumeration value="ga"/>
+ <xs:enumeration value="gd"/>
+ <xs:enumeration value="gl"/>
+ <xs:enumeration value="gl-es"/>
+ <xs:enumeration value="gn"/>
+ <xs:enumeration value="gu"/>
+ <xs:enumeration value="gu-in"/>
+ <xs:enumeration value="gv"/>
+ <xs:enumeration value="ha"/>
+ <xs:enumeration value="he"/>
+ <xs:enumeration value="he-il"/>
+ <xs:enumeration value="hi"/>
+ <xs:enumeration value="hi-in"/>
+ <xs:enumeration value="ho"/>
+ <xs:enumeration value="hr"/>
+ <xs:enumeration value="hr-ba"/>
+ <xs:enumeration value="hr-hr"/>
+ <xs:enumeration value="ht"/>
+ <xs:enumeration value="hu"/>
+ <xs:enumeration value="hu-hu"/>
+ <xs:enumeration value="hy"/>
+ <xs:enumeration value="hy-am"/>
+ <xs:enumeration value="hz"/>
+ <xs:enumeration value="ia"/>
+ <xs:enumeration value="id"/>
+ <xs:enumeration value="id-id"/>
+ <xs:enumeration value="ie"/>
+ <xs:enumeration value="ig"/>
+ <xs:enumeration value="ii"/>
+ <xs:enumeration value="ik"/>
+ <xs:enumeration value="io"/>
+ <xs:enumeration value="is"/>
+ <xs:enumeration value="is-is"/>
+ <xs:enumeration value="it"/>
+ <xs:enumeration value="it-ch"/>
+ <xs:enumeration value="it-it"/>
+ <xs:enumeration value="iu"/>
+ <xs:enumeration value="ja"/>
+ <xs:enumeration value="ja-jp"/>
+ <xs:enumeration value="jv"/>
+ <xs:enumeration value="ka"/>
+ <xs:enumeration value="ka-ge"/>
+ <xs:enumeration value="kg"/>
+ <xs:enumeration value="ki"/>
+ <xs:enumeration value="kj"/>
+ <xs:enumeration value="kk"/>
+ <xs:enumeration value="kk-kz"/>
+ <xs:enumeration value="kl"/>
+ <xs:enumeration value="km"/>
+ <xs:enumeration value="kn"/>
+ <xs:enumeration value="kn-in"/>
+ <xs:enumeration value="ko"/>
+ <xs:enumeration value="ko-kr"/>
+ <xs:enumeration value="kok"/>
+ <xs:enumeration value="kok-in"/>
+ <xs:enumeration value="kr"/>
+ <xs:enumeration value="ks"/>
+ <xs:enumeration value="ku"/>
+ <xs:enumeration value="kv"/>
+ <xs:enumeration value="kw"/>
+ <xs:enumeration value="ky"/>
+ <xs:enumeration value="ky-kg"/>
+ <xs:enumeration value="la"/>
+ <xs:enumeration value="lb"/>
+ <xs:enumeration value="lg"/>
+ <xs:enumeration value="li"/>
+ <xs:enumeration value="ln"/>
+ <xs:enumeration value="lo"/>
+ <xs:enumeration value="lt"/>
+ <xs:enumeration value="lt-lt"/>
+ <xs:enumeration value="lu"/>
+ <xs:enumeration value="lv"/>
+ <xs:enumeration value="lv-lv"/>
+ <xs:enumeration value="mg"/>
+ <xs:enumeration value="mh"/>
+ <xs:enumeration value="mi"/>
+ <xs:enumeration value="mi-nz"/>
+ <xs:enumeration value="mk"/>
+ <xs:enumeration value="mk-mk"/>
+ <xs:enumeration value="ml"/>
+ <xs:enumeration value="mn"/>
+ <xs:enumeration value="mn-mn"/>
+ <xs:enumeration value="mr"/>
+ <xs:enumeration value="mr-in"/>
+ <xs:enumeration value="ms"/>
+ <xs:enumeration value="ms-bn"/>
+ <xs:enumeration value="ms-my"/>
+ <xs:enumeration value="mt"/>
+ <xs:enumeration value="mt-mt"/>
+ <xs:enumeration value="my"/>
+ <xs:enumeration value="na"/>
+ <xs:enumeration value="nb"/>
+ <xs:enumeration value="nb-no"/>
+ <xs:enumeration value="nd"/>
+ <xs:enumeration value="ne"/>
+ <xs:enumeration value="ng"/>
+ <xs:enumeration value="nl"/>
+ <xs:enumeration value="nl-be"/>
+ <xs:enumeration value="nl-nl"/>
+ <xs:enumeration value="nn-no"/>
+ <xs:enumeration value="nn"/>
+ <xs:enumeration value="nr"/>
+ <xs:enumeration value="ns"/>
+ <xs:enumeration value="ns-za"/>
+ <xs:enumeration value="nv"/>
+ <xs:enumeration value="ny"/>
+ <xs:enumeration value="oc"/>
+ <xs:enumeration value="oj"/>
+ <xs:enumeration value="om"/>
+ <xs:enumeration value="or"/>
+ <xs:enumeration value="os"/>
+ <xs:enumeration value="pa"/>
+ <xs:enumeration value="pa-in"/>
+ <xs:enumeration value="pi"/>
+ <xs:enumeration value="pl"/>
+ <xs:enumeration value="pl-pl"/>
+ <xs:enumeration value="ps"/>
+ <xs:enumeration value="ps-ar"/>
+ <xs:enumeration value="pt"/>
+ <xs:enumeration value="pt-br"/>
+ <xs:enumeration value="pt-pt"/>
+ <xs:enumeration value="qu"/>
+ <xs:enumeration value="qu-bo"/>
+ <xs:enumeration value="qu-ec"/>
+ <xs:enumeration value="qu-pe"/>
+ <xs:enumeration value="rm"/>
+ <xs:enumeration value="rn"/>
+ <xs:enumeration value="ro"/>
+ <xs:enumeration value="ro-ro"/>
+ <xs:enumeration value="ru"/>
+ <xs:enumeration value="ru-ru"/>
+ <xs:enumeration value="rw"/>
+ <xs:enumeration value="sa"/>
+ <xs:enumeration value="sa-in"/>
+ <xs:enumeration value="sd"/>
+ <xs:enumeration value="se"/>
+ <xs:enumeration value="se-fi"/>
+ <xs:enumeration value="se-no"/>
+ <xs:enumeration value="se-se"/>
+ <xs:enumeration value="si"/>
+ <xs:enumeration value="sk"/>
+ <xs:enumeration value="sk-sk"/>
+ <xs:enumeration value="sl"/>
+ <xs:enumeration value="sl-si"/>
+ <xs:enumeration value="sm"/>
+ <xs:enumeration value="sn"/>
+ <xs:enumeration value="so"/>
+ <xs:enumeration value="sq"/>
+ <xs:enumeration value="sq-al"/>
+ <xs:enumeration value="sr-ba"/>
+ <xs:enumeration value="sr-sp"/>
+ <xs:enumeration value="ss"/>
+ <xs:enumeration value="st"/>
+ <xs:enumeration value="su"/>
+ <xs:enumeration value="sv"/>
+ <xs:enumeration value="sv-fi"/>
+ <xs:enumeration value="sv-se"/>
+ <xs:enumeration value="sw"/>
+ <xs:enumeration value="sw-ke"/>
+ <xs:enumeration value="syr"/>
+ <xs:enumeration value="syr-sy"/>
+ <xs:enumeration value="ta"/>
+ <xs:enumeration value="ta-in"/>
+ <xs:enumeration value="te"/>
+ <xs:enumeration value="te-in"/>
+ <xs:enumeration value="tg"/>
+ <xs:enumeration value="th"/>
+ <xs:enumeration value="th-th"/>
+ <xs:enumeration value="ti"/>
+ <xs:enumeration value="tk"/>
+ <xs:enumeration value="tl"/>
+ <xs:enumeration value="tl-ph"/>
+ <xs:enumeration value="tn"/>
+ <xs:enumeration value="tn-za"/>
+ <xs:enumeration value="to"/>
+ <xs:enumeration value="tr"/>
+ <xs:enumeration value="tr-tr"/>
+ <xs:enumeration value="ts"/>
+ <xs:enumeration value="tt"/>
+ <xs:enumeration value="tt-ru"/>
+ <xs:enumeration value="tw"/>
+ <xs:enumeration value="ty"/>
+ <xs:enumeration value="ug"/>
+ <xs:enumeration value="uk"/>
+ <xs:enumeration value="uk-ua"/>
+ <xs:enumeration value="ur"/>
+ <xs:enumeration value="ur-pk"/>
+ <xs:enumeration value="uz"/>
+ <xs:enumeration value="uz-uz"/>
+ <xs:enumeration value="ve"/>
+ <xs:enumeration value="vi"/>
+ <xs:enumeration value="vi-vn"/>
+ <xs:enumeration value="vo"/>
+ <xs:enumeration value="wa"/>
+ <xs:enumeration value="wo"/>
+ <xs:enumeration value="xh"/>
+ <xs:enumeration value="xh-za"/>
+ <xs:enumeration value="yi"/>
+ <xs:enumeration value="yo"/>
+ <xs:enumeration value="za"/>
+ <xs:enumeration value="zh"/>
+ <xs:enumeration value="zh-cn"/>
+ <xs:enumeration value="zh-hk"/>
+ <xs:enumeration value="zh-mo"/>
+ <xs:enumeration value="zh-sg"/>
+ <xs:enumeration value="zh-tw"/>
+ <xs:enumeration value="zu"/>
+ <xs:enumeration value="zu-za"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+ <xs:element name="fullcat">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="authors"/>
+ <xs:element ref="topics"/>
+ <xs:element ref="catalogue"/>
+ </xs:sequence>
+ </xs:complexType>
+
+<!-- Constraints come here
+ Constraints must be defined at the top level
+
+- -->
+
+
+<!-- TOPIC-ID and TOPIC-IDREF
+
+Defines a relationship between the 'value' attribute in
+element 'keyval' and the 'name' attribute in the element
+'topic'
+- -->
+ <xs:key name="TOPIC-ID">
+ <xs:selector xpath="./topics/topic"/>
+ <xs:field xpath="@name"/>
+ </xs:key>
+ <xs:keyref name="KEYVAL-VALUE" refer="TOPIC-ID">
+ <xs:selector xpath="./catalogue/entry/keyval"/>
+ <xs:field xpath="@value"/>
+ </xs:keyref>
+
+<!-- AUTHOR-ID and AUTHOR-IDREF resp. UPLOADER-IDREF
+
+Defines a relationship between the 'id' attribute in
+both 'authorref' and 'uploaderref' element and the 'id'
+attribute of the 'author' element.
+- -->
+ <xs:key name="AUTHOR-ID">
+ <xs:selector xpath="./authors/author"/>
+ <xs:field xpath="@id"/>
+ </xs:key>
+ <xs:keyref name="AUTHORREF-ID" refer="AUTHOR-ID">
+ <xs:selector xpath="./catalogue/entry/authorref"/>
+ <xs:field xpath="@id"/>
+ </xs:keyref>
+ <xs:keyref name="UPLOADERREF-ID" refer="AUTHOR-ID">
+ <xs:selector xpath="./catalogue/entry/uploaderref"/>
+ <xs:field xpath="@id"/>
+ </xs:keyref>
+
+
+<!-- PKG-ID and ALSO-IDREF resp. XREF-IDREF
+
+Defines a relationship between the 'refid' attribute in
+element 'also' and the 'id' attribute of the element
+'entry'
+- -->
+ <xs:key name="PKG-ID">
+ <xs:selector xpath="./catalogue/entry"/>
+ <xs:field xpath="@id"/>
+ </xs:key>
+ <xs:keyref name="ALSO-REFID" refer="PKG-ID">
+ <xs:selector xpath="./catalogue/entry/also"/>
+ <xs:field xpath="@refid"/>
+ </xs:keyref>
+
+ <xs:keyref name="XREF-REFID" refer="PKG-ID">
+ <xs:selector xpath=".//xref"/>
+ <xs:field xpath="@refid"/>
+ </xs:keyref>
+
+ </xs:element>
+ <!--
+ <xs:selector xpath="./catalogue/entry/description/*/xref"/>
+ Here is the place, i.e. before the </xs:element> line above
+ where the key, keyref constraints have to be inserted manually.
+ Reason is that Relax NG Compact format doesn't allow specifying
+ key,keyref relationship.
+
+ -->
+ <xs:element name="authors">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="author"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ author element
+ We keep only one entry for each author, as a sanity measure.
+
+ The 'id' attribute values were prefixed 'auth:'. This has
+ historical reasons as in a DTD an ID resp. IDREFS has a single
+ namespace. Now when using an XSD schema this is no longer a
+ restriction. So we decided to get rid of the auth prefix.
+
+ Authors names had been broken into family name and given name
+ but the problems with different cultures, with what to do with the names
+ of organizations, etc., proved to be too much. The next choice was
+ to have a author display name as a string and then add a string by which
+ the names could be alphabetized. (For instance, the 'auth:hefferon-j'
+ may have a displayname of 'Jim Hefferon' and a collatename of
+ 'Hefferon Jim'. The first letter of the collate name may be used to
+ subdivide author's names into groups.)
+
+ Initially email name and domain were separated to discourage spammers.
+ Actually, we decided to reunite email name and domain into a single name
+ as the authors XML file isn't visible at a web site anyway.
+
+ pseudonym (Optional) If an author wants a pseudonym to be used for public visibility
+
+ died Default=false. If true indicates that an author has passed away.
+
+ female Default=false. If true indicates the author is female.
+
+ note (Optional) Could be used for additional notes pertaining to the author.
+ -->
+ <xs:element name="author">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="email">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:restriction base="xs:anyType">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[a-zA-Z0-9+\-._]+@[a-zA-Z0-9+\-._]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:attribute name="inactive" type="xs:date"/>
+ <xs:attribute name="note" type="xs:string"/>
+ </xs:restriction>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="id" use="required" type="xs:string"/>
+ <xs:attribute name="pseudonym" type="xs:string"/>
+ <xs:attribute name="familyname" type="xs:string"/>
+ <xs:attribute name="givenname" type="xs:string"/>
+ <xs:attribute name="female" default="false">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="died" default="false">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="note" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="topics">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="topic"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="topic">
+ <xs:complexType>
+ <xs:attribute name="name" use="required" type="xs:string"/>
+ <xs:attribute name="details" use="required" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="catalogue">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="entry"/>
+ </xs:sequence>
+ <xs:attribute name="maintainer" use="required" type="xs:string"/>
+ <xs:attribute name="datestamp" use="required" type="xs:string"/>
+ <xs:attribute name="license" use="required" type="xs:string"/>
+ </xs:complexType>
+ <!--
+ An alias has to be unique.
+ -->
+ <xs:unique name="ALIAS-REFID">
+ <xs:selector xpath="./entry/alias"/>
+ <xs:field xpath="@id"/>
+ </xs:unique>
+ </xs:element>
+ <xs:element name="entry">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="alias"/>
+ <xs:element ref="caption"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="authorref"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="uploaderref"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="copyright"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="contact"/>
+ <xs:element maxOccurs="unbounded" ref="license"/>
+ <xs:element minOccurs="0" ref="version"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="also"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="description"/>
+ <xs:element minOccurs="0" ref="installation_notes"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="documentation"/>
+ <xs:element minOccurs="0" ref="ctan"/>
+ <xs:element minOccurs="0" ref="miktex"/>
+ <xs:element minOccurs="0" ref="texlive"/>
+ <xs:element minOccurs="0" ref="install"/>
+ <xs:element maxOccurs="unbounded" ref="keyval"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attlist.entry"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.entry">
+ <xs:attribute name="id" use="required" type="xs:string"/>
+ <xs:attribute name="datestamp" use="required" type="xs:string"/>
+ <xs:attribute name="modifier" type="xs:string"/>
+ <xs:attribute name="obsolete" default="false">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="withdrawn" default="false">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+ <!--
+ alias element
+ An alias is an alternate name for a package
+
+ id an alias has an id which cannot used more than once
+ Uniqueness is guaranteed by ALIAS-REFID in the catalogue
+ element
+ name the display name of the alias
+ -->
+ <xs:element name="alias">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="id" use="required" type="xs:string"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ authorref element
+ This indicates a CTAN author of a package.
+
+ id points to an author, who may upload on behalf of the original author(s),
+ e.g. auth:wright
+ date (optional) is the date when the author was added. Date format is: yyyy-mm-dd,
+ e.g. 2014-01-31
+ note (optional)
+ active Specifies if an author maintains a package. False if not. Default is "true".
+ -->
+ <xs:element name="authorref">
+ <xs:complexType>
+ <xs:attribute name="id" use="required" type="xs:string"/>
+ <xs:attribute name="date" type="xs:date"/>
+ <xs:attribute name="note" type="xs:string"/>
+ <xs:attribute name="active" default="true">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ uploaderref element
+ This indicates a CTAN author who is allowed to upload a package
+ on behalf of the original author(s) of the package.
+
+ Note: The original author (or one of the original authors) must confirm this
+ in an email to ctan@dante.de
+
+ id points to an author, who may upload on behalf of the original author(s),
+ e.g. auth:wright
+ date is the date when the original author's confirmation email arrived at
+ ctan@dante.de. Date format is: yyyy-mm-dd, e.g. 2014-01-31
+ note (optional)
+ active Currently not used, set to "true" by default.
+
+ -->
+ <xs:element name="uploaderref">
+ <xs:complexType>
+ <xs:attribute name="id" use="required" type="xs:string"/>
+ <xs:attribute name="date" use="required" type="xs:date"/>
+ <xs:attribute name="note" type="xs:string"/>
+ <xs:attribute name="active" default="true">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="contact">
+ <xs:complexType>
+ <xs:attribute name="type" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="home"/>
+ <xs:enumeration value="repository"/>
+ <xs:enumeration value="support"/>
+ <xs:enumeration value="bugs"/>
+ <xs:enumeration value="announce"/>
+ <xs:enumeration value="development"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="href" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="http://.*|https://.*|ftp://.*|nntp:.*|mailto:.+@.+|news:.*"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ copyright element:
+ The owner and year attributes are both unstructured strings; for instance,
+ year may be "1996-2005".
+
+ -->
+ <xs:element name="copyright">
+ <xs:complexType>
+ <xs:attribute name="owner" use="required" type="xs:string"/>
+ <xs:attribute name="year" use="required" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ LICENSE
+
+ An empty LICENSE element consists of the TYPE attribute which
+ indicates the type of license under which the package is available.
+ In general, UNKNOWN and OTHER licenses are specifically excluded from
+ free distributions. Please refer to
+ CTAN:/help/Catalogue/licenses.html, or
+ http://texcatalogue.ctan.org/licenses.html, for details.
+
+ The other attributes record details of the last time the license was
+ checked, including the date (checked="2015-06-19"), the version of the
+ package when the license was checked, and who checked it
+ (username="manfred").
+
+ If the TYPE is "other" then the PCDATA of the otherwise empty licence
+ element might provide further explanation.
+
+ The optional file attribute contains the name of the file where the license
+ statement has been found, like "Copyright" or "doc/README", and thus
+ makes checking again much easier. The pseudo-file "header" would
+ indicate that there is no separate license file, but that all included
+ files state their license in their header comments. There is no
+ defined syntax for that field - you like, put anything there that
+ would indicate where to find the license information.
+
+ -->
+ <xs:element name="license">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attributeGroup ref="attlist.license"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.license">
+ <xs:attribute name="type" default="unknown">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="apache2"/>
+ <xs:enumeration value="artistic"/>
+ <xs:enumeration value="artistic2"/>
+ <xs:enumeration value="bsd"/>
+ <xs:enumeration value="bsd2"/>
+ <xs:enumeration value="bsd3"/>
+ <xs:enumeration value="bsd4"/>
+ <xs:enumeration value="collection"/>
+ <xs:enumeration value="cc-by-1"/>
+ <xs:enumeration value="cc-by-2"/>
+ <xs:enumeration value="cc-by-3"/>
+ <xs:enumeration value="cc-by-4"/>
+ <xs:enumeration value="cc-by-nc-1"/>
+ <xs:enumeration value="cc-by-nc-2"/>
+ <xs:enumeration value="cc-by-nc-3"/>
+ <xs:enumeration value="cc-by-nc-4"/>
+ <xs:enumeration value="cc-by-nc-nd-1"/>
+ <xs:enumeration value="cc-by-nc-nd-2"/>
+ <xs:enumeration value="cc-by-nc-nd-2.5"/>
+ <xs:enumeration value="cc-by-nc-nd-3"/>
+ <xs:enumeration value="cc-by-nc-nd-4"/>
+ <xs:enumeration value="cc-by-nc-sa4"/>
+ <xs:enumeration value="cc-by-nd-1"/>
+ <xs:enumeration value="cc-by-nd-2"/>
+ <xs:enumeration value="cc-by-nd-3"/>
+ <xs:enumeration value="cc-by-nd-4"/>
+ <xs:enumeration value="cc-by-sa-1"/>
+ <xs:enumeration value="cc-by-sa-2"/>
+ <xs:enumeration value="cc-by-sa-3"/>
+ <xs:enumeration value="cc-by-sa-4"/>
+ <xs:enumeration value="digest"/>
+ <xs:enumeration value="fdl"/>
+ <xs:enumeration value="gfl"/>
+ <xs:enumeration value="gfsl"/>
+ <xs:enumeration value="gpl"/>
+ <xs:enumeration value="gpl1"/>
+ <xs:enumeration value="gpl1+"/>
+ <xs:enumeration value="gpl2"/>
+ <xs:enumeration value="gpl2+"/>
+ <xs:enumeration value="gpl3"/>
+ <xs:enumeration value="gpl3+"/>
+ <xs:enumeration value="knuth"/>
+ <xs:enumeration value="lgpl"/>
+ <xs:enumeration value="lgpl2.1"/>
+ <xs:enumeration value="lgpl3"/>
+ <xs:enumeration value="lppl"/>
+ <xs:enumeration value="lppl1"/>
+ <xs:enumeration value="lppl1.2"/>
+ <xs:enumeration value="lppl1.3"/>
+ <xs:enumeration value="lppl1.3a"/>
+ <xs:enumeration value="lppl1.3b"/>
+ <xs:enumeration value="lppl1.3c"/>
+ <xs:enumeration value="mit"/>
+ <xs:enumeration value="nocommercial"/>
+ <xs:enumeration value="noinfo"/>
+ <xs:enumeration value="nosell"/>
+ <xs:enumeration value="nosource"/>
+ <xs:enumeration value="ofl"/>
+ <xs:enumeration value="opl"/>
+ <xs:enumeration value="other-free"/>
+ <xs:enumeration value="other-nonfree"/>
+ <xs:enumeration value="pd"/>
+ <xs:enumeration value="shareware"/>
+ <xs:enumeration value="unknown"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="checked" type="xs:date"/>
+ <xs:attribute name="username" type="xs:string"/>
+ <xs:attribute name="version" type="xs:string"/>
+ <xs:attribute name="file" type="xs:string"/>
+ <xs:attribute name="note" type="xs:string"/>
+ </xs:attributeGroup>
+ <!--
+ version element
+ This is the version of the package as assigned by the author.
+ number is a string
+ date if set must be a valid date
+ -->
+ <xs:element name="version">
+ <xs:complexType>
+ <xs:attribute name="number" type="xs:string"/>
+ <xs:attribute name="date" type="xs:date"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="also">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attributeGroup ref="attlist.also"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.also">
+ <xs:attribute name="refid" type="xs:string"/>
+ </xs:attributeGroup>
+ <xs:group name="text">
+ <xs:sequence>
+ <xs:choice minOccurs="0">
+ <xs:element ref="xref"/>
+ <xs:element ref="em"/>
+ <xs:element ref="i"/>
+ <xs:element ref="u"/>
+ <xs:element ref="b"/>
+ <xs:element ref="small"/>
+ <xs:element ref="a"/>
+ <xs:element ref="p"/>
+ <xs:element ref="pre"/>
+ <xs:element ref="code"/>
+ <xs:element ref="tt"/>
+ <xs:element ref="br"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:group>
+ <xs:element name="xref">
+ <xs:complexType mixed="true">
+ <xs:group minOccurs="0" maxOccurs="unbounded" ref="text"/>
+ <xs:attributeGroup ref="attlist.xref"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.xref">
+ <xs:attribute name="refid" use="required" type="xs:string"/>
+ </xs:attributeGroup>
+ <xs:element name="description">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="text"/>
+ <xs:element ref="ul"/>
+ <xs:element ref="ol"/>
+ <xs:element ref="dl"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attlist.description"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.description">
+ <xs:attributeGroup ref="language"/>
+ </xs:attributeGroup>
+ <xs:element name="em" type="xs:string"/>
+ <xs:element name="b" type="xs:string"/>
+ <xs:element name="i" type="xs:string"/>
+ <xs:element name="u" type="xs:string"/>
+ <xs:element name="small" type="xs:string"/>
+ <xs:element name="p">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="text"/>
+ <xs:element ref="ul"/>
+ <xs:element ref="ol"/>
+ <xs:element ref="dl"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="pre" type="xs:string"/>
+ <xs:element name="code" type="xs:string"/>
+ <xs:element name="tt">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="br"/>
+ <xs:element ref="em"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="br">
+ <xs:complexType/>
+ </xs:element>
+ <xs:element name="ul">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ol">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dl">
+ <xs:complexType>
+ <xs:sequence maxOccurs="unbounded">
+ <xs:element ref="dt"/>
+ <xs:element ref="dd"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="li">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="text"/>
+ <xs:element ref="ul"/>
+ <xs:element ref="ol"/>
+ <xs:element ref="dl"/>
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dt">
+ <xs:complexType mixed="true">
+ <xs:group minOccurs="0" maxOccurs="unbounded" ref="text"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dd">
+ <xs:complexType mixed="true">
+ <xs:group minOccurs="0" maxOccurs="unbounded" ref="text"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="email" type="xs:string"/>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="number" type="xs:string"/>
+ <xs:element name="released" type="xs:string"/>
+ <xs:element name="caption">
+ <xs:simpleType>
+ <xs:union memberTypes="xs:string">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:length value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="a">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attributeGroup ref="attlist.a"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.a">
+ <xs:attribute name="href" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="http://.*|https://.*|ftp://.*|nntp:.*|mailto:.+@.+|news:.*"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+ <xs:element name="documentation">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attributeGroup ref="attlist.documentation"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.documentation">
+ <xs:attribute name="href" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="http://.*|https://.*|ftp://.*|ctan:/.*"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="details" type="xs:string"/>
+ <xs:attributeGroup ref="language"/>
+ </xs:attributeGroup>
+ <!--
+ installation_notes
+
+ Optional element which may contain internal notes for the
+ CTAN upload managers.
+
+ -->
+ <xs:element name="installation_notes" type="xs:string"/>
+ <!--
+ CTAN
+
+ The path attribute can point to either a directory or an actual
+ file. By default it is assumed to be a directory
+ (i.e. file=false). The attribute zip indicates whether additionally
+ to the package's directory there is a zip archive of that directory.
+ By default, zip=true
+
+ -->
+ <xs:element name="ctan">
+ <xs:complexType>
+ <xs:attributeGroup ref="attlist.ctan"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:attributeGroup name="attlist.ctan">
+ <xs:attribute name="path" use="required" type="xs:string"/>
+ <xs:attributeGroup ref="language"/>
+ <xs:attribute name="zip" default="true">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="file" default="false">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="true"/>
+ <xs:enumeration value="false"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+ <!--
+ miktex
+
+ If the package is part of the MiKTeX distribution then
+ the MiKTeX package name is registered in attribute 'location'
+
+ -->
+ <xs:element name="miktex">
+ <xs:complexType>
+ <xs:attribute name="location" use="required" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ texlive
+
+ If the package is part of the TeX Live distribution then
+ the TeX Live package name is registered in attribute 'location'
+
+ -->
+ <xs:element name="texlive">
+ <xs:complexType>
+ <xs:attribute name="location" use="required" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ install element:
+ Present if we hold a TDS-packaged version of the material.
+
+ The 'path' attribute gives the CTAN path of the file.
+ It begins with a '/', for instance, "/macros/latex/contrib/shadethm.zip".
+
+ -->
+ <xs:element name="install">
+ <xs:complexType>
+ <xs:attribute name="path" use="required" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <!--
+ keyval
+
+ For a history of the keyval element see the comment in catalogue.dtd.
+
+ Currently, keyval will be used solely to assign topics, i.e attribute
+ key may have value "topic" only.
+
+ -->
+ <xs:element name="keyval">
+ <xs:complexType>
+ <xs:attribute name="key" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="topic"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="value" use="required" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>