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

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

New Maplint stuff

File size: 11.2 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" match="/osm/node" use="@id"/>
8  <xsl:key xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="segment" match="/osm/segment" use="@id"/>
9  <xslout:template name="all-tests">
10    <maplint:test agent="xsltests" group="base" id="empty-tag-key" version="1" severity="error"/>
11    <maplint:test agent="xsltests" group="base" id="empty-tag-value" version="1" severity="warning"/>
12    <maplint:test agent="xsltests" group="base" id="multiple-segments-on-same-nodes" version="1" severity="error"/>
13    <maplint:test agent="xsltests" group="base" id="nodes-on-same-spot" version="1" severity="error"/>
14    <maplint:test agent="xsltests" group="base" id="segment-with-from-equals-to" version="1" severity="error"/>
15    <maplint:test agent="xsltests" group="base" id="segment-without-way" version="1" severity="warning"/>
16    <maplint:test agent="xsltests" group="base" id="tagged-segment" version="1" severity="error"/>
17    <maplint:test agent="xsltests" group="base" id="ways-with-unordered-segments" version="1" severity="error"/>
18    <maplint:test agent="xsltests" group="main" id="deprecated-tags" version="1" severity="error"/>
19    <maplint:test agent="xsltests" group="main" id="motorway-without-ref" version="1" severity="error"/>
20    <maplint:test agent="xsltests" group="main" id="residential-without-name" version="1" severity="warning"/>
21    <maplint:test agent="xsltests" group="strict" id="unknown-tags" version="1" severity="notice"/>
22  </xslout:template>
23  <xslout:template name="call-tests-any">
24    <xslout:call-template name="test-base-empty-tag-key-any"/>
25    <xslout:call-template name="test-base-empty-tag-value-any"/>
26    <xslout:call-template name="test-main-deprecated-tags-any"/>
27  </xslout:template>
28  <xslout:template name="call-tests-node">
29    <xslout:call-template name="test-base-nodes-on-same-spot-node"/>
30    <xslout:call-template name="test-strict-unknown-tags-node"/>
31  </xslout:template>
32  <xslout:template name="call-tests-segment">
33    <xslout:call-template name="test-base-multiple-segments-on-same-nodes-segment"/>
34    <xslout:call-template name="test-base-segment-with-from-equals-to-segment"/>
35    <xslout:call-template name="test-base-segment-without-way-segment"/>
36    <xslout:call-template name="test-base-tagged-segment-segment"/>
37  </xslout:template>
38  <xslout:template name="call-tests-way">
39    <xslout:call-template name="test-base-ways-with-unordered-segments-way"/>
40    <xslout:call-template name="test-main-motorway-without-ref-way"/>
41    <xslout:call-template name="test-main-residential-without-name-way"/>
42    <xslout:call-template name="test-strict-unknown-tags-way"/>
43  </xslout:template>
44  <xslout:template name="test-base-empty-tag-key-any">
45        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag[@k='']">
46            <maplint:result ref="empty-tag-key">Value=<xsl:value-of select="tag[@k='']/@v"/></maplint:result>
47        </xsl:if>
48    </xslout:template>
49  <xslout:template name="test-base-empty-tag-value-any">
50        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag[@v='']">
51            <maplint:result ref="empty-tag-value">Key=<xsl:value-of select="tag[@v='']/@k"/></maplint:result>
52        </xsl:if>
53    </xslout:template>
54  <xslout:template name="test-main-deprecated-tags-any">
55        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag/@k='class'">
56            <maplint:result ref="deprecated-tags">class</maplint:result>
57        </xsl:if>
58    </xslout:template>
59  <xslout:template name="test-base-nodes-on-same-spot-node">
60        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="nodes" select="key('nodesbycoordinates', concat(@lon, ' ', @lat))"/>
61        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="nid" select="@id"/>
62
63        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="count($nodes) != 1">
64            <maplint:result ref="nodes-on-same-spot">
65                <xsl:text>Nodes:</xsl:text>
66                <xsl:for-each select="$nodes">
67                    <xsl:if test="@id != $nid">
68                        <xsl:value-of select="concat(' ', @id)"/>
69                    </xsl:if>
70                </xsl:for-each>
71            </maplint:result>
72        </xsl:if>
73    </xslout:template>
74  <xslout:template name="test-strict-unknown-tags-node">
75        <xsl:for-each xmlns:xsl="http://www.w3.org/1999/XSL/Transform" select="tag">
76            <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')">
77                <maplint:result ref="unknown-tags"><xsl:value-of select="concat(@k, '=', @v)"/></maplint:result>
78            </xsl:if>
79        </xsl:for-each>
80    </xslout:template>
81  <xslout:template name="test-base-multiple-segments-on-same-nodes-segment">
82        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="segment-samedir" select="key('fromto2segment', concat(@from, ' ', @to))"/>
83        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="segment-otherdir" select="key('tofrom2segment', concat(@to, ' ', @from))"/>
84        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="sid" select="@id"/>
85        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="count($segment-samedir) &gt; 1">
86            <maplint:result ref="multiple-segments-on-same-nodes">
87                <xsl:text>Segments with same @from/@to:</xsl:text>
88                <xsl:for-each select="$segment-samedir">
89                    <xsl:if test="@id != $sid">
90                        <xsl:value-of select="concat(' ', @id)"/>
91                    </xsl:if>
92                </xsl:for-each>
93            </maplint:result>
94        </xsl:if>
95        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="count($segment-otherdir) &gt; 1">
96                <xsl:text>Segments with @from/@to reversed:</xsl:text>
97                <xsl:for-each select="$segment-otherdir">
98                    <xsl:if test="@id != $sid">
99                        <xsl:value-of select="concat(' ', @id)"/>
100                    </xsl:if>
101                </xsl:for-each>
102        </xsl:if>
103    </xslout:template>
104  <xslout:template name="test-base-segment-with-from-equals-to-segment">
105        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="@from=@to">
106            <maplint:result ref="segment-with-from-equals-to"/>
107        </xsl:if>
108    </xslout:template>
109  <xslout:template name="test-base-segment-without-way-segment">
110        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="not(key('segment2way', @id))">
111            <maplint:result ref="segment-without-way"/>
112        </xsl:if>
113    </xslout:template>
114  <xslout:template name="test-base-tagged-segment-segment">
115        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag[@k!='created_by']">
116            <maplint:result ref="tagged-segment">
117                <xsl:for-each select="tag[@k!='created_by']">
118                    <xsl:value-of select="concat(@k,'=',@v,' ')"/>
119                </xsl:for-each>
120            </maplint:result>
121        </xsl:if>
122    </xslout:template>
123  <xslout:template name="test-base-ways-with-unordered-segments-way">
124        <xsl:variable xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="error">
125            <xsl:for-each select="seg">
126                <xsl:if test="position() != last()">
127                    <xsl:variable name="thissegment" select="key('segment',@id)"/>
128                    <xsl:variable name="next" select="position()+1"/>
129                    <xsl:variable name="nextsegment" select="key('segment',../seg[$next]/@id)"/>
130                    <xsl:variable name="to" select="key('node',$thissegment/@to)"/>
131                    <xsl:variable name="from" select="key('node',$nextsegment/@from)"/>
132                    <xsl:if test="$to != $from">
133                        <xsl:value-of select="../@id"/>fail
134                    </xsl:if>
135                </xsl:if>
136            </xsl:for-each>
137        </xsl:variable>
138
139        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="$error != ''">
140            <maplint:result ref="ways-with-unordered-segments"/>
141        </xsl:if>
142    </xslout:template>
143  <xslout:template name="test-main-motorway-without-ref-way">
144        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="tag[@k='highway' and @v='motorway']">
145            <xsl:if test="not(tag[@k='ref'])">
146                <maplint:result ref="motorway-without-ref"/>
147            </xsl:if>
148        </xsl:if>
149    </xslout:template>
150  <xslout:template name="test-main-residential-without-name-way">
151        <xsl:if xmlns:xsl="http://www.w3.org/1999/XSL/Transform" test="(tag[@k='highway' and @v='residential']) and not(tag[@k='name'])">
152            <maplint:result ref="residential-without-name"/>
153        </xsl:if>
154    </xslout:template>
155  <xslout:template name="test-strict-unknown-tags-way">
156        <xsl:for-each xmlns:xsl="http://www.w3.org/1999/XSL/Transform" select="tag">
157            <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')">
158
159                <maplint:result ref="unknown-tags"><xsl:value-of select="concat(@k, '=', @v)"/></maplint:result>
160            </xsl:if>
161        </xsl:for-each>
162    </xslout:template>
163</xslout:stylesheet>
Note: See TracBrowser for help on using the repository browser.