| 1 | [[TranslatedPages(revision=41)]] |
| 2 | Denne taggkontrollen anses som etterfølgeren til `tagchecker.cfg` og bruker mye av [wikitr:/Help/Styles/MapCSSImplementation MapCSS-implementeringen for stilark]. Den offisielle filendelsen er `*.validator.mapcss`. |
| 3 | |
| 4 | Vurder å installere [https://marketplace.visualstudio.com/items?itemName=whammo.mapcss-syntax MapCSS Syntax Highlighter] i VS Code for å legge til visuell fremheving for MapCSS-validatorsyntaks. |
| 5 | |
| 6 | Mer komplekse validatortester, som ikke kan gjøres med denne syntaksen, er implementert som [source:/trunk/src/org/openstreetmap/josm/data/validation/tests Java-tester]. |
| 7 | |
| 8 | == Eksempler == |
| 9 | Se `*.mapcss`-filer i source:/trunk/resources/data/validator/ for kontrollene inkludert i JOSMs kjerne eller [wikitr:/Rules eksterne validatorregler]. |
| 10 | |
| 11 | {{{ |
| 12 | #!mapcss |
| 13 | *[barrier=wire_fence] { |
| 14 | throwWarning: tr("{0} er foreldet", "{0.tag}"); /* "{0.tag}" evalueres til "barrier=wire_fence" */ |
| 15 | fixAdd: "barrier=fence"; /* Du trenger ikke å fjerne barrier-nøkkelen først, den vil bare overskrive med den nye verdien */ |
| 16 | fixAdd: "fence_type=chain_link"; |
| 17 | assertMatch: "way barrier=wire_fence"; |
| 18 | assertNoMatch: "way barrier=fence"; |
| 19 | } |
| 20 | }}} |
| 21 | |
| 22 | |
| 23 | bruk av klasser: |
| 24 | {{{ |
| 25 | #!mapcss |
| 26 | way[highway=~/^(motorway|trunk|primary|secondary|tertiary)$/] { |
| 27 | set major_road; |
| 28 | } |
| 29 | way.major_road[!ref] { |
| 30 | 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" */ |
| 31 | assertMatch: "way highway=primary"; |
| 32 | assertNoMatch: "way highway=primary ref=123"; |
| 33 | } |
| 34 | }}} |
| 35 | |
| 36 | == Noen flere detaljer == |
| 37 | === Syntaks === |
| 38 | |
| 39 | {{{ |
| 40 | #!mapcss |
| 41 | selector { |
| 42 | /* nøyaktig en av */ |
| 43 | throwError: "melding"; |
| 44 | throwWarning: "melding"; |
| 45 | throwOther: "melding"; |
| 46 | |
| 47 | /* vilkårlig mange av */ |
| 48 | fixAdd: "key=val"; |
| 49 | fixRemove: "key"; |
| 50 | fixChangeKey: "old=>new"; |
| 51 | fixDeleteObject: this; /* sletter hele objektet! */ |
| 52 | suggestAlternative: "hvilken som helst tekst (f.eks., alternativ nøkkel)"; |
| 53 | |
| 54 | /* brukerdefinerte argumenter må prefikses med - */ |
| 55 | -osmoseItemClassLevel: "1210/1/1"; |
| 56 | |
| 57 | /* påstander for enhetstester */ |
| 58 | assertMatch: "node/way/relation key1=value1 keyN=valueN"; |
| 59 | assertNoMatch: "node/way/relation key1=value1 keyN=valueN"; |
| 60 | |
| 61 | |
| 62 | /* påstander med mellomrom, bruk \"...\" rundt verdien */ |
| 63 | assertNoMatch: "node amenity=recycling collection_times=\"Mo-Fr 15:00\""; |
| 64 | } |
| 65 | }}} |
| 66 | |
| 67 | * Syntaksen for selektorer er spesifisert i [wikitr:/Help/Styles/MapCSSImplementation#Selectors MapCSSImplementation#Selectors] |
| 68 | * Validatorregler kan begrenses til spesifikke land, se [wikitr:/Help/Styles/MapCSSImplementation#Territoryselector MapCSSImplementation#Territoryselector]. |
| 69 | * Alternativt til strenger på høyre side av disse uttrykkene, evalueres uttrykk (se [wikitr:/Help/Styles/MapCSSImplementation#Evalexpressions liste+syntaks]) |
| 70 | * Mest nyttig av alle er [/doc/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.html#tr-org.openstreetmap.josm.gui.mappaint.Environment-java.lang.String...- tr()] for å få disse strengene oversatt (KLARIFISER: hvor oversettelser for ikke-kjernevalideringsregler bør opprettholdes?) |
| 71 | * 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 [wikitr:/Help/Dialog/Validator Validator-panelet]. |
| 72 | * Hvis `suggestAlternative` er/til stede, vises disse alternativene sammen med testmeldingen |
| 73 | * `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 [wikitr:/Help/Preferences/Advanced 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...`. |
| 74 | * 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.) |
| 75 | |
| 76 | ==== Plassholdere ==== |
| 77 | * De brukes for å forenkle oversettelsen og gjøre den mindre feilutsatt. |
| 78 | * 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. |
| 79 | * Etter advarselsmeldingen (atskilt med komma), må du definere innholdet i plassholderne. |
| 80 | * 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. |
| 81 | * 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. |
| 82 | * Klasser og pseudoklasser teller også. |
| 83 | * Du kan også bruke `{i.tag}` for nøkkelbare selektorer. Meldingen vil vise den faktiske verdien av nøkkelen (se #10859). |
| 84 | * 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). |
| 85 | |
| 86 | |
| 87 | eksempler: |
| 88 | {{{ |
| 89 | #!mapcss |
| 90 | *[a=b][c=d][e][f=g] { |
| 91 | throwWarning: tr("{0} BLA {1} BLUB {2} BLIB {3}", "{1.tag}", "{0.key}", "{2.key}", "{3.value}"); |
| 92 | } |
| 93 | }}} |
| 94 | |
| 95 | Dette vil evalueres til `c=d BLA a BLUB e BLIB g` |
| 96 | |
| 97 | {{{ |
| 98 | #!mapcss |
| 99 | node:unconnected:in-downloaded-area[highway=turning_circle] { |
| 100 | throwWarning: tr("{0} må være koblet til en vei", "{2.tag}"); |
| 101 | } |
| 102 | }}} |
| 103 | |
| 104 | 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.) |
| 105 | |
| 106 | ==== Gruppering ==== |
| 107 | * Ulike tester kan grupperes i Validator-panelet. Eksempel: |
| 108 | |
| 109 | {{{ |
| 110 | #!mapcss |
| 111 | node[oneway], |
| 112 | node[bridge], |
| 113 | node[sidewalk], |
| 114 | node[footway] { |
| 115 | throwWarning: tr("{0}", "{0.tag}"); |
| 116 | group: tr("tag på en node som bør brukes på en vei"); |
| 117 | } |
| 118 | }}} |
| 119 | |
| 120 | resulterer i: |
| 121 | |
| 122 | [[Image(Help/Validator/MapCSSTagChecker:testgroup.png,link=)]] |
| 123 | |
| 124 | Den samme grupperings teksten kan brukes på forskjellige regler, se f.eks. [source:/trunk/resources/data/validator/deprecated.mapcss deprecated.mapcss] eller til og med på forskjellige validatordatafiler. |
| 125 | |
| 126 | == Se også == |
| 127 | * [wikitr:/Help/Dialog/Validator Validator-dialog] |
| 128 | * [wikitr:/Help/Preferences/Validator Validator-preferanser] og beskrivelse av validatortester |
| 129 | * Hovedimplementasjonsbiletten var #9414. |
| 130 | |
| 131 | ---- |
| 132 | Tilbake til [wikitr:/Help Hovedhjelp] |