How to write rules¶
Folder structure¶
The rules are contained into YAML files into one folder. The organization of the files in this folder follows the architecture of OSI for consistency.
File structure¶
We will take this example of the osi_detectedlane.yml file:
DetectedLane:
header:
- is_set
CandidateLane:
probability:
- in_range: [0, 1]
classification:
- is_set
DetectedLaneBoundary:
header:
- is_set
boundary_line:
- each:
position:
- is_set
According to the Python module used, YAML version 1.1 is used. In this document, we will try to make associations between the YAML vocabulary according to its specifications and the Protocol Buffers one.
Each root (at the top level) scalar represent a root message type (ex:
DetectedLane, DetectedLaneBoundary).
The children scalars of each root scalar represent its fields if they are
not camel-case (ex: header is a field of DetectedLane ; header and
boundary_line are fields of DetectedLaneBoundary). See Child message
type for the camel-case scalars.
Each field has a sequence (starting with an hyphen -) of scalar
representing the rules that apply on.
Child message type¶
A message type can have included message type. For example DetectedLane has
a CandidateLane included message type. They first seem similar has field
but they are not: they contain, exactly like top-level message type, fields
with rules.
Rules¶
Overview¶
The rules can either be without any parameter (ex: is_set) or with a
parameter.
Example¶
in_range: [0, 1]
In the case a rule has a parameter, it is written as a mapping (a scalar
followed by a column “:”). What comes after the column is totally free and
depends on the rule used. For instance, the rule in_range accept a sequence
of double ; the rule each ask for mappings. Other rules accept string,
number, etc.
The available rule and their usage are explained here: Available rules for the OSI validation.