Index: trunk/data/validator/relation.mapcss
===================================================================
--- trunk/data/validator/relation.mapcss	(revision 6537)
+++ trunk/data/validator/relation.mapcss	(revision 6537)
@@ -0,0 +1,57 @@
+/* relation types */
+
+relation[!type] {
+  throwError: tr("relation without type");
+  assertMatch: "relation name=Foo";
+  assertNoMatch: "relation type=route name=Foo";
+}
+
+/* from http://wiki.openstreetmap.org/wiki/Types_of_relation */
+relation[type=route][!route] {
+  throwWarning: tr("{0} relation without {0} tag", "route");
+  assertMatch: "relation type=route";
+  assertNoMatch: "relation type=route route=train";
+}
+
+relation[type=route_master][!route_master] {
+  /* see #9071 */
+  throwWarning: tr("{0} relation without {0} tag", "route_master");
+  assertMatch: "relation type=route_master";
+  assertNoMatch: "relation type=route_master route_master=train";
+}
+
+relation[type=restriction][!restriction] {
+  throwWarning: tr("{0} relation without {0} tag", "restriction");
+  assertMatch: "relation type=restriction";
+  assertNoMatch: "relation type=restriction restriction=no_left_turn";
+}
+
+relation[type=boundary][!boundary] {
+  throwWarning: tr("{0} relation without {0} tag", "boundary");
+  assertMatch: "relation type=boundary";
+  assertNoMatch: "relation type=boundary boundary=administrative";
+}
+
+relation[type=site][!site] {
+  throwWarning: tr("{0} relation without {0} tag", "site");
+  assertMatch: "relation type=site";
+  assertNoMatch: "relation type=site site=administrative";
+}
+
+relation[type=public_transport][!public_transport] {
+  throwWarning: tr("{0} relation without {0} tag", "public_transport");
+  assertMatch: "relation type=public_transport";
+  assertNoMatch: "relation type=public_transport public_transport=stop_area";
+}
+
+relation[type=waterway][!waterway] {
+  throwWarning: tr("{0} relation without {0} tag", "waterway");
+  assertMatch: "relation type=waterway";
+  assertNoMatch: "relation type=waterway waterway=river";
+}
+
+relation[type=enforcement][!enforcement] {
+  throwWarning: tr("{0} relation without {0} tag", "enforcement");
+  assertMatch: "relation type=enforcement";
+  assertNoMatch: "relation type=enforcement enforcement=maxspeed";
+}
Index: trunk/data/validator/religion.mapcss
===================================================================
--- trunk/data/validator/religion.mapcss	(revision 6537)
+++ trunk/data/validator/religion.mapcss	(revision 6537)
@@ -0,0 +1,29 @@
+/* absent/unknown denomination (ticket #7811) */
+
+*[religion =~ /^(christian|jewish|muslim)$/][!denomination] {
+  throwOther: tr("religion without denomination");
+  assertMatch: "node religion=christian";
+  assertNoMatch: "node religion=christian denomination=catholic";
+  assertNoMatch: "node religion=foobar";
+}
+
+*[religion=christian][denomination][denomination !~ /^(anglican|apostolic|baptist|catholic|christian_community|christian_scientist|coptic_orthodox|czechoslovak_hussite|dutch_reformed|evangelical|foursquare|greek_catholic|greek_orthodox|jehovahs_witness|kabbalah|karaite|living_waters_church|lutheran|maronite|mennonite|methodist|mormon|new_apostolic|nondenominational|old_catholic|orthodox|pentecostal|presbyterian|protestant|quaker|roman_catholic|russian_orthodox|salvation_army|serbian_orthodox|seventh_day_adventist|united|united_reformed|uniting)$/] {
+  throwOther: tr("unknown christian denomination");
+  assertMatch: "node religion=christian denomination=foobar";
+  assertNoMatch: "node religion=christian denomination=catholic";
+  assertNoMatch: "node religion=christian";
+}
+
+*[religion=muslim][denomination][denomination !~ /^(alaouite|druze|ibadi|ismaili|nondenominational|shia|sunni)$/] {
+  throwOther: tr("unknown muslim denomination");
+  assertMatch: "node religion=muslim denomination=foobar";
+  assertNoMatch: "node religion=muslim denomination=alaouite";
+  assertNoMatch: "node religion=muslim";
+}
+
+*[religion=jewish][denomination][denomination !~ /^(alternative|ashkenazi|conservative|hasidic|humanistic|liberal|modern_orthodox|neo_orthodox|nondenominational|orthodox|progressive|reconstructionist|reform|renewal|samaritan|ultra_orthodox)$/] {
+  throwOther: tr("unknown jewish denomination");
+  assertMatch: "node religion=jewish denomination=foobar";
+  assertNoMatch: "node religion=jewish denomination=alternative";
+  assertNoMatch: "node religion=jewish";
+}
Index: trunk/data/validator/tagchecker.cfg
===================================================================
--- trunk/data/validator/tagchecker.cfg	(revision 6534)
+++ trunk/data/validator/tagchecker.cfg	(revision 6537)
@@ -46,6 +46,4 @@
 #way  : W : oneway != BOOLEAN_FALSE && /.*:(backward|forward)/ == *    # oneway combined with *:backward/forward
 
-relation : E : type != *                                       # relation without type
-
 node : I : amenity == /restaurant|cafe|fast_food/ && name != * # restaurant without name
 #way  : I : highway != * && railway != * && waterway != * && name == * # unusual named way type
@@ -62,7 +60,4 @@
 
 *    : W : /\d+/ == *                                          # numerical key
-
-# see #9071
-relation : W : type == route_master && route_master != *       # route_master relation without route_master=*
 
 # power related stuff (incomplete)
@@ -177,13 +172,4 @@
 
 
-################################
-# Religion / Denomination tests 
-################################
-
-* : I : religion == /christian|jewish|muslim/ && denomination != * # religion without denomination
-* : I : religion == christian && denomination == * && denomination != /anglican|apostolic|baptist|catholic|christian_community|christian_scientist|coptic_orthodox|czechoslovak_hussite|dutch_reformed|evangelical|foursquare|greek_catholic|greek_orthodox|jehovahs_witness|kabbalah|karaite|living_waters_church|lutheran|maronite|mennonite|methodist|mormon|new_apostolic|nondenominational|old_catholic|orthodox|pentecostal|presbyterian|protestant|quaker|roman_catholic|russian_orthodox|salvation_army|serbian_orthodox|seventh_day_adventist|united|united_reformed|uniting/  # unknown christian denomination
-* : I : religion == muslim && denomination == * && denomination != /alaouite|druze|ibadi|ismaili|nondenominational|shia|sunni/ # unknown muslim denomination
-* : I : religion == jewish && denomination == * && denomination != /alternative|ashkenazi|conservative|hasidic|humanistic|liberal|modern_orthodox|neo_orthodox|nondenominational|orthodox|progressive|reconstructionist|reform|renewal|samaritan|ultra_orthodox/ # unknown jewish denomination
-
 #####################################
 # validation for the wikipedia=* tag
