Schema.org er et initiativ som ble lansert 2. juni 2011 av Bing, Google og Yahoo!,[1][2] datidens største søkemotorer.[3] Formålet var å «opprette og støtte et felles sett av vokabular for strukturerte data på nettsider».[4] I november 2011 sluttet den største søkemotoren i Russland, Yandex, seg til initiativet.[5][6] Forslaget innebærer bruk av schema.org-vokabular i kombinasjon med formater som kan kombineres med HTML for å gi støtte for strukturerte data i en nettside, nærmere bestemt Mikrodata, RDFa, eller JSON-LD.[7] På den måten kan de strukturerte dataene bli forstått av søkemotorer og andre søkeroboter (se Semantisk web). Initiativet beskriver også en utvidelsesmekanisme for å legge til flere egenskaper.[8] Diskusjon om endringer og forslag til tillegg til vokabularene i schema.org foregår på initiativets Github-sider.[9]
I 2012 ble GoodRelations-vokabularet som brukes til å beskrive varer og tjenester og annet knyttet til handel, integrert i Schema.org.[10]
Mange av vokabularene på schema.org er inspirert av tidligere formater som mikroformater, FOAF, og OpenCyc.[11] Fra 2015 har Google støttet JSON-LD - formatet. Fra september 2017 har Google anbefalt JSON-LD som det foretrukne alternativet for strukturerte data når det er mulig.[12]
For å teste tolkbarheten av de data som er beskrevet med Schema.org-vokabular finnes det ulike verktøy som Google Structured Data Testing Tool,[13] Yandex Microformat validator[14] og Bing Markup Validator.[15]
Noen av vokabularene, som vokabularene for organisasjon og person brukes for å påvirke Googles Knowledge Graph resultater.[16] Apple innførte bruk av Schema.org i iOS 9 (Searchlight/Siri) blant annet for søkefunksjonalitet som produkter, priser, organisasjoner, bilder, telefonnummer og mulighet for å søke på nettsider. Apple bruker også Schema.org som del av RSS for å identifisere nyheter.[17]
I Norge brukes Schema.org blant annet på Oslo kommunes nettsted. Et eksempel er siden om Tøyenbadet, der det både fremgår via Schema.org-kode at Tøyenbadet er et offentlig svømmebasseng ("Public Swimming Pool"):
<article vocab="http://schema.org/" typeof="PublicSwimmingPool">
Videre fremgår det hva som er åpningstidene, de understrekne egenskapene er fra Schema.org:
Mandag:</span> <span property="openingHoursSpecification" typeof="OpeningHoursSpecification" aria-label="07:00 til 19:00"><meta property="validFrom" content="2018-07-02"><meta property="validThrough" content="2018-07-02"><meta property="opens" content="07:00"><meta property="closes" content="19:00">07:00 - 19:00</span></li><li style=""><span class="day"><!-- 03.07. -->
Følgende er et eksempel på hvordan informasjon om en film og filmens regissør kan markeres i HTML ved hjelp av schema.org og mikrodata. For å markere opplysningene er attributtet itemtype
brukt i kombinasjon med URL-adressen til vokabularet. Attributtet itemscope
definerer omfanget av itemtype. Datatypen til det aktuelle elementet kan defineres ved hjelp av attributtet itemprop
.[18]
<div itemscope itemtype="http://schema.org/Movie">
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span>
(born <time itemprop="birthDate" datetime="1954-08-16">August 16, 1954</time>)
</div>
<span itemprop="genre">Science fiction</span>
<a href="../movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>
<div vocab="http://schema.org/" typeof="Movie">
<h1 property="name">Avatar</h1>
<div property="director" typeof="Person">
Director: <span property="name">James Cameron</span>
(born <time property="birthDate" datetime="1954-08-16">August 16, 1954</time>)
</div>
<span property="genre">Science fiction</span>
<a href="../movies/avatar-theatrical-trailer.html" property="trailer">Trailer</a>
</div>
<script type="application/ld+json">
{
"@context": "http://schema.org/",
"@type": "Movie",
"name": "Avatar",
"director":
{
"@type": "Person",
"name": "James Cameron",
"birthDate": "1954-08-16"
},
"genre": "Science fiction",
"trailer": "../movies/avatar-theatrical-trailer.html"
}
</script>