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 6 weeks ago Last modified on 2025-03-08T21:22:16+01:00
Note: See TracWiki for help on using the wiki.