linked data in use: schema.org, json-ld and hypermedia apis - front in bahia 2014
DESCRIPTION
In my talk I walk throgh Semantic Web initiatives, like RDF and SPARQL, linked data principles, discuss some implementation and adoption issues and talk about semantic annotation in HTML. Semantic annotation using the Schema.org vocabulary is demonstrated using both HTML 5 Microdata or JSON-LD input. There is a strong highlight in benefits seen in Google search results with Rich Snippets, Actions in Email, and Google Now with real examples.TRANSCRIPT
LINKED DATA IN USE
Ícaro Medeiros [email protected] !Time de Semântica [email protected]
globo.com
Front in Bahia 13/9/2014
LINKED DATA IN USE
Schema.org, JSON-LD, and hypermedia APIs
WHAT IS LINKED DATA?
SEMANTIC WEB !
DONE RIGHT
"I have a dream for the web in which computers become capable of analyzing all the data on the web - the content, links, and transactions between people and computers."
Tim Berners-Lee
ROBERTO CARLOS GOAL AT MARACANÃ
http://www.bbc.co.uk/blogs/legacy/radiolabs/s5/linked-data/s5.html
http://www.bbc.co.uk/blogs/legacy/radiolabs/s5/linked-data/s5.html
Standard Vocabularies
• Dublin Core: publications
• FOAF: people
• SIOC: online communities
• DBPedia: Wikipedia in triples
Linked Data Principles
1. Use URIs as names for things
2. Use HTTP URIs so that people can look up those names.
3. When someone looks up a URI, provide useful information, using the standards (RDF*, SPARQL)
4. Include links to other URIs, so that they can discover more things.
Or…
1. Entity identity
2. Access
3. Structure
4. Integration
RDF AND SPARQL
Triple representation
subject predicate object
Neymar is a player
Barcelona is a team
Neymar plays for Barcelona
<Neymar> <Barcelona> <Santos>
<Player> <Time>
<BarcelonaXSantos:02082013><Partida>
is ais ais aplays for
is a
home team away team
<Camp Nou>
location
"2013/08/02"
date
RDF triples
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. @prefix foaf: <http://xmlns.com/foaf/0.1/>. @prefix dbpedia: <http://dbpedia.org/ontology> !esportes:Neymar rdf:type dbpedia:SoccerPlayer ; rdfs:label "Neymar" ; foaf:name "Neymar da Silva Santos Júnior" ; dbpedia:birthDate "05/02/1992" ; owl:sameAs dbpedia:Neymar .
Linking!datasets
LINKED DATASETS
SPARQL query
Select all instances of dbpedia:SoccerPlayer class and its names !!!SELECT ?player ?name FROM <http://dbpedia.org> WHERE { ?player rdf:type dbpedia:SoccerPlayer ; rdfs:label ?name . }
• Complexity (ontologies?)
• NO clear advantage
• Triplestore databases: immature
• Missing a killer application
• Fax problem
• Slow adoption
Problems
LINKED DATA WITHOUT RDF?
DON’T YOU WORRY ABOUT A
schema.org/Thing
SCHEMA.ORG
RICH SNIPPETS GOOGLE NOW
KNOWLEDGE GRAPH
CLEAR ADVANTAGE
RICH SNIPPETS
City
Date
Location
GMAIL
https://developers.google.com/gmail/actions/reference/flight-reservation?hl=pt-BR
GOOGLE NOW
MAPS
SERP
<html itemscope itemtype="http://schema.org/Event"> <head> <title itemprop="name"> Front in Maceió </title>
crawler! saves annotation! in KG
search results!enhanced
ONE VOCABULARY TO RULE THEM ALL
HOW TO DO IT?
<html itemscope itemtype="http://schema.org/Event"> <head> <title itemprop="name"> Front in Bahia </title> ...
MICRODATA
<html itemscope itemtype="http://schema.org/Event"> ... <section itemprop="location" itemscope itemtype="http://schema.org/Place"> <span itemprop="name">CESMAC</span> <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"> <span itemprop="addressLocality"> Maceió </span> ...
NESTED PROPERTIES
Schema.org usage
• Sample 12B pages (Google Index)
• 6% domains
• ~21% pages
• Avg entities/page: 6
• Avg facts/page: 26
http://www.slideshare.net/rvguha/sem-tech2014c
JSON-LD
Plain old JSON
{ "name": "Keith Urban", "url": "http://www.keithurban.net/tour/420", }
{ "@context": "http://schema.org", "@type": "MusicEvent", "name": "Keith Urban", "url": "http://www.keithurban.net/tour/420", }
JSON-LD
Advantages
• Semantic layer on top of JSON
• Self-described
• Can be added to existing APIs
• JSON is extensively used
• Data can be anchored in schema.org
• Easy serialization to RDF
JSON-LD AND HYPERMEDIA APIS
GET /events/1 HTTP/1.1 Host: example.com ==================================== HTTP/1.0 200 OK ... Content-Type: application/json Link: <example.com/events/1.jsonld>; rel=http://www.w3.org/ns/json-ld#context; type=application/ld+json !{ "name": "Keith Urban", "url": "http://www.keithurban.net/tour/420", }
Client follows link!(hypermedia API)
{ "@context": "http://schema.org", "@type": "MusicEvent", "@id": "/events/1", "name": "Keith Urban", "url": "http://www.keithurban.net/tour/420", }
Self-described Resource
{ "@context": "http://schema.org", "@type": "MusicEvent", "@id": "/events/1", "name": "Keith Urban", "url": "http://www.keithurban.net/tour/420", "offers": [{ "@id": "/events/1/offer/1", "@type": "Offer" }]}
Client follows link
Resource+links
JSON-SCHEMA
GET /events/1 HTTP/1.1 Host: example2.com ==================================== HTTP/1.0 200 OK … Content-Type: application/json; profile=/events/1/_schema !{ "name": "Keith Urban", "url": "http://www.keithurban.net/tour/420", }
Client follows link (hypermedia API)
Schema in different resource
GET /events/1/_schema HTTP/1.1 Host: example2.com ==================================== HTTP/1.0 200 OK … !{ "title": "Event", "type": "object", "properties": { "name": {"type": "string"}, "url": {"type": "url"} }, "links": { "rel": "offers", "href": "/events/1/offers" } }
Client does not know!URLs, just 'rel's
HYPERMEDIA APIS
Hypermedia?
• Don’t remind URLS. Navigate!
• Decoupling server and client
• Content negotiation
• Application treated as State Machine
/GET
{ "items": [ { "title": "News", "@id": "http://example.com/news/", "resource_id": "news" }, { "title": "Sports", "@id": "http://example.com/sports/", "resource_id": "sports" } ]
"links": [ { "href": “http://example.com/“, "rel": "self" }, { "href": "http://example.com/{resource_id}", "rel": "item" }, { "href": "http://example.com", "method": "POST", "rel": "create" }, { "href": "http://example.com/{resource_id}", "method": "DELETE", "rel": "delete" }, { "href": "http://example.com/?page=2", "method": "GET", "rel": "next" } ]
/GET /sportsrel:item
resource_id:sports
GET
self
/sports/Team/Barcelona
/sports/Team
inCollection
item
createdeletereplace
Relations
JSON-LD IN HTML
JSON-LD annotation<script type="application/ld+json"> [{ "@context": "http://schema.org", "@type": "MusicEvent", "name": "Keith Urban", "url": "http://www.keithurban.net/tour/420", "startDate": "2014-09-07", "performer": [{ "@type": "MusicGroup", "name": "Keith Urban", "sameAs": "http://www.keithurban.net"}],
www.keithurban.net/tourLinking!datasets
Same!vocabulary
"location": { "@type": "Place", "name": "Sleep Train Amphitheatre", "address": { "@type": "PostalAddress", "addressLocality": "Sacramento", "addressState": "CA", "addressCountry": "US" }}, "offers": [{ "@type: "Offer", "name": "TICKETS", "url": "http://www.keithurban.net/tour/420" }]} //... ] </script>
Link is!followed!by crawler
{ "@context": "http://schema.org", "@type": "MusicEvent", // ... "offers": [{ "@type": "Offer", "name": "General Tickets", "price": "40.00", "priceCurrency": "USD", "availability": "InStock", "validFrom": "2014-02-15T10:00", "category": "primary", "url": "www.axs.com/events/248328/keith-urban-tickets" }]}
keithurban.net/tour/420……..
www.axs.com/events/248328/keith-urban-tickets
JSON-LD IN EMAIL
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "FlightReservation", "reservationNumber": "RXJ34P", "reservationStatus": "http://schema.org/Confirmed", "underName": { "@type": "Person", "name": "Eva Green" }, "reservationFor": { "@type": "Flight", "flightNumber": "110", "airline": { "@type": "Airline", "name": "United" }, //... </script>
GMAIL
https://developers.google.com/gmail/actions/reference/flight-reservation?hl=pt-BR
OPEN GRAPH
TOOLS
SCHEMA.ORG
JSON-LD.ORG
g.co/StructuredData
http://www.google.com/webmasters/tools/richsnippets
STRUCTURED DATA MARKUP HELPER
https://www.google.com/webmasters/markup-helper
https://www.google.com/webmasters/markup-tester/
Semantic annotation goes a looong way
• +SEO
• +Mobile Rich Info
• Applications we don’t even know yet
github.com/!globocom/
IWantToWorkAtGloboCom
icaromedeiros.com.br
• Pelican (Python)
• Use ReStructuredText (rst) or Markdown
• Generate static pages
• Deploy to github pages easily
• github.com/icaromedeiros/pelican-microdata
.. itemscope:: BusinessEvent :tag: p !
Today I have presented a talk in :itemprop:`Salvador <location>` at :itemprop:`Front in Bahia <name>`.
<p itemscope itemtype="http://schema.org/BusinessEvent"> Today I have presented a talk in <span itemprop="location">Salvador</span> at <span itemprop="name">Front in Bahia</span>. </p>
Ícaro Medeiros [email protected]
!Semantic team
globo.com
slides icaromedeiros.com.br
slideshare.net/icaromedeiros