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