The Universal Variability Language is a community effort towards a unified language for variability models. UVL is a direct result of the efforts within the MODEVAR initiative. Do you have any questions on UVL? Do you want to contribute? We gladly receive your message (Contact).
UVL specifies variability models with a tree-like structure to represent the hierarchical structure of variability models. Below you can see a simple example of a variability model in UVL. The tree structure is visualized on the right side in the FeatureIDE representation. The language core of UVL comes with several concepts to specify constraints:
- Mandatory: The feature needs to be selected if its parent is selected
- Optional: The feature can be selected if its parent is selected
- Or: At least one of the children need to be selected if its parent is selected
- Alternative: Exactly one of the children needs to be selected
- Cross-tree constraints: Arbitrary propositional constraints over the features
features
Sandwich
mandatory
Bread
optional
Sauce
alternative
Ketchup
Mustard
Cheese
constraints
Ketchup => Cheese
In addition to the language core described above, UVL provides several extensions providing additional language constructs. The following language levels are supported:
- SAT Level
- SAT Core: Level without any extension as seen above
- Group Cardinality: Specify selecting [n..m] (between n and m) children parent-children relationships D
- SMT Level
- SMT Core: Supports constraints over feature attributes with standard arithmetic operations (+,-,*,/,=,!=,>,<)
- Attribute aggregates: Simplifies specification of attribute constraints by allowing sum() and avg() aggregates
- Feature Cardinality: A single feature can be selected between n and m times
The following feature model in UVL syntax enriches the previous version with new language concepts. Further, feature attributes, such as the number of calories, are attached to features.
include
SAT-level.group-cardinality
SMT-level.aggregate-function
SMT-level.feature-cardinality
features
Sandwich
mandatory
Bread {Calories 100, Sugar 20}
optional
Sauce
or
Ketchup {Calories 40, Sugar 35}
Mustard {Calories 25, Sugar 5}
Cheese
[0..2] // Group cardinality
Cheddar {Calories 60}
Gouda {Calories 50}
Goat {Calories 35}
Pickle cardinality [1..3] // Feature cardinality
constraints
Ketchup => Cheese
Bread.Sugar + Ketchup.Sugar + Mustard.Sugar < 60 // Attribute constraints
sum(Calories) < 160 // Attribute aggregate
Any tool support for UVL or tool integrating UVL missing? We are happy to embed your suggestion.
- Java-based parser for UVL: UVL-Parser2.0
- Python-based parser for UVL (WIP): UVL Parser
- Rust-based Language Server Protocol for integrating UVL in your favorite IDE: UVLS
- Visual Studio Code extension based on UVLS
- IDE for feature-oriented software development: FeatureIDE
- Python-based analysis frame for variability models: Flama
- Transformations between different variability modelling approaches: TraVarT
Here, we only present a small selection of papers. Any interesting work on UVL missing? We are happy to embed your suggestion.
- Chico Sundermann, Kevin Feichtinger, Dominik Engelhardt, Rick Rabiser, and Thomas Thüm. 2021. Yet another textual variability language? a community effort towards a unified language. SPLC '21. https://doi.org/10.1145/3461001.3471145
- Chico Sundermann, Tobias Heß, Dominik Engelhardt, Rahel Arens, Johannes Herschel, Kevin Jedelhauser, Benedikt Jutz, Sebastian Krieter, and Ina Schaefer. 2021. Integration of UVL in FeatureIDE. MODEVAR@SPLC '21. https://doi.org/10.1145/3461002.3473940
- Kevin Feichtinger, Johann Stöbich, Dario Romano, and Rick Rabiser. 2021. TRAVART: An Approach for Transforming Variability Models. VaMoS '21. https://doi.org/10.1145/3442391.3442400
- Dario Romano, Kevin Feichtinger, Danilo Beuche, Uwe Ryssel, and Rick Rabiser. 2022. Bridging the gap between academia and industry: transforming the universal variability language to pure::variants and back. MODEVAR@SPLC '22. https://doi.org/10.1145/3503229.3547056
- José A. Galindo and David Benavides. 2020. A Python framework for the automated analysis of feature models: A first step to integrate community efforts. MODEVAR@SPLC '20. https://doi.org/10.1145/3382026.3425773
- Jose M. Horcas, Jose A. Galindo, Mónica Pinto, Lidia Fuentes, and David Benavides. 2022. FM fact label: a configurable and interactive visualization of feature model characterizations. SPLC '22. https://doi.org/10.1145/3503229.3547025
- David Romero, José Á. Galindo, Jose-Miguel Horcas, and David Benavides. 2021. A first prototype of a new repository for feature model exchange and knowledge sharing. SPLC '21. https://doi.org/10.1145/3461002.3473949
- Maurice H. ter Beek, Klaus Schmid, and Holger Eichelberger. 2019. Textual Variability Modeling Languages: An Overview and Considerations. MODEVAR@SPLC '19. https://doi.org/10.1145/3307630.3342398
- Thorsten Berger and Philippe Collet. 2019. Usage Scenarios for a Common Feature Modeling Language. MODEVAR@SPLC '19. https://doi.org/10.1145/3307630.3342403
- Thomas Thüm, Christoph Seidl, and Ina Schaefer. 2019. On Language Levels for Feature Modeling Notations. MODEVAR@SPLC '19 https://doi.org/10.1145/3307630.3342404