<xsd:element name="Latitude">
<xsd:annotation>
<xsd:documentation>[N|S]degree.minute.second.f, degree range [0-90], decimal fraction f in arbitrary length (ex. N60.08.00.235556)</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="(\+|\-)((\d|[0-8]\d)\.([0-5]\d))((\.[0-5]\d\.\d+)|(\.[0-5]\d))?|90\.00\.00(\.0+)?">
<xsd:annotation>
<xsd:documentation>
Pattern is generally of the form +DD.MM.SS (D=degrees, M=minutes, S=seconds)
Description of the pattern:
1) '+' or '-' required unless the value is 90.00.00
- if value is 90.00.00, then omit the '+' or '-'
- '+' means North, '-' means South
2) A one-digit or two-digit number for degrees (range 0 to 89) - required
3) A dot (the decimal between degrees and minutes) - required
4) A two-digit number for minutes (range 00 to 59) - required
5) A dot (the decimal between minutes and seconds) - optional
6) A two-digit number for seconds (range 00 to 59) - optional
- if there is a dot in step 5, then there must be a two-digit number for seconds
7) A dot (the decimal between seconds and parts of a second) - optional
8) Digits for parts of a second (can be any number of digits) - optional
- if there is a dot in step 7, then there must be at least one digit after it
Examples:
+0.00.00
+00.00.00
90.00.00
90.00.00.0
-89.59.59
-89.59
-89.59.59.555
Pattern breakdown: (D=degrees, M=minutes, S=seconds)
(\+|\-) (...see next line..) | 90\.00\.00(\.0+)? <!-- choice of: +(...DD.MM.SS pattern...) OR 90.00.00 -->
((\d|[0-8]\d)\.([0-5]\d)) (...see next line..) <!-- D (0-9), DD (00-89), and MM (00-59) ranges defined, followed by ... -->
((\.[0-5]\d\.\d+) | (\.[0-5]\d))?<!-- SS with decimal fractions of S *OR* SS without fractions of S *OR* no SS at all -->
The original pattern (just for insurance):
pattern value="(N|S)((\d|[0-8]\d)\.([0-5]\d)\.[0-5]\d(\.\d+)?)|90\.00\.00(\.0+)?"
</xsd:documentation>
</xsd:annotation>
</xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
|