summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'metadata/dtd')
-rw-r--r--metadata/dtd/book.dtd25
-rw-r--r--metadata/dtd/common.dtd137
-rw-r--r--metadata/dtd/funnychars.dtd84
-rw-r--r--metadata/dtd/gleps.dtd8
-rw-r--r--metadata/dtd/glsa.dtd328
-rw-r--r--metadata/dtd/guide.dtd42
-rw-r--r--metadata/dtd/metadata.dtd91
-rw-r--r--metadata/dtd/metadoc.dtd43
-rw-r--r--metadata/dtd/mirrors.dtd89
-rw-r--r--metadata/dtd/project.dtd56
-rw-r--r--metadata/dtd/projects.dtd26
-rw-r--r--metadata/dtd/repositories.dtd65
-rw-r--r--metadata/dtd/userinfo.dtd23
13 files changed, 1017 insertions, 0 deletions
diff --git a/metadata/dtd/book.dtd b/metadata/dtd/book.dtd
new file mode 100644
index 000000000000..e5e09b7efcc8
--- /dev/null
+++ b/metadata/dtd/book.dtd
@@ -0,0 +1,25 @@
+<!ENTITY % common SYSTEM "common.dtd">
+
+%common;
+
+<!ELEMENT book (title, values?, author+, abstract, license?, version, date, part+)>
+<!ATTLIST book link CDATA #IMPLIED
+ disclaimer (articles|oldbook|draft|obsolete) #IMPLIED
+ redirect CDATA #IMPLIED
+ lang CDATA #IMPLIED>
+
+<!ELEMENT part (title, abstract, chapter+)>
+<!ATTLIST part id CDATA #IMPLIED>
+
+<!ELEMENT chapter (title, abstract?, include)>
+<!ATTLIST chapter id CDATA #IMPLIED>
+
+<!ELEMENT sections (abstract?, version, date, section+)>
+
+<!ELEMENT section (include | (title, (body+ | subsection+)) )>
+
+<!ELEMENT subsection (include | (title?, body+))>
+<!ATTLIST subsection id CDATA #IMPLIED
+ test CDATA #IMPLIED>
+
+<!ELEMENT body (include | (%block.class;)+)>
diff --git a/metadata/dtd/common.dtd b/metadata/dtd/common.dtd
new file mode 100644
index 000000000000..e9ebb517f415
--- /dev/null
+++ b/metadata/dtd/common.dtd
@@ -0,0 +1,137 @@
+<!-- Import funny characters -->
+
+<!ENTITY % funnychars SYSTEM "funnychars.dtd">
+
+%funnychars;
+
+<!ENTITY % inline.class "sup|sub|b|brite|c|e|path|img|br|mail|uri|keyval">
+<!ENTITY % pre.class "comment|i|keyword|ident|const|stmt|var|keyval|uri">
+<!ENTITY % lists.class "ul|ol|dl">
+<!ENTITY % ti.class "%inline.class;|%lists.class;|fig">
+<!ENTITY % block.class "figure|fig|note|impo|warn|pre|p|table|%lists.class;">
+
+<!ELEMENT title (#PCDATA)>
+
+<!ELEMENT values (key+)>
+
+<!ELEMENT key (#PCDATA)>
+<!ATTLIST key id CDATA #IMPLIED>
+
+<!ELEMENT author (#PCDATA|mail)*>
+<!ATTLIST author title CDATA #IMPLIED>
+
+<!ELEMENT mail (#PCDATA)>
+<!ATTLIST mail link CDATA #IMPLIED>
+
+<!ELEMENT uri (#PCDATA|img)*>
+<!ATTLIST uri link CDATA #IMPLIED>
+
+<!ELEMENT date (#PCDATA)>
+
+<!ELEMENT abstract (#PCDATA)>
+
+<!ELEMENT summary (#PCDATA)>
+
+<!ELEMENT license EMPTY>
+<!ATTLIST license version CDATA #IMPLIED>
+
+<!ELEMENT version (#PCDATA)>
+
+<!ELEMENT figure EMPTY>
+<!ATTLIST figure caption CDATA #IMPLIED
+ short CDATA #IMPLIED
+ link CDATA #REQUIRED>
+
+<!ELEMENT fig EMPTY>
+<!ATTLIST fig short CDATA #IMPLIED
+ linkto CDATA #IMPLIED
+ link CDATA #REQUIRED>
+
+<!ELEMENT img EMPTY>
+<!ATTLIST img src CDATA #REQUIRED>
+
+<!ELEMENT br EMPTY>
+
+<!ELEMENT note (#PCDATA|%inline.class;)*>
+<!ATTLIST note test CDATA #IMPLIED>
+
+<!ELEMENT impo (#PCDATA|%inline.class;)*>
+<!ATTLIST impo test CDATA #IMPLIED>
+
+<!ELEMENT warn (#PCDATA|%inline.class;)*>
+<!ATTLIST warn test CDATA #IMPLIED>
+
+<!ELEMENT pre (#PCDATA|%pre.class;)*>
+<!ATTLIST pre caption CDATA #REQUIRED
+ test CDATA #IMPLIED>
+
+<!ELEMENT comment (#PCDATA|%pre.class;|b)*>
+<!ELEMENT i (#PCDATA|%pre.class;)*>
+<!ELEMENT keyword (#PCDATA|%pre.class;)*>
+<!ELEMENT ident (#PCDATA|%pre.class;)*>
+<!ELEMENT const (#PCDATA|%pre.class;)*>
+<!ELEMENT stmt (#PCDATA|%pre.class;)*>
+<!ELEMENT var (#PCDATA|%pre.class;)*>
+
+<!ELEMENT glepindex EMPTY>
+<!ATTLIST glepindex status CDATA #IMPLIED
+ index CDATA "/proj/en/glep/gleps.xml">
+
+<!ATTLIST body test CDATA #IMPLIED>
+
+<!ELEMENT p (#PCDATA|%inline.class;)*>
+<!ATTLIST p by CDATA #IMPLIED
+ test CDATA #IMPLIED>
+
+<!ELEMENT table (tcolumn*, tr+)>
+<!ATTLIST table test CDATA #IMPLIED>
+
+<!ELEMENT tcolumn EMPTY>
+<!ATTLIST tcolumn width CDATA #REQUIRED>
+
+<!ELEMENT tr (th|ti)+>
+<!ATTLIST tr id CDATA #IMPLIED
+ test CDATA #IMPLIED>
+
+<!ELEMENT th (#PCDATA|%inline.class;)*>
+<!ATTLIST th colspan CDATA #IMPLIED
+ rowspan CDATA #IMPLIED
+ align (left|center|right) "left">
+
+<!ELEMENT ti (#PCDATA|%ti.class;)*>
+<!ATTLIST ti colspan CDATA #IMPLIED
+ rowspan CDATA #IMPLIED
+ align (left|center|right) "left">
+
+<!ELEMENT dl (dt|dd)+>
+
+<!ELEMENT dt (#PCDATA|%inline.class;)*>
+
+<!ELEMENT dd (#PCDATA|%inline.class;|ul|ol)*>
+
+<!ELEMENT ul (li+)>
+<!ATTLIST ul test CDATA #IMPLIED>
+
+<!ELEMENT ol (li+)>
+<!ATTLIST ol test CDATA #IMPLIED>
+
+<!ELEMENT li (#PCDATA|%inline.class;|ul|ol)*>
+<!ATTLIST li test CDATA #IMPLIED>
+
+<!ELEMENT sup (#PCDATA|%inline.class;)*>
+<!ELEMENT sub (#PCDATA|%inline.class;)*>
+<!ELEMENT b (#PCDATA|%inline.class;)*>
+<!ELEMENT brite (#PCDATA|%inline.class;)*>
+<!ELEMENT c (#PCDATA|%inline.class;)*>
+<!ELEMENT e (#PCDATA|%inline.class;)*>
+<!ELEMENT path (#PCDATA|%inline.class;)*>
+
+<!ELEMENT keyval EMPTY>
+<!ATTLIST keyval id CDATA #REQUIRED>
+
+<!ATTLIST section id CDATA #IMPLIED
+ test CDATA #IMPLIED>
+
+<!ELEMENT included ( version, date, (chapter|section|body)+ )>
+<!ELEMENT include EMPTY>
+<!ATTLIST include href CDATA #REQUIRED>
diff --git a/metadata/dtd/funnychars.dtd b/metadata/dtd/funnychars.dtd
new file mode 100644
index 000000000000..00231a262175
--- /dev/null
+++ b/metadata/dtd/funnychars.dtd
@@ -0,0 +1,84 @@
+<!ENTITY half "&#x00BD;"> <!-- VULGAR FRACTION ONE HALF -->
+<!ENTITY frac12 "&#x00BD;"> <!-- VULGAR FRACTION ONE HALF -->
+<!ENTITY frac14 "&#x00BC;"> <!-- VULGAR FRACTION ONE QUARTER -->
+<!ENTITY frac34 "&#x00BE;"> <!-- VULGAR FRACTION THREE QUARTERS -->
+<!ENTITY frac18 "&#x215B;"> <!-- -->
+<!ENTITY frac38 "&#x215C;"> <!-- -->
+<!ENTITY frac58 "&#x215D;"> <!-- -->
+<!ENTITY frac78 "&#x215E;"> <!-- -->
+<!ENTITY sup1 "&#x00B9;"> <!-- SUPERSCRIPT ONE -->
+<!ENTITY sup2 "&#x00B2;"> <!-- SUPERSCRIPT TWO -->
+<!ENTITY sup3 "&#x00B3;"> <!-- SUPERSCRIPT THREE -->
+<!ENTITY plus "&#x002B;"> <!-- PLUS SIGN -->
+<!ENTITY plusmn "&#x00B1;"> <!-- PLUS-MINUS SIGN -->
+<!ENTITY lt "&#38;#60;"> <!-- LESS-THAN SIGN -->
+<!ENTITY equals "&#x003D;"> <!-- EQUALS SIGN -->
+<!ENTITY gt "&#x003E;"> <!-- GREATER-THAN SIGN -->
+<!ENTITY divide "&#x00F7;"> <!-- DIVISION SIGN -->
+<!ENTITY times "&#x00D7;"> <!-- MULTIPLICATION SIGN -->
+<!ENTITY curren "&#x00A4;"> <!-- CURRENCY SIGN -->
+<!ENTITY pound "&#x00A3;"> <!-- POUND SIGN -->
+<!ENTITY dollar "&#x0024;"> <!-- DOLLAR SIGN -->
+<!ENTITY cent "&#x00A2;"> <!-- CENT SIGN -->
+<!ENTITY yen "&#x00A5;"> <!-- YEN SIGN -->
+<!ENTITY num "&#x0023;"> <!-- NUMBER SIGN -->
+<!ENTITY percnt "&#x0025;"> <!-- PERCENT SIGN -->
+<!ENTITY amp "&#38;#38;"> <!-- AMPERSAND -->
+<!ENTITY ast "&#x2217;"> <!-- ASTERISK OPERATOR -->
+<!ENTITY commat "&#x0040;"> <!-- COMMERCIAL AT -->
+<!ENTITY lsqb "&#x005B;"> <!-- LEFT SQUARE BRACKET -->
+<!ENTITY bsol "&#x005C;"> <!-- REVERSE SOLIDUS -->
+<!ENTITY rsqb "&#x005D;"> <!-- RIGHT SQUARE BRACKET -->
+<!ENTITY lcub "&#x007B;"> <!-- LEFT CURLY BRACKET -->
+<!ENTITY horbar "&#x2015;"> <!-- HORIZONTAL BAR -->
+<!ENTITY verbar "&#x007C;"> <!-- VERTICAL LINE -->
+<!ENTITY rcub "&#x007D;"> <!-- RIGHT CURLY BRACKET -->
+<!ENTITY micro "&#x00B5;"> <!-- MICRO SIGN -->
+<!ENTITY ohm "&#x2126;"> <!-- OHM SIGN -->
+<!ENTITY deg "&#x00B0;"> <!-- DEGREE SIGN -->
+<!ENTITY ordm "&#x00BA;"> <!-- MASCULINE ORDINAL INDICATOR -->
+<!ENTITY ordf "&#x00AA;"> <!-- FEMININE ORDINAL INDICATOR -->
+<!ENTITY sect "&#x00A7;"> <!-- SECTION SIGN -->
+<!ENTITY para "&#x00B6;"> <!-- PILCROW SIGN -->
+<!ENTITY middot "&#x00B7;"> <!-- MIDDLE DOT -->
+<!ENTITY larr "&#x2190;"> <!-- LEFTWARDS DOUBLE ARROW -->
+<!ENTITY rarr "&#x2192;"> <!-- RIGHTWARDS DOUBLE ARROW -->
+<!ENTITY uarr "&#x2191;"> <!-- UPWARDS ARROW -->
+<!ENTITY darr "&#x2193;"> <!-- DOWNWARDS ARROW -->
+<!ENTITY copy "&#x00A9;"> <!-- COPYRIGHT SIGN -->
+<!ENTITY reg "&#x00AE;"> <!-- REG TRADE MARK SIGN -->
+<!ENTITY trade "&#x2122;"> <!-- TRADE MARK SIGN -->
+<!ENTITY brvbar "&#x00A6;"> <!-- BROKEN BAR -->
+<!ENTITY not "&#x00AC;"> <!-- NOT SIGN -->
+<!ENTITY sung "&#x2669;"> <!-- -->
+<!ENTITY excl "&#x0021;"> <!-- EXCLAMATION MARK -->
+<!ENTITY iexcl "&#x00A1;"> <!-- INVERTED EXCLAMATION MARK -->
+<!ENTITY quot "&#x0022;"> <!-- QUOTATION MARK -->
+<!ENTITY apos "&#x0027;"> <!-- APOSTROPHE -->
+<!ENTITY lpar "&#x0028;"> <!-- LEFT PARENTHESIS -->
+<!ENTITY rpar "&#x0029;"> <!-- RIGHT PARENTHESIS -->
+<!ENTITY comma "&#x002C;"> <!-- COMMA -->
+<!ENTITY lowbar "&#x005F;"> <!-- LOW LINE -->
+<!ENTITY hyphen "&#xE4F8;"> <!-- -->
+<!ENTITY period "&#x002E;"> <!-- FULL STOP -->
+<!ENTITY sol "&#x002F;"> <!-- SOLIDUS -->
+<!ENTITY colon "&#x003A;"> <!-- COLON -->
+<!ENTITY semi "&#x003B;"> <!-- SEMICOLON -->
+<!ENTITY quest "&#x003F;"> <!-- QUESTION MARK -->
+<!ENTITY iquest "&#x00BF;"> <!-- INVERTED QUESTION MARK -->
+<!ENTITY laquo "&#x00AB;"> <!-- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+<!ENTITY raquo "&#x00BB;"> <!-- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
+<!ENTITY lsquo "&#x2018;"> <!-- -->
+<!ENTITY rsquo "&#x2019;"> <!-- RIGHT SINGLE QUOTATION MARK -->
+<!ENTITY ldquo "&#x201C;"> <!-- -->
+<!ENTITY rdquo "&#x201D;"> <!-- RIGHT DOUBLE QUOTATION MARK -->
+<!ENTITY nbsp "&#x00A0;"> <!-- NO-BREAK SPACE -->
+<!ENTITY shy "&#x00AD;"> <!-- SOFT HYPHEN -->
+<!ENTITY acirc "&#x00E2;"> <!-- CIRCONFLEXEd a -->
+<!ENTITY euml "&#x00EB;"> <!-- UMLAUTED e -->
+<!ENTITY eacute "&#x00E9;"> <!-- ACUTEd e -->
+<!ENTITY icirc "&#x00EE;"> <!-- CIRCONFLEXEd i -->
+<!ENTITY ucirc "&#x00FB;"> <!-- CIRCONFLEXEd u -->
+<!ENTITY ugrave "&#x00F9;"> <!-- GRAVEd u -->
+<!ENTITY ndash "&#x2013;">
+<!ENTITY mdash "&#x2014;">
diff --git a/metadata/dtd/gleps.dtd b/metadata/dtd/gleps.dtd
new file mode 100644
index 000000000000..524f58a0b696
--- /dev/null
+++ b/metadata/dtd/gleps.dtd
@@ -0,0 +1,8 @@
+<!ELEMENT gleps (glep+)>
+<!ELEMENT glep (#PCDATA|uri)*>
+<!ATTLIST glep id CDATA #REQUIRED
+ file CDATA #REQUIRED
+ type (S|I) "S"
+ status (D|d|A|F|R|W|M) "D">
+<!ELEMENT uri (#PCDATA)>
+<!ATTLIST uri link CDATA #REQUIRED>
diff --git a/metadata/dtd/glsa.dtd b/metadata/dtd/glsa.dtd
new file mode 100644
index 000000000000..52be18e1af2f
--- /dev/null
+++ b/metadata/dtd/glsa.dtd
@@ -0,0 +1,328 @@
+<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/dtd/glsa.dtd,v 1.17 2008/04/04 17:04:39 neysx Exp $ -->
+<!ELEMENT glsa (title,synopsis,product,announced,revised,bug*,access?,affected,background?,description,impact,workaround,resolution,references,license?,metadata*)>
+<!ATTLIST glsa id CDATA #REQUIRED>
+
+<!--
+ Element: title
+ Description: Provides a 4-5 word description about the advisory
+ Example: <title>Buffer overflow vulnerability found in openssl-0.9.5</title>
+-->
+<!ELEMENT title (#PCDATA)>
+
+<!--
+ Element: synopsis
+ Description: Small, to-the-point description about the GLSA
+
+ Example: <synopsis>
+ rsync has an exploitable buffer overflow that can lead to
+ remote compromise
+ </synopsis>
+-->
+<!ELEMENT synopsis (#PCDATA)>
+
+<!--
+ Element: product
+ Description: Defines what type of security announcement this is.
+
+ Valid types are:
+ - ebuild A Portage-provided ebuild has a security
+ issue
+ - informational This GLSA is purely informational, no Gentoo
+ system is affected
+ - infrastructure The security issue involves the Gentoo
+ infrastructure
+
+ The text contains one keyword that defines the issue.
+ Note: All type values but 'ebuild' are considered deprecated.
+
+ Example: <product type="ebuild">openssl</product>
+ Example: <product type="infrastructure">rsync mirror</product>
+-->
+<!ELEMENT product (#PCDATA)>
+<!ATTLIST product type (ebuild|infrastructure|informational) #REQUIRED>
+
+<!--
+ Element: announced
+ Description: Date when the advisory is publicised
+ The format must be "YYYY-mm-dd"
+
+ Example: <announced>2003-11-20</announced>
+-->
+<!ELEMENT announced (#PCDATA)>
+
+<!--
+ Element: revised
+ Description: Last revision date of the GLSA
+ Attribute: @count: number of revisions
+
+ Example: <revised count="02">2003-11-20</revised>
+-->
+<!ELEMENT revised (#PCDATA)>
+<!ATTLIST revised count CDATA "01">
+
+<!--
+ Element: bug
+ Description: Number of the bug on bugs.gentoo.org, if any
+ Occurrence: The bug element can occur 0, 1 or more times
+
+ Example: <bug>34200</bug>
+-->
+<!ELEMENT bug (#PCDATA)>
+
+<!--
+ Element: access
+ Description: Type of access necessary to exploit the security issue
+ This element should only be used when product@type = 'ebuild'
+ Occurrence: The access element can occur 0 or 1 time
+
+ Example: <access>Remote</access>
+-->
+<!ELEMENT access (#PCDATA)>
+
+<!--
+ Element: affected
+ Description: Describe what the affected subjects are.
+
+ If product@type = 'ebuild', the child elements are 'package'
+ If product@type = 'portage', the child elements are 'package'
+ If product@type = 'infrastructure', the child elements are
+ 'service'
+
+-->
+<!ELEMENT affected (package*|service*)>
+
+<!--
+ Element: package
+ Description: Provide all necessary information regarded the affected
+ packages. It also contains information about the affected
+ architectures, if automatic updates can be done and the update
+
+ The "update" attribute contains the path to the non-vulnerable
+ version of the package
+
+ The "auto" attribute contains either "yes" or "no" and tells
+ Portage that the package can be updated automatically (to be
+ implemented) without further user interaction
+
+ The "arch" attribute contains either the architecture (as used
+ by ACCEPT_KEYWORDS) or the "*" value (in case all
+ architectures are affected)
+
+ Occurrence: The package element can occur 0, 1 or more times
+ Example: <package name="dev-libs/openssl" auto="yes" arch="*">
+ <vulnerable range="lt">0.9.6k</vulnerable>
+ <unaffected range="gt">0.9.6k</unaffected>
+ </package>
+-->
+<!ELEMENT package (vulnerable|unaffected)*>
+<!ATTLIST package name CDATA #REQUIRED
+ auto (yes|no) #REQUIRED
+ arch CDATA #REQUIRED>
+
+<!--
+ Element: vulnerable
+ Description: Version of the vulnerable package. Can be a range too
+-->
+<!ELEMENT vulnerable (#PCDATA)>
+<!ATTLIST vulnerable range (le|lt|eq|gt|ge|rlt|rle|rgt|rge) #REQUIRED>
+
+<!--
+ Element: unaffected
+ Description: Version of the fixed (or unaffected) package. In case the
+ package is superseded by another package, you need to
+ define that package using the "name" attribute.
+
+ The r* range information is revision-specific. For instance,
+ rge foo-1.2.3-r4 == >=foo-1.2.3-r4 && <foo-1.2.4
+
+ Example:
+ <unaffected range="gt" name="foobar">2.0.0</unaffected>
+-->
+<!ELEMENT unaffected (#PCDATA)>
+<!ATTLIST unaffected range (le|lt|eq|gt|ge|rlt|rle|rgt|rge) #REQUIRED
+ name CDATA #IMPLIED>
+
+<!--
+ Element: service
+ Description: Provide information about the Gentoo services that are
+ affected by the security advisory. Portage must be able
+ to parse this information to make decisions (for instance,
+ ignore an rsync server or a certain distfiles mirror).
+
+ The type attribute can be one of "rsync", "web", "mirror".
+
+ The fixed attribute (denoting if the problem has been solved)
+ can be one of "yes" or "no". If not used, the default value is
+ "no".
+
+ Occurrence: The service element can occur 0, 1 or more times
+ Example: <service type="rsync">rsync://rsync.someserver.tld/gentoo-portage</service>
+-->
+<!ELEMENT service (#PCDATA)>
+<!ATTLIST service type (rsync|web|mirror) #REQUIRED
+ fixed (yes|no) #IMPLIED>
+
+<!--
+ Element: uri
+ Description: Link to the organisation involved in releasing the advisory
+ Occurrence: The uri element can occur 0, 1 or more times
+
+ Example: <uri link="http://www.cert.org">CERT</uri>
+-->
+<!ELEMENT uri (#PCDATA)>
+<!ATTLIST uri link CDATA #IMPLIED>
+
+<!--
+ Element: mail
+ Description: Mail address of the people involved in releasing the advisory
+ Occurrence: The mail element can occur 0, 1 or more times
+
+ Example: <mail link="some@person.com">Some Person</mail>
+-->
+<!ELEMENT mail (#PCDATA)>
+<!ATTLIST mail link CDATA #REQUIRED>
+
+<!--
+ Element: p
+ Description: Plain text
+ Occurrence: The "p" element can occur 0, 1 or more times and can contain
+ links or addresses
+
+ Example: <p>Please update your system</p>
+-->
+<!ELEMENT p (#PCDATA|mail|uri|b|i|br)*>
+
+<!--
+ Element: code
+ Description: The code element contains text that should preserve whitespace
+ and is therefore useful for code listings or commands
+
+ Example: <code>emerge sync</code>
+-->
+<!ELEMENT code (#PCDATA)>
+
+<!--
+ Element: background
+ Description: Provides a background of the affected package(s)/service(s)
+ The background element contains only "<p>"s in which the text
+ is placed
+
+-->
+<!ELEMENT background (p|ul|ol)*>
+
+<!--
+ Element: description
+ Description: Provides a description about the security issue
+ The description element contains only "<p>"s.
+-->
+<!ELEMENT description (p|ul|ol|code)*>
+
+<!--
+ Element: impact
+ Description: Provides information about the impact that the security issue
+ can have
+
+ The "impact" element contains only "<p>"s.
+
+ The type element gives a short term, such as
+ "Denial of Service", "Buffer Overflow", ...
+
+-->
+<!ELEMENT impact (p|ul|ol)*>
+<!ATTLIST impact type CDATA #REQUIRED>
+
+<!--
+ Element: workaround
+ Description: Provides information about how the security issue can be
+ (temporarily) resolved through a work-around
+
+ The "workaround" element contains only "<p>"s and "<code>"s.
+-->
+<!ELEMENT workaround (p|code|ul|ol)*>
+
+<!--
+ Element: resolution
+ Description: Provides information about how the security issue can be
+ resolved.
+
+ The "resolution" element contains only "<p>"s and "<code>"s.
+-->
+<!ELEMENT resolution (p|code|ul|ol)*>
+
+<!--
+ Element: references
+ Description: Provides links to resources / references available online.
+
+ The "reference" element contains only "<uri>"s.
+-->
+<!ELEMENT references (uri*)>
+
+<!--
+ Element: ul
+ Description: Add an unnumbered listing; can only contain <li>'s
+-->
+<!ELEMENT ul (li*)>
+
+<!--
+ Element: ol
+ Description: Add a numbered listing; can only contain <li>'s
+-->
+<!ELEMENT ol (li*)>
+
+<!--
+ Element: li
+ Description: Element of a listing
+
+ Example: <ul>
+ <li>This is element one</li>
+ <li>This is a second element</li>
+ </ul>
+-->
+<!ELEMENT li (#PCDATA)>
+
+<!--
+ Element: b
+ Description: Bold text
+
+ Example: <b>this is bold</b>
+-->
+<!ELEMENT b (#PCDATA)>
+
+<!--
+ Element: i
+ Description: Input text (blue)
+
+ Example: The user has to type in <i>ls</i> to see.
+-->
+<!ELEMENT i (#PCDATA)>
+
+<!--
+ Element: br
+ Description: hard line break
+
+ Example: And then: <br/>
+ KABLAM!
+-->
+<!ELEMENT br (#PCDATA)>
+
+<!--
+ Element: license
+ Description: Add license information
+
+ Example: <license/>
+-->
+<!ELEMENT license (EMPTY)>
+
+<!--
+ Element: metadata
+ Description: Metadata information for GLSAMaker
+
+ Example: <metadata tag="approved">Level 1</metadata>
+
+ On request of plasmaroo, metadata can contain all elements again.
+-->
+<!ELEMENT metadata (#PCDATA|metadata)*>
+<!ATTLIST metadata tag CDATA #REQUIRED
+ revision CDATA #IMPLIED
+ author CDATA #IMPLIED
+ timestamp CDATA #IMPLIED>
diff --git a/metadata/dtd/guide.dtd b/metadata/dtd/guide.dtd
new file mode 100644
index 000000000000..4b98657be6b9
--- /dev/null
+++ b/metadata/dtd/guide.dtd
@@ -0,0 +1,42 @@
+<!ENTITY % common SYSTEM "common.dtd">
+
+%common;
+
+<!ELEMENT mainpage (title, author+, abstract?, license?, version, date?, (devmap? | newsitems? | (mirrorlist|chapter)+))>
+<!ATTLIST mainpage
+ redirect CDATA #IMPLIED
+ lang CDATA #IMPLIED>
+
+<!ELEMENT newsitems EMPTY>
+
+<!ELEMENT devmap EMPTY>
+
+<!ELEMENT guide (title, subtitle?, values?, author+, abstract, summary?, license?, version, date, faqindex?, chapter+)>
+<!ATTLIST guide type CDATA #IMPLIED
+ disclaimer (articles|oldbook|draft|obsolete) #IMPLIED
+ redirect CDATA #IMPLIED
+ lang CDATA #IMPLIED>
+
+<!ELEMENT news (poster, date, title, summary?, body)>
+<!ATTLIST news gentoo (yes|no) "no"
+ category (gentoo|main|linux|moo|plans|birthday) #REQUIRED>
+
+<!ELEMENT subtitle (#PCDATA)>
+
+<!ELEMENT poster (#PCDATA)>
+
+<!ELEMENT faqindex (title, section?)>
+
+<!ELEMENT chapter (include | (title, section+))>
+<!ATTLIST chapter id CDATA #IMPLIED>
+
+<!ELEMENT section (include | (title?, body+))>
+
+<!ELEMENT body (mirrorlist | include | (%block.class;|glsa-latest|glsaindex|glepindex)+)>
+
+<!ELEMENT glsaindex EMPTY>
+<!ELEMENT glsa-latest EMPTY>
+
+<!ELEMENT mirrorlist EMPTY>
+<!ATTLIST mirrorlist select (full|partial) 'full'>
+<!ATTLIST mirrorlist src CDATA '/main/en/mirrors3.xml'>
diff --git a/metadata/dtd/metadata.dtd b/metadata/dtd/metadata.dtd
new file mode 100644
index 000000000000..d7ef81c7f750
--- /dev/null
+++ b/metadata/dtd/metadata.dtd
@@ -0,0 +1,91 @@
+<!-- Metadata for a category -->
+<!ELEMENT catmetadata ( (longdescription)* )>
+<!ATTLIST catmetadata pkgname CDATA "">
+
+<!-- Metadata for a package -->
+<!ELEMENT pkgmetadata ( (maintainer|longdescription|slots|use|upstream)* )>
+<!ATTLIST pkgmetadata pkgname CDATA "">
+
+ <!-- One tag for each maintainer of a package, multiple allowed-->
+ <!ELEMENT maintainer ( email, (description| name)* )>
+ <!-- type attribute determines whether the maintainer is a person or a project.
+ Unknown is added to handle <maintainer/>s in <upstream/>s. Using it (or no
+ explicit type) for Gentoo maintainers is prohibited. -->
+ <!ATTLIST maintainer type (person|project|unknown) "unknown">
+
+ <!-- A long description of the package in freetext-->
+ <!ELEMENT longdescription (#PCDATA|pkg|cat)* >
+
+ <!-- A description of the packages SLOTs -->
+ <!ELEMENT slots ((slot)*,subslots?) >
+ <!-- A particular SLOT -->
+ <!ELEMENT slot (#PCDATA)* >
+ <!-- name attribute holds the name of the SLOT, for sub-SLOTS
+ use the subslots element. A slot name of '*' can be used to
+ indicate a single description applying to all the slots in which
+ case no other <slot/> elements may be present. -->
+ <!ATTLIST slot name CDATA #REQUIRED >
+ <!-- The meaning of sub-SLOTs for the whole package -->
+ <!ELEMENT subslots (#PCDATA)* >
+
+ <!-- description of what this USE flag does for this package -->
+ <!ELEMENT use (flag)* >
+ <!ELEMENT flag (#PCDATA|pkg|cat)* >
+ <!-- name attribute holds the name of the USE flag -->
+ <!ATTLIST flag name CDATA #REQUIRED >
+
+ <!-- upstream metadata information (maintainers, upstream docs,..) -->
+ <!ELEMENT upstream (maintainer|changelog|doc|bugs-to|remote-id)* >
+ <!-- Due to the limitation of DTD this will also allow a status
+ attribute for the package maintainer element. Please note that
+ the usage of the status attribute is nevertheless _only_ allowed
+ in the upstream maintainer element. -->
+ <!ATTLIST maintainer status (active|inactive|unknown) "unknown" >
+ <!-- URL where the upstream changelog can be found -->
+ <!ELEMENT changelog (#PCDATA)>
+ <!-- URL where the location of the upstream documentation can be found -->
+ <!ELEMENT doc (#PCDATA)>
+ <!ATTLIST doc lang CDATA "en" >
+ <!-- location where to report bugs
+ (may also be an email address prefixed with mailto:) -->
+ <!ELEMENT bugs-to (#PCDATA)>
+ <!-- specify a type of package identification tracker -->
+ <!ELEMENT remote-id (#PCDATA)>
+ <!ATTLIST remote-id type (bitbucket|cpan|cpan-module|cpe|cran|ctan|freecode|freshmeat|gentoo|github|gitlab|gitorious|google-code|launchpad|pear|pecl|pypi|rubyforge|rubygems|sourceforge|sourceforge-jp|vim) #REQUIRED>
+
+ <!-- category/package information for cross-linking in descriptions
+ and useflag descriptions -->
+ <!ELEMENT pkg (#PCDATA) >
+ <!ELEMENT cat (#PCDATA) >
+
+<!-- Common attributes -->
+
+<!-- the lang attribute, specifies the language of this tag in the
+ form of a ISO 639-1 language code. This is only useful for
+ descriptions of various kinds. If a tag with this attribute is
+ included there must be a description in the default language "en" -->
+ <!ATTLIST description lang CDATA "en" >
+ <!ATTLIST longdescription lang CDATA "en" >
+ <!ATTLIST slots lang CDATA "en" >
+ <!ATTLIST use lang CDATA "en" >
+
+<!-- The restrict attribute, this attribute specifies restrictions on
+ the applicability of tags on versions. The format of this attribute is
+ equal to the format of DEPEND lines in ebuilds. Only package
+ dependency specifications conforming to EAPI=0 syntax are allowed.
+ The dependency specification may only contain references to the
+ package itself and no other package.
+
+ For required tags, there must be either an unrestricted version, or a
+ version that is default restricted. -->
+ <!ATTLIST maintainer restrict CDATA #IMPLIED >
+ <!ATTLIST longdescription restrict CDATA #IMPLIED >
+ <!ATTLIST flag restrict CDATA #IMPLIED >
+
+<!-- standard parts -->
+<!-- an email address -->
+<!ELEMENT email (#PCDATA) >
+<!-- the name of a person (maintainer, contributor) -->
+<!ELEMENT name (#PCDATA) >
+<!-- A description of a maintainer or change -->
+<!ELEMENT description (#PCDATA) >
diff --git a/metadata/dtd/metadoc.dtd b/metadata/dtd/metadoc.dtd
new file mode 100644
index 000000000000..20e73b2677b4
--- /dev/null
+++ b/metadata/dtd/metadoc.dtd
@@ -0,0 +1,43 @@
+<!ENTITY % common SYSTEM "common.dtd">
+
+%common;
+
+<!ELEMENT metadoc (version,members,categories,files,docs)>
+<!ATTLIST metadoc lang CDATA #REQUIRED
+ parent CDATA #IMPLIED>
+<!ELEMENT members (lead*,member*)>
+<!ELEMENT lead (#PCDATA)*> <!-- <lead>nickname</lead> -->
+<!ELEMENT member (#PCDATA)*>
+<!ATTLIST member mail CDATA #IMPLIED
+ fullname CDATA #IMPLIED>
+<!ELEMENT categories (cat)*>
+<!ELEMENT cat (#PCDATA)*>
+<!ATTLIST cat id CDATA #REQUIRED
+ parent CDATA #IMPLIED>
+<!ELEMENT files (file)*>
+<!ELEMENT file (#PCDATA)*>
+<!ATTLIST file id ID #REQUIRED>
+<!ELEMENT docs (doc)*>
+<!ELEMENT doc (memberof*,bookref?,bugs?)>
+<!ATTLIST doc fileid CDATA #REQUIRED>
+<!ELEMENT memberof (#PCDATA)*>
+<!ELEMENT bookref EMPTY>
+<!ATTLIST bookref vpart CDATA #IMPLIED
+ vchap CDATA #IMPLIED>
+<!ELEMENT bugs (bug*)>
+<!ELEMENT bug (#PCDATA)*>
+<!ATTLIST bug stopper (yes|no) #IMPLIED
+ arch CDATA #IMPLIED>
+
+<!ELEMENT dynamic (version?, title, intro?, (listing|catid*|overview))>
+<!ATTLIST dynamic metadoc CDATA #REQUIRED>
+<!ELEMENT intro (section)*> <!-- Section stuff copy/pasted from guide.dtd -->
+<!ELEMENT listing (list)*>
+<!ELEMENT list (#PCDATA)*>
+<!ELEMENT catid (#PCDATA)*>
+<!ELEMENT overview EMPTY>
+
+
+<!ELEMENT section (include | (title?, body+))>
+
+<!ELEMENT body (include | (%block.class;)+)>
diff --git a/metadata/dtd/mirrors.dtd b/metadata/dtd/mirrors.dtd
new file mode 100644
index 000000000000..d855815851f4
--- /dev/null
+++ b/metadata/dtd/mirrors.dtd
@@ -0,0 +1,89 @@
+<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/dtd/mirrors.dtd,v 1.3 2009/12/03 09:43:39 robbat2 Exp $ -->
+<!-- This file is used for keeping the new mirrors.xml file -->
+
+<!--
+ element: mirrors
+ description: A set of mirrorgroups followed by a list of countries with their code
+ example: <mirrors>
+ <mirrorgroup country="US" region="North America">
+ ...
+ </mirrorgroup>
+ ...
+ <countries>
+ <country code="CA">Canada</country>
+ ...
+ </countries>
+ </mirrors>
+-->
+
+<!ELEMENT mirrors (mirrorgroup*, countries)>
+
+<!--
+ element: mirrorgroup
+ description: Group mirrors by region and country.
+ The country code must exist in //countries/country
+ example: <mirrorgroup region="South America" country="BZ">
+ <mirror>
+ ...
+ </mirror>
+ ...
+ </mirrorgroup
+-->
+
+<!ELEMENT mirrorgroup (mirror*)>
+<!ATTLIST mirrorgroup region CDATA #REQUIRED
+ country IDREF #REQUIRED>
+<!--
+ element: mirror
+ description: One per mirror; name the mirror and provide one or more uris
+ optionally: provide GPS coordinates, a city and a bug id.
+ example: <mirror city="Corvallis"
+ coordinates="44.5646,-123.2620"
+ gentoo-bug="12345">
+ <name>OSU Open Source Lab</name>
+ <uri protocol="http">http://gentoo.osuosl.org/</uri>
+ <uri protocol="ftp">ftp://gentoo.osuosl.org/</uri>
+ </mirror>
+-->
+<!ELEMENT mirror (name, uri+)>
+<!ATTLIST mirror
+ city CDATA #IMPLIED
+ coordinates CDATA #IMPLIED
+ gentoo-bug CDATA #IMPLIED>
+
+<!--
+ element: name
+ description: Name of the mirror
+ note: Do not include a country and protocol pair, "(USA/http)" as they will
+ be built by the XSL.
+ example: <name>OSU Open Source Lab</name>
+-->
+<!ELEMENT name (#PCDATA)>
+
+<!--
+ element: uri
+ description: A Uniform Resource Locator for a given mirror
+ example: <uri protocol='http' ipv4='y' ipv6='y'>http://gentoo.osuosl.org/</uri>
+-->
+<!ELEMENT uri (#PCDATA)>
+<!ATTLIST uri ipv4 (Y|y|N|n) "y"
+ ipv6 (Y|y|N|n) "n"
+ partial (Y|y|N|n) "n"
+ protocol (http|ftp|rsync) "http">
+
+<!--
+ element: countries
+ description: A list of countries with their code and name
+ example: <countries>
+ <country code="CA">Canada</country>
+ <countries>
+-->
+<!ELEMENT countries (country*)>
+
+<!--
+ element: country
+ description: A country with its code
+ example: <country code="CA">Canada</country>
+-->
+<!ELEMENT country (#PCDATA)>
+<!ATTLIST country code ID #REQUIRED>
diff --git a/metadata/dtd/project.dtd b/metadata/dtd/project.dtd
new file mode 100644
index 000000000000..adb0a9ba378c
--- /dev/null
+++ b/metadata/dtd/project.dtd
@@ -0,0 +1,56 @@
+<!ENTITY % common SYSTEM "common.dtd">
+
+%common;
+
+<!ENTITY % body.class "%block.class;|glepindex">
+<!ELEMENT body (%body.class;)*>
+
+<!ELEMENT project (name, longname?, date?, author*, description, longdescription, goals?, recruitment?, (dev | resource | subproject | plannedproject |extraproject | extrachapter | herd | task | author)* )>
+<!ATTLIST project disclaimer (draft|obsolete) #IMPLIED
+ redirect CDATA #IMPLIED>
+<!ELEMENT name (#PCDATA)>
+<!ELEMENT longname (#PCDATA)>
+<!ELEMENT description (#PCDATA)>
+<!ELEMENT longdescription (%body.class;)* >
+<!ELEMENT goals (%body.class;)* >
+<!ELEMENT recruitment (job+) >
+<!ELEMENT job (summary, details, requirements, contact+) >
+<!ELEMENT details (#PCDATA|%inline.class;)*>
+<!ELEMENT requirements (#PCDATA|%inline.class;)*>
+<!ELEMENT contact (#PCDATA)>
+<!ELEMENT dev (#PCDATA)>
+<!ATTLIST dev role CDATA "member"
+ description CDATA #IMPLIED>
+<!ELEMENT resource (#PCDATA)>
+<!ATTLIST resource link CDATA #IMPLIED>
+<!ELEMENT subproject EMPTY>
+<!ATTLIST subproject ref CDATA #REQUIRED
+ inheritmembers ( yes | no ) "no"
+ inheritresources ( yes | no ) "no" >
+<!ELEMENT extraproject (#PCDATA|%inline.class;)*>
+<!ATTLIST extraproject name CDATA #REQUIRED
+ lead CDATA #IMPLIED
+ link CDATA #IMPLIED >
+<!ELEMENT plannedproject (#PCDATA|%inline.class;)*>
+<!ATTLIST plannedproject name CDATA #REQUIRED >
+<!ELEMENT extrachapter (title, section+)>
+<!ELEMENT section (title?, body+)>
+
+<!ATTLIST extrachapter position ( top|bottom|subproject|goals|resources|devs|recruitment|tasks ) "bottom">
+<!ELEMENT herd EMPTY>
+<!ATTLIST herd name CDATA #REQUIRED>
+
+<!-- TASK tags declaration -->
+<!ELEMENT task ( name, description, longdescription?, startdate, enddate?, (reference | milestone | dev |depends )* )>
+<!ATTLIST task id ID #IMPLIED
+ lead CDATA #REQUIRED
+ finished (yes | no) "no">
+<!ELEMENT startdate (#PCDATA)>
+<!ELEMENT enddate (#PCDATA)>
+<!ELEMENT reference (#PCDATA | bug | mail | uri)* >
+<!ELEMENT bug (#PCDATA)>
+<!ATTLIST bug no CDATA #REQUIRED>
+<!ELEMENT milestone (enddate, description)>
+<!ATTLIST milestone finished (yes| no) "no">
+<!ELEMENT depends (#PCDATA)>
+<!ATTLIST depends ref IDREF #REQUIRED>
diff --git a/metadata/dtd/projects.dtd b/metadata/dtd/projects.dtd
new file mode 100644
index 000000000000..6ce0544bcfbe
--- /dev/null
+++ b/metadata/dtd/projects.dtd
@@ -0,0 +1,26 @@
+<!ELEMENT projects (project)*>
+<!-- A project (identified by email address) -->
+<!ELEMENT project (email,name,url,description,subproject*,member*)>
+<!-- Contact e-mail address of a project or a project member -->
+<!ELEMENT email (#PCDATA)>
+<!-- Name of a project or a project member -->
+<!ELEMENT name (#PCDATA)>
+<!-- URL of the project homepage -->
+<!ELEMENT url (#PCDATA)>
+<!-- Description of the project -->
+<!ELEMENT description (#PCDATA)>
+<!-- Project member -->
+<!ELEMENT member (email,name,role)>
+<!-- is-lead="1" indicates that the member is the project's lead -->
+<!ATTLIST member
+ is-lead (0|1) "0">
+<!-- Project member role -->
+<!ELEMENT role (#PCDATA)>
+<!-- Subproject of a project -->
+<!ELEMENT subproject (#PCDATA)>
+<!-- inherit-members="1" indicates that the project inherits members
+ from the subproject -->
+<!-- ref="" references the subproject by the contact e-mail address -->
+<!ATTLIST subproject
+ inherit-members (0|1) "0"
+ ref CDATA #REQUIRED>
diff --git a/metadata/dtd/repositories.dtd b/metadata/dtd/repositories.dtd
new file mode 100644
index 000000000000..882a77df1eac
--- /dev/null
+++ b/metadata/dtd/repositories.dtd
@@ -0,0 +1,65 @@
+<!-- $Header -->
+<!-- Used by [gentoo]/xml/htdocs/proj/en/overlays/repositories.xml -->
+<!--
+The source copy and history of this file is available from
+http://git.overlays.gentoo.org/gitweb/?p=proj/repositories-xml-format.git
+-->
+<!--
+ Gentoo repositories.xml DTD 1.0
+
+ Modelling by
+ Robert Buchholz <rbu@gentoo.org>
+ Sebastian Pipping <sebastian@pipping.org>
+ Mounir Lamouri <volkmar@gentoo.org>
+ Tiziano Müller <dev-zero@gentoo.org>
+
+ Copyright 1999-2015 Gentoo Foundation
+ Distributed under the terms of the GNU General Public License v2 or later
+-->
+<!ELEMENT repositories (repo)*>
+<!ATTLIST repositories
+ xmlns CDATA #FIXED ''
+ version CDATA #FIXED '1.0'>
+
+<!ELEMENT repo (name,(description)+,(longdescription)*,(homepage)?,(owner)+,(source)+,(feed)*)>
+<!ATTLIST repo
+ xmlns CDATA #FIXED ''
+ priority CDATA #IMPLIED
+ quality (core|stable|testing|experimental|graveyard) #REQUIRED
+ status (official|unofficial) #REQUIRED>
+
+<!ELEMENT name (#PCDATA)>
+<!ATTLIST name
+ xmlns CDATA #FIXED ''>
+
+<!ELEMENT description (#PCDATA)>
+<!ATTLIST description
+ xmlns CDATA #FIXED ''
+ lang CDATA #IMPLIED>
+
+<!ELEMENT longdescription (#PCDATA)>
+<!ATTLIST longdescription
+ xmlns CDATA #FIXED ''
+ lang CDATA #IMPLIED>
+
+<!ELEMENT homepage (#PCDATA)>
+<!ATTLIST homepage
+ xmlns CDATA #FIXED ''>
+
+<!ELEMENT owner (email,(name)?)>
+<!ATTLIST owner
+ xmlns CDATA #FIXED ''
+ type (project|person) #IMPLIED>
+
+<!ELEMENT source (#PCDATA)>
+<!ATTLIST source
+ xmlns CDATA #FIXED ''
+ type (bzr|cvs|darcs|git|mercurial|rsync|svn|tar) #REQUIRED>
+
+<!ELEMENT feed (#PCDATA)>
+<!ATTLIST feed
+ xmlns CDATA #FIXED ''>
+
+<!ELEMENT email (#PCDATA)>
+<!ATTLIST email
+ xmlns CDATA #FIXED ''>
diff --git a/metadata/dtd/userinfo.dtd b/metadata/dtd/userinfo.dtd
new file mode 100644
index 000000000000..8058c7d79295
--- /dev/null
+++ b/metadata/dtd/userinfo.dtd
@@ -0,0 +1,23 @@
+<!ELEMENT userlist (user+)>
+<!ELEMENT user (realname, pgpkey+, alias*, email+, joined*, retired*, status?, roles?, location?) >
+ <!ATTLIST user username ID #REQUIRED>
+ <!ELEMENT realname (firstname,familyname)>
+ <!ATTLIST realname fullname CDATA #IMPLIED>
+ <!ELEMENT firstname (#PCDATA) >
+ <!ELEMENT familyname (#PCDATA) >
+ <!ATTLIST familyname sort CDATA #IMPLIED>
+ <!ELEMENT pgpkey (#PCDATA)>
+ <!ELEMENT alias (#PCDATA)>
+ <!ELEMENT email (#PCDATA)>
+
+ <!-- all dates should be YYYY-MM-DD - eg '2006-11-22' -->
+ <!ELEMENT joined (#PCDATA)>
+ <!ELEMENT retired (#PCDATA)>
+
+ <!ELEMENT status (#PCDATA)>
+ <!ELEMENT roles (#PCDATA)>
+ <!-- Location is the string displayed on the webpage -->
+ <!ELEMENT location (#PCDATA)>
+ <!-- signed decimal numbers. degrees north/east. -->
+ <!ATTLIST location latitude CDATA #IMPLIED
+ longitude CDATA #IMPLIED>