This is a proposal to add some meta-schema constructs into schema.org's vocabulary, to support sharing of currently-internal data structures.
Schema.org shares its basic data model with W3C RDF, but varies on a few details - see datamodel.html for more discussion.
There are a few cases where it would be useful within schema.org to talk about classes and properties as first class entities. In addition there are already undocumented properties 'schema.org/domain', 'schema.org/range' in use when sharing machine readable schemas in RDFa, e.g. schema_org_rdfa.html.
It is useful to have internal-to-schema.org names for 'Class' and 'Property', even though it is often more appropriate to use W3C's equivalent terms for wider data sharing. For example this makes it easier to use metaclasses in schema.org definitions, without requiring the use of multiple namespaces.
- Add a property to schema.org, 'rangeIncludes', which 'relates a property to a class that constitutes (one of) the expected type(s) for values of the property'.
- Add a property to schema.org, 'domainIncludes', which 'relates a property to a class that is (one of) the type(s) the property is expected to be used on'.
These concepts allude to W3C RDFS notions of domain and range, but are importantly weaker. In earlier experimental RDFa/RDFS serializations, schema.org used 'schema.org/range' and 'schema.org/domain' as names for these concepts, but feedback suggests this is confusing. Here we use 'rangeIncludes', 'domainIncludes' instead.
For example, at the time of writing, the property 'activeIngredient' can be used with the classes 'DietarySupplement', 'Drug'. Since the schema.org 'house style' is to avoid adding unnecessary classes that exist only as vocabulary-structuring artifacts, we do not have a common parent type such as 'IngredientBearingEntity'. Further, since schema.org is under constant expansion, it might be misleading to use complex OWL assertions to say that the property 'activeIngredient' will always and only be applied to entities that are in the union of the classes 'DietarySupplement' and 'Drug'; more expected types could be added at any time. The compromise design proposed here for schema.org is to document weaker associations between types and properties, and to name these 'rangeIncludes', 'domainIncludes' to avoid confusion with the related concepts from RDFS and OWL.
- Add a type to schema.org, 'Class', which corresponds to the type 'rdfs:Class' in W3C RDFS (and very loosely to owl:Class too, but without any commitment to Description Logic etc.).
- Add a type to schema.org, 'Property', which corresponds to the type 'rdf:Property' in W3C RDFS.
- Update the RDFa representation of schema.org to use 'rangeIncludes' instead of 'range'; 'domainIncludes' instead of 'domain', and to add the new types alongside their W3C equivalents.
These local aliases indicate the shared approach between schema.org and RDF, while allowing schema.org to document itself using a single flat namespace. For wider publication and integration of data, use of rdf:Property and rdfs:Class can also be used directly, e.g. see schema_org_rdfa.html.