wiki:El:Help/Validator/MapCSSTagChecker

Άλλες γλώσσες:

Αυτός ο ελεγκτής ετικετών θεωρείται ως ο διάδοχος του αρχείου tagchecker.cfg και βασίζεται σε μεγάλο βαθμό στην υλοποίηση MapCSS για φύλλα στυλ (en). Η επίσημη επέκταση για τα αρχεία είναι *.validator.mapcss.

Συνιστάται η εγκατάσταση του MapCSS Syntax Highlighter στο VS Code για να προσθέσετε οπτική επισήμανση για τη σύνταξη του εργαλείου επικύρωσης MapCSS.

Πιο σύνθετες δοκιμές επικύρωσης, οι οποίες δεν μπορούν να γίνουν με αυτήν τη σύνταξη, πραγματοποιούνται ως Java tests.

Παραδείγματα

Δείτε τα αρχεία *.mapcss στο source:/trunk/resources/data/validator/ για τους ελέγχους που περιλαμβάνονται στον πυρήνα του JOSM ή σε εξωτερικούς κανόνες επικύρωσης.

*[barrier=wire_fence] {
  throwWarning: tr("{0} is deprecated", "{0.tag}"); /* "{0.tag}" evaluates to "barrier=wire_fence" */
  fixAdd: "barrier=fence"; /* You don't need to remove the barrier key before, it will just override with the new value */
  fixAdd: "fence_type=chain_link";
  assertMatch: "way barrier=wire_fence";
  assertNoMatch: "way barrier=fence";
}

χρήση των κλάσεων:

way[highway=~/^(motorway|trunk|primary|secondary|tertiary)$/] {
  set major_road;
}
way.major_road[!ref] {
  throwOther: tr("highway without {0}", "{1.key}"); /* the class ".major:road" is the 0th selector and "!ref" is the 1st selector. The output is: "highway without ref" */
  assertMatch: "way highway=primary";
  assertNoMatch: "way highway=primary ref=123";
}

Μερικές ακόμα λεπτομέρειες

Σύνταξη

selector {
   /* exactly one of */
   throwError: "message";
   throwWarning: "message";
   throwOther: "message";

   /* arbitrarily many of */
   fixAdd: "key=val";
   fixRemove: "key";
   fixChangeKey: "old=>new";
   fixDeleteObject: this; /* deletes the whole object! */
   suggestAlternative: "any text (e.g., alternative key)";

   /* user defined arguments must be prefixed by - */
   -osmoseItemClassLevel: "1210/1/1";

   /* assertions for unit tests */
   assertMatch: "node/way/relation key1=value1 keyN=valueN";
   assertNoMatch: "node/way/relation key1=value1 keyN=valueN";


   /* assertions with spaces, use \"...\" around the value */
   assertNoMatch: "node amenity=recycling collection_times=\"Mo-Fr 15:00\"";
}
  • Η σύνταξη των επιλογέων καθορίζεται στο MapCSSImplementation#Selectors (en)
  • Οι κανόνες επικύρωσης μπορούν να περιοριστούν σε συγκεκριμένες χώρες, δείτε MapCSSImplementation#Territoryselector (en).
  • Εναλλακτικά προς τις συμβολοσειρές στη δεξιά πλευρά αυτών των εκφράσεων, μπορούν να χρησιμοποιηθούν και εκφράσεις που αξιολογούνται (δείτε list+syntax (en))
    • Η πιο χρήσιμη απ’ όλες είναι η tr() ώστε οι συμβολοσειρές να μπορούν να μεταφραστούν (ΔΙΕΥΚΡΙΝΙΣΗ: πού πρέπει να διατηρούνται οι μεταφράσεις για μη-βασικούς κανόνες επικύρωσης;)
  • Εάν έχει οριστεί τουλάχιστον ένα από τα fixAdd/fixRemove/fixChangeKey τότε αυτές οι αλλαγές εφαρμόζονται στα αντικείμενα που ταιριάζουν με τον έλεγχο, όταν πατήσετε το κουμπί στον πίνακα Επικύρωσης.
  • Εάν υπάρχουν ένα ή περισσότερα suggestAlternative αυτές οι εναλλακτικές εμφανίζονται μαζί με το μήνυμα δοκιμής
  • assertMatch και assertNoMatch: Μπορείτε να ορίσετε παραδείγματα τα οποία θα πρέπει (assertMatch) ή δεν θα πρέπει (assertNoMatch) να ταιριάζουν με τον χρησιμοποιούμενο επιλογέα. Επομένως, αυτή είναι μια δοκιμή για το αν ο επιλογέας λειτουργεί σωστά για το δεδομένο παράδειγμα. Κανονικά, αυτό είναι χρήσιμο μόνο για πιο σύνθετους επιλογείς και λιγότερο για απλούς επιλογείς κλειδιού-τιμής. Οι δοκιμές εκτελούνται στο πλαίσιο δοκιμών μονάδας και στο ​jenkins/job/JOSM. Εκτελούνται επίσης για τοπικά αρχεία επικύρωσης εάν η προηγμένη επιλογή validator.check_assert_local_rules έχει οριστεί σε "true" στις προηγμένες προτιμήσεις (δείτε #10206). Εάν ενεργοποιήσατε αυτήν την επιλογή και η δοκιμή αποτύχει, θα λάβετε ένα μήνυμα στην έξοδο της κονσόλας που μπορεί να μοιάζει με: ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αναμένεται η δοκιμή '...' να ταιριάζει με τον τρόπο ... ή ...να μην ταιριάζει....
  • Οι τοπικοί κανόνες επικύρωσης επαναφορτώνονται αυτόματα, εάν τροποποιηθούν και αποθηκευτούν από μια εξωτερική εφαρμογή. (Η αυτόματη επαναφόρτωση μπορεί να σταματήσει, εάν ένα συντακτικό σφάλμα στο αρχείο επικύρωσης παράγει μια εξαίρεση στην κονσόλα. Σε αυτήν την περίπτωση, πρέπει να επανεκκινήσετε το JOSM.)

Υποκατάστατα

  • Χρησιμοποιούνται για να απλοποιήσουν τη μετάφραση και να μειώσουν τα πιθανά σφάλματα.
  • Τα υποκατάστατα στο μήνυμα προειδοποίησης, π.χ. {3} γράφονται με αύξοντες αριθμούς, ξεκινώντας από το 0. Δηλαδή: 0 1 2 3 4... Αυτοί είναι τα αναγνωριστικά των υποκατάστατων.
  • Μετά το μήνυμα προειδοποίησης (διαχωρισμένο με κόμμα), πρέπει να ορίσετε το περιεχόμενο των υποκατάστατων.
  • Πρώτα ορίζετε το περιεχόμενο του πρώτου υποκατάστατου αυτό με το αναγνωριστικό 0). Στη συνέχεια, ορίζετε το περιεχόμενο του δεύτερου υποκατάστατου (αυτό με το αναγνωριστικό 1) και ούτω καθεξής.
  • Πρέπει να καθορίσετε ποιον επιλογέα θέλετε να χρησιμοποιήσετε στο υποκατάστατο και αν θέλετε να χρησιμοποιήσετε το κλειδί ({i.key}), την τιμή ({i.value}) ή ολόκληρη την ετικέτα ({i.tag}) του επιλογέα. Η μέτρηση ξεκινά από το 0. Έτσι, {4.value} σημαίνει την τιμή του 5ου επιλογέα.
  • Οι κλάσεις και οι ψευδοκλάσεις μετράνε επίσης.
  • Επίσης, μπορείτε να χρησιμοποιήσετε το {i.tag} για επιλογείς μόνο με κλειδί. Το μήνυμα θα εμφανίζει την πραγματική τιμή του κλειδιού (δείτε #10859).
  • Μπορείτε να χρησιμοποιήσετε κανονικές εκφράσεις στον επιλογέα και να τις χρησιμοποιήσετε σε ένα υποκατάστατο. Το μήνυμα δεν θα εμφανίζει τον κωδικό regexp αλλά το πραγματικό κλειδί/τιμή/ετικέτα (δείτε #9782).

παραδείγματα:

*[a=b][c=d][e][f=g] {
  throwWarning: tr("{0} BLA {1} BLUB {2} BLIB {3}", "{1.tag}", "{0.key}", "{2.key}", "{3.value}");
}

Αυτό θα αξιολογηθεί ως c=d BLA a BLUB e BLIB g

node:unconnected:in-downloaded-area[highway=turning_circle] {
  throwWarning: tr("{0} must be connected to a way", "{2.tag}");
}

Αυτό θα αξιολογηθεί ως highway=turning_circle πρέπει να συνδέεται με μία γραμμή. (:unconnected μετράει ως μηδενικό υποκατάστατο και το :in-downloaded-area μετράει ως πρώτο υποκατάστατο, επομένως το highway=turning_circle είναι το δεύτερο υποκατάστατο.)

Ομαδοποίηση

  • Διαφορετικοί έλεγχοι μπορούν να ομαδοποιηθούν στον πίνακα του Ελεγκτή. Παράδειγμα:
node[oneway],
node[bridge],
node[sidewalk],
node[footway] {
  throwWarning: tr("{0}", "{0.tag}");
  group: tr("tag on a node which should be used on a way");
}

αποτελέσματα σε:

Το ίδιο κείμενο ομαδοποίησης μπορεί να χρησιμοποιηθεί σε διαφορετικούς κανόνες, δείτε π.χ. deprecated.mapcss ή ακόμη και σε διαφορετικά αρχεία ελεγκτή.

Δείτε επίσης


Πίσω στη Βασική Βοήθεια

Last modified 2 weeks ago Last modified on 2025-07-02T12:14:14+02:00
Note: See TracWiki for help on using the wiki.