Data Model

The following is a discussion about the data model used by schema.org.

The data model used is very generic and derived from RDF Schema (which in turn was derived from CycL, which in turn ...).

  1. We have a set of types, arranged in a multiple inheritance hierarchy where each type may be a sub class of multiple types.
  2. We have a set of properties:
    1. each property may have one or more types as its domains. The property may be used for instances of any of these types.
    2. each property may have one or more types as its ranges. The value(s) of the property should be instances of at least one of these types.

The decision to allow multiple domains and ranges was purely pragmatic. While the computational properties of systems with a single domain and range are easier to understand, in practice, this forces the creation of a lot of artifical types, which are there purely to act as the domain/range of some properties.

Like many other systems, the schema presented here can be extended (with a few types like Type and Property and a few properties like domainIncludes and rangeIncludes) to allow for reflection, i.e., for the schema to be represented in terms of itself.

The canonical machine representation of schema.org is in RDFa:

Obsolete snapshots of Microdata and OWL experimental data dumps are also available. See also TopBraid's version.

The type hierarchy presented on this site is not intended to be a 'global ontology' of the world. It only covers the types of entities for which we (Microsoft, Yahoo!, Google and Yandex), think we can provide some special treatment for, through our search engines, in the near future.

Conformance

While we would like all the markup we get to follow the schema, in practice, we expect a lot of data that does not. We expect schema.org properties to be used with new types. We also expect that often, where we expect a property value of type Person, Place, Organization or some other subClassOf Thing, we will get a text string. In the spirit of "some data is better than none", we will accept this markup and do the best we can.

Mapping to RDFa Lite

Our use of Microdata maps easily into RDFa Lite. In fact, all of Schema.org can be used with the RDFa Lite syntax. The RDFa Lite version of the markup looks almost isomorphic to the Microdata version. The following sample demonstrates the use of RDFa Lite to mark up a Product type example:
<div vocab="http://schema.org/" typeof="Product">
  <img property="image" src="dell-30in-lcd.jpg" />
  <span property="name">Dell UltraSharp 30" LCD Monitor</span>

  <div property="aggregateRating"
    typeof="AggregateRating">
    <span property="ratingValue">87</span>
    out of <span property="bestRating">100</span>
    based on <span property="ratingCount">24</span> user ratings
  </div>

  <div property="offers" typeof="AggregateOffer">
    <span property="lowPrice">$1250</span>
    to <span property="highPrice">$1495</span>
    from <span property="offerCount">8</span> sellers
  </div>

  Sellers:
  <div property="offers" typeof="Offer">
    <a property="url" href="save-a-lot-monitors.com/dell-30.html">
     Save A Lot Monitors - $1250</a>
  </div>
  <div property="offers" typeof="Offer">
    <a property="url" href="jondoe-gadgets.com/dell-30.html">
     Jon Doe's Gadgets - $1350</a>
  </div>
  ...
</div>

More specifically:

  1. itemprop is replaced with property.
  2. itemscope is dropped.
  3. itemtype is replaced with typeof.

In addition, the attribute value pair vocab="http://schema.org/" is added to the body or some other enclosing tag.

Last Updated: 14 May 2014