Schema.org is awesome. It provides useful terms to annotate a great variety of entities on the web. Events, articles, products, people, hotels… for almost every item the modern webmaster wants to annotate, there’s a schema.org class for it. But since the initiative, driven by Bing, Google, Yahoo! and Yandex , is reatively young (2011), it’s pretty easy to hit the wall. That is what happens if one tries to annotate the ski lifts and slopes of a ski resort. The class schema.org/SkiResort is a subclass of schema.org/SportsActivitieLocation but does not introduce any new attributes. This article describes the approach to extend the schema.org vocabulary by two new classes and some new attributes to meet the requirements for the proper annotation of ski resorts.
This article describes a schema.org extension which is currently under review by the schema.org steering committee and not yet part of schema.org!
What’s new
Ski resort
To properly annotate a ski resort, apart from the properties inherited from LocalBusiness, Place, Organization and Thing, we need two new properties to add lifts and slopes. So we introduced hasSkiLift which expects the newly introduced type SkiLift and hasSkiSlope which expects the newly introduced type SkiSlope.
Ski lift
The type SkiLift is, like the ski resort itself, inherited from SportsActivityLocation. The new attributes describe the length, the elevation at the start (elevationStart) and the elevation at the end (elevationEnd) of the lift, the type (liftType: T-Bar lift, chair lift or cable car), the number of stops (numberOfStops) and the transport capacity (transportCapacity).
Ski slope
The newly introduced SkiSlope is inherited from SportsActivityLocation as well. The newly introduced attributes identify the ski slope by a number (slopeNumber), describe the difficulty and the length.
Example
The following example uses Microdata and describes a ski resort with two ski lifts and three ski slopes.
<div itemtype="http://schema.org/SkiResort" itemid="http://www.stanzach.at/familienskilifte.html" itemscope> <meta itemprop="name" content="Familienskilifte Stanzach" /> <link itemprop="sameAs" href="http://www.naturpark-lechtal.at/winter/ski-und-snowboard/ski-und-snowboard.html?aid=55" /> <link itemprop="sameAs" href="http://www.lechtal.at/winter/winter-aktiv-lechtal/skifahrenimlechtal/skigebiete/familienskigebiet-stanzach.html" /> <link itemprop="image" href="http://www.naturpark-lechtal.at/index.php?rex_resize=990c__300h__p1230074.jpg" /> <div itemprop="hasSkiLift" itemtype="http://schema.org/SkiLift" itemscope> <meta itemprop="length" content="550" /> <meta itemprop="transportCapacity" content="2" /> <meta itemprop="numberOfStops" content="2" /> <meta itemprop="elevationEnd" content="1190" /> <meta itemprop="elevationStart" content="940" /> <meta itemprop="name" content="Stoamandllift" /> <meta itemprop="liftType" content="T-bar lift" /> </div> <div itemprop="hasSkiSlope" itemtype="http://schema.org/SkiSlope" itemscope> <meta itemprop="length" content="1330" /> <meta itemprop="name" content="Familienabfahrt" /> <meta itemprop="difficulty" content="blue" /> <meta itemprop="slopeNumber" content="1a" /> </div> <div itemprop="hasSkiSlope" itemtype="http://schema.org/SkiSlope" itemscope> <meta itemprop="length" content="1820" /> <meta itemprop="name" content="Rennstrecke" /> <meta itemprop="difficulty" content="red" /> <meta itemprop="slopeNumber" content="1b" /> </div> <div itemprop="hasSkiSlope" itemtype="http://schema.org/SkiSlope" itemscope> <meta itemprop="length" content="2575" /> <meta itemprop="name" content="Wald Verbindungslift" /> <meta itemprop="difficulty" content="Skiroute" /> <meta itemprop="slopeNumber" content="2" /> </div> </div>
The same example in JSON-LD looks like this:
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "SkiResort", "@id": "http://www.stanzach.at/familienskilifte.html", "name": "Familienskilifte Stanzach", "sameAs": [ "http://www.naturpark-lechtal.at/winter/ski-und-snowboard/ski-und-snowboard.html?aid=55", "http://www.lechtal.at/winter/winter-aktiv-lechtal/skifahrenimlechtal/skigebiete/familienskigebiet-stanzach.html" ], "image": "http://www.naturpark-lechtal.at/index.php?rex_resize=990c__300h__p1230074.jpg", "hasSkiLift": { "@type": "SkiLift", "name": "Stoamandllift", "liftType": "T-bar lift", "transportCapacity": "2", "elevationStart": "940", "elevationEnd": "1190", "length": "550", "numberOfStops": "2" }, "hasSkiSlope": [{ "@type": "SkiSlope", "name": "Familienabfahrt", "slopeNumber": "1a", "length": "1330", "difficulty": "blue" },{ "@type": "SkiSlope", "name": "Rennstrecke", "slopeNumber": "1b", "length": "1820", "difficulty": "red" },{ "@type": "SkiSlope", "name": "Wald Verbindungslift", "slopeNumber": "2", "length": "2575", "difficulty": "Skiroute" }] } </script>
Documentation and Discussion
The full documentation (in progress) can be found at: sdo-skiresort.appspot.com/docs/skiresort.html and the discussion , on the extension as well as on the integration progress in schema.org can be found on Github in the pull request: github.com/schemaorg/schemaorg/pull/1259