source: subversion/applications/utils/maplint/tests.xsl @ 3240

Last change on this file since 3240 was 3240, checked in by joerg, 12 years ago

next step in creating packages for openstreetmap

File size: 15.8 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<xslout:stylesheet xmlns:maplint="http://maplint.openstreetmap.org/xml/1.0" xmlns:xslout="http://www.w3.org/1999/XSL/Transform" version="1.0">
3  <xsl:key xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="fromto2segment" match="/osm/segment" use="concat(@from, ' ', @to)"/>
4  <xsl:key xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="tofrom2segment" match="/osm/segment" use="concat(@to, ' ', @from)"/>
5  <xsl:key xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="nodesbycoordinates" match="/osm/node" use="concat(@lon,' ', @lat)"/>
6  <xsl:key xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="segment2way" match="/osm/way" use="seg/@id"/>
7  <xsl:key xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="node-from" match="/osm/segment" use="@from"/>
8  <xsl:key xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="node-to" match="/osm/segment" use="@to"/>
9  <xsl:key xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="segment" match="/osm/segment" use="@id"/>
10  <xslout:template name="all-tests">
11    <maplint:test agent="xsltests" group="base" id="empty-tag-key" version="1" severity="error"/>
12    <maplint:test agent="xsltests" group="base" id="empty-tag-value" version="1" severity="warning"/>
13    <maplint:test agent="xsltests" group="base" id="multiple-segments-on-same-nodes" version="1" severity="error"/>
14    <maplint:test agent="xsltests" group="base" id="nodes-on-same-spot" version="1" severity="error"/>
15    <maplint:test agent="xsltests" group="base" id="segment-with-from-equals-to" version="1" severity="error"/>
16    <maplint:test agent="xsltests" group="base" id="segment-without-way" version="1" severity="warning"/>
17    <maplint:test agent="xsltests" group="base" id="tagged-segment" version="1" severity="error"/>
18    <maplint:test agent="xsltests" group="base" id="untagged-unconnected-node" version="1" severity="warning"/>
19    <maplint:test agent="xsltests" group="base" id="untagged-way" version="1" severity="warning"/>
20    <maplint:test agent="xsltests" group="base" id="ways-with-unordered-segments" version="1" severity="error"/>
21    <maplint:test agent="xsltests" group="main" id="deprecated-tags" version="1" severity="error"/>
22    <maplint:test agent="xsltests" group="main" id="motorway-without-ref" version="1" severity="error"/>
23    <maplint:test agent="xsltests" group="main" id="place-of-worship-without-religion" version="1" severity="warning"/>
24    <maplint:test agent="xsltests" group="main" id="poi-without-name" version="1" severity="warning"/>
25    <maplint:test agent="xsltests" group="main" id="residential-without-name" version="1" severity="warning"/>
26    <maplint:test agent="xsltests" group="strict" id="unknown-tags" version="1" severity="notice"/>
27  </xslout:template>
28  <xslout:template name="call-tests-any">
29    <xslout:call-template name="test-base-empty-tag-key-any"/>
30    <xslout:call-template name="test-base-empty-tag-value-any"/>
31    <xslout:call-template name="test-main-deprecated-tags-any"/>
32  </xslout:template>
33  <xslout:template name="call-tests-node">
34    <xslout:call-template name="test-base-nodes-on-same-spot-node"/>
35    <xslout:call-template name="test-base-untagged-unconnected-node-node"/>
36    <xslout:call-template name="test-main-place-of-worship-without-religion-node"/>
37    <xslout:call-template name="test-main-poi-without-name-node"/>
38    <xslout:call-template name="test-strict-unknown-tags-node"/>
39  </xslout:template>
40  <xslout:template name="call-tests-segment">
41    <xslout:call-template name="test-base-multiple-segments-on-same-nodes-segment"/>
42    <xslout:call-template name="test-base-segment-with-from-equals-to-segment"/>
43    <xslout:call-template name="test-base-segment-without-way-segment"/>
44    <xslout:call-template name="test-base-tagged-segment-segment"/>
45  </xslout:template>
46  <xslout:template name="call-tests-way">
47    <xslout:call-template name="test-base-untagged-way-way"/>
48    <xslout:call-template name="test-base-ways-with-unordered-segments-way"/>
49    <xslout:call-template name="test-main-motorway-without-ref-way"/>
50    <xslout:call-template name="test-main-residential-without-name-way"/>
51    <xslout:call-template name="test-strict-unknown-tags-way"/>
52  </xslout:template>
53  <xslout:template name="test-base-empty-tag-key-any">
54        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag[@k='']">
55            <maplint:result ref="empty-tag-key">Value=<xsl:value-of select="tag[@k='']/@v"/></maplint:result>
56        </xsl:if>
57    </xslout:template>
58  <xslout:template name="test-base-empty-tag-value-any">
59        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag[@v='']">
60            <maplint:result ref="empty-tag-value">Key=<xsl:value-of select="tag[@v='']/@k"/></maplint:result>
61        </xsl:if>
62    </xslout:template>
63  <xslout:template name="test-main-deprecated-tags-any">
64        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag/@k='class'">
65            <maplint:result ref="deprecated-tags">class</maplint:result>
66        </xsl:if>
67    </xslout:template>
68  <xslout:template name="test-base-nodes-on-same-spot-node">
69        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="nodes" select="key('nodesbycoordinates', concat(@lon, ' ', @lat))"/>
70        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="nid" select="@id"/>
71
72        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="count($nodes) != 1">
73            <maplint:result ref="nodes-on-same-spot">
74                <xsl:text>Nodes:</xsl:text>
75                <xsl:for-each select="$nodes">
76                    <xsl:if test="@id != $nid">
77                        <xsl:value-of select="concat(' ', @id)"/>
78                    </xsl:if>
79                </xsl:for-each>
80            </maplint:result>
81        </xsl:if>
82    </xslout:template>
83  <xslout:template name="test-base-untagged-unconnected-node-node">
84        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="not(tag[@k != 'created_by'] or key('node-from', @id) or key('node-to', @id))">
85            <maplint:result ref="untagged-unconnected-node"/>
86        </xsl:if>
87    </xslout:template>
88  <xslout:template name="test-main-place-of-worship-without-religion-node">
89        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="(tag[@k='amenity' and @v='place_of_worship']) and not(tag[@k='religion'])">
90            <maplint:result ref="place-of-worship-without-religion"/>
91        </xsl:if>
92    </xslout:template>
93  <xslout:template name="test-main-poi-without-name-node">
94        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="(tag[@k='amenity' and (@v='place_of_worship' or @v='cinema' or @v='pharmacy' or @v='pub' or @v='restaurant' or @v='school' or @v='university' or @v='hospital' or @v='library' or @v='theatre' or @v='courthouse' or @v='bank')]) and not(tag[@k='name'])">
95            <maplint:result ref="poi-without-name">
96                <xsl:text>amenity=</xsl:text>
97                <xsl:value-of select="tag[@k='amenity']/@v"/>
98            </maplint:result>
99        </xsl:if>
100    </xslout:template>
101  <xslout:template name="test-strict-unknown-tags-node">
102        <xsl:for-each xmlns:xsl="http://www.w3.org/1999/XSL/Transform" select="tag">
103            <xsl:if test="(@k!='created_by') and                     (@k!='converted_by') and                     (@k!='todo') and                     (@k!='landuse') and                     (@k!='note') and                     (@k!='highway') and                     (@k!='railway') and                     (@k!='waterway') and                     (@k!='amenity') and                     (@k!='dispensing') and                     (@k!='religion') and                     (@k!='military') and                     (@k!='denomination') and                     (@k!='leisure') and                     (@k!='recycling:glass') and                     (@k!='recycling:batteries') and                     (@k!='recycling:clothes') and                     (@k!='recycling:paper') and                     (@k!='recycling:green_waste') and                     (@k!='tourism') and                     (@k!='int_name') and                     (@k!='nat_name') and                     (@k!='reg_name') and                     (@k!='loc_name') and                     (@k!='old_name') and                     (@k!='int_ref') and                     (@k!='nat_ref') and                     (@k!='reg_ref') and                     (@k!='loc_ref') and                     (@k!='old_ref') and                     (@k!='ncn_ref') and                     (@k!='ele') and                     (@k!='man_made') and                     (@k!='sport') and                     (@k!='place') and                     (@k!='historic') and                     (@k!='natural') and                     (@k!='layer') and                     (@k!='religion') and                     (@k!='denomination') and                     (@k!='source') and                     (@k!='source:ref') and                     (@k!='source:name') and                     (@k!='is_in') and                     (@k!='time') and                     (@k!='access') and                     (@k!='name')">
104                <maplint:result ref="unknown-tags"><xsl:value-of select="concat(@k, '=', @v)"/></maplint:result>
105            </xsl:if>
106        </xsl:for-each>
107    </xslout:template>
108  <xslout:template name="test-base-multiple-segments-on-same-nodes-segment">
109        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="segment-samedir" select="key('fromto2segment', concat(@from, ' ', @to))"/>
110        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="segment-otherdir" select="key('tofrom2segment', concat(@to, ' ', @from))"/>
111        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="sid" select="@id"/>
112        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="count($segment-samedir) &gt; 1">
113            <maplint:result ref="multiple-segments-on-same-nodes">
114                <xsl:text>Segments with same @from/@to:</xsl:text>
115                <xsl:for-each select="$segment-samedir">
116                    <xsl:if test="@id != $sid">
117                        <xsl:value-of select="concat(' ', @id)"/>
118                    </xsl:if>
119                </xsl:for-each>
120            </maplint:result>
121        </xsl:if>
122        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="count($segment-otherdir) &gt; 1">
123                <xsl:text>Segments with @from/@to reversed:</xsl:text>
124                <xsl:for-each select="$segment-otherdir">
125                    <xsl:if test="@id != $sid">
126                        <xsl:value-of select="concat(' ', @id)"/>
127                    </xsl:if>
128                </xsl:for-each>
129        </xsl:if>
130    </xslout:template>
131  <xslout:template name="test-base-segment-with-from-equals-to-segment">
132        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="@from=@to">
133            <maplint:result ref="segment-with-from-equals-to"/>
134        </xsl:if>
135    </xslout:template>
136  <xslout:template name="test-base-segment-without-way-segment">
137        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="not(key('segment2way', @id))">
138            <maplint:result ref="segment-without-way"/>
139        </xsl:if>
140    </xslout:template>
141  <xslout:template name="test-base-tagged-segment-segment">
142        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag[(@k!='created_by') and (@k!='converted_by')]">
143            <maplint:result ref="tagged-segment">
144                <xsl:for-each select="tag[(@k!='created_by') and (@k!='converted_by')]">
145                    <xsl:value-of select="concat(@k,'=',@v,' ')"/>
146                </xsl:for-each>
147            </maplint:result>
148        </xsl:if>
149    </xslout:template>
150  <xslout:template name="test-base-untagged-way-way">
151        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="not(tag[@k != 'created_by'])">
152            <maplint:result ref="untagged-way"/>
153        </xsl:if>
154    </xslout:template>
155  <xslout:template name="test-base-ways-with-unordered-segments-way">
156        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="error">
157            <xsl:for-each select="seg">
158                <xsl:if test="position() != last()">
159                    <xsl:variable name="thissegment" select="key('segment',@id)"/>
160                    <xsl:variable name="next" select="position()+1"/>
161                    <xsl:variable name="nextsegment" select="key('segment',../seg[$next]/@id)"/>
162                    <xsl:variable name="to" select="$thissegment/@to"/>
163                    <xsl:variable name="from" select="$nextsegment/@from"/>
164                    <xsl:if test="$to != $from">
165                        <xsl:text>fail</xsl:text>
166                    </xsl:if>
167                </xsl:if>
168            </xsl:for-each>
169        </xsl:variable>
170
171        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="$error != ''">
172            <maplint:result ref="ways-with-unordered-segments"/>
173        </xsl:if>
174    </xslout:template>
175  <xslout:template name="test-main-motorway-without-ref-way">
176        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag[@k='highway' and @v='motorway']">
177            <xsl:if test="not(tag[@k='ref'])">
178                <maplint:result ref="motorway-without-ref"/>
179            </xsl:if>
180        </xsl:if>
181    </xslout:template>
182  <xslout:template name="test-main-residential-without-name-way">
183        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="(tag[@k='highway' and @v='residential']) and not(tag[@k='name'])">
184            <maplint:result ref="residential-without-name"/>
185        </xsl:if>
186    </xslout:template>
187  <xslout:template name="test-strict-unknown-tags-way">
188        <xsl:for-each xmlns:xsl="http://www.w3.org/1999/XSL/Transform" select="tag">
189            <xsl:if test="(@k!='created_by') and                     (@k!='converted_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!='int_name') and                     (@k!='nat_name') and                     (@k!='reg_name') and                     (@k!='loc_name') and                     (@k!='old_name') and                     (@k!='int_ref') and                     (@k!='nat_ref') and                     (@k!='reg_ref') and                     (@k!='loc_ref') and                     (@k!='old_ref') and                     (@k!='ncn_ref') and                     (@k!='natural') and                     (@k!='layer') and                     (@k!='source') and                     (@k!='source:ref') and                     (@k!='source:name') and                     (@k!='time') and                     (@k!='abutters') and                     (@k!='maxspeed') and                     (@k!='access') and                     (@k!='foot') and                     (@k!='bicycle') and                     (@k!='motorcycle') and                     (@k!='motorcar') and                     (@k!='horse') and                     (@k!='surface') and                     (@k!='osmarender:renderName') and                     (@k!='osmarender:nameDirection') and                     (@k!='name')">
190
191                <maplint:result ref="unknown-tags"><xsl:value-of select="concat(@k, '=', @v)"/></maplint:result>
192            </xsl:if>
193        </xsl:for-each>
194    </xslout:template>
195</xslout:stylesheet>
Note: See TracBrowser for help on using the repository browser.