source: subversion/utils/maplint/tests.xml @ 1952

Last change on this file since 1952 was 1949, checked in by jochen, 13 years ago

New Maplint stuff

File size: 10.5 KB
Line 
1<?xml version="1.0"?>
2<maplint:tests xmlns:maplint="http://maplint.openstreetmap.org/xml/1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
3<maplint:test group="base" id="empty-tag-key" version="1" severity="error">
4
5    <maplint:desc xml:lang="en">
6        Elements with empty tag keys.
7    </maplint:desc>
8
9    <maplint:desc xml:lang="de">
10        Elemente mit leerem Schlüsselwort im Tag.
11    </maplint:desc>
12
13    <maplint:check data="any" type="application/xsl+xml">
14        <xsl:if test="tag[@k='']">
15            <maplint:result>Value=<xsl:value-of select="tag[@k='']/@v"/></maplint:result>
16        </xsl:if>
17    </maplint:check>
18
19</maplint:test>
20<maplint:test group="base" id="empty-tag-value" version="1" severity="warning">
21
22    <maplint:desc xml:lang="en">
23        Elements with empty tag value.
24    </maplint:desc>
25
26    <maplint:check data="any" type="application/xsl+xml">
27        <xsl:if test="tag[@v='']">
28            <maplint:result>Key=<xsl:value-of select="tag[@v='']/@k"/></maplint:result>
29        </xsl:if>
30    </maplint:check>
31
32</maplint:test>
33<maplint:test group="base" id="multiple-segments-on-same-nodes" version="1" severity="error">
34
35    <maplint:desc xml:lang="en">
36        Find segments which use the same nodes. Either with the same direction
37        or with different directions.
38    </maplint:desc>
39
40    <maplint:setup type="application/xsl+xml">
41        <xsl:key name="fromto2segment" match="/osm/segment" use="concat(@from, ' ', @to)"/>
42        <xsl:key name="tofrom2segment" match="/osm/segment" use="concat(@to, ' ', @from)"/>
43    </maplint:setup>
44
45    <maplint:check data="segment" type="application/xsl+xml">
46        <xsl:variable name="segment-samedir" select="key('fromto2segment', concat(@from, ' ', @to))"/>
47        <xsl:variable name="segment-otherdir" select="key('tofrom2segment', concat(@to, ' ', @from))"/>
48        <xsl:variable name="sid" select="@id"/>
49        <xsl:if test="count($segment-samedir) &gt; 1">
50            <maplint:result>
51                <xsl:text>Segments with same @from/@to:</xsl:text>
52                <xsl:for-each select="$segment-samedir">
53                    <xsl:if test="@id != $sid">
54                        <xsl:value-of select="concat(' ', @id)"/>
55                    </xsl:if>
56                </xsl:for-each>
57            </maplint:result>
58        </xsl:if>
59        <xsl:if test="count($segment-otherdir) &gt; 1">
60                <xsl:text>Segments with @from/@to reversed:</xsl:text>
61                <xsl:for-each select="$segment-otherdir">
62                    <xsl:if test="@id != $sid">
63                        <xsl:value-of select="concat(' ', @id)"/>
64                    </xsl:if>
65                </xsl:for-each>
66        </xsl:if>
67    </maplint:check>
68
69</maplint:test>
70<maplint:test group="base" id="nodes-on-same-spot" version="1" severity="error">
71
72    <maplint:desc xml:lang="en">
73        Two or more nodes with the exact same coordinates. This will be
74        reported for every node in the set, so if there are three nodes
75        with the same coordinates, there will be three reports, not one.
76    </maplint:desc>
77
78    <maplint:setup type="application/xsl+xml">
79        <xsl:key name="nodesbycoordinates" match="/osm/node" use="concat(@lon,' ', @lat)"/>
80    </maplint:setup>
81
82    <maplint:check data="node" type="application/xsl+xml">
83        <xsl:variable name="nodes" select="key('nodesbycoordinates', concat(@lon, ' ', @lat))"/>
84        <xsl:variable name="nid" select="@id"/>
85
86        <xsl:if test="count($nodes) != 1">
87            <maplint:result>
88                <xsl:text>Nodes:</xsl:text>
89                <xsl:for-each select="$nodes">
90                    <xsl:if test="@id != $nid">
91                        <xsl:value-of select="concat(' ', @id)"/>
92                    </xsl:if>
93                </xsl:for-each>
94            </maplint:result>
95        </xsl:if>
96    </maplint:check>
97
98</maplint:test>
99<maplint:test group="base" id="segment-with-from-equals-to" version="1" severity="error">
100
101    <maplint:desc xml:lang="en">
102        Finds segments going from a node to the same node.
103    </maplint:desc>
104
105    <maplint:check data="segment" type="application/xsl+xml">
106        <xsl:if test="@from=@to">
107            <maplint:result/>
108        </xsl:if>
109    </maplint:check>
110
111</maplint:test>
112<maplint:test group="base" id="segment-without-way" version="1" severity="warning">
113
114    <maplint:desc xml:lang="en">
115        Find segments which don't belong to any way. That is not
116        necessarily an error, but helps with finding places where
117        more works need to be done.
118    </maplint:desc>
119
120    <maplint:setup type="application/xsl+xml">
121        <xsl:key name="segment2way" match="/osm/way" use="seg/@id"/>
122    </maplint:setup>
123
124    <maplint:check data="segment" type="application/xsl+xml">
125        <xsl:if test="not(key('segment2way', @id))">
126            <maplint:result/>
127        </xsl:if>
128    </maplint:check>
129
130</maplint:test>
131<maplint:test group="base" id="tagged-segment" version="1" severity="error">
132
133    <maplint:desc xml:lang="en">
134        Segment with any tag (except "created_by"). Tagging segments is
135        deprecated. Please create ways and tag them instead.
136    </maplint:desc>
137
138    <maplint:check data="segment" type="application/xsl+xml">
139        <xsl:if test="tag[@k!='created_by']">
140            <maplint:result>
141                <xsl:for-each select="tag[@k!='created_by']">
142                    <xsl:value-of select="concat(@k,'=',@v,' ')"/>
143                </xsl:for-each>
144            </maplint:result>
145        </xsl:if>
146    </maplint:check>
147
148</maplint:test>
149<maplint:test group="base" id="ways-with-unordered-segments" version="1" severity="error">
150
151    <maplint:desc xml:lang="en">
152        Ways in which the segments are not ordered and sequenced properly.
153    </maplint:desc>
154
155    <maplint:setup type="application/xsl+xml">
156        <xsl:key name="node" match="/osm/node" use="@id"/>
157        <xsl:key name="segment" match="/osm/segment" use="@id"/>
158    </maplint:setup>
159
160    <maplint:check data="way" type="application/xsl+xml">
161        <xsl:variable name="error">
162            <xsl:for-each select="seg">
163                <xsl:if test="position() != last()">
164                    <xsl:variable name="thissegment" select="key('segment',@id)"/>
165                    <xsl:variable name="next" select="position()+1"/>
166                    <xsl:variable name="nextsegment" select="key('segment',../seg[$next]/@id)"/>
167                    <xsl:variable name="to" select="key('node',$thissegment/@to)"/>
168                    <xsl:variable name="from" select="key('node',$nextsegment/@from)"/>
169                    <xsl:if test="$to != $from">
170                        <xsl:value-of select="../@id"/>fail
171                    </xsl:if>
172                </xsl:if>
173            </xsl:for-each>
174        </xsl:variable>
175
176        <xsl:if test="$error != ''">
177            <maplint:result/>
178        </xsl:if>
179    </maplint:check>
180
181</maplint:test>
182<maplint:test group="main" id="deprecated-tags" version="1" severity="error">
183
184    <maplint:desc xml:lang="en">
185        Find deprecated tags: class=*
186    </maplint:desc>
187
188    <maplint:check data="any" type="application/xsl+xml">
189        <xsl:if test="tag/@k='class'">
190            <maplint:result>class</maplint:result>
191        </xsl:if>
192    </maplint:check>
193
194</maplint:test>
195<maplint:test group="main" id="motorway-without-ref" version="1" severity="error">
196
197    <maplint:desc xml:lang="en">
198        This test finds all motorways (highway=motorway) without a ref tag.
199    </maplint:desc>
200
201    <maplint:check data="way" type="application/xsl+xml">
202        <xsl:if test="tag[@k='highway' and @v='motorway']">
203            <xsl:if test="not(tag[@k='ref'])">
204                <maplint:result/>
205            </xsl:if>
206        </xsl:if>
207    </maplint:check>
208
209</maplint:test>
210<maplint:test group="main" id="residential-without-name" version="1" severity="warning">
211
212    <maplint:desc xml:lang="en">
213        Find ways with tag highway=residential, but without a name tag.
214    </maplint:desc>
215
216    <maplint:check data="way" type="application/xsl+xml">
217        <xsl:if test="(tag[@k='highway' and @v='residential']) and not(tag[@k='name'])">
218            <maplint:result/>
219        </xsl:if>
220    </maplint:check>
221
222</maplint:test>
223<maplint:test group="strict" id="unknown-tags" version="1" severity="notice">
224
225    <maplint:desc xml:lang="en">
226        Unknown tags. This is not an error as everybody can invent
227        new tags. But it helps in finding typos etc.
228        The list of known tags is currently incomplete.
229    </maplint:desc>
230
231    <maplint:check data="node" type="application/xsl+xml">
232        <xsl:for-each select="tag">
233            <xsl:if test="(@k!='created_by') and                     (@k!='highway') and                     (@k!='railway') and                     (@k!='waterway') and                     (@k!='amenity') and                     (@k!='tourism') and                     (@k!='ele') and                     (@k!='man_made') and                     (@k!='sport') and                     (@k!='place') and                     (@k!='note') and                     (@k!='historic') and                     (@k!='layer') and                     (@k!='source') and                     (@k!='time') and                     (@k!='name')">
234                <maplint:result><xsl:value-of select="concat(@k, '=', @v)"/></maplint:result>
235            </xsl:if>
236        </xsl:for-each>
237    </maplint:check>
238
239    <maplint:check data="way" type="application/xsl+xml">
240        <xsl:for-each select="tag">
241            <xsl:if test="(@k!='created_by') and                     (@k!='highway') and                     (@k!='railway') and                     (@k!='waterway') and                     (@k!='amenity') and                     (@k!='tourism') and                     (@k!='ele') and                     (@k!='man_made') and                     (@k!='sport') and                     (@k!='place') and                     (@k!='note') and                     (@k!='historic') and                     (@k!='landuse') and                     (@k!='oneway') and                     (@k!='bridge') and                     (@k!='tunnel') and                     (@k!='leisure') and                     (@k!='junction') and                     (@k!='ref') and                     (@k!='natural') and                     (@k!='layer') and                     (@k!='source') and                     (@k!='time') and                     (@k!='abutters') and                     (@k!='name')">
242
243                <maplint:result><xsl:value-of select="concat(@k, '=', @v)"/></maplint:result>
244            </xsl:if>
245        </xsl:for-each>
246    </maplint:check>
247
248</maplint:test>
249</maplint:tests>
Note: See TracBrowser for help on using the repository browser.