Viewing Your Data as Triples
How do programs communicate via triples?
Alice and Bob publish triples, Charlie's software tries to use their data.
It's all about the specific URIs, the vocabulary.
Essentially, when using RDF, the vocabulary is the syntax, the API.
Data Providers:
Data Consumers:
What are the things your data is about?
(items, entities, objects, individuals, resources)
in scenario: incident, location, suspect/convict, trial, stolen/damaged property, victim
See UML, Database Records, your web site
give them good, long-term URI names
Pick URIs that:
Such as:
See Designing URI Sets for the UK Public Sector
Misleading Names
Can't Derefernce
Dereference Doesn't Work
Conflating Item and Page About Item
Unreadable names (usually):
Shared Leading Prefix:
Namespace name: "http://dbpedia.org/resource/"
Confusingly similar to XML namespaces; sometimes the same, sometimes different.
Namespace document:
Often the same as dereferencing things in namespace.
Stage 1: Unstable
Stage 2: Stable
Stage 3: Deprecated
Stage 4: Dead
URIs in a namespace can be at different stages.
Don't version namespaces. Don't be fooled by:
(They were chosen before we knew this, and now they're stuck.)
Essential to understand a triple, the middle part
Also known as:
Each triple states the answer to a question.
A Data Property:
An Object Property:
RDF uses some XML Schema Part 2: Datatypes, usually these ones.
Each datatype is a mapping:
... etc
@@@ make these be links to real documentation
rdfs:label
rdfs:comment
owl:sameAs
foaf:name
dc:creator
two terms for the same thing
owl:sameAs
owl:equivalentProperty
two terms for possibly-identical things. splitting hairs:
Compare: City of Boston (politcal entity) City of Boston (geographic region)
The Pedantic Web
(dc refines)
rdfs:subPropertyOf
geographically near, overlapping, contained-within
Not all related properties are equiv or sub
foaf:firstName, foaf:givenName, foaf:lastName, foaf:familyName, foaf:name
if { ?x foaf:firstName ?first; foaf:lastName ?last } then { ?x foaf:familyName ?last; foaf:givenName ?first; foaf:name func:string-join(?first " " ?last) } if { ?x foaf:name ?name } and pred:contains(?name, " ") then # incorrect if lastname has space, like Hillary Rodham Clinton { ?x foaf:firstName func:string-before(?name, " "); foaf:lastName func:string-after(?name, " ") }
The world is full of competing standards. That's good, but painful.
Probably best to follow Postel's Law:
Be conservative in what you do; be liberal in what you accept from others.
Research topic: automatic downloading of conversion rules
Sets of objects with something in common.
Instances / rdf:type
Subclass hierarchy
plant / large_plant / tree / mature_horse_chestnut, the one in my back yard
domain: the class of things which might have this property.
range: the class of possible values for this property
Domain | Property | Range |
---|---|---|
foaf:Person | foaf:firstName | (string) |
dcat:Catalog | dcat:record | dcat:CatalogRecord |
eg:Parent | eg:daughter | eg:Female |
rdfs:Property | rdfs:domain | rdfs:Class |
Powerful way of declaring how properties, classes, and individuals relate to each other.
"Ontologies"
http://www.w3.org/TR/owl2-primer/
OWL can be conveyed in triples, but also has some easier-to-read syntaxes. I suggest Manchester, when you don't need triples.
machines ("reasoners") can process these ontologies
given:
they will infer
Which is great if you're querying for child and you have some parent data.
Also helps find errors in data and modeling.
Technology from AI research
http://www.w3.org/2001/sw/wiki/Category:Reasoner
A less formal way to document your URIs.
Everything is a Concept. General broader/narrower.
Good when you want to quickly leverage existing controlled vocabulary.
http://www.w3.org/TR/2009/NOTE-skos-primer-20090818/
http://www.w3.org/2001/sw/wiki/Category:Search_Engine
use the HTML documentation
use an ontology viewer http://www.w3.org/2001/sw/wiki/Category:Visualizer
text editor
protege
topbraid composer
neologism
http://www.w3.org/2001/sw/wiki/Category:Editor