-
Notifications
You must be signed in to change notification settings - Fork 170
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature rule set extensions #685
Changes from 4 commits
255fd56
fd397e8
a238ec2
97ca0f4
d2d5f6f
b435476
96bfda1
08d5a75
b9178c2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,30 +5,55 @@ weight: 1 | |
--- | ||
|
||
A branch entry describes a tree branch (or node) containing other branches and | ||
signals. | ||
signals. Branches typically represent either a feature of interest (an object whose properties are being observed or reported), or a node that acts as a parent to a group of related properties. | ||
|
||
A branch entry example is given below: | ||
A branch entry representing a feature of interest is exemplified below: | ||
|
||
```YAML | ||
Trunk: | ||
type: branch | ||
description: All signals related to the rear trunk | ||
aggregate: false | ||
identifier: Vehicle.Body.Trunk | ||
elementType: FeatureOfInterest | ||
instances: ["Front", "Rear"] | ||
definition: An enclosed lockable storage area in a sedan, coupe, or convertible separate from the passenger cabin | ||
description: Trunk status. | ||
comment: A trunk is a luggage compartment in a vehicle. | ||
Depending on vehicle, it can be either in the front or back of the vehicle. | ||
Some vehicles may have trunks both at the front and at the rear of the vehicle. | ||
``` | ||
|
||
A branch entry representing a parent node is exemplified below: | ||
|
||
```YAML | ||
Windshield.Wiping: | ||
type: branch | ||
elementType: Node | ||
description: Windshield wiper signals. | ||
``` | ||
|
||
The following elements are defined: | ||
|
||
**`Body.Trunk`** | ||
**`Trunk:`** or **`Windshield.Wiping:`** | ||
The list element name defines the dot-notated signal name to the signal. | ||
Please note that all parental branches included in the name must be defined as | ||
well. | ||
well. In the case of ```Trunk```, it is a child of ```Vehicle.Body``` and thus both ```Vehicle``` and ```Vehicle.Body``` need to be defined. | ||
|
||
**```type```** | ||
The value ```branch``` specifies that this is a branch entry (as | ||
opposed to a signal entry). This is the default, in case ```type``` is omitted. | ||
The value ```branch``` specifies that this is a branch entry. This is the default, in case ```type``` is omitted. | ||
|
||
**```identifier```** *[optional]* | ||
A set of characters that uniquely identifies the branch, usually the full path | ||
|
||
**```elementType```** *[optional]* | ||
A type that categorizes the branch's role in the vehicle signal domain, or as a Node if the branch exists purely for tree traversal and has no vehicle signal domain signifcance on its own. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is there some rule, how this Applies to current VSS, i.e. how to decide what is what? Are "Features of Interest" only things that are currently instantiated and everything else is a "Node", i.e waht would Vehicle.Body.Lights be? Also what is the difference between There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A feature of interest is any physical object whose properties can be observed or reported. Vehicle.Body.Lights has a property (LightSwitch) that can be reported, so it's a feature of interest. (I'm not saying it's an ideal one.) There are branches in VSS that simply act as parent nodes to a group of signals. I just looked and they've mostly been cleaned up :^) This one remains in vehicle.vspec: Acceleration: There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, thank you. In fact, in our internal model we have a feature of interest called "chargingSession," which is a process. I'm not quite sold on functions, and in fact we modeled all charging signals without a thing called "charging." But I think about functions in the philosophical sense as something that a feature of interest is intended to achieve. That BFO book I recommended explains all that. |
||
- ```FeatureOfInterest```: A physical object whose properties can be observed and possibly manipulated. | ||
- ```Node```: A physical object whose properties can be observed and possibly manipulated. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. They should not have the same description, or? Do we have a need to consider one of them as "default", i.e. if elementType is not given is it then a "node" or is it undefined. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. At this point, 99% are Feature of Interest so that could be the default. At some point I will probably create a PR that adds one more branch element type, but let's not get ahead of ourselves. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've committed a change to describe node as 'A branch in the tree that does not correspond to a domain object. These are generally used to group related nodes.' |
||
|
||
**```definition```*** [optional]* | ||
A formal specification that includes the necessary and sufficient conditions for distinguishing this branch from anything else. It is similar to a dictionary definition, and the conditions put forth can translate to formal axioms in an ontology and can be used for inferencing and automation. | ||
|
||
**```description```** | ||
Describes the meaning and content of the branch. | ||
Describes the meaning and content of the branch. Descriptions can include any kind of information that helps humans conceptualize the entry, such as examples, physical properties, etc. | ||
Recommended to start with a capital letter and end with a dot (`.`). | ||
|
||
**```comment ```** *[optional]* `since version 3.0` | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,38 +14,64 @@ entry example is given below: | |
```YAML | ||
Speed: | ||
type: sensor | ||
identifier: Vehicle.Speed | ||
elementType: SignalDefinition | ||
featureOfInterest: Vehicle | ||
property: Speed | ||
description: The vehicle speed. | ||
definition: The rate of change in the vehicle position per unit of time | ||
comment: For engine speed see Vehicle.Powertrain.CombustionEngine.Engine.Speed. | ||
datatype: float | ||
unit: km/h | ||
min: 0 | ||
max: 300 | ||
``` | ||
|
||
**```Drivetrain.Transmission.Speed```** | ||
**```Speed```** | ||
Defines the dot-notated name of the data entry. Please note that | ||
all parental branches included in the name must be defined as well. | ||
|
||
**```type```** | ||
Defines the type of the node. This can be `branch`, | ||
`sensor`, `actuator` or `attribute`. | ||
Defines the type of the node. | ||
|
||
**```datatype```** | ||
The string value of the type specifies the scalar type of the data entry | ||
value. See [data type](/vehicle_signal_specification/rule_set/data_entry/data_types/) chapter for a list of available types. | ||
**```identifier```** *[optional]* | ||
A set of characters that uniquely identifies the signal. This is generally the branch and the property. | ||
|
||
**```elementType```** *[optional]* | ||
A type that classifies the attribute in regards to the Vehicle Signal domain | ||
- ```SignalDefinition```: The entry defines a property of a feature of interest. | ||
|
||
**```featureOfInterest```** *[optional]* | ||
The identifier of the physical object whose properties can be observed and possibly manipulated by signals of this type | ||
|
||
**```property```** *[optional]* | ||
The identifier of the property being reported by signals of this type | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we are to introduce "optional" support for property while keeping the current mechanism of explicitly specifying datatype+unit for each signal we need to give some guidelines on how they shall be used. Topics like:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll add those, thanks. |
||
|
||
**```description```** | ||
Describes the meaning and content of the signal. | ||
The `description`shall together with other mandatory members like `datatype` and `unit` provide sufficient information | ||
to understand what the signal contains and how signal values shall be constructed or interpreted. | ||
Recommended to start with a capital letter and end with a dot (`.`). | ||
|
||
|
||
**```definition```*** *[optional]* | ||
A formal specification that includes the necessary and sufficient conditions for distinguishing this signal definition from anything else. It is similar to a dictionary definition, and the conditions put forth can translate to formal axioms in an ontology and can be used for inferencing and automation. | ||
|
||
**```comment ```** *[optional]* `since version 3.0` | ||
A comment can be used to provide additional informal information on a signal. | ||
This could include background information on the rationale for the signal design, | ||
references to related signals, standards and similar. | ||
Recommended to start with a capital letter and end with a dot (`.`). | ||
|
||
**```datatype```** | ||
The string value of the type specifies the scalar type of the data entry | ||
value. See [data type](/vehicle_signal_specification/rule_set/data_entry/data_types/) chapter for a list of available types. | ||
|
||
**```unit```** *[optional]* | ||
The unit of measurement that the data entry has. See [Data Unit Types](/vehicle_signal_specification/rule_set/data_entry/data_unit_types/) | ||
chapter for a list of available unit types. This | ||
cannot be specified if ```allowed``` is defined as the signal type. | ||
|
||
**```min```** *[optional]* | ||
The minimum value, within the interval of the given ```type```, that the | ||
data entry can be assigned. | ||
|
@@ -58,7 +84,3 @@ data entry can be assigned. | |
If omitted, the maximum value will be the "Max" value for the given type. | ||
Cannot be specified if ```allowed``` is defined for the same data entry. | ||
|
||
**```unit```** *[optional]* | ||
The unit of measurement that the data entry has. See [Data Unit Types](/vehicle_signal_specification/rule_set/data_entry/data_unit_types/) | ||
chapter for a list of available unit types. This | ||
cannot be specified if ```allowed``` is defined as the signal type. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
--- | ||
title: "Property Entry" | ||
date: 2023-11-07 | ||
weight: 1 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is for ordering when we generate HTML with Hugo. If we want it last we should have at least 8 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh, got it. Thanks. Please feel free to change, btw. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @erikbosch I think it should probably be after Branch Entry and at the same level. |
||
--- | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The term property is already used to define "members" of a struct, see https://github.com/COVESA/vehicle_signal_specification/blob/master/docs-gen/content/rule_set/data_entry/data_types_struct.md We may theoretically live with that if define two types of properties in different context (struct property in type file, data property somewhere else) but there is a risk for confusion so changing name on one of them likely makes sense. An easy approach would be "dataproperty" and "structproperty", but there is possibly better names. As part of this we need to discuss how/where properties should be defined. In any of the existing trees (signal tree and type tree) or in a new tree? We should also state some guidelines/decisions on how the VSS-project intends to work with (data)properties. Do we intend to add data properties to the standard catalog (short term or long term), or is it totally up to user? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Name: We can get rid of Property altogether and just promote DataProperty and ObjectProperty to the type. (Unfortunately, "Attribute" was also used.) Supposing this PR gets merged, it would be rapidly followed by a series of PR's that contain properties and add a reference to them in the signals. They are definitely meant to be part of the catalog and not up to the user. I would not add them to the existing tree as they are meant to be reused. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've committed another change that replaces property with dataProperty and objectProperty. |
||
A property entry describes an attribute, quality, or characteristic of a feature of interest. There are two flavors of properties: | ||
- ```DataProperty```: A property whose values are literals | ||
- ```ObjectProperty```: A property whose values are an object, often represented as an element in an enumeration | ||
|
||
A ```data property``` entry is exemplified below. A data property is constrained by a datatype and, optionally, unit, min, and/or max. | ||
|
||
```YAML | ||
RotationalSpeedPercent: | ||
type: property | ||
identifier: RotationalSpeedPercent | ||
elementType: DataProperty | ||
datatype: uint8 | ||
unit: percent | ||
min: 0 | ||
max: 100 | ||
definition: A percent of circular movements around a central axis during a particular | ||
time interval compared to the maximum possible or allowed | ||
description: The speed of a rotating part, such as the blades in a fan, on a scale of | ||
0 to 100 where 0 = still or off, and 100 = max or full | ||
``` | ||
|
||
The following elements are defined: | ||
|
||
**`RotationalSpeedPercent:`** | ||
The list element name defines the property identifier. There is no dot notation | ||
as properties are reusable stand-alone elements. | ||
|
||
**```type```** | ||
The value ```property``` specifies that this is a property entry. | ||
|
||
**```identifier```** | ||
A set of characters that uniquely identifies the property. This is redundant to the heading and added for consistency with branches and signals. | ||
|
||
**```elementType```** | ||
A type that categorizes whether values for the property are literals or objects. | ||
- ```DataProperty```: The property takes literals as values. | ||
- ```ObjectProperty```: The property takes pre-defined objects, such as enumeration elements, as values. | ||
|
||
**```datatype```** | ||
A classification that prescribes which values a data element can take and what type of mathematical, relational or logical operations | ||
can be applied to them. See [Data Types](/vehicle_signal_specification/rule_set/data_entry/data_types/) | ||
|
||
**```unit```** *[optional]* | ||
The unit of measurement that the data entry has. See [Data Unit Types](/vehicle_signal_specification/rule_set/data_entry/data_unit_types/) | ||
chapter for a list of available unit types. This | ||
|
||
**```min```** *[optional]* | ||
The minimum value, within the interval of the given ```type```, that the | ||
data entry can be assigned. | ||
If omitted, the minimum value will be the "Min" value for the given type. | ||
|
||
**```max```** *[optional]* | ||
The maximum value, within the interval of the given ```type```, that the | ||
data entry can be assigned. | ||
If omitted, the maximum value will be the "Max" value for the given type. | ||
|
||
**```definition```** | ||
A formal specification that includes the necessary and sufficient conditions for distinguishing this property from anything else. It is similar to a dictionary definition, and the conditions put forth can translate to formal axioms in an ontology and can be used for inferencing and automation. | ||
|
||
**```description```** *[optional]* | ||
Describes the meaning and content of the property. Descriptions can include any kind of information that helps humans conceptualize the entry, such as examples, sybmols, usage guidance, etc. | ||
Recommended to start with a capital letter and end with a dot (`.`). | ||
|
||
An ```object property``` entry is exemplified below. The ```allowed``` field enumerates the possible values. | ||
|
||
```YAML | ||
VerticalOrientation: | ||
type: property | ||
identifier: VerticalOrientation | ||
elementType: ObjectProperty | ||
allowed: ['UP', 'MIDDLE', 'DOWN'] | ||
definition: An ordinal category indicating a position on, or direction of, the z (vertical) axis | ||
description: Typical examples include whether a vent it pointing up or down, or the pitch of a vehicle | ||
``` | ||
**`VerticalOrientation:`** | ||
The list element name defines the property identifier. There is no dot notation | ||
as properties are reusable stand-alone elements. | ||
|
||
**```type```** | ||
The value ```property``` specifies that this is a property entry. | ||
|
||
**```identifier```** | ||
A set of characters that uniquely identifies the ```property```. This is redundant to the heading and added for consistency with branches and signals. | ||
|
||
**```elementType```** | ||
A type that categorizes whether values for the property are literals or objects. | ||
- ```DataProperty```: The property takes literals as values | ||
- ```ObjectProperty```: The property takes a pre-defined objects, such as enumeration elements, as values. | ||
|
||
**```allowed```** | ||
The set of values allowed for this object property | ||
|
||
**```definition```*** | ||
A formal specification that includes the necessary and sufficient conditions for distinguishing this property from anything else. It is similar to a dictionary definition, and the conditions put forth can translate to formal axioms in an ontology and can be used for inferencing and automation. | ||
|
||
**```description```** [optional]* | ||
Describes the meaning and content of the property. Descriptions can include any kind of information that helps humans conceptualize the entry, such as examples, sybmols, usage guidance, etc. | ||
Recommended to start with a capital letter and end with a dot (`.`). | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not quite sure isn't this redundant if it "is the Path? And if it just "could be" the path isn't it the same as arbitrary static-id?
Do you have a PR to vss-tools, to see how it would be used/influence the outputs?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I assume it could be practical in some representations, like when we generate JSON so that you can get the full name directly without the need of checking the structure. But if so it is something that typically cannot and should not be defined in source *.vspec files, but rather be generated by tooling
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@SebastianSchildt The direct answer is, "no." I won't personally be using vss-tools. The long answer is that as a data modeler/ontologist I work to make sure that schemas, models, and ontologies are designed in such a way to be generally useful. At Ford, we would like to use our signal schema for many things beyond those imagined in vss-tools, and this has already proved helpful. There are also some rather subtle conceptual principles in play, such as the where to draw the line between a feature of interest and a property. Having the entire path visible I believe pushes people to a more informed decision.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FYI: I've updated the initial comment to try to be more explicit