W ARD występują dwa rodzaje elementów: atrybuty (attributes) i właściwości (properties). W ontologii odpowiadają one klasom:
Class(ard:Attribute)
Class(ard:Property)
Dla danego diagramu ARD można zdefiniować stałą listę atrybutów, które następnie są przyporządkowywane poszczególnym właściwościom. W tym celu potrzebne było zdefiniowanie relacji między tymi elementami:
ObjectProperty(ard:is_attribute_of domain(ard:Property) range(ard:Attribute))
ObjectProperty(ard:has_attribute inverseOf(ard:is_attribute_of))
Pierwsza z nich, is_attribute_of, jest związana z atrybutami (słowo kluczowe range) przypisywanymi do właściwości (słowo kluczone domain). Jako, że w języku OWL stosuje się opis relacji działających w obie strony, zdefiniowana została też relacja has_attribute, która jest po prostu odwróceniem pierwszej (słowo kluczowe inverseOf). Takie podejście ułatwia pisanie ontologii oraz zwiększa czytelność.
W tej chwili można już zdefiniować listę elementów - atrybutów i właściwości - oraz powiązać je ze sobą.
Do pełnego opisu ARD brakuje nam jeszcze relacji wynikających z diagramów ARD/TPH. Pierwsza z nich to zależność poszczególnych właściwości:
ObjectProperty(ard:depends_on domain(ard:property) range(ard:Property))
ObjectProperty(ard:is_prerequisite_for inverseOf(ard:Property))
Definiuje ona, która właściwość, od której zależy (depends_on). Dla przykładu termostatu właściwość thermostat_setting jest zależna od właściwości season, która to jest zależna od month. Analogicznie jak w przypadku poprzedniej relacji, zdefiniowana została relacja przeciwna - is_prerequisite_for (czyli wpływanie jednej właściwości na drugą).
Ostatnią rzeczą jest zdefiniowanie, która właściwość została przetranformowana na inne właściwości:
ObjectProperty(ard:transformed_into domain(ard:Property) range(Property))
ObjectProperty(ard:transformed_from inverseOf(ard:transformed_into))
Dla wcześniej wspomnianego termostatu, taka relacja ma miejsce na przykład przy właściwości z atrybutem Date, która została przetransformowana (transformed_into) w inną właściwość zawierającą atrybuty day, month i today. Relacja przeciwna to transformed_from.
Taka gramatyka jest w zupełności wystarczająca do opisu ARD (wraz z „zaszytymi” oboma diagramami). Pełna ontologia ma więc postać:
[Namespaces:
owl = http://www.w3.org/2002/07/owl#
rdfs = http://www.w3.org/2000/01/rdf-schema#
rdf = http://www.w3.org/1999/02/22-rdf-syntax-ns#
]
Ontology(
Class(ard:Attribute)
Class(ard:Property)
ObjectProperty(ard:is_attribute_of domain(ard:Property) range(ard:Attribute))
ObjectProperty(ard:has_attribute inverseOf(ard:is_attribute_of))
ObjectProperty(ard:depends_on domain(ard:property) range(ard:Property))
ObjectProperty(ard:is_prerequisite_for inverseOf(ard:Property))
ObjectProperty(ard:transformed_into domain(ard:Property) range(Property))
ObjectProperty(ard:transformed_from inverseOf(ard:transformed_into))
)
Tworzenie instancji poszczególnych klas ma następującą postać:
Individual(ard:prp_1 type(ard:Property)
value(ard:has_attribute ard:att_1)
value(ard:has_attribute ard:att_2)
value(ard:transformed_from ard:prp_0))
Powyżej zdefiniowany jest obiekt klasy Property o nazwie prp_1. Ma on dwa atrybuty: att_1 i att_2. Został przetransformowany z właściwości prp_0.
Pełny opis termostatu za pomocą powyższej ontologii można zobaczyć tutaj.