On 14/06/2012 11:19, Pieren wrote:
On Thu, Jun 14, 2012 at 8:38 AM, Colin Smale <colin.sm...@xs4all.nl> wrote:
Back to my idea to move all 'variables' to the value :
Let say we create a new access keyword : "condition" (or
"access_condition", "cond", "expr" or "whatever_you_like") suffixed by
a number, eg. condition1, condition2, etc (unlimited but easy to
parse; separator unnecessary).
Then conditions are combined using a plain text language, not using
||, &&, ~, $ or any symbols only known by software programmers
(important for readability by wide audience) eg. " and ", " or ", "
not ", " in " like SQL.
I fully agree that the complexity should be principally in the value,
not the key.
Sounds good. I think parentheses (or some equivelent) will still be
necessary however for grouping, so you can say "A or (B and C) or D" as
"A or B and C or D" would not do the right thing (using conventional
precedence rules). As I understand it you are proposing that the
operands be variables (syntactically speaking). It's only a small jump
from there to allow literals, and add a couple of operators like
equals/not equal/greater than etc. Like that the definition of the
conditions as separate tags could be redundant in many cases, but it
would allow for reuse of common subexpressions.
I am sure that users will be able to get their head around something
like this - I hope so, because they will have to. The users will have to
learn a new trick anyway, whether it be this expression syntax or the
"access 1.5" proposal or its competitors. Which approach will give least
problems? Can they be understood unambiguously by humans and computers?
Or are we going to get lots of "bad data" due to people
misunderstanding/misinterpreting the rules? The set of operators is
limited (basically just comparison operations plus and/or/not), and the
editors can support the users by presenting the logic represented by the
expression in some kind of more natural language if required.
Examples:
Here's a test case. No motor vehicles mon-fri between 1600-1800 except
agricultural vehicles and good vehicles *in this direction*. Going the other
way the sign is similar but the times are between 0600 and 0900.
access=yes (this implies "agricultural=yes" and "goods=yes")
condition1=Mo-Fr 16:00-18:00
condition2=Mo-Fr 06:00-09:00
motor_vehicle:forward=not condition1
motor_vehicle:backward=not condition2
I think there should be an explicit way of identifying condition1 and
condition2 as "time constraints". There will also be conditions based on
other dimensions such as weight, length, etc.
no motor vehicles except for loading/unloading by hgvs between 8pm
and 10am
access=yes
motor_vehicle=no
condition1=loading // improving current 'destination'
condition2=10:00-20:00
hgv=condition1 and not condition2
Short, readable and easy, no ?
Definitely readable. Could be shorter. Easiness is a rather subjective
measure. How do these alternatives score?
motor_vehicle:expr=(vehicle_type=="hgv") &&
((time>"20:00")||(time<"10:00")) && (intention=="loading")
motor_vehicle:expr=(vehicle_type="hgv") and ((time>"20:00") or
(time<"10:00")) and (intention="loading")
One small point though: "loading" is not the same as "destination",
although this may vary by jurisdiction. You can't park in a parking bay
marked for "loading" just because you want to visit someone nearby.
Pieren
_______________________________________________
Tagging mailing list
Tagging@openstreetmap.org
http://lists.openstreetmap.org/listinfo/tagging
_______________________________________________
Tagging mailing list
Tagging@openstreetmap.org
http://lists.openstreetmap.org/listinfo/tagging