summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-11-21 11:35:34 +0100
committerDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-11-21 11:35:34 +0100
commit9380c10504f8770f58ff445932ae468ce89ef63f (patch)
treedfb5c2041afba5212a92c18bcfe0e7fd38052b69
downloadnxml-gentoo-schemas-9380c10504f8770f58ff445932ae468ce89ef63f.tar.gz
nxml-gentoo-schemas-9380c10504f8770f58ff445932ae468ce89ef63f.tar.bz2
nxml-gentoo-schemas-9380c10504f8770f58ff445932ae468ce89ef63f.zip
Import nxml-gentoo-schemas files from version 20070110.
-rw-r--r--book.rnc309
-rw-r--r--gleps.rnc14
-rw-r--r--glsa.rnc297
-rw-r--r--guide.rnc337
-rw-r--r--metadata.rnc91
-rw-r--r--metadoc.rnc293
-rw-r--r--project.rnc203
-rw-r--r--schemas.xml7
-rw-r--r--staffing-needs.rnc22
-rw-r--r--userinfo.rnc80
10 files changed, 1653 insertions, 0 deletions
diff --git a/book.rnc b/book.rnc
new file mode 100644
index 0000000..b69d824
--- /dev/null
+++ b/book.rnc
@@ -0,0 +1,309 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+inline.class =
+ sup | sub | b | brite | c | e | path | img | br | mail | uri | keyval
+pre.class = comment | i | keyword | ident | const | stmt | var | keyval
+block.class =
+ figure | fig | note | impo | warn | pre | p | table | ul | ol | dl
+# VULGAR FRACTION ONE HALF
+
+# VULGAR FRACTION ONE HALF
+
+# VULGAR FRACTION ONE QUARTER
+
+# VULGAR FRACTION THREE QUARTERS
+
+#
+
+#
+
+#
+
+#
+
+# SUPERSCRIPT ONE
+
+# SUPERSCRIPT TWO
+
+# SUPERSCRIPT THREE
+
+# PLUS SIGN
+
+# PLUS-MINUS SIGN
+
+# LESS-THAN SIGN
+
+# EQUALS SIGN
+
+# GREATER-THAN SIGN
+
+# DIVISION SIGN
+
+# MULTIPLICATION SIGN
+
+# CURRENCY SIGN
+
+# POUND SIGN
+
+# DOLLAR SIGN
+
+# CENT SIGN
+
+# YEN SIGN
+
+# NUMBER SIGN
+
+# PERCENT SIGN
+
+# AMPERSAND
+
+# ASTERISK OPERATOR
+
+# COMMERCIAL AT
+
+# LEFT SQUARE BRACKET
+
+# REVERSE SOLIDUS
+
+# RIGHT SQUARE BRACKET
+
+# LEFT CURLY BRACKET
+
+# HORIZONTAL BAR
+
+# VERTICAL LINE
+
+# RIGHT CURLY BRACKET
+
+# MICRO SIGN
+
+# OHM SIGN
+
+# DEGREE SIGN
+
+# MASCULINE ORDINAL INDICATOR
+
+# FEMININE ORDINAL INDICATOR
+
+# SECTION SIGN
+
+# PILCROW SIGN
+
+# MIDDLE DOT
+
+# LEFTWARDS DOUBLE ARROW
+
+# RIGHTWARDS DOUBLE ARROW
+
+# UPWARDS ARROW
+
+# DOWNWARDS ARROW
+
+# COPYRIGHT SIGN
+
+# REG TRADE MARK SIGN
+
+# TRADE MARK SIGN
+
+# BROKEN BAR
+
+# NOT SIGN
+
+#
+
+# EXCLAMATION MARK
+
+# INVERTED EXCLAMATION MARK
+
+# QUOTATION MARK
+
+# APOSTROPHE
+
+# LEFT PARENTHESIS
+
+# RIGHT PARENTHESIS
+
+# COMMA
+
+# LOW LINE
+
+#
+
+# FULL STOP
+
+# SOLIDUS
+
+# COLON
+
+# SEMICOLON
+
+# QUESTION MARK
+
+# INVERTED QUESTION MARK
+
+# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+
+# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+
+#
+
+# RIGHT SINGLE QUOTATION MARK
+
+#
+
+# RIGHT DOUBLE QUOTATION MARK
+
+# NO-BREAK SPACE
+
+# SOFT HYPHEN
+book =
+ element book {
+ book.attlist,
+ title,
+ values?,
+ author+,
+ abstract,
+ license?,
+ version,
+ date,
+ part+
+ }
+book.attlist &=
+ attribute link { text },
+ attribute disclaimer {
+ "articles" | "oldbook" | "draft" | "obsolete"
+ }?,
+ attribute lang { text }?
+title = element title { title.attlist, text }
+title.attlist &= empty
+values = element values { values.attlist, key+ }
+values.attlist &= empty
+key = element key { key.attlist, text }
+key.attlist &= attribute id { text }?
+author = element author { author.attlist, (text | mail)* }
+author.attlist &= attribute title { text }?
+abstract = element abstract { abstract.attlist, text }
+abstract.attlist &= empty
+license = element license { license.attlist, empty }
+license.attlist &= empty
+version = element version { version.attlist, text }
+version.attlist &= empty
+date = element date { date.attlist, text }
+date.attlist &= empty
+part = element part { part.attlist, title, abstract, chapter+ }
+part.attlist &= attribute id { text }?
+chapter =
+ element chapter { chapter.attlist, title, abstract?, \include }
+chapter.attlist &= attribute id { text }?
+section = element section { section.attlist, title, body*, subsection* }
+section.attlist &=
+ attribute id { text }?,
+ attribute test { text }?
+sections =
+ element sections {
+ sections.attlist, abstract?, version, date, section+
+ }
+sections.attlist &= empty
+subsection = element subsection { subsection.attlist, title?, body+ }
+subsection.attlist &=
+ attribute id { text }?,
+ attribute test { text }?
+body = element body { body.attlist, block.class* }
+body.attlist &= attribute test { text }?
+figure = element figure { figure.attlist, empty }
+figure.attlist &=
+ attribute caption { text }?,
+ attribute short { text }?,
+ attribute link { text }
+fig = element fig { fig.attlist, empty }
+fig.attlist &=
+ attribute short { text }?,
+ attribute linkto { text }?,
+ attribute link { text }
+img = element img { img.attlist, empty }
+img.attlist &= attribute src { text }
+br = element br { br.attlist, text }
+br.attlist &= empty
+note = element note { note.attlist, (text | inline.class)* }
+note.attlist &= attribute test { text }?
+impo = element impo { impo.attlist, (text | inline.class)* }
+impo.attlist &= attribute test { text }?
+warn = element warn { warn.attlist, (text | inline.class)* }
+warn.attlist &= attribute test { text }?
+pre = element pre { pre.attlist, (text | pre.class)* }
+pre.attlist &=
+ attribute caption { text },
+ attribute test { text }?
+p = element p { p.attlist, (text | inline.class)* }
+p.attlist &=
+ attribute by { text }?,
+ attribute test { text }?
+table = element table { table.attlist, tcolumn*, tr+ }
+table.attlist &= attribute test { text }?
+tcolumn = element tcolumn { tcolumn.attlist, empty }
+tcolumn.attlist &= attribute width { text }
+tr = element tr { tr.attlist, (th | ti)+ }
+tr.attlist &=
+ attribute id { text }?,
+ attribute test { text }?
+th = element th { th.attlist, (text | inline.class)* }
+th.attlist &=
+ attribute colspan { text }?,
+ attribute rowspan { text }?
+ti = element ti { ti.attlist, (text | inline.class)* }
+ti.attlist &=
+ attribute colspan { text }?,
+ attribute rowspan { text }?,
+ [ a:defaultValue = "left" ]
+ attribute align { "left" | "center" | "right" }?
+dl = element dl { dl.attlist, (dt | dd)+ }
+dl.attlist &= empty
+dt = element dt { dt.attlist, (text | inline.class)* }
+dt.attlist &= empty
+dd = element dd { dd.attlist, (text | inline.class | ul | ol)* }
+dd.attlist &= empty
+ul = element ul { ul.attlist, li+ }
+ul.attlist &= attribute test { text }?
+ol = element ol { ol.attlist, li+ }
+ol.attlist &= attribute test { text }?
+li = element li { li.attlist, (text | inline.class | ul | ol)* }
+li.attlist &= attribute test { text }?
+# STYLE TAGS
+sup = element sup { sup.attlist, (text | inline.class)* }
+sup.attlist &= empty
+sub = element sub { sub.attlist, (text | inline.class)* }
+sub.attlist &= empty
+b = element b { b.attlist, (text | inline.class)* }
+b.attlist &= empty
+brite = element brite { brite.attlist, (text | inline.class)* }
+brite.attlist &= empty
+c = element c { c.attlist, (text | inline.class)* }
+c.attlist &= empty
+e = element e { e.attlist, (text | inline.class)* }
+e.attlist &= empty
+path = element path { path.attlist, (text | inline.class)* }
+path.attlist &= empty
+comment = element comment { comment.attlist, (text | pre.class | b)* }
+comment.attlist &= empty
+i = element i { i.attlist, (text | pre.class)* }
+i.attlist &= empty
+keyword = element keyword { keyword.attlist, (text | pre.class)* }
+keyword.attlist &= empty
+ident = element ident { ident.attlist, (text | pre.class)* }
+ident.attlist &= empty
+const = element const { const.attlist, (text | pre.class)* }
+const.attlist &= empty
+stmt = element stmt { stmt.attlist, (text | pre.class)* }
+stmt.attlist &= empty
+var = element var { var.attlist, (text | pre.class)* }
+var.attlist &= empty
+keyval = element keyval { keyval.attlist, empty }
+keyval.attlist &= attribute id { text }
+# LINK TAGS
+mail = element mail { mail.attlist, text* }
+mail.attlist &= attribute link { text }
+uri = element uri { uri.attlist, (text | img)* }
+uri.attlist &= attribute link { text }?
+\include = element include { include.attlist, text }
+include.attlist &= attribute href { text }
+start = book | sections
diff --git a/gleps.rnc b/gleps.rnc
new file mode 100644
index 0000000..19d90c0
--- /dev/null
+++ b/gleps.rnc
@@ -0,0 +1,14 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+gleps = element gleps { attlist.gleps, glep+ }
+attlist.gleps &= empty
+glep = element glep { attlist.glep, (text | uri)* }
+attlist.glep &=
+ attribute id { text },
+ attribute file { text },
+ [ a:defaultValue = "S" ] attribute type { "S" | "I" }?,
+ [ a:defaultValue = "D" ]
+ attribute status { "D" | "d" | "A" | "F" | "R" | "W" | "M" }?
+uri = element uri { attlist.uri, text }
+attlist.uri &= attribute link { text }
+start = gleps
diff --git a/glsa.rnc b/glsa.rnc
new file mode 100644
index 0000000..e69a360
--- /dev/null
+++ b/glsa.rnc
@@ -0,0 +1,297 @@
+# $Header: /var/cvsroot/gentoo-x86/app-emacs/nxml-gentoo-schemas/files/glsa.rnc,v 1.1 2007/07/25 09:45:50 opfer Exp $
+
+glsa =
+ element glsa {
+ attlist.glsa,
+ title,
+ synopsis,
+ product,
+ announced,
+ revised,
+ bug*,
+ access?,
+ affected,
+ background?,
+ description,
+ impact,
+ workaround,
+ resolution,
+ references,
+ license?,
+ metadata*
+ }
+attlist.glsa &= attribute id { text }
+# Element: title
+# Description: Provides a 4-5 word description about the advisory
+# Example: <title>Buffer overflow vulnerability found in openssl-0.9.5</title>
+title = element title { attlist.title, text }
+attlist.title &= empty
+# 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>
+synopsis = element synopsis { attlist.synopsis, text }
+attlist.synopsis &= empty
+# 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.
+#
+# Example: <product type="ebuild">openssl</product>
+# Example: <product type="infrastructure">rsync mirror</product>
+product = element product { attlist.product, text }
+attlist.product &=
+ attribute type { "ebuild" | "infrastructure" | "informational" }
+# Element: announced
+# Description: Date when the advisory is publicised
+# The format must be "YYYY-mm-dd"
+#
+# Example: <announced>2003-11-20</announced>
+announced = element announced { attlist.announced, text }
+attlist.announced &= empty
+# Element: revised
+# Description: Last revision date of the GLSA
+#
+# Example: <revised>2003-11-20</revised>
+revised = element revised { attlist.revised, text }
+attlist.revised &= empty
+# 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>
+bug = element bug { attlist.bug, text }
+attlist.bug &= empty
+# 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>
+access = element access { attlist.access, text }
+attlist.access &= empty
+# Element: affected
+# Description: Describe what the affected subjects are.
+#
+# If product@type = 'build', the child elements are 'package'
+# If product@type = 'portage', the child elements are 'package'
+# If product@type = 'infrastructure', the child elements are
+# 'service'
+#
+affected = element affected { attlist.affected, (package* | service*) }
+attlist.affected &= empty
+# 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>
+package =
+ element package { attlist.package, (vulnerable | unaffected)* }
+attlist.package &=
+ attribute name { text },
+ attribute auto { "yes" | "no" },
+ attribute arch { text }
+# Element: vulnerable
+# Description: Version of the vulnerable package. Can be a range too
+vulnerable = element vulnerable { attlist.vulnerable, text }
+attlist.vulnerable &=
+ attribute range {
+ "le" | "lt" | "eq" | "gt" | "ge" | "rlt" | "rle" | "rgt" | "rge"
+ }
+# 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>
+unaffected = element unaffected { attlist.unaffected, text }
+attlist.unaffected &=
+ attribute range {
+ "le" | "lt" | "eq" | "gt" | "ge" | "rlt" | "rle" | "rgt" | "rge"
+ },
+ attribute name { text }?
+# 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>
+service = element service { attlist.service, text }
+attlist.service &=
+ attribute type { "rsync" | "web" | "mirror" },
+ attribute fixed { "yes" | "no" }?
+# 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>
+uri = element uri { attlist.uri, text }
+attlist.uri &= attribute link { text }?
+# 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>
+mail = element mail { attlist.mail, text }
+attlist.mail &= attribute link { text }
+# 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>
+p = element p { attlist.p, (text | uri | mail | b | u | i | br)* }
+attlist.p &= empty
+# 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>
+code = element code { attlist.code, text }
+attlist.code &= empty
+# 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
+#
+background = element background { attlist.background, (p | ul | ol)* }
+attlist.background &= empty
+# Element: description
+# Description: Provides a description about the security issue
+# The description element contains only "<p>"s.
+description =
+ element description { attlist.description, (p | ul | ol)* }
+attlist.description &= empty
+# 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", ...
+#
+impact = element impact { attlist.impact, (p | ul | ol)* }
+attlist.impact &= attribute type { text }
+# 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.
+workaround =
+ element workaround { attlist.workaround, (p | code | ul | ol)* }
+attlist.workaround &= empty
+# Element: resolution
+# Description: Provides information about how the security issue can be
+# resolved.
+#
+# The "resolution" element contains only "<p>"s and "<code>"s.
+resolution =
+ element resolution { attlist.resolution, (p | code | ul | ol)* }
+attlist.resolution &= empty
+# Element: references
+# Description: Provides links to resources / references available online.
+#
+# The "reference" element contains only "<uri>"s.
+references = element references { attlist.references, uri* }
+attlist.references &= empty
+# Element: ul
+# Description: Add an unnumbered listing; can only contain <li>'s
+ul = element ul { attlist.ul, li* }
+attlist.ul &= empty
+# Element: ol
+# Description: Add a numbered listing; can only contain <li>'s
+ol = element ol { attlist.ol, li* }
+attlist.ol &= empty
+# Element: li
+# Description: Element of a listing
+#
+# Example: <ul>
+# <li>This is element one</li>
+# <li>This is a second element</li>
+# </ul>
+li = element li { attlist.li, text }
+attlist.li &= empty
+# Element: b
+# Description: Bold text
+#
+# Example: <b>this is bold</b>
+b = element b { attlist.b, text }
+attlist.b &= empty
+# Element: u
+# Description: Underlined text
+#
+# Example: <u>this is underlined</u>
+u = element u { attlist.u, text }
+attlist.u &= empty
+# Element: i
+# Description: Input text (blue)
+#
+# Example: The user has to type in <i>ls</i> to see.
+i = element i { attlist.i, text }
+attlist.i &= empty
+# Element: br
+# Description: hard line break
+#
+# Example: And then: <br/>
+# KABLAM!
+br = element br { attlist.br, text }
+attlist.br &= empty
+# Element: license
+# Description: Add license information
+#
+# Example: <license/>
+license = element license { attlist.license, text }
+attlist.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.
+metadata = element metadata { attlist.metadata, (text | metadata)* }
+attlist.metadata &=
+ attribute tag { text },
+ attribute revision { text }?,
+ attribute author { text }?,
+ attribute timestamp { text }?
+start = glsa
diff --git a/guide.rnc b/guide.rnc
new file mode 100644
index 0000000..c8c84c1
--- /dev/null
+++ b/guide.rnc
@@ -0,0 +1,337 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+inline.class =
+ sup | sub | b | brite | c | e | path | img | br | mail | uri
+pre.class = comment | i | keyword | ident | const | stmt | var
+block.class =
+ figure | fig | note | impo | warn | pre | p | table | ul | ol | dl
+# VULGAR FRACTION ONE HALF
+
+# VULGAR FRACTION ONE HALF
+
+# VULGAR FRACTION ONE QUARTER
+
+# VULGAR FRACTION THREE QUARTERS
+
+#
+
+#
+
+#
+
+#
+
+# SUPERSCRIPT ONE
+
+# SUPERSCRIPT TWO
+
+# SUPERSCRIPT THREE
+
+# PLUS SIGN
+
+# PLUS-MINUS SIGN
+
+# LESS-THAN SIGN
+
+# EQUALS SIGN
+
+# GREATER-THAN SIGN
+
+# DIVISION SIGN
+
+# MULTIPLICATION SIGN
+
+# CURRENCY SIGN
+
+# POUND SIGN
+
+# DOLLAR SIGN
+
+# CENT SIGN
+
+# YEN SIGN
+
+# NUMBER SIGN
+
+# PERCENT SIGN
+
+# AMPERSAND
+
+# ASTERISK OPERATOR
+
+# COMMERCIAL AT
+
+# LEFT SQUARE BRACKET
+
+# REVERSE SOLIDUS
+
+# RIGHT SQUARE BRACKET
+
+# LEFT CURLY BRACKET
+
+# HORIZONTAL BAR
+
+# VERTICAL LINE
+
+# RIGHT CURLY BRACKET
+
+# MICRO SIGN
+
+# OHM SIGN
+
+# DEGREE SIGN
+
+# MASCULINE ORDINAL INDICATOR
+
+# FEMININE ORDINAL INDICATOR
+
+# SECTION SIGN
+
+# PILCROW SIGN
+
+# MIDDLE DOT
+
+# LEFTWARDS DOUBLE ARROW
+
+# RIGHTWARDS DOUBLE ARROW
+
+# UPWARDS ARROW
+
+# DOWNWARDS ARROW
+
+# COPYRIGHT SIGN
+
+# REG TRADE MARK SIGN
+
+# TRADE MARK SIGN
+
+# BROKEN BAR
+
+# NOT SIGN
+
+#
+
+# EXCLAMATION MARK
+
+# INVERTED EXCLAMATION MARK
+
+# QUOTATION MARK
+
+# APOSTROPHE
+
+# LEFT PARENTHESIS
+
+# RIGHT PARENTHESIS
+
+# COMMA
+
+# LOW LINE
+
+#
+
+# FULL STOP
+
+# SOLIDUS
+
+# COLON
+
+# SEMICOLON
+
+# QUESTION MARK
+
+# INVERTED QUESTION MARK
+
+# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+
+# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+
+#
+
+# RIGHT SINGLE QUOTATION MARK
+
+#
+
+# RIGHT DOUBLE QUOTATION MARK
+
+# NO-BREAK SPACE
+
+# SOFT HYPHEN
+
+# CIRCONFLEXEd a
+
+# UMLAUTED e
+
+# ACUTEd e
+
+# CIRCONFLEXEd i
+
+# CIRCONFLEXEd u
+
+# GRAVEd u
+mainpage =
+ element mainpage {
+ mainpage.attlist,
+ title,
+ author+,
+ abstract?,
+ license?,
+ version,
+ date?,
+ (devmap? | newsitems? | chapter+)
+ }
+mainpage.attlist &= attribute lang { text }?
+newsitems = element newsitems { newsitems.attlist, empty }
+newsitems.attlist &= empty
+devmap = element devmap { devmap.attlist, empty }
+devmap.attlist &= empty
+guide =
+ element guide {
+ guide.attlist,
+ title,
+ subtitle?,
+ author+,
+ abstract,
+ summary?,
+ license?,
+ version,
+ date,
+ chapter+
+ }
+guide.attlist &=
+ attribute link { text }?,
+ attribute type { text }?,
+ attribute disclaimer {
+ "articles" | "oldbook" | "draft" | "obsolete"
+ }?,
+ attribute redirect { text }?,
+ attribute lang { text }?
+news =
+ element news { news.attlist, poster, date, title, summary?, body }
+news.attlist &=
+ [ a:defaultValue = "no" ] attribute gentoo { "yes" | "no" }?,
+ attribute category {
+ "gentoo" | "main" | "ibm" | "linux" | "moo" | "nvidia"
+ }
+title = element title { title.attlist, text* }
+title.attlist &= empty
+subtitle = element subtitle { subtitle.attlist, text }
+subtitle.attlist &= empty
+poster = element poster { poster.attlist, text* }
+poster.attlist &= empty
+author = element author { author.attlist, (text | mail)* }
+author.attlist &= attribute title { text }?
+abstract = element abstract { abstract.attlist, text }
+abstract.attlist &= empty
+summary = element summary { summary.attlist, text }
+summary.attlist &= empty
+license = element license { license.attlist, empty }
+license.attlist &= empty
+glepindex = element glepindex { glepindex.attlist, empty }
+glepindex.attlist &=
+ attribute status { text }?,
+ [ a:defaultValue = "/proj/en/glep/gleps.xml" ]
+ attribute index { text }?
+glsaindex = element glsaindex { glsaindex.attlist, empty }
+glsaindex.attlist &= empty
+glsa-latest = element glsa-latest { glsa-latest.attlist, empty }
+glsa-latest.attlist &= empty
+version = element version { version.attlist, text }
+version.attlist &= empty
+date = element date { date.attlist, text }
+date.attlist &= empty
+chapter = element chapter { chapter.attlist, title, section+ }
+chapter.attlist &= attribute id { text }?
+section = element section { section.attlist, title?, body }
+section.attlist &= attribute id { text }?
+body =
+ element body {
+ body.attlist, (block.class | glsa-latest | glsaindex | glepindex)*
+ }
+body.attlist &= empty
+figure = element figure { figure.attlist, empty }
+figure.attlist &=
+ attribute caption { text }?,
+ attribute short { text }?,
+ attribute link { text }
+fig = element fig { fig.attlist, empty }
+fig.attlist &=
+ attribute short { text }?,
+ attribute linkto { text }?,
+ attribute link { text }
+img = element img { img.attlist, empty }
+img.attlist &= attribute src { text }
+br = element br { br.attlist, text }
+br.attlist &= empty
+note = element note { note.attlist, (text | inline.class)* }
+note.attlist &= empty
+impo = element impo { impo.attlist, (text | inline.class)* }
+impo.attlist &= empty
+warn = element warn { warn.attlist, (text | inline.class)* }
+warn.attlist &= empty
+pre = element pre { pre.attlist, (text | pre.class)* }
+pre.attlist &= attribute caption { text }
+p = element p { p.attlist, (text | inline.class)* }
+p.attlist &= attribute by { text }?
+table = element table { table.attlist, tcolumn*, tr+ }
+table.attlist &= empty
+tcolumn = element tcolumn { tcolumn.attlist, empty }
+tcolumn.attlist &= attribute width { text }
+tr = element tr { tr.attlist, (th | ti)+ }
+tr.attlist &= attribute id { text }?
+th = element th { th.attlist, (text | inline.class)* }
+th.attlist &=
+ attribute colspan { text }?,
+ attribute rowspan { text }?
+ti = element ti { ti.attlist, (text | inline.class | block.class)* }
+ti.attlist &=
+ attribute colspan { text }?,
+ attribute rowspan { text }?,
+ [ a:defaultValue = "left" ]
+ attribute align { "left" | "center" | "right" }?
+dl = element dl { dl.attlist, (dt | dd)+ }
+dl.attlist &= empty
+dt = element dt { dt.attlist, (text | inline.class)* }
+dt.attlist &= empty
+dd = element dd { dd.attlist, (text | inline.class | ul | ol)* }
+dd.attlist &= empty
+ul = element ul { ul.attlist, li+ }
+ul.attlist &= empty
+ol = element ol { ol.attlist, li+ }
+ol.attlist &= empty
+li = element li { li.attlist, (text | inline.class | ul | ol)* }
+li.attlist &= empty
+# STYLE TAGS
+sup = element sup { sup.attlist, (text | inline.class)* }
+sup.attlist &= empty
+sub = element sub { sub.attlist, (text | inline.class)* }
+sub.attlist &= empty
+b = element b { b.attlist, (text | inline.class)* }
+b.attlist &= empty
+brite = element brite { brite.attlist, (text | inline.class)* }
+brite.attlist &= empty
+c = element c { c.attlist, (text | inline.class)* }
+c.attlist &= empty
+e = element e { e.attlist, (text | inline.class)* }
+e.attlist &= empty
+path = element path { path.attlist, (text | inline.class)* }
+path.attlist &= empty
+comment = element comment { comment.attlist, (text | pre.class | b)* }
+comment.attlist &= empty
+i = element i { i.attlist, (text | pre.class)* }
+i.attlist &= empty
+keyword = element keyword { keyword.attlist, (text | pre.class)* }
+keyword.attlist &= empty
+ident = element ident { ident.attlist, (text | pre.class)* }
+ident.attlist &= empty
+const = element const { const.attlist, (text | pre.class)* }
+const.attlist &= empty
+stmt = element stmt { stmt.attlist, (text | pre.class)* }
+stmt.attlist &= empty
+var = element var { var.attlist, (text | pre.class)* }
+var.attlist &= empty
+# LINK TAGS
+mail = element mail { mail.attlist, text* }
+mail.attlist &= attribute link { text }?
+uri = element uri { uri.attlist, (text | img)* }
+uri.attlist &= attribute link { text }?
+start = news | mainpage | guide
diff --git a/metadata.rnc b/metadata.rnc
new file mode 100644
index 0000000..6d49c86
--- /dev/null
+++ b/metadata.rnc
@@ -0,0 +1,91 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+packages = element packages { attlist.packages, pkgmetadata* }
+attlist.packages &= empty
+# Metadata for a category
+catmetadata =
+ element catmetadata { attlist.catmetadata, longdescription* }
+attlist.catmetadata &=
+ [ a:defaultValue = "" ] attribute pkgname { text }?
+# Metadata for a package
+pkgmetadata =
+ element pkgmetadata {
+ attlist.pkgmetadata, (herd | maintainer | longdescription)*
+ }
+attlist.pkgmetadata &=
+ [ a:defaultValue = "" ] attribute pkgname { text }?
+# One tag for each herd this package is assigned to.
+herd = element herd { attlist.herd, text }
+# One tag for each maintainer of a package, multiple allowed
+maintainer =
+ element maintainer {
+ attlist.maintainer, email, (description | name)*
+ }
+# A long description of the package in freetext
+longdescription =
+ element longdescription { attlist.longdescription, text }
+# The changelog of the package
+changelog = element changelog { attlist.changelog, change* }
+attlist.changelog &= empty
+# The changelog contains various "changes"
+change =
+ element change {
+ attlist.change,
+ date,
+ (developer | version | description | file | contributor | bug)*
+ }
+attlist.change &= empty
+date = element date { attlist.date, text }
+attlist.date &= empty
+# The date of the change, in "YYYY-MM-DD" format
+developer = element developer { attlist.developer, name?, email }
+attlist.developer &= empty
+# The developer that made the change. The email is required, name
+# is optional
+version = element version { attlist.version, text }
+attlist.version &= empty
+# version of the packages involved (one tag per version)
+file = element file { attlist.file, text }
+attlist.file &= empty
+# one tag per file touched
+contributor = element contributor { attlist.contributor, name?, email? }
+attlist.contributor &= empty
+# A reference to a user that helped in causing this change.
+# There should at least be a name or email address included.
+# Email is preferred
+bug = element bug { attlist.bug, text }
+attlist.bug &= empty
+# bug-id of a bug fixed by this change, multiple allowed. The
+# format of this is a number or alias for a bug. NOT including a
+# # character
+
+# Common attributes
+
+# the lang attribute, specifies the language of this tag. 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 "C" or "en", which is equivalent
+attlist.description &= [ a:defaultValue = "C" ] attribute lang { text }?
+attlist.longdescription &=
+ [ a:defaultValue = "C" ] attribute lang { text }?
+# 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. There is one special
+# value though: restrict="*". A tag that specifies this only applies if
+# there are no other tags that apply.
+#
+# For required tags, there must be either an unrestricted version, or a
+# version that is default restricted.
+attlist.herd &= attribute restrict { text }?
+attlist.maintainer &= attribute restrict { text }?
+attlist.longdescription &= attribute restrict { text }?
+# standard parts
+email = element email { attlist.email, text }
+attlist.email &= empty
+# an email address
+name = element name { attlist.name, text }
+attlist.name &= empty
+# the name of a person (maintainer, contributor)
+description = element description { attlist.description, text }
+start = changelog | packages | catmetadata
+# A description of a maintainer or change
diff --git a/metadoc.rnc b/metadoc.rnc
new file mode 100644
index 0000000..3bae1c3
--- /dev/null
+++ b/metadoc.rnc
@@ -0,0 +1,293 @@
+metadoc =
+ element metadoc {
+ metadoc.attlist, version, members, categories, files, docs
+ }
+metadoc.attlist &=
+ attribute lang { text },
+ attribute parent { text }?
+version = element version { version.attlist, text }
+version.attlist &= empty
+members = element members { members.attlist, lead*, member* }
+members.attlist &= empty
+lead = element lead { lead.attlist, text* }
+lead.attlist &= empty
+# <lead>nickname</lead>
+member = element member { member.attlist, text* }
+member.attlist &=
+ attribute mail { text }?,
+ attribute fullname { text }?
+categories = element categories { categories.attlist, cat* }
+categories.attlist &= empty
+cat = element cat { cat.attlist, text* }
+cat.attlist &=
+ attribute id { text },
+ attribute parent { text }?
+files = element files { files.attlist, file* }
+files.attlist &= empty
+file = element file { file.attlist, text* }
+file.attlist &= attribute id { text }
+docs = element docs { docs.attlist, doc* }
+docs.attlist &= empty
+doc = element doc { doc.attlist, memberof*, fileid, bugs? }
+doc.attlist &= attribute id { text }
+memberof = element memberof { memberof.attlist, text* }
+memberof.attlist &= empty
+fileid = element fileid { fileid.attlist, text* }
+fileid.attlist &=
+ attribute vpart { text }?,
+ attribute vchap { text }?
+bugs = element bugs { bugs.attlist, bug* }
+bugs.attlist &= empty
+bug = element bug { bug.attlist, text* }
+bug.attlist &=
+ attribute stopper { "yes" | "no" }?,
+ attribute arch { text }?
+dynamic =
+ element dynamic {
+ dynamic.attlist,
+ version?,
+ title,
+ intro?,
+ (listing | catid* | overview)
+ }
+dynamic.attlist &= attribute metadoc { text }
+title = element title { title.attlist, text* }
+title.attlist &= empty
+intro = element intro { intro.attlist, section* }
+intro.attlist &= empty
+# Section stuff copy/pasted from guide.dtd
+listing = element listing { listing.attlist, \list* }
+listing.attlist &= empty
+\list = element list { list.attlist, text* }
+list.attlist &= empty
+catid = element catid { catid.attlist, text* }
+catid.attlist &= empty
+overview = element overview { overview.attlist, empty }
+overview.attlist &= empty
+inline.class = b | brite | c | e | path | img | br | mail | uri
+pre.class = comment | i
+block.class =
+ box | figure | fig | note | impo | warn | pre | p | table | ul | ol
+section = element section { section.attlist, title?, body }
+section.attlist &= attribute id { text }?
+body =
+ element body {
+ body.attlist, (block.class | glsa-latest | glsaindex)*
+ }
+body.attlist &= empty
+figure = element figure { figure.attlist, empty }
+figure.attlist &=
+ attribute caption { text }?,
+ attribute short { text }?,
+ attribute link { text }
+fig = element fig { fig.attlist, empty }
+fig.attlist &=
+ attribute short { text }?,
+ attribute linkto { text }?,
+ attribute link { text }
+img = element img { img.attlist, empty }
+img.attlist &= attribute src { text }
+br = element br { br.attlist, text }
+br.attlist &= empty
+note = element note { note.attlist, (text | inline.class)* }
+note.attlist &= empty
+impo = element impo { impo.attlist, (text | inline.class)* }
+impo.attlist &= empty
+warn = element warn { warn.attlist, (text | inline.class)* }
+warn.attlist &= empty
+pre = element pre { pre.attlist, (text | pre.class)* }
+pre.attlist &= attribute caption { text }
+p = element p { p.attlist, (text | inline.class)* }
+p.attlist &= empty
+table = element table { table.attlist, tcolumn*, tr+ }
+table.attlist &= empty
+tcolumn = element tcolumn { tcolumn.attlist, empty }
+tcolumn.attlist &= attribute width { text }
+tr = element tr { tr.attlist, (th | ti)+ }
+tr.attlist &= empty
+th = element th { th.attlist, (text | inline.class)* }
+th.attlist &= empty
+ti = element ti { ti.attlist, (text | inline.class | block.class)* }
+ti.attlist &= empty
+ul = element ul { ul.attlist, li+ }
+ul.attlist &= empty
+ol = element ol { ol.attlist, li+ }
+ol.attlist &= empty
+li = element li { li.attlist, (text | inline.class | ul | ol)* }
+li.attlist &= empty
+# STYLE TAGS
+b = element b { b.attlist, (text | inline.class)* }
+b.attlist &= empty
+brite = element brite { brite.attlist, (text | inline.class)* }
+brite.attlist &= empty
+box = element box { box.attlist, (text | inline.class)* }
+box.attlist &= empty
+c = element c { c.attlist, (text | inline.class)* }
+c.attlist &= empty
+comment = element comment { comment.attlist, (text | pre.class)* }
+comment.attlist &= empty
+e = element e { e.attlist, (text | inline.class)* }
+e.attlist &= empty
+i = element i { i.attlist, (text | pre.class)* }
+i.attlist &= empty
+path = element path { path.attlist, (text | inline.class)* }
+path.attlist &= empty
+# LINK TAGS
+mail = element mail { mail.attlist, text* }
+mail.attlist &= attribute link { text }?
+uri = element uri { uri.attlist, text* }
+uri.attlist &= attribute link { text }?
+glsa-latest |= notAllowed
+glsaindex |= notAllowed
+start = dynamic | metadoc
+# VULGAR FRACTION ONE HALF
+
+# VULGAR FRACTION ONE HALF
+
+# VULGAR FRACTION ONE QUARTER
+
+# VULGAR FRACTION THREE QUARTERS
+
+#
+
+#
+
+#
+
+#
+
+# SUPERSCRIPT ONE
+
+# SUPERSCRIPT TWO
+
+# SUPERSCRIPT THREE
+
+# PLUS SIGN
+
+# PLUS-MINUS SIGN
+
+# LESS-THAN SIGN
+
+# EQUALS SIGN
+
+# GREATER-THAN SIGN
+
+# DIVISION SIGN
+
+# MULTIPLICATION SIGN
+
+# CURRENCY SIGN
+
+# POUND SIGN
+
+# DOLLAR SIGN
+
+# CENT SIGN
+
+# YEN SIGN
+
+# NUMBER SIGN
+
+# PERCENT SIGN
+
+# AMPERSAND
+
+# ASTERISK OPERATOR
+
+# COMMERCIAL AT
+
+# LEFT SQUARE BRACKET
+
+# REVERSE SOLIDUS
+
+# RIGHT SQUARE BRACKET
+
+# LEFT CURLY BRACKET
+
+# HORIZONTAL BAR
+
+# VERTICAL LINE
+
+# RIGHT CURLY BRACKET
+
+# MICRO SIGN
+
+# OHM SIGN
+
+# DEGREE SIGN
+
+# MASCULINE ORDINAL INDICATOR
+
+# FEMININE ORDINAL INDICATOR
+
+# SECTION SIGN
+
+# PILCROW SIGN
+
+# MIDDLE DOT
+
+# LEFTWARDS DOUBLE ARROW
+
+# RIGHTWARDS DOUBLE ARROW
+
+# UPWARDS ARROW
+
+# DOWNWARDS ARROW
+
+# COPYRIGHT SIGN
+
+# REG TRADE MARK SIGN
+
+# TRADE MARK SIGN
+
+# BROKEN BAR
+
+# NOT SIGN
+
+#
+
+# EXCLAMATION MARK
+
+# INVERTED EXCLAMATION MARK
+
+# QUOTATION MARK
+
+# APOSTROPHE
+
+# LEFT PARENTHESIS
+
+# RIGHT PARENTHESIS
+
+# COMMA
+
+# LOW LINE
+
+#
+
+# FULL STOP
+
+# SOLIDUS
+
+# COLON
+
+# SEMICOLON
+
+# QUESTION MARK
+
+# INVERTED QUESTION MARK
+
+# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+
+# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+
+#
+
+# RIGHT SINGLE QUOTATION MARK
+
+#
+
+# RIGHT DOUBLE QUOTATION MARK
+
+# NO-BREAK SPACE
+
+# SOFT HYPHEN
diff --git a/project.rnc b/project.rnc
new file mode 100644
index 0000000..b48108c
--- /dev/null
+++ b/project.rnc
@@ -0,0 +1,203 @@
+# import certain parts of guide.dtd
+
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+style.class = b | box | brite | c | comment | e | i | path
+link.class = uri | mail
+logic.class =
+ figure
+ | fig
+ | img
+ | br
+ | note
+ | impo
+ | warn
+ | pre
+ | p
+ | table
+ | ul
+ | ol
+ | glepindex
+all.class = logic.class | style.class | link.class
+# allow for custom sections
+title = element title { title.attlist, (text | style.class)* }
+title.attlist &= empty
+chapter = element chapter { chapter.attlist, title, section+ }
+chapter.attlist &= empty
+section = element section { section.attlist, title?, body }
+section.attlist &= empty
+body = element body { body.attlist, all.class* }
+body.attlist &= empty
+# allow for layout etc. in some cases so define the classes
+figure = element figure { figure.attlist, empty }
+figure.attlist &=
+ attribute caption { text }?,
+ attribute short { text }?,
+ attribute link { text }
+fig = element fig { fig.attlist, empty }
+fig.attlist &=
+ attribute short { text }?,
+ attribute linkto { text }?,
+ attribute link { text }
+img = element img { img.attlist, empty }
+img.attlist &= attribute src { text }
+br = element br { br.attlist, text }
+br.attlist &= empty
+note = element note { note.attlist, (text | all.class)* }
+note.attlist &= empty
+impo = element impo { impo.attlist, (text | all.class)* }
+impo.attlist &= empty
+warn = element warn { warn.attlist, (text | all.class)* }
+warn.attlist &= empty
+pre = element pre { pre.attlist, (text | all.class)* }
+pre.attlist &= attribute caption { text }
+p = element p { p.attlist, (text | all.class)* }
+p.attlist &= empty
+table = element table { table.attlist, tcolumn*, tr+ }
+table.attlist &= empty
+tcolumn = element tcolumn { tcolumn.attlist, empty }
+tcolumn.attlist &= attribute width { text }
+tr = element tr { tr.attlist, (th | ti)+ }
+tr.attlist &= empty
+th = element th { th.attlist, (text | all.class)* }
+th.attlist &= empty
+ti = element ti { ti.attlist, (text | all.class)* }
+ti.attlist &= empty
+ul = element ul { ul.attlist, li+ }
+ul.attlist &= empty
+ol = element ol { ol.attlist, li+ }
+ol.attlist &= empty
+li = element li { li.attlist, (text | all.class)* }
+li.attlist &= empty
+b = element b { b.attlist, (text | style.class | link.class)* }
+b.attlist &= empty
+brite =
+ element brite { brite.attlist, (text | style.class | link.class)* }
+brite.attlist &= empty
+c = element c { c.attlist, (text | style.class | link.class)* }
+c.attlist &= empty
+comment =
+ element comment {
+ comment.attlist, (text | style.class | link.class)*
+ }
+comment.attlist &= empty
+e = element e { e.attlist, (text | style.class | link.class)* }
+e.attlist &= empty
+i = element i { i.attlist, (text | style.class | link.class)* }
+i.attlist &= empty
+path = element path { path.attlist, (text | style.class | link.class)* }
+path.attlist &= empty
+mail = element mail { mail.attlist, (text | style.class)* }
+mail.attlist &= attribute link { text }
+uri = element uri { uri.attlist, (text | style.class)* }
+uri.attlist &= attribute link { text }?
+glepindex = element glepindex { glepindex.attlist, empty }
+glepindex.attlist &=
+ attribute status { text }?,
+ [ a:defaultValue = "/proj/en/glep/gleps.xml" ]
+ attribute index { text }?
+project =
+ element project {
+ project.attlist,
+ name,
+ longname?,
+ date?,
+ author*,
+ description,
+ longdescription,
+ goals?,
+ (dev
+ | resource
+ | subproject
+ | plannedproject
+ | extraproject
+ | extrachapter
+ | herd
+ | task
+ | author)*
+ }
+project.attlist &= empty
+name = element name { name.attlist, text }
+name.attlist &= empty
+longname = element longname { longname.attlist, text }
+longname.attlist &= empty
+date = element date { date.attlist, text }
+date.attlist &= empty
+author = element author { author.attlist, (text | mail)* }
+author.attlist &= attribute title { text }?
+description = element description { description.attlist, text }
+description.attlist &= empty
+longdescription =
+ element longdescription {
+ longdescription.attlist, (text | all.class)*
+ }
+longdescription.attlist &= empty
+goals = element goals { goals.attlist, (text | all.class)* }
+goals.attlist &= empty
+dev = element dev { dev.attlist, text }
+dev.attlist &=
+ [ a:defaultValue = "member" ] attribute role { text }?,
+ attribute description { text }?
+resource = element resource { resource.attlist, text }
+resource.attlist &= attribute link { text }?
+subproject = element subproject { subproject.attlist, empty }
+subproject.attlist &=
+ attribute ref { text },
+ [ a:defaultValue = "no" ] attribute inheritmembers { "yes" | "no" }?,
+ [ a:defaultValue = "no" ] attribute inheritresources { "yes" | "no" }?
+extraproject =
+ element extraproject { extraproject.attlist, (text | all.class)* }
+extraproject.attlist &=
+ attribute name { text },
+ attribute lead { text }?,
+ attribute link { text }?
+plannedproject =
+ element plannedproject { plannedproject.attlist, (text | all.class)* }
+plannedproject.attlist &= attribute name { text }
+extrachapter =
+ element extrachapter { extrachapter.attlist, title, section+ }
+extrachapter.attlist &=
+ [ a:defaultValue = "bottom" ]
+ attribute position {
+ "top"
+ | "bottom"
+ | "subproject"
+ | "goals"
+ | "resources"
+ | "devs"
+ | "tasks"
+ }?
+herd = element herd { herd.attlist, empty }
+herd.attlist &= attribute name { text }
+# TASK tags declaration
+task =
+ element task {
+ task.attlist,
+ name,
+ description,
+ longdescription?,
+ startdate,
+ enddate?,
+ (reference | milestone | dev | depends)*
+ }
+task.attlist &=
+ attribute id { xsd:ID }?,
+ attribute lead { text },
+ [ a:defaultValue = "no" ] attribute finished { "yes" | "no" }?
+startdate = element startdate { startdate.attlist, text }
+startdate.attlist &= empty
+enddate = element enddate { enddate.attlist, text }
+enddate.attlist &= empty
+reference =
+ element reference { reference.attlist, (text | bug | link.class)* }
+reference.attlist &= empty
+bug = element bug { bug.attlist, text }
+bug.attlist &= attribute no { text }
+milestone =
+ element milestone { milestone.attlist, enddate, description }
+milestone.attlist &=
+ [ a:defaultValue = "no" ] attribute finished { "yes" | "no" }?
+depends = element depends { depends.attlist, text }
+depends.attlist &= attribute ref { xsd:IDREF }
+box |= notAllowed
+start = project | chapter
diff --git a/schemas.xml b/schemas.xml
new file mode 100644
index 0000000..2888db9
--- /dev/null
+++ b/schemas.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
+ <documentElement localName="guide" uri="guide.rnc" />
+ <documentElement localName="project" uri="project.rnc" />
+ <documentElement localName="glsa" uri="glsa.rnc" />
+ <documentElement localName="pkgmetadata" uri="metadata.rnc" />
+</locatingRules> \ No newline at end of file
diff --git a/staffing-needs.rnc b/staffing-needs.rnc
new file mode 100644
index 0000000..bb62742
--- /dev/null
+++ b/staffing-needs.rnc
@@ -0,0 +1,22 @@
+staffingNeeds = element staffingNeeds { attlist.staffingNeeds, needed* }
+attlist.staffingNeeds &= empty
+needed =
+ element needed { attlist.needed, summary, contact, description }
+attlist.needed &= empty
+summary = element summary { attlist.summary, text }
+# If unset, treated as '0'.
+attlist.summary &= attribute priority { text }?
+# Should be in RFC-2822.
+attlist.summary &= attribute dateRequested { text }
+contact = element contact { attlist.contact, text }
+# Makes a link called "Joe Bloggs", for example rather than jbloggs@...
+attlist.contact &= attribute name { text }?
+# If set to not "" then the string is formatted to "the ... herd"
+attlist.contact &= attribute herd { text }?
+# If set to not "" then the string is formatted to "the ... team"
+attlist.contact &= attribute team { text }?
+description = element description { attlist.description, (text | uri)* }
+attlist.description &= empty
+uri = element uri { attlist.uri, text }
+attlist.uri &= attribute link { text }?
+start = staffingNeeds
diff --git a/userinfo.rnc b/userinfo.rnc
new file mode 100644
index 0000000..75968df
--- /dev/null
+++ b/userinfo.rnc
@@ -0,0 +1,80 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+userlist = element userlist { attlist.userlist, user* }
+attlist.userlist &= empty
+user =
+ element user {
+ attlist.user,
+ realname,
+ pgpkey,
+ email+,
+ joined,
+ birthday,
+ status?,
+ roles?,
+ location?,
+ address*
+ }
+attlist.user &= attribute username { xsd:ID }
+realname = element realname { attlist.realname, firstname, familyname }
+attlist.realname &= attribute fullname { text }?
+firstname = element firstname { attlist.firstname, text }
+attlist.firstname &= empty
+familyname = element familyname { attlist.familyname, text }
+attlist.familyname &= attribute sort { text }?
+pgpkey = element pgpkey { attlist.pgpkey, text }
+attlist.pgpkey &= empty
+pgpfingerprint = element pgpfingerprint { attlist.pgpfingerprint, text }
+attlist.pgpfingerprint &= empty
+email = element email { attlist.email, text }
+attlist.email &=
+ attribute role { "primary" | "alias" | "secondary" | "gentoo" }
+# all dates should be DD MMMM YYYY - eg '15 October 2006'
+joined = element joined { attlist.joined, text }
+attlist.joined &= empty
+retired = element retired { attlist.retired, text }
+attlist.retired &= empty
+birthday = element birthday { attlist.birthday, text }
+attlist.birthday &= empty
+address =
+ element address {
+ attlist.address,
+ street,
+ number,
+ suffix?,
+ zipcode,
+ city,
+ state?,
+ country,
+ formatted?
+ }
+attlist.address &=
+ attribute role { "main" | "work" | "secondary" | "home" }
+street = element street { attlist.street, text }
+attlist.street &= empty
+number = element number { attlist.number, text }
+attlist.number &= empty
+suffix = element suffix { attlist.suffix, text }
+attlist.suffix &= empty
+zipcode = element zipcode { attlist.zipcode, text }
+attlist.zipcode &= empty
+city = element city { attlist.city, text }
+attlist.city &= empty
+state = element state { attlist.state, text }
+attlist.state &= empty
+country = element country { attlist.country, text }
+attlist.country &= attribute fullname { text }?
+formatted = element formatted { attlist.formatted, text }
+attlist.formatted &=
+ [ a:defaultValue = "preserve" ] attribute xml:space { "preserve" }?
+status = element status { attlist.status, text }
+attlist.status &= empty
+roles = element roles { attlist.roles, text }
+attlist.roles &= empty
+# Location is the string displayed on the webpage
+location = element location { attlist.location, text }
+# signed decimal numbers. degrees north/east.
+attlist.location &=
+ attribute latitude { text }?,
+ attribute longitude { text }?
+start = retired | userlist | pgpfingerprint