Andre språk:
- English
- Esperanto
- français
- norsk bokmål
- Nederlands
Denne taggkontrollen anses som etterfølgeren til tagchecker.cfg
og bruker mye av MapCSS-implementeringen for stilark. Den offisielle filendelsen er *.validator.mapcss
.
Vurder å installere MapCSS Syntax Highlighter i VS Code for å legge til visuell fremheving for MapCSS-validatorsyntaks.
Mer komplekse validatortester, som ikke kan gjøres med denne syntaksen, er implementert som Java-tester.
Eksempler
Se *.mapcss
-filer i source:/trunk/resources/data/validator/ for kontrollene inkludert i JOSMs kjerne eller eksterne validatorregler.
*[barrier=wire_fence] { throwWarning: tr("{0} er foreldet", "{0.tag}"); /* "{0.tag}" evalueres til "barrier=wire_fence" */ fixAdd: "barrier=fence"; /* Du trenger ikke å fjerne barrier-nøkkelen først, den vil bare overskrive med den nye verdien */ fixAdd: "fence_type=chain_link"; assertMatch: "way barrier=wire_fence"; assertNoMatch: "way barrier=fence"; }
bruk av klasser:
way[highway=~/^(motorway|trunk|primary|secondary|tertiary)$/] { set major_road; } way.major_road[!ref] { throwOther: tr("highway uten {0}", "{1.key}"); /* klassen ".major:road" er den 0. selektoren og "!ref" er den 1. selektoren. Utdataene er: "highway uten ref" */ assertMatch: "way highway=primary"; assertNoMatch: "way highway=primary ref=123"; }
Noen flere detaljer
Syntaks
selector { /* nøyaktig en av */ throwError: "melding"; throwWarning: "melding"; throwOther: "melding"; /* vilkårlig mange av */ fixAdd: "key=val"; fixRemove: "key"; fixChangeKey: "old=>new"; fixDeleteObject: this; /* sletter hele objektet! */ suggestAlternative: "hvilken som helst tekst (f.eks., alternativ nøkkel)"; /* brukerdefinerte argumenter må prefikses med - */ -osmoseItemClassLevel: "1210/1/1"; /* påstander for enhetstester */ assertMatch: "node/way/relation key1=value1 keyN=valueN"; assertNoMatch: "node/way/relation key1=value1 keyN=valueN"; /* påstander med mellomrom, bruk \"...\" rundt verdien */ assertNoMatch: "node amenity=recycling collection_times=\"Mo-Fr 15:00\""; }
- Syntaksen for selektorer er spesifisert i MapCSSImplementation#Selectors
- Validatorregler kan begrenses til spesifikke land, se MapCSSImplementation#Territoryselector.
- Alternativt til strenger på høyre side av disse uttrykkene, evalueres uttrykk (se liste+syntaks)
- Mest nyttig av alle er tr() for å få disse strengene oversatt (KLARIFISER: hvor oversettelser for ikke-kjernevalideringsregler bør opprettholdes?)
- Hvis minst én
fixAdd
/fixRemove
/fixChangeKey
er spesifisert, utføres disse endringene for objekter som samsvarer med denne testen når du trykker på reparasjonsknappen i Validator-panelet. - Hvis
suggestAlternative
er/til stede, vises disse alternativene sammen med testmeldingen assertMatch
ogassertNoMatch
: Du kan gi der eksempler som bør (assertMatch) eller ikke bør (assertNoMatch) samsvare med den brukte selektoren. Så dette er en test for å se om selektoren fungerer korrekt for det gitte eksempelet. Normalt er dette bare nyttig for mer komplekse selektorer og mindre for enkle nøkkelverdi-selektorer. Testene utføres i sammenheng med enhetstester og på jenkins/job/JOSM. De utføres også for lokale validatordatafiler hvis den avanserte opsjonenvalidator.check_assert_local_rules
er satt til "true" i avanserte preferanser (se #10206). Hvis du har aktivert denne opsjonen og testen mislykkes, vil du få en melding i konsollutdataene som kan se slik ut:ADVARSEL: Forventer at testen '...' skal samsvare med way ...
eller...ikke samsvare...
.- Lokale validatorregler lastes automatisk på nytt hvis de endres og lagres av et eksternt program. (Automatisk pålasting kan stoppe hvis en syntaksfeil i validatordatafilen produserer et unntak i konsollen. Du må starte JOSM på nytt i dette tilfellet.)
Plassholdere
- De brukes for å forenkle oversettelsen og gjøre den mindre feilutsatt.
- Plassholderne i advarselsmeldingen f.eks.
{3}
er skrevet med stigende tall, starter på 0. Så: 0 1 2 3 4... Dette er id-en til plassholderen. - Etter advarselsmeldingen (atskilt med komma), må du definere innholdet i plassholderne.
- Først definerer du innholdet i den første plassholderen (den med id 0). Deretter definerer du innholdet i den andre plassholderen (den med id 1), og så videre.
- Du må spesifisere hvilken selektor du vil bruke i plassholderen og om du vil bruke nøkkelen (
{i.key}
), verdien ({i.value}
) eller hele taggen ({i.tag}
) til selektoren. Telling starter på 0. Så,{4.value}
betyr verdien til den 5. selektoren. - Klasser og pseudoklasser teller også.
- Du kan også bruke
{i.tag}
for nøkkelbare selektorer. Meldingen vil vise den faktiske verdien av nøkkelen (se #10859). - Du kan bruke regulære uttrykk i selektoren og bruke dette i en plassholder. Meldingen vil ikke vise regexp-koden, men den faktiske nøkkelen/verdien/taggen (se #9782).
eksempler:
*[a=b][c=d][e][f=g] { throwWarning: tr("{0} BLA {1} BLUB {2} BLIB {3}", "{1.tag}", "{0.key}", "{2.key}", "{3.value}"); }
Dette vil evalueres til c=d BLA a BLUB e BLIB g
node:unconnected:in-downloaded-area[highway=turning_circle] { throwWarning: tr("{0} må være koblet til en vei", "{2.tag}"); }
Dette vil evalueres til highway=turning_circle må være koblet til en vei
. (:unconnected
teller som 0. plassholder og :in-downloaded-area
teller som 1. plassholder, derfor er highway=turning_circle
den 2. plassholderen.)
Gruppering
- Ulike tester kan grupperes i Validator-panelet. Eksempel:
node[oneway], node[bridge], node[sidewalk], node[footway] { throwWarning: tr("{0}", "{0.tag}"); group: tr("tag på en node som bør brukes på en vei"); }
resulterer i:
Den samme grupperings teksten kan brukes på forskjellige regler, se f.eks. deprecated.mapcss eller til og med på forskjellige validatordatafiler.
Se også
- Validator-dialog
- Validator-preferanser og beskrivelse av validatortester
- Hovedimplementasjonsbiletten var #9414.
Tilbake til Hovedhjelp