Changes between Version 39 and Version 40 of Rules/PublicTransportGtfs


Ignore:
Timestamp:
2022-03-10T19:03:22+01:00 (4 years ago)
Author:
skyper
Comment:

little rework of regex; add conflict in release_date and URLs

Legend:

Unmodified
Added
Removed
Modified
  • Rules/PublicTransportGtfs

    v39 v40  
    6363 */
    6464
    65 relation[type=route_master][route_master =~ /bus|coach|share_taxi|trolleybus|train|light_rail|subway|tram|monorail|funicular|ferry|aerialway|school_bus|walking_bus/] {
     65relation[type=route_master][route_master =~ /^(bus|coach|share_taxi|trolleybus|train|light_rail|subway|tram|monorail|funicular|ferry|aerialway|school_bus|walking_bus)$/] {
    6666  set PtRouteMaster;
    6767}
    6868/* Note: Only relations, routes on way are not supported  */
    69 relation[type=route              ][route        =~ /bus|coach|share_taxi|trolleybus|train|light_rail|subway|tram|monorail|funicular|ferry|aerialway|school_bus|walking_bus/] {
     69relation[type=route       ][route        =~ /^(bus|coach|share_taxi|trolleybus|train|light_rail|subway|tram|monorail|funicular|ferry|aerialway|school_bus|walking_bus)$/] {
    7070  set PtRoute;
    7171}
     
    7575}
    7676
    77 *[/bus|coach|share_taxi|trolleybus|train|light_rail|subway|tram|monorail|funicular|ferry/ =~ /yes|no/][!aerialway] {
     77*[/^(bus|coach|share_taxi|trolleybus|train|light_rail|subway|tram|monorail|funicular|ferry)$/ =~ /^(yes|no)$/][!aerialway] {
    7878  set PtVehicle;
    7979}
    8080
    81 *[/bus|coach|share_taxi|trolleybus|train|light_rail|subway|tram|monorail|funicular|ferry/ !~ /yes/][!aerialway] {
     81*[/^(bus|coach|share_taxi|trolleybus|train|light_rail|subway|tram|monorail|funicular|ferry)$/ !~ /yes/][!aerialway] {
    8282  set noPtVehicle;
    8383}
    8484
    85 *[public_transport =~ /platform|stop_area|stop_position/] {
     85*[public_transport =~ /^(platform|stop_area|stop_position)$/] {
    8686  set PtStop;
    8787}
     
    104104
    105105/* stop_area, stop_position, platform */
    106 *[public_transport =~ /platform|stop_position/][public_transport][!local_ref],
     106*[public_transport =~ /^(platform|stop_position)$/][public_transport][!local_ref],
    107107*.PtStop[public_transport][!network] {
    108108  throwWarning: tr("`{0}` without `{1}*`.", "{1.tag}", "{2.tag}");
     
    252252/* {0.tag} and {1.tag} without {2.key}, {3.key} or {4.key} (warning level) */
    253253
    254 /* platform */
    255 /*[highway=bus_stop][public_transport =~ /^(platform|stop_position)$/][bus!=yes][share_taxi!=yes][trolleybus!=yes][public_transport] {
    256   throwWarning: tr("`{0}` with `{1}` but none of `{2}*`, `{3}*` or `{4}*`.", "{5.tag}", "{0.tag}", "{2.tag}", "{3.tag}", "{4.tag}");
    257   group: tr("Public Transport GTFS: missing tag");
    258   assertMatch:   "node public_transport=platform highway=bus_stop";
    259   assertNoMatch: "node public_transport=platform highway=bus_stop bus=yes";
    260 } */
    261 
    262254/* One of many {0.key} but no {1.key} */
    263255
     
    431423/* Permanet links to PTNA GTFS */
    432424/* *[JOSM_search("ptna.openstreetmap.de/gtfs")][!JOSM_search("^.*network=([a-zA-Z]+[-]){2,}\\d{4}(-\\d\\d){2}.*$")] { */
    433 *[url     =~ /.*ptna\.openstreetmap\.de\/gtfs.+/][url     !~ /.*(network=([a-zA-Z]+[-]){2,}|release_date=)\d{4}(-\d\d){2}.*/],
    434 *[website =~ /.*ptna\.openstreetmap\.de\/gtfs.+/][website !~ /.*(network=([a-zA-Z]+[-]){2,}|release_date=)\d{4}(-\d\d){2}.*/],
    435 *[source  =~ /.*ptna\.openstreetmap\.de\/gtfs.+/][source  !~ /.*(network=([a-zA-Z]+[-]){2,}|release_date=)\d{4}(-\d\d){2}.*/] {
     425*[url     =~ /ptna\.openstreetmap\.de\/gtfs/][url     !~ /(network=([a-zA-Z]+[-]){2,}|release_date=)\d{4}(-\d\d){2}/],
     426*[website =~ /ptna\.openstreetmap\.de\/gtfs/][website !~ /(network=([a-zA-Z]+[-]){2,}|release_date=)\d{4}(-\d\d){2}/],
     427*[source  =~ /ptna\.openstreetmap\.de\/gtfs/][source  !~ /(network=([a-zA-Z]+[-]){2,}|release_date=)\d{4}(-\d\d){2}/] {
    436428  throwWarning: tr("Relative GTFS url in `{0}=*`. Add `{1}` behind the feed or network value.", "{0.key}", "&release_date=*");
    437429  assertMatch:   "node source=\"https://ptna.openstreetmap.de/gtfs/19\"";
     
    447439/* *[public_transport][public_transport =~ /platform|stop_position/][!(tag("local_ref") == get(regexp_match("^(.+:){4}([A-Z]+[ ]?)?([1-9][0-9]{0,2}[A-Z]?)", tag("ref:IFOPT")), 3))][local_ref][ref:IFOPT], */
    448440/* *[public_transport][public_transport =~ /platform|stop_position)][!(tag("local_ref") == get(regexp_match("^(.+:){4}([A-Z]+[ ]?)?([1-9][0-9]{0,2}[A-Z]?)", tag("gtfs:stop_id")), 3))][local_ref][ref:IFOPT] { */
    449 *[local_ref][ref:IFOPT]!.ErrorSyntaxIFOPT[public_transport =~ /platform|stop_position/][!(tag("local_ref") == get(regexp_match("^(.+:){4}(.+)", tag("ref:IFOPT")), 2))],
    450 *[local_ref][ref:IFOPT]!.ErrorSyntaxIFOPT[public_transport =~ /platform|stop_position/][!(tag("local_ref") == get(regexp_match("^(.+:){4}(.+)", tag("gtfs:stop_id")), 2))] {
     441*[local_ref][ref:IFOPT]!.ErrorSyntaxIFOPT[public_transport =~ /^(platform|stop_position)$/][!(tag("local_ref") == get(regexp_match("^(.+:){4}(.+)", tag("ref:IFOPT")), 2))],
     442*[local_ref][ref:IFOPT]!.ErrorSyntaxIFOPT[public_transport =~ /^(platform|stop_position)$/][!(tag("local_ref") == get(regexp_match("^(.+:){4}(.+)", tag("gtfs:stop_id")), 2))] {
    451443  throwWarning:  tr("`{0}` conflicts with `{1}`.", "{0.tag}", "{1.tag}");
    452444  group: tr("Public Transport GTFS: conflicting tags");
     
    481473}
    482474
     475/* release_date in url */
     476relation.PtRouteMaster[gtfs:release_date][url     =~ /ptna\.openstreetmap\.de\/gtfs.+network=([a-zA-Z]+[-]){2,}\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+network\\=.+-(\\d{4}(-\\d{2}){2}).+", tag("url")), 1))],
     477relation.PtRouteMaster[gtfs:release_date][website =~ /ptna\.openstreetmap\.de\/gtfs.+network=([a-zA-Z]+[-]){2,}\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+network\\=.+-(\\d{4}(-\\d{2}){2}).+", tag("website")), 1))],
     478relation.PtRouteMaster[gtfs:release_date][source  =~ /ptna\.openstreetmap\.de\/gtfs.+network=([a-zA-Z]+[-]){2,}\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+network\\=.+-(\\d{4}(-\\d{2}){2}).+", tag("source")), 1))],
     479relation.PtRouteMaster[gtfs:release_date][url     =~ /ptna\.openstreetmap\.de\/gtfs.+release_date=\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+release_date\\=(\\d{4}(-\\d{2}){2}).+", tag("url")), 1))],
     480relation.PtRouteMaster[gtfs:release_date][website =~ /ptna\.openstreetmap\.de\/gtfs.+release_date=\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+release_date\\=(\\d{4}(-\\d{2}){2}).+", tag("website")), 1))],
     481relation.PtRouteMaster[gtfs:release_date][source  =~ /ptna\.openstreetmap\.de\/gtfs.+release_date=\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+release_date\\=(\\d{4}(-\\d{2}){2}).+", tag("source")), 1))],
     482relation.PtRoute[gtfs:release_date][url     =~ /ptna\.openstreetmap\.de\/gtfs.+network=([a-zA-Z]+[-]){2,}\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+network\\=.+-(\\d{4}(-\\d{2}){2}).+", tag("url")), 1))],
     483relation.PtRoute[gtfs:release_date][website =~ /ptna\.openstreetmap\.de\/gtfs.+network=([a-zA-Z]+[-]){2,}\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+network\\=.+-(\\d{4}(-\\d{2}){2}).+", tag("website")), 1))],
     484relation.PtRoute[gtfs:release_date][source  =~ /ptna\.openstreetmap\.de\/gtfs.+network=([a-zA-Z]+[-]){2,}\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+network\\=.+-(\\d{4}(-\\d{2}){2}).+", tag("source")), 1))],
     485relation.PtRoute[gtfs:release_date][url     =~ /ptna\.openstreetmap\.de\/gtfs.+release_date=\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+release_date\\=(\\d{4}(-\\d{2}){2}).+", tag("url")), 1))],
     486relation.PtRoute[gtfs:release_date][website =~ /ptna\.openstreetmap\.de\/gtfs.+release_date=\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+release_date\\=(\\d{4}(-\\d{2}){2}).+", tag("website")), 1))],
     487relation.PtRoute[gtfs:release_date][source  =~ /ptna\.openstreetmap\.de\/gtfs.+release_date=\d{4}(-\d\d){2}/][!(tag("gtfs:release_date") == get(regexp_match(".+release_date\\=(\\d{4}(-\\d{2}){2}).+", tag("source")), 1))] {
     488  throwWarning: tr("{0} and {1} in {2} differ", "{1.tag}", "{1.key}", "{2.key}");
     489  group: tr("Public Transport GTFS: conflicting tags");
     490  assertMatch: "relation type=route route=train gtfs:release_date=2020-09-28 source=\"https://ptna.openstreetmap.de/gtfs/DE/trips.php?feed=DE-BW-VAG&release_date=2020-07-28&route_id=10-10-I-j20-1\"";
     491  assertNoMatch: "relation type=route route=train gtfs:release_date=2020-07-28 source=\"https://ptna.openstreetmap.de/gtfs/DE/trips.php?network=DE-BW-VAG-2020-07-28&route_id=10-10-I-j20-1\"";
     492  assertNoMatch: "relation type=route route=train gtfs:release_date=2020-07-28 source=\"https://ptna.openstreetmap.de/gtfs/DE/trips.php?feed=DE-BW-VAG&release_date=2020-07-28&route_id=10-10-I-j20-1\"";
     493}
     494
    483495/* route_id parent */
    484496/* FIXME: How to ckeck with multiple values? */