Lingvoj:
- English
- Esperanto
- français
- norsk bokmål
- Nederlands
Ĉi tiu etikedkontrolilo estas konsiderata kiel la posteulo de tagchecker.cfg
kaj uzas multe de la MapCSS-implementado por stilfolioj. La oficiala dosierfinaĵo estas *.validator.mapcss
.
Konsideru instali la MapCSS Syntax Highlighter en VS Code por aldoni videgan emfazon por MapCSS-validatorsintakso.
Pli kompleksaj validatortestoj, kiuj ne povas esti faritaj per ĉi tiu sintakso, estas realigitaj kiel Java-testoj.
Ekzemploj
Vidu *.mapcss
-dosierojn en source:/trunk/resources/data/validator/ por la kontroloj inkluzivitaj en la kerno de JOSM aŭ eksteraj validatorreguloj.
*[barrier=wire_fence] { throwWarning: tr("{0} estas malaktualigita", "{0.tag}"); /* "{0.tag}" taksas al "barrier=wire_fence" */ fixAdd: "barrier=fence"; /* Vi ne bezonas forigi la baro-ŝlosilon antaŭe, ĝi simple anstataŭigos kun la nova valoro */ fixAdd: "fence_type=chain_link"; assertMatch: "way barrier=wire_fence"; assertNoMatch: "way barrier=fence"; }
uzo de klasoj:
way[highway=~/^(motorway|trunk|primary|secondary|tertiary)$/] { set major_road; } way.major_road[!ref] { throwOther: tr("highway sen {0}", "{1.key}"); /* la klaso ".major:road" estas la 0-a selektilo kaj "!ref" estas la 1-a selektilo. La eligo estas: "highway sen ref" */ assertMatch: "way highway=primary"; assertNoMatch: "way highway=primary ref=123"; }
Iuj pliaj detaloj
Sintakso
selector { /* ekzakte unu el */ throwError: "mesaĝo"; throwWarning: "mesaĝo"; throwOther: "mesaĝo"; /* arbitre multaj el */ fixAdd: "key=val"; fixRemove: "key"; fixChangeKey: "old=>new"; fixDeleteObject: this; /* forigas la tutan objekton! */ suggestAlternative: "iu ajn teksto (ekz., alternativa ŝlosilo)"; /* uzantodefinitaj argumentoj devas esti prefiksitaj per - */ -osmoseItemClassLevel: "1210/1/1"; /* asertoj por unuotestoj */ assertMatch: "node/way/relation key1=value1 keyN=valueN"; assertNoMatch: "node/way/relation key1=value1 keyN=valueN"; /* asertoj kun spacoj, uzu \"...\" ĉirkaŭ la valoro */ assertNoMatch: "node amenity=recycling collection_times=\"Mo-Fr 15:00\""; }
- La sintakso de selektiloj estas specifita en MapCSSImplementation#Selectors
- Validatorreguloj povas esti limigitaj al specifaj landoj, vidu MapCSSImplementation#Territoryselector.
- Alternative al ĉenoj ĉe la dekstra flanko de tiuj esprimoj, esprimoj estas taksataj (vidu listo+sintakso)
- Plej utila el ĉiuj estas tr() por havi tiujn ĉenojn tradukitajn (KLARIGU: kie tradukoj por ne-kernaj validatorreguloj devus esti konservataj?)
- Se almenaŭ unu
fixAdd
/fixRemove
/fixChangeKey
estas specifita, tiuj ŝanĝoj estas efektivigitaj por objektoj kongruantaj ĉi tiun teston kiam vi premas la riparbutonon en la Validator-panelo. - Se
suggestAlternative
estas/estas ĉeestaj, tiuj alternativoj estas montritaj kune kun la testmesaĝo assertMatch
kajassertNoMatch
: Vi povas doni tie ekzemplojn, kiuj devus (assertMatch) aŭ ne devus (assertNoMatch) kongrui la uzatan selektilon. Do ĉi tio estas testo por vidi ĉu la selektilo funkcias korekte por la donita ekzemplo. Normale ĉi tio estas nur utila por pli kompleksaj selektiloj kaj malpli por simplaj ŝlosil-valoraj selektiloj. La testoj estas efektivigitaj en la kunteksto de unuotestoj kaj sur jenkins/job/JOSM. Ili ankaŭ estas efektivigitaj por lokaj validatordosieroj se la progresinta opciovalidator.check_assert_local_rules
estas agordita al "vera" en la progresintaj preferoj (vidu #10206). Se vi ebligis ĉi tiun opcion kaj la testo malsukcesas, vi ricevos mesaĝon en la konsoleligo kiu povas aspekti kiel:AVERTO: Atendante teston '...' kongrui way ...
aŭ...ne kongrui...
.- Lokaj validatorreguloj reŝargas aŭtomate, se ili estas modifitaj kaj konservitaj de ekstera aplikaĵo. (La aŭtomata reŝargo povas halti, se sintakseraro en via validatordosiero produktas escepton en la konzolo. Vi bezonas restartigi JOSM en ĉi tiu kazo.)
Anstataŭiloj
- Ili estas uzataj por simpligi la tradukon kaj igi ĝin malpli erariga.
- La anstataŭiloj en la averto-mesaĝo ekz.
{3}
estas skribitaj kun suprenirantaj nombroj, komencante ĉe 0. Do: 0 1 2 3 4... Ĉi tio estas la id de la anstataŭilo. - Post la averto-mesaĝo (disigita per komo), vi bezonas difini la enhavon de la anstataŭiloj.
- Unue vi difinas la enhavon de la unua anstataŭilo (la unu kun la id 0). Tiam vi difinas la enhavon de la dua anstataŭilo (la unu kun la id 1), kaj tiel plu.
- Vi bezonas specifi kiun selektilon vi volas uzi en la anstataŭilo kaj ĉu vi volas uzi la ŝlosilon (
{i.key}
), la valoron ({i.value}
) aŭ la tutan etikedon ({i.tag}
) de la selektilo. Kalkulado komenciĝas ĉe 0. Do,{4.value}
signifas la valoron de la 5-a selektilo. - Klasoj kaj pseŭdoklasoj ankaŭ kalkulas.
- Vi ankaŭ povas uzi
{i.tag}
por ŝlosil-nur selektiloj. La mesaĝo montros la aktualan valoron de la ŝlosilo (vidu #10859). - Vi povas uzi regulajn esprimojn en la selektilo kaj uzi ĉi tion en anstataŭilo. La mesaĝo ne montros la regexp-kodon sed la aktualan ŝlosilon/valoron/etikedon (vidu #9782).
ekzemploj:
*[a=b][c=d][e][f=g] { throwWarning: tr("{0} BLA {1} BLUB {2} BLIB {3}", "{1.tag}", "{0.key}", "{2.key}", "{3.value}"); }
Ĉi tio taksos al c=d BLA a BLUB e BLIB g
node:unconnected:in-downloaded-area[highway=turning_circle] { throwWarning: tr("{0} devas esti konektita al vojo", "{2.tag}"); }
Ĉi tio taksos al highway=turning_circle devas esti konektita al vojo
. (:unconnected
kalkulas kiel 0-a anstataŭilo kaj :in-downloaded-area
kalkulas kiel 1-a anstataŭilo, tial highway=turning_circle
estas la 2-a anstataŭilo.)
Grupigo
- Malsamaj testoj povas esti grupigitaj en la Validator-panelo. Ekzemplo:
node[oneway], node[bridge], node[sidewalk], node[footway] { throwWarning: tr("{0}", "{0.tag}"); group: tr("etikedo sur nodo kiu devus esti uzata sur vojo"); }
rezultas en:
La sama grupiga teksto povas esti uzata sur malsamaj reguloj, vidu ekz. deprecated.mapcss aŭ eĉ sur malsamaj validatordosieroj.
Vidu ankaŭ
- Validator-dialogo
- Validator-preferoj kaj priskribo de validatortestoj
- La ĉefa implementa bileto estis #9414.
Reen al Ĉefa Helpo