Building Ontologies with RDF and DAML+OIL

May 2001, Hong Kong

Dan Connolly


RDF Basics: the graph model

Statements are represented as arcs in a (directed, labelled) graph.

e.g. Bill's father is Bob. fig1

RDF Syntax Basics: URIs for terms



RDF Syntax: URI shortcuts

@prefix dex: <>.
   dex:hasFather <#bob>.

RDF Syntax: XML for interchage

in http://example/scenario:

<rdf:RDF xmlns:rdf=""
xmlns:dex=""> <rdf:Description rdf:about="#bill"> <dex:hasFather rdf:resource="#bob"> </rdf:Description> </rdf:RDF>

RDF Schema: Class and subClassOf

Bill is a Man: :bill rdf:type dex:Man.

Bob is a Man: :bob rdf:type dex:Man.

Men are Persons: dex:Man rdfs:subClassOf dex:Person.

fig3: W3C terms in blue; classes in bold.

RDF Schema: Implicit statements

RDF Schema: domain and range or properties

Things that have fathers are Animals: dex:father rdfs:domain dex:Animal.

Things that are fathers are Males: dex:father rdfs:range dex:Male.


RDF Schema: not for today

not discussed here:

DAML+OIL: Set Operations

No female is a male: dex:Female dpo:disjointWith dex:Male.


Pat can't be both.


also: unionOf, intersectionOf, complementOf

DAML+OIL: List utilities

Lists are built using first, rest, and nil.

list figure


DAML+OIL: Domain-dependent range

The father of a person is a person: dex:Person rdfs:subClassOf [ dpo:onProperty dex:father; dpo:toClass dex:Person].