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
|
userlist = element userlist { attlist.userlist, user+ }
attlist.userlist &= empty
user =
element user {
attlist.user,
realname,
pgpkey+,
alias*,
email+,
joined*,
retired*,
status?,
roles?,
location?
}
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
alias = element alias { attlist.alias, text }
attlist.alias &= empty
email = element email { attlist.email, text }
attlist.email &= empty
# all dates should be YYYY-MM-DD - eg '2006-11-22'
joined = element joined { attlist.joined, text }
attlist.joined &= empty
retired = element retired { attlist.retired, text }
attlist.retired &= empty
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 = userlist
|