1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
include "common.rnc"
body.class = block.class | glepindex
body = element body { body.attlist, body.class* }
project =
element project {
project.attlist,
name,
longname?,
date?,
author*,
description,
longdescription,
goals?,
recruitment?,
(dev
| resource
| subproject
| plannedproject
| extraproject
| extrachapter
| herd
| task
| author)*
}
project.attlist &=
attribute disclaimer { "draft" | "obsolete" }?,
attribute redirect { text }?
name = element name { name.attlist, text }
name.attlist &= empty
longname = element longname { longname.attlist, text }
longname.attlist &= empty
description = element description { description.attlist, text }
description.attlist &= empty
longdescription =
element longdescription { longdescription.attlist, body.class* }
longdescription.attlist &= empty
goals = element goals { goals.attlist, body.class* }
goals.attlist &= empty
recruitment = element recruitment { recruitment.attlist, job+ }
recruitment.attlist &= empty
job =
element job { job.attlist, summary, details, requirements, contact+ }
job.attlist &= empty
details = element details { details.attlist, (text | inline.class)* }
details.attlist &= empty
requirements =
element requirements { requirements.attlist, (text | inline.class)* }
requirements.attlist &= empty
contact = element contact { contact.attlist, text }
contact.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 | inline.class)* }
extraproject.attlist &=
attribute name { text },
attribute lead { text }?,
attribute link { text }?
plannedproject =
element plannedproject {
plannedproject.attlist, (text | inline.class)*
}
plannedproject.attlist &= attribute name { text }
extrachapter =
element extrachapter { extrachapter.attlist, title, section+ }
section = element section { section.attlist, title?, body+ }
extrachapter.attlist &=
[ a:defaultValue = "bottom" ]
attribute position {
"top"
| "bottom"
| "subproject"
| "goals"
| "resources"
| "devs"
| "recruitment"
| "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 | mail | uri)* }
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 }
chapter |= notAllowed
start = project | license | values | included | \include | abstract
|