Catalog options

latest update: 2021-08-04  


In product catalogs we often see "options".

Options in a product catalog are ways in which a product may be configured.


  1. A PUMP model comes in a series of sizes, materials, etc.
  2. A car model comes in a series of colors, engine types, accessories, etc.


A generic model with three variants:

The ClassOfPhysicalObject (1) is the "Ur Class" or "anchor", top of the structure.

The ClassOfPhysicalObject (2) covers everything that is a common feature, so without any option.

The ClassOfPhysicalObject's (3), (4), and (5) are defining the options (there may be fewer or more options of all different types, car catalogs usually are that option-rich).

Each of (3), (4), and (5) inherit the common features of (2).

Now we have to collect all selected options (here (3) and (5)) by classifying them with the same instance of EnumeratedSetOfClass (6).

Finally we create a union of those enumerated classes (3) and (5) , thus eliminating the multiplicity (here 9-fold) of the inherited information of (2), to result in what we were after: the configured instance of ClassOfPhysicalObject (7)  .

Example of catalog options

Assume we select a car and use a "Configurator" as can be found on many websites.
For this example a random choice was made for a BMW with the following standard and optional features, where the selected options are in red:

    SE Pro 
    M Sport and M Sport Pro Edition
    Sport Pro 
    M Models

The selected SE Pro model comes standard with:

17" V-spoke style 778 light alloy wheels
Acoustic glass
Active Guard Plus
Adaptive LED Headlights
Ambient Lighting
Automatic Air Conditioning
BMW Online Services
BMW TeleServices
Cloth upholstery
Cruise Control
DAB Radio
Folding Wing Mirrors with Auto-dimming
Front LED Foglights
High-gloss Black Interior Trim
Live Cockpit Professional
Non-metallic exterior colour
Parking Assistant
Rear Folding Headrests
Rear-view Mirror with Auto dimming
Split folding rear seats
Sport Leather Steering Wheel
    Petrol Plug-in Hybrid (2)
        BMW 330e SE Pro Touring
        BMW 330e xDrive SE Pro Touring
    Petrol (2)
        BMW 318i SE Pro Touring
        BMW 320i SE Pro Touring
    Diesel (3)
        BMW 320d SE Pro Touring
        BMW 320d xDrive SE Pro Touring
        BMW 318d SE Pro Touring

        Alpine White
        Jet Black
        Black Sapphire metallic
        Melbourne Red
        Glacier Silver metallic
        Mineral White metallic
        Mineral Grey metallic
        Phytonic Blue metallic
        Blue Ridge Mountain metallic
    17" V-spoke style 778 light alloy wheels
    18" Bicolour Orbit Grey Double-spoke style
          782 alloy wheels

        Anthracite cloth
        Black Sensatec (Only available with
        additional optional equipment
        (see SE PLUS PACK) )

   High-gloss Black Interior Trim
   Quartz Silver Interior Trim
   Oak Grain Open-pored Interior Trim
   Ash Grey-brown Interior Trim

    Panoramic Glass Sunroof
    Sun Protection Glass
    Harman/Kardon Audio System
    Additional Storage Compartment

    SE PLUS PACK with:
        Black Sensatec
        Front Heated Seats
    COMFORT PACK with:
        Additional Storage Compartment
        Extended Storage Contents
        Comfort Access
        Heated Steering Wheel
        High-Beam Assistant
        Enhanced Bluetooth with Wireless Charging
        WiFi Hotspot
        Harman/Kardon Audio System
        Head-Up Display
        Enhanced Bluetooth with Wireless Charging
        WiFi Hotspot
        Harman/Kardon Audio System
        Head-Up Display
        Parking Assistant Plus
        Driving Assistant Professional
        Drive Recorder
        Gesture Control

This can be modeled as shown below, where lots of above details have to be left out for space reasons.

Please note that, as an example, "Jet Black" means: BMW SERIES 3 WITH 21 STANDARD FEATURES, that has a non-metallic Jet Black exterior colour.

Taking the far left sliver the code, from top to bottom of above diagram, is:

@prefix bmw: <> .
@prefix xsd: <> .
@prefix rdf: <> .
@prefix rdfs: <> .
@prefix owl: <> .
@prefix skos: <> .
@prefix dm: <> .
@prefix lci: <> .
@prefix meta: <> .
@prefix tpl: <> .
@prefix tip: <> .
@prefix rdl: <> .

bmw:dfc74e50-de8c-4067-b74e-1b3b1a304efc   rdf:type dm:ClassOfInanimatePhysicalObject ;
            rdfs:subClassOf rdl:RDS11526424 ;  # CAR
            rdfs:label "BMW SERIES 3" ;
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

bmw:3efd919a-9de7-42cb-9a99-43ce1ec97181   rdf:type dm:ClassOfInanimatePhysicalObject ;
            rdfs:subClassOf bmw:dfc74e50-de8c-4067-b74e-1b3b1a304efc ;
            rdfs:label "BMW SERIES 3 TOURING" ;
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

bmw:0a761a0a-0140-4f82-8e0e-93ba7acd59a4   rdf:type dm:ClassOfInanimatePhysicalObject ;
            rdfs:subClassOf bmw:3efd919a-9de7-42cb-9a99-43ce1ec97181 ;
            rdfs:label "BMW SERIES 3 TOURING WITH 21 STANDARD FEATURES" ;
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

bmw:c134c357-a0c2-4c8b-a634-45f36e1d35c4   rdf:type dm:ClassOfInanimatePhysicalObject ;
            rdfs:subClassOf bmw:0a761a0a-0140-4f82-8e0e-93ba7acd59a4 ;
            rdfs:label "BMW SERIES 3 TOURING WITH ENGINE OPTIONS" ;
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

bmw:7b448c69-0569-4e8b-8d1f-1569c58b500f  rdf:type dm:ClassOfInanimatePhysicalObject ;
            rdfs:subClassOf bmw:c134c357-a0c2-4c8b-a634-45f36e1d35c4 ;
            rdfs:label "Petrol Plug-in Hybrid" ;
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

bmw:f9aead82-d354-4eef-88c6-f9bb7bb29ded  rdf:type dm:ClassOfInanimatePhysicalObject ;
            rdfs:subClassOf  bmw:7b448c69-0569-4e8b-8d1f-1569c58b500f ;
            rdfs:label "BMW 330e xDrive SE Pro Touring" ;
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

bmw:2768272a-e95c-4618-8a1f-3f3d7aa552e4  rdf:type  dm:EnumeratedSetOfClass ;
            rdfs:label  "MY SELECTED OPTIONS" ;
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

bmw:51095fb0-3363-461b-9bb8-3aa4029ac7a6  rdf:type  tpl:ClassificationOfClassOfIndividual ;
            tpl:hasClassified  bmw:f9aead82-d354-4eef-88c6-f9bb7bb29ded  ;  # "BMW 330e xDrive SE Pro Touring"
            tpl:hasClassifier  bmw:2768272a-e95c-4618-8a1f-3f3d7aa552e4  ;  # "MY SELECTED OPTIONS"
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

bmw:e43de9b3-6b1a-4a48-b229-63fe01078387  rdf:type  tpl:UnionOfEnumeratedSetOfClass ; # provides the semantic link with the output information. Grab the EnumeratedSetOfClass members from there.
            tpl:hasInput  bmw:2768272a-e95c-4618-8a1f-3f3d7aa552e4  ; # ”MY SELECTED OPTIONS”
            tpl:hasResult  bmw:5f1f07cb-ec95-45f6-8693-63383c1d81b0  ; # "MY FULLY DETAILED SERIES 3 CAR"
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .

  rdf:type  dm:ClassOfInanimatePhysicalObject ;
            rdfs:subClassOf rdl:RDS11526424 ;  # CAR
            rdfs:label "MY FULLY DETAILED SERIES 3 CAR" ;
            meta:valEffectiveDate "2020-09-01T00:00:00Z"^^xsd:dateTime .