Re: How to encode a product family?

Hi all,

when "product family" means a mere group of products that serve a similar purpose, I would use schema:category for the group (e.g. "iPhone"). schema:isVariantOf is meant for linking from base models to fully specified models.

So here is what I would use:

@prefix pto: <> .

foo:iphone1 a schema:ProductModel, pto:Smartphone;
	schema:name "iPhone 1";
	schema:category "Apple iPhone Family".

foo:iphone2 a schema:ProductModel, pto:Smartphone;
	schema:name "iPhone 2";
	schema:category "Apple iPhone Family".

foo:iphone3 a schema:ProductModel, pto:Smartphone;
	schema:name "iPhone 3";
	schema:category "Apple iPhone Family".

foo:iphone3gs a schema:ProductModel, pto:Smartphone;
	schema:name "iPhone 3 GS";
	schema:category "Apple iPhone Family".

foo:iphone4 a schema:ProductModel, pto:Smartphone;
	schema:name "iPhone 4";
	schema:category "Apple iPhone Family".

foo:iphone5 a schema:ProductModel, pto:Smartphone;
	schema:name "iPhone 5";
	schema:category "Apple iPhone Family".

foo:iphone5se a schema:ProductModel, pto:Smartphone;
	schema:name "iPhone 5 SE";
	schema:category "Apple iPhone Family".

Then, I would materialize all or the relevant fully specified models, like my new iPhone 5 SE in space-grey with 64 GB:

foo:iphone5se_gray_64gb a schema:ProductModel, pto:Smartphone;
	schema:name "iPhone 5 SE Space-Grey, 64 GB";
	schema:category "Apple iPhone Family";
	schema:color "space gray";
		[ a schema:PropertyValue; 
		  schema:name "capacity";
		  schema:unitText "GB" ] .
	# add more features here, see for examples

Then I would state that each fully specified model is a variant of its base model:

foo:iphone5se_gray_64gb schema:isVariantOf foo:iphone5se.

You could also also indicate that the newer models are successors of the older ones:

foo:iphone5se schema:successorOf foo:iphone5 .
foo:iphone5 schema:successorOf foo:iphone4 .
foo:iphone3gs schema:successorOf foo:iphone3 . 
foo:iphone3 schema:successorOf foo:iphone2 .
foo:iphone2 schema:successorOf foo:iphone1 .

Note that successorOf is intended to be transitive (see, but we have not yet made this explicit in, because meta-properties for properties were not supported initially.

schema:isVariant is not transititve, because properties should be passed from the generic model to the fully specified ones with a pragmatic mechanism for overriding a property (a property will not be passed along if it is already locally specified, see For this, the ordering of inferences can matter as soon as we have more than one level of hierarchy. If you allow complex variant relationships, the reasoning gets very difficult.

Further references (not all up to date):

Hope that helps!


martin hepp          @mfhepp

> On 03 May 2016, at 17:18, Dan Brickley <> wrote:
> +Martin Hepp
> On 3 May 2016 at 16:01, Alexandre Bertails <> wrote:
>> Folks,
>> I am trying to encode the following things in
>> 1. "iPhone is a Product family."
>> 2. "iPhone 6s is part of the iPhone Product family."
>> 3. all the Products of a Product family would be related to each other (schema:isRelatedTo), and/or similar to each other (schema:isSimilarTo).
>> Except for 3., I cannot find something that would capture exactly the notion of Product family.
> You might look at and isVariantOf ("A
> pointer to a base product from which this product is a variant. It is
> safe to infer that the variant inherits all product features from the
> base model, unless defined locally. This is not transitive.") and
> predecessorOf/successorOf (which I now see should be marked as mutual
> inverses, issue filed as
> ).
> I guess you'd need to figure out the constant "essence of iPhone" and
> make a generic ProductModel for that, and then relate them. I'm not
> sure how deep you'd want this to go e.g. I have an (excellent if
> ageing) iPad Mini, presumably part of an iPad Product family; would se
> use isSimilarTo vs iSvariantOf to link iPhone and iPad families
> together?
> Dan
>> Any idea?
>> Alexandre

Received on Tuesday, 3 May 2016 15:45:40 UTC