wiki:Nb:Help/Validator/MapCSSTagChecker

Andre språk:

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 og assertNoMatch: 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 opsjonen validator.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å


Tilbake til Hovedhjelp

Last modified 10 months ago Last modified on 2025-03-08T21:22:16+01:00
Note: See TracWiki for help on using the wiki.