Winter 2019
Instructor: Raghava Mutharaju
IIIT Delhi


  • Resource Description Framework (RDF) is a data model that is used to describe resources
    • Physical things
    • Abstract concepts
    • Numbers and strings
  • We use the term resource and entity synonymously here
  • It is a universal, machine readable data exchange format
  • Resources are described using triples (subject, predicate, object)
  • A triple captures the relationship (predicate) between a subject and an object
  • <Delhi> <capitalOf> <India>
  • RDF triple is called a RDF Statement
  • Triple can be represented as a directed labelled graph
RDF Graph
Image source: https://www.w3.org/TR/rdf11-concepts/rdf-graph.svg
Sample RDF Graph
Image source: http://www.obitko.com/tutorials/ontologies-semantic-web/rdf-graph-and-syntax.html


  • URL (Uniform Resource Locator)
    • It is a mechanism to specify and locate a web resource on a computer network.
    • Eg: http://, ftp://
  • URN (Uniform Resource Name)
    • They are persistent location independent identifiers that use the urn scheme.
    • Eg: ISBN of a book is a URN used to identify a book uniquely
  • URI (Uniform Resource Identifier)
    • It is an identifier that can uniquely and unambiguously identify resources
    • ASCII encoding is used in the identifiers
    • URL and URN are type of URIs. URIs and URNs need not be resolvable to a location, which is the case with URL
    • Eg: http://www.w3.org/2002/07/owl#
  • IRI (International Resource Identifier)
    • IRI is similar to URI except that the character set for encoding the identifier is Universal Character Set (UTF-8)
    • Eg: é, ö could be used in IRI
  • Subject, Predicate, and Object in a triple are identified by IRIs
    • http://www.example.org/~joe/contact.rdf#joesmith
    • http://xmlns.com/foaf/0.1/homepage
    • http://www.example/org/~joe
  • Literals and blank nodes do not have IRIs


  • It is a logical grouping of unique identifiers
    • Packages in Java (java.util.concurrent, org.w3c.dom)
    • Namespace in C++ (std)
    • XML namespace: xmlns="http://www.w3.org/1999/xhtml"
    • RDF namespace: rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    • RDFS namespace: rdfs="http://www.w3.org/2000/01/rdf-schema#"
    • XSD namespace: xsd="http://www.w3.org/2001/XMLSchema#"


  • Objects in a triple can be literals
  • Literals are constants. They can be values of strings, numbers, and dates
  • Literal consists of the following parts
    • a lexical form, which is a unicode string
    • a datatype IRI
    • a language tag (only for string datatype)
  • "That Seventies Show"^^xsd:string
  • "That Seventies Show"@en
  • "La Joconde"@fr
  • "1"^^xs:integer

Blank Nodes

  • A blank node does not have a name associated with it
  • It is similar to anonymous classes in Java, C++
  • It indicates the existence of something but we will not be using or saying anything about the name of that thing
RDF Graph with Blank Nodes
Image source: https://goo.gl/u7P6wU
  • It does not have an IRI
    • Blank node identifiers have only local scope
    • No global identity unlike other nodes with IRIs
  • It is not a literal
  • It can be used as a subject or object

Multiple Graphs

  • RDF statements can be grouped into multiple graphs
  • Each graph can have a name associated with it (named graphs), which is an IRI
  • An RDF dataset is a collection of graphs
    • Exactly one default (unnamed) graph that may be empty
    • Zero or more named graphs
    • Graph names are unique within a RDF dataset
    • Blank nodes can be shared by graphs in a RDF dataset
  1. Graph name (IRI): http://example.org/bob
    • <Bob> <is a> <person>.
    • <Bob> <is a friend of> <Alice>.
    • <Bob> <is born on> <the 4th of July 1990>.
    • <Bob> <is interested in> <the Mona Lisa>.
  2. Graph name (IRI): https://www.wikidata.org/wiki/Special:EntityData/Q12418
    • <Leonardo da Vinci> <is the creator of> <the Mona Lisa>.
    • <The video 'La Joconde à Washington'> <is about> <the Mona Lisa>

RDF Serialization Formats

  • There are different serialization formats for writing RDF graphs
  • They are all logically equivalent and lead to same triples
    • Turtle family of RDF serialization formats
      • N-Triples
      • Turtle
      • TriG
      • N-Quads
    • JSON-LD
    • RDFa
    • RDF/XML
RDF Serialization Formats
Image source: https://goo.gl/AsV5vR


  • It is a line based, plain text format to encode a RDF graph
  • It is a sequence of subject, predicate, and object separated by whitespace and terminated by dot
  • IRIs are written as absolute IRIs (not shortcuts) and are enclosed in angular brackets
  • Literals are written in double quotes followed by datatype or language tag
  • Datatype IRI is preceded by "^^"
  • Language tag is preceded by "@"
  • Blank nodes are expressed as _: followed by blank node label
    • _:alice <http://xmlns.com/foaf/0.1/knows> _:bob .
Sample RDF Graph
Image source: https://www.w3.org/TR/rdf11-primer/example-graph-iris.jpg


  1. <http://example.org/bob#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .
  2. <http://example.org/bob#me> <http://xmlns.com/foaf/0.1/knows> <http://example.org/alice#me> .
  3. <http://example.org/bob#me> <http://schema.org/birthDate> "1990-07-04"^^<http://www.w3.org/2001/XMLSchema#date> .
  4. <http://example.org/bob#me> <http://xmlns.com/foaf/0.1/topic_interest> <http://www.wikidata.org/entity/Q12418> .
  5. <http://www.wikidata.org/entity/Q12418> <http://purl.org/dc/terms/title> "Mona Lisa" .
  6. <http://www.wikidata.org/entity/Q12418> <http://purl.org/dc/terms/creator> <http://dbpedia.org/resource/Leonardo_da_Vinci> .
  7. <http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619> <http://purl.org/dc/terms/subject> <http://www.wikidata.org/entity/Q12418> .


  • Turtle is the Terse RDF Triple Language
  • It is an extension of N-Triples with syntactic shortcuts
    • Namespace prefix
    • Predicate lists
    • Object lists


BASE   <http://example.org/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX schema: <http://schema.org/>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX wd: <http://www.wikidata.org/entity/>


  • Predicate lists are triples with the same subject but different predicates and objects
  • Semi colon is used as a separator

	a foaf:Person ;
	foaf:knows <alice#me> ;
	schema:birthDate "1990-07-04"^^xsd:date ;
	foaf:topic_interest wd:Q12418 .


  • Object lists are triples with the same subject and predicate, but different object
  • Comma is used as a separator

<ex:spiderman> foaf:name "Spiderman", "Человек-паук"@ru  .


  • Two types of IRIs - relative and absolute
  • Absolute IRI
    • <http://one.example/subject1>
  • Relative IRI

BASE <http://one.example/>
<subject1> <predicate1> <object1> .
PREFIX p: <http://one.example/>
p:subject1 p:predicate1 p:object1> .


  • Extension of Turtle that supports multiple graphs

GRAPH <http://example.org/bob>
	a foaf:Person ;
        foaf:knows <alice#me> ;
        schema:birthDate "1990-07-04"^^xsd:date ;
        foaf:topic_interest wd:Q12418 .


  • Default graphs

        dcterms:publisher <http://example.org/crc> ;
        dcterms:rights <http://creativecommons.org/licenses/by/3.0/> .


TriG Named Graphs
Image source: https://www.w3.org/TR/rdf11-primer/example-multiple-graphs-iris.jpg


  • Extends N-Triples with a fourth element to the line which is the graph IRI of the triple

<http://example.org/bob#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> <http://example.org/bob> .
<http://example.org/bob#me> <http://xmlns.com/foaf/0.1/knows> <http://example.org/alice#me> <http://example.org/bob> .
<http://example.org/bob> <http://purl.org/dc/terms/publisher> <http://example.org> .
<http://example.org/bob> <http://purl.org/dc/terms/rights> <http://creativecommons.org/licenses/by/3.0/> .


  • Provides JSON sytanx for RDF graphs
  • JSON-LD can be used to transform JSON to RDF
  • JSON objects are given universal identifiers in JSON-LD
    • This helps in referring to objects in other JSON documents anywhere on the Web


"@context": "example-context.json",
"@id": "http://example.org/bob#me",
"@type": "Person",
"birthdate": "1990-07-04",
"knows": "http://example.org/alice#me",
"interest": {
	"@id": "http://www.wikidata.org/entity/Q12418",
	"title": "Mona Lisa",
	"subject_of": "http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619",
	"creator": "http://dbpedia.org/resource/Leonardo_da_Vinci"


  • It is used to embed RDF within HTML and XML documents
  • Search engines can make use of the structured data (schema.org, Rich Snippets) to enrich search results


<body prefix="foaf: http://xmlns.com/foaf/0.1/
	schema: http://schema.org/
	dcterms: http://purl.org/dc/terms/">
<div resource="http://example.org/bob#me" typeof="foaf:Person">
		Bob knows <a property="foaf:knows" href="http://example.org/alice#me">Alice</a>
        and was born on the <time property="schema:birthDate" datatype="xsd:date">1990-07-04</time>.
		Bob is interested in <span property="foaf:topic_interest"
        resource="http://www.wikidata.org/entity/Q12418">the Mona Lisa</span>.


  • Provides XML syntax for RDF graphs
  • There is good tool support for XML
  • This used to be the only syntax that was available to serialize RDF


<?xml version="1.0" encoding="utf-8"?>
	<rdf:Description rdf:about="http://example.org/bob#me">
		<rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
		<schema:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">1990-07-04</schema:birthDate>
		<foaf:knows rdf:resource="http://example.org/alice#me"/>
		<foaf:topic_interest rdf:resource="http://www.wikidata.org/entity/Q12418"/>


  • RDFS is a semantic extension of RDF
  • It provides the vocabulary for the RDF data
  • It provides a mechanism to describe groups of related resources (classes) and the relationships between these resources (properties)
  • Classes
    • Related resources can be categorized as a class
    • A class is defined using rdfs:Class
    • Members of the class are known as instances
    • Classes can be subclass of another class. This is defined using rdfs:subClassOf
  • A Resource is the class of everything, i.e., class of all classes
  • Properties
    • It is a relation between subject resources and object resources
    • A property/predicate is defined using rdf:Property
    • Subproperties can be stated using rdfs:subPropertyOf
      • hasSon rdfs:subPropertyOf hasChild
    • A property can have domain and range, which can be defined using rdfs:domain and rdfs:range respectively
      • If multiple domains/ranges are defined then the domain/range of the property is the intersection of all the defined domains/ranges
  • Other frequently used RDFS schema elements
    • rdf:type
    • rdfs:Literal
    • rdfs:label
    • rdfs:comment


  1. Person rdf:type rdfs:Class .
  2. Father rdfs:subClassOf Person .
  3. hasAge rdf:type rdf:Property .
  4. hasSon rdfs:subPropertyOf hasChild .
  5. hasAge rdfs:domain Person
  6. hasAge rdfs:range rdfs:Literal .
  7. wd:Q12418 rdfs:Label "Mona Lisa" .
  8. wd:Q12418 rdfs:comment "Wikidata ID for Mona Lisa" .


  • Used to capture provenance information
  • Describe other RDF statements using statements

exproducts:triple12345   rdf:type        rdf:Statement .
exproducts:triple12345   rdf:subject     exproducts:item10245 . 
exproducts:triple12345   rdf:predicate   exterms:weight . 
exproducts:triple12345   rdf:object      "2.4"^^xsd:decimal .
exproducts:triple12345   dc:creator      exstaff:85740 . 

Entailment Rules


  • We use the following conventions in the entailment rules
    • S represents an RDF graph
    • aaa, bbb represents predicate of a triple
    • xxx, yyy, zzz represents either the subject or object of a triple
    • sss represents a literal
    • ddd represents a datatype

RDF Entailment Patterns

If S contains then S RDF entails
rdf1 xxx aaa "sss"^^ddd . xxx aaa _:nnn .
_:nnn rdf:type ddd .

  • If ex:a    ex:p    "123"^^xsd:integer .   then
    • ex:a    ex:p    _:x .   and
    • _:x    rdf:type    xsd:integer .

RDF Entailment Patterns

If S contains then S RDF entails
rdf2 xxx aaa yyy . aaa rdf:type rdf:Property .

  • If ex:a    ex:p    "123"^^xsd:integer .   then
    • ex:p    rdf:type    rdf:Property .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs1 xxx aaa "sss"^^ddd . ddd rdf:type rdfs:Datatype .

  • If ex:a    ex:p    "123"^^xsd:integer .   then
    • xsd:integer    rdf:type    rdfs:Datatype .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs2 aaa rdfs:domain xxx .
yyy aaa zzz .
yyy rdf:type xxx .

  • If ex:worksAt    rdfs:domain    ex:Employee .   and
        ex:john    ex:worksAt    ex:ibm .   then
    • ex:john    rdf:type    ex:Employee .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs3 aaa rdfs:range xxx .
yyy aaa zzz .
zzz rdf:type xxx .

  • If ex:worksAt    rdfs:range    ex:Organization .   and
        ex:john    ex:worksAt    ex:ibm .   then
    • ex:ibm    rdf:type    ex:Organization .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs4a xxx aaa yyy . xxx rdf:type rdfs:Resource .
rdfs4b xxx aaa yyy . yyy rdf:type rdfs:Resource .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs5 xxx rdfs:subPropertyOf yyy .
yyy rdfs:subPropertyOf zzz .
xxx rdfs:subPropertyOf zzz .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs6 xxx rdf:type rdf:Property . xxx rdfs:subPropertyOf xxx .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs7 aaa rdfs:subPropertyOf bbb .
xxx aaa yyy .
xxx bbb yyy .

  • If ex:hasSon    rdfs:subPropertyOf    ex:hasChild .   and
        ex:john    ex:hasSon    ex:mike .   then
    • ex:john    ex:hasChild    ex:mike .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs8 xxx rdf:type rdfs:Class . xxx rdfs:subClassOf rdfs:Resource .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs9 xxx rdfs:subClassOf yyy .
zzz rdf:type xxx .
zzz rdf:type yyy .

  • If ex:Employee    rdfs:subClassOf    ex:Person .   and
        ex:john    rdf:type    ex:Employee .   then
    • ex:john    rdf:type    ex:Person .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs10 xxx rdf:type rdfs:Class . xxx rdfs:subClassOf xxx .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs11 xxx rdfs:subClassOf yyy .
yyy rdfs:subClassOf zzz .
xxx rdfs:subClassOf zzz .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs12 xxx rdf:type rdfs:ContainerMembershipProperty . xxx rdfs:subPropertyOf rdfs:member .

  • If ex:CarBrandsBag    rdf:_1    ex:honda .   and
        ex:CarBrandsBag    rdf:_2    ex:toyota .  
        rdf:_1    rdf:type    rdfs:ContainerMembershipProperty .   then
    • rdf:_1    rdfs:subPropertyOf    rdfs:member .

RDFS Entailment Patterns

If S contains then S RDFS entails
rdfs13 xxx rdf:type rdfs:Datatype . xxx rdfs:subClassOf rdfs:Literal .

Representing Knowledge using RDF

  • Pick a domain of your choice and build an RDF graph

RDF Editors

  1. http://linkeddata.uriburner.com/rdf-editor/
  2. https://bitbucket.org/dotnetrdf/dotnetrdf/wiki/UserGuide/Tools/rdfEditor
  3. http://www.linkeddatatools.com/rdf-studio
  4. https://marketplace.eclipse.org/content/komma-rdf-eclipse
  5. https://github.com/AKSW/Xturtle
  6. https://atom.io/packages/language-rdf
  7. https://github.com/e-e-e/sublime-turtle-syntax, https://github.com/abcoates/sublime-text-turtle-sparql
  8. https://sourceforge.net/projects/veudas/

RDF Visualization Tools

  1. http://www.easyrdf.org/converter
  2. http://rhizomik.net/html/redefer/rdf2svg-form/
  3. https://github.com/usc-isi-i2/ontology-visualization
  4. https://franz.com/agraph/gruff/
  5. https://github.com/idafensp/ar2dtool
  6. https://github.com/dyreriket/rdfvizler
  7. http://activearchives.org/wiki/Visualizing_RDF
  8. http://visgraph3.org/

RDF Validators

  1. https://www.w3.org/RDF/Validator/
  2. http://rdfvalidator.mybluemix.net/
  3. http://ttl.summerofcode.be/