Skip to content

5. OWL DL Translations

Paula Gearon edited this page May 27, 2026 · 6 revisions

There are often several ways to express OWL statements in DL. The following is a non-exhaustive list of some of the common approaches used by DLe:

OWL Statement (OFN) DLe Statement
Declaration(Class(:C)) C ⊑ ⊤
SubClassOf(:C :D) C ⊑ D
EquivalentClasses(C D) C ≡ D
DisjointClasses(C D) C ⊓ D ⊑ ⊥
ObjectIntersectionOf(C D) C ⊓ D
ObjectUnionOf(C D) C ⊔ D
SubObjectPropertyOf(:p :q) p ⊑ q
SubDataPropertyOf(:r :s) r ⊑ s
ObjectPropertyDomain(:p :D) ∃p.⊤ ⊑ D
DataPropertyDomain(:r :C) ∃r.⊤ ⊑ D
ObjectPropertyRange(:p :R) ⊤ ⊑ ∀p.R
DataPropertyRange(:r :DT) ⊤ ⊑ ∀r.DT
FunctionalObjectProperty(:p) ≤1 p.⊤
FunctionalDataProperty(:r) ≤1 r.⊤
ObjectOneOf(:C :D) {C D}
DataOneOf("a" "b") {"a" "b"}
ObjectInverseProperties(:p :q) p ≡ q⁻
TransitiveObjectProperty(:p) Trans(p)
SubObjectPropertyOf(ObjectPropertyChain(:p :q) :r) p ∘ q ⊑ r
ObjectSomeValuesFrom(:p :C) ∃p.C
DataSomeValuesFrom(:r :DT) ∃r.DT
ObjectAllValuesFrom(:p :C) ∀p.C
DataAllValuesFrom(:r :DT) ∀r.DT
ObjectHasValue(:p x) p.{x}
DataHasValue(:r x) r.{x}
DatatypeRestriction(:DT xsd:minInclusive n) [≥ n]
DatatypeRestriction(:DT xsd:pattern "pattern") [DT [matches "pattern"]]
AnnotationAssertion(rdfs:label :C "text") @label C "text"
AnnotationAssertion(rdfs:comment :C "text") @doc C "text"
AnnotationAssertion(:ann :C "text") @ann :ann C "text"

Comments

Property Types

Like the RDF serialization of OWL, DL does not distinguish between object properties and data properties. The syntax for each is the same.

Datatype Restrictions

Datatype Restrictions use facets and apply to the appropriate data types for those facets. Hence, xsd:minInclusive applies to data types for numbers and time instants, such as xsd:integer and xsd:dateTime.

The range restrictions are mapped as:

Facet DL equivalent
xsd:minInclusive
xsd:maxInclusive
xsd:minExclusive >
xsd:maxExclusive <

Examples

Adults

Adults are instances of :Person with an :age property of 18 or over. An entity can only have a single value for their :age property.

OFN:

FunctionalDataProperty(:age)
EquivalentClasses(:Adult
    ObjectIntersectionOf(:Person
        DataSomeValuesFrom(:age
            DatatypeRestriction(xsd:integer xsd:minInclusive 18))))

TTL:

:age a owlFunctionalProperty .
:Adult owl:equivalentClass
       [ a owl:Class;
         owl:intersectionOf ( :Person 
                              [ a owl:Restriction ;
                                owl:onProperty :age ;
                                owl:someValuesFrom [ a rdfs:Datatype ;
                                                     owl:onDatatype xsd:integer ;
                                                     owl:withRestrictions ( [ xsd:minInclusive 18 ] ) ] ) ] .

DL:

Adult ≡ Person ⊓ ∃age.[≥18]

Uncle

A brother is a sibling who is male, a parent is the inverse relationship of a child, and a person's uncle is the brother of one of their parents.

OFN:

SubObjectPropertyOf(:hasBrother :hasSibling)
ObjectPropertyRange(:hasBrother :Male)
InverseObjectProperties(:hasParent :hasChild)
SubObjectPropertyOf(ObjectPropertyChain(:hasParent :hasBrother) :hasUncle)
AnnotationAssertion(rdfs:comment :Male "One of the subtypes of people")

TTL:

:hasBrother rdfs:subPropertyOf :hasSibling ;
            rdfs:range :Male .
:hasParent owl:inverseOf :hasChild .
:hasUncle owl:propertyChainAxiom ( :hasParent :hasBrother ) .
:Male rdfs:comment "One of the subtypes of people" .

DL:

hasBrother ⊑ hasSibling
⊤ ⊑ ∀hasBrother.Male
hasParent ≡ hasChild⁻
hasParent ∘ hasBrother ⊑ hasUncle
@doc Male "One of the subtypes of people"

Email

The email property matches a regular expression. The xsd:pattern predicate is aliased to matches to help LLMs recognize the operation is "matching" the pattern.

OFN:

DataPropertyRange(:email DatatypeRestriction(xsd:string xsd:pattern "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"))

TTL:

:email rdfs:range [ a rdfs:Datatype ;
                    owl:onDatatype xsd:string ;
                    owl:withRestrictions ( [ xsd:pattern "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" ] ) ] .

DL:

⊤ ⊑ ∀email.[xsd:string ⊓ [matches "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"]]

Clone this wiki locally