wiki:Nl:Help/Validator/MapCSSTagChecker

Andere talen:

MapCSS TagChecker

Deze tagcontrole wordt beschouwd als de opvolger van tagchecker.cfg en gebruikt veel van de implementatie van MapCSS voor stylesheets]. De officiële extensie voor bestanden is *.validator.mapcss.

Meer complexe validatietesten, die niet gedaan kunnen worden met deze syntaxis worden gerealiseerd als Java-testen.

Voorbeelden

Bekijk *.mapcss-bestanden in source:trunk/data/validator/ voor de controles die zijn opgenomen in de bron van JOSM of externe regels voor Validatie.

*[barrier=wire_fence] {
  throwWarning: tr("{0} is deprecated", "{0.tag}"); /* "{0.tag}" evaluates to "barrier=wire_fence" */
  fixAdd: "barrier=fence"; /* U hoeft niet eerst de sleutel barrier te verwijderen, de nieuwe waarde zal daar voorrang over hebben */
  fixAdd: "fence_type=chain_link";
  assertMatch: "way barrier=wire_fence";
  assertNoMatch: "way barrier=fence";
}

Gebruik van klassen:

way[highway=~/^(motorway|trunk|primary|secondary|tertiary)$/] {
  set major_road;
}
way.major_road[!ref] {
  throwOther: tr("highway without {0}", "{1.key}"); /* De klasse ".major:road" is de 0-de selector en "!ref" is de 1e selector. De uitvoer is: "highway zonder ref" */
  assertMatch: "way highway=primary";
  assertNoMatch: "way highway=primary ref=123";
}

Nog meer details

Syntaxis

selector {
   /* exact één van */
   throwError: "message";
   throwWarning: "message";
   throwOther: "message";

   /* willekeurig aantal van */
   fixAdd: "key=val";
   fixRemove: "key";
   fixChangeKey: "old=>new";
   fixDeleteObject: this; /* verwijdert het gehele object! */
   suggestAlternative: "elke tekst (bijv., alternatieve sleutel)";

   /* asserties voor eenheidstesten */
   assertMatch: "node/way/relation key1=value1 keyN=valueN";
   assertNoMatch: "node/way/relation key1=value1 keyN=valueN";
}
  • De syntaxis van selectors wordt gespecificeerd in MapCSSImplementation#Selectors
  • Regels voor Validatie kunnen worden beperkt tot specifieke landen, bekijk MapCSSImplementation#Territoryselector
  • Als alternatief voor tekenreeksen aan de rechterkant van deze expressies, worden expressies geëvalueerd (zie lijst+syntaxis])
    • het meest nuttige van alles is tr() om die tekenreeks vertaald te krijgen (VERDUIDELIJKEN: waar vertalingen voor regels voor niet-bron zouden moeten worden onderhouden?)
  • Als tenminste één fixAdd/fixRemove/fixChangeKey wordt gespecificeerd, worden die wijzigingen uitgevoerd voor objecten die overeenkomen met deze test wanneer u drukt op de knop Repareren in het dialoogvenster Validatie.
  • Als suggestAlternative aanwezig is/zijn, worden die alternatieven weergegeven tezamen met het testbericht
  • assertMatch en assertNoMatch: U kunt hier voorbeelden opgeven die wel (assertMatch) of niet (assertNoMatch) zouden moeten overeenkomen met de gebruikte selector. Zo is dit een test of de selector juist werkt voor het opgegeven voorbeeld. Normaal gesproken is dit alleen nuttig voor meer complexe selectors en minder voor eenvoudige selectors van sleutel-waarde. De tests worden uitgevoerd in de context van eenheidstests en op ​jenkins/job/JOSM. Zij worden ook uitgevoerd voor lokale validatiebestanden als de uitgebreide optie validator.check_assert_local_rules is ingesteld op "true" in de uitgebreide voorkeuren (zie #10206). Als u deze optie hebt ingeschakeld en de test mislukt, zult u een bericht in de console-uitvoer krijgen dat eruit kan zien als: WAARSCHUWING: Expecting test '...' to match way ... or ...to not match....
  • Lokale regels voor validatie worden automatisch opnieuw geladen, als zij worden aangepast en opgeslagen door een externe toepassingen. (Het automatisch opnieuw laden kan stoppen, als een fout in de syntaxis in uw validatiebestand een uitzondering produceert in de console. U moet in dat geval JOSM opnieuw opstarten.)

Plaatsvervangers

  • Zij worden gebruikt om de vertaling te vereenvoudigen en minder gevoelig voor fouten te maken.
  • De plaatsvervangers in het waarschuwingsbericht, bijv. {3} worden geschreven in oplopende getallen, beginnend met 0. Dus: 0 1 2 3 4... Dit is het ID van de plaatsvervanger.
  • na het waarschuwingsbericht (gescheiden door een komma), dient u de inhoud voor de plaatsvervangers te definiëren.
  • Eerst definieert u de inhoud van de eerste plaatsvervanger (die met de ID 0). Dan definieert u de inhoud van de tweede plaatsvervanger (die met de ID 1), enzovoort.
  • U dient te specificeren welke selector u wilt gebruiken in de plaatsvervanger en of u de sleutel wilt gebruiken ({i.key}), de waarde ({i.value}) of de gehele tag ({i.tag}) van de selector. Tellen begint met 0. Dus, {4.value} betekent de waarde van de 5e selector.
  • Klassen en pseudoklassen tellen ook mee.
  • U kunt ook {i.tag} gebruiken voor selectoren met alleen een sleutel. Het bericht zal de feitelijke waarde van de sleutel weergeven (zie #10859).
  • U mag ook reguliere expressies in de selector gebruiken en die in ene plaatsvervanger gebruiken. Het bericht zal niet de code van de regexp weergeven, maar de feitelijke sleutel/waarde/tag (zie #9782).

Voorbeeld:

*[a=b][c=d][e][f=g] {
  throwWarning: tr("{0} BLA {1} BLUB {2} BLIB {3}", "{1.tag}", "{0.key}", "{2.key}", "{3.value}");
}

Dit zal evalueren naar c=d BLA a BLUB e BLIB g

node:unconnected:in-downloaded-area[highway=turning_circle] {
  throwWarning: tr("{0} must be connected to a way", "{2.tag}");
}

Dit zal evalueren naar highway=turning_circle moet zijn verbonden aan een weg. (:unconnected telt als plaatsvervanger 0 en :in-downloaded-area telt als eerste plaatsvervanger, daarom is highway=turning_circle de tweede plaatsvervanger.)

Groeperen

  • Verschillende testen kunnen worden gegroepeerd in het dialoogvenster Validatie. Voorbeeld:
    node[oneway],
    node[bridge],
    node[sidewalk],
    node[footway] {
      throwWarning: tr("{0}", "{0.tag}");
      group: tr("tag op een knoop die zou moeten worden gebruikt op een weg");
    }
    

resulteert in:

Dezelfde tekst voor groeperen kan ook worden gebruikt voor verschillende regels, zie bijv. deprecated.mapcss of zelfs in verschillende bestanden voor validatie.

Zie ook

Last modified 9 months ago Last modified on 2018-03-25T15:16:18+02:00