start = CaveSystem
CaveSystem = element caveSystem {
attribute name { text },
element void {
attribute uniqueId { text }, ## not necessarily the standard "IT" guid,
## possibly built up - GB.TC.EG.Lancaster
attribute name { text },
attribute character{
string "rift" |
string "bedding" |
string "tube" |
string "chamber" |
string "aven" |
string "shaft"
},
VoidRef*, ## connected voids
element terminus { ## some kind of system end point
attribute type{
string "entrance" |
string "sump" |
string "choke"
},
##if type is entrance then details can be supplied
Entrance*
}*,
SurveyStation*,
Graphics*,
ReferenceMaterial*
}+,
element survey {
attribute surveyors { text },
attribute date { text },
attribute instrument { text },
attribute correction { text },
((element station {
attribute name { text },
attribute left { xsd:double },
attribute right { xsd:double },
attribute up { xsd:double },
attribute down { xsd:double }
}+,
element traverse {
element leg {
attribute fromStation { text },
attribute toStation { text },
attribute bearing { xsd:double },
attribute distance { xsd:double },
attribute clino { xsd:double }
}+
}+) | SurveyAppData),
ReferenceMaterial*,
IPR?
}*,
element voidGroup {
attribute name { text },
attribute groupPurpose { text },
VoidRef*
}*
}
Entrance = element entrance {
attribute name { text },
element locale {
attribute country { text },
attribute region { text }, ## a system could have entrances in more than one country/region
( (attribute easting { xsd:int }, attribute northing { xsd:int })
| (attribute latitude { xsd:double }, attribute longitude { xsd:double }) )
}
}
VoidRef = element voidRef { ## a reference to another void
attribute uniqueId { text },
text
}
ReferenceMaterial = element referenceMaterial { ## a reference to external information
attribute author { text },
attribute date { text },
IPR?,
text
}
SurveyStation = element surveyStation { attribute station { text } }
SurveyAppData = element surveyAppData{
attribute application { text },
attribute version { text }
}
Graphics = element graphics {
element line {Point, Point }*,
element polyline { Point+ }*,
element polygon { Point+ }*
}
IPR = element ipr {
attribute rightsHolder { text },
attribute date { text },
attribute releaseDate { text }, ## the date at which the author has
## granted rights for release to the public domain
attribute license { text }
}
Point = element point { attribute x {xsd:double}, attribute y {xsd:double} }