Skip to content

01 Oppbygging ontologi

Bjørnar Markussen edited this page Mar 13, 2020 · 9 revisions

Struktur

Ontologin för håndbok v440 har delats upp i två delar:

Principer för ontologin

Generella egenskaper

Namn

Alla klasser och egenskaper har en unik URI. För att ge namn (på norska eller andra språk) använder vi egenskapen rdfs:label (t ex rdfs:label "Vegbru"@no).

Definitioner

För definitioner använder vi rdfs:comment. På samma sätt som med rdfs:label kan denna ges på flera språk genom normal språktaggning, t ex rdfs:comment "Code according to handbook V440"@en ;.

v440-koder

För att bibehålla de koder som v440 anger för klasser, egenskaper och innehåll i kodlistor så har vi definierat ett eget owl:annotationProperty:

:kode
  rdf:type owl:AnnotationProperty ;
  rdf:type owl:DatatypeProperty ;
  rdfs:comment "Code according to handbook V440"@en ;
  rdfs:comment "Kod enligt håndbok V440"@no ;
  rdfs:label "V440-kode"@no ;
  rdfs:label "v440 code"@en ;

Detta innebär att vi till klasser och properties med hjälp av v440:kode kan knyta v440-kode. Ett exempel:

:Kassebru_konstant_hoyde_skra_vegger
  rdf:type owl:Class ;
  :avsnitt "V-6.1" ;
  :kapitel "V-6" ;
  **:kode "415"^^xsd:int ;**
  rdfs:label "Kassebru, konstant høyde, skrå vegger"@no ;
  rdfs:subClassOf :Kassebru_konstant_hoyde ;

Dessa koder finns i ontologin överallt där en kod definierats i v440.

Andra referenser till handboken

För att kunna hänvisa till kapitel och avsnitt i v440 så har vi även introducerat annotation properties för dessa:

:kapitel
  rdf:type owl:AnnotationProperty ;
  rdfs:comment "Kapitel i Håndbok v440"@no ;
  rdfs:label "Kapitel"@no ;
.
:avsnitt
  rdf:type owl:AnnotationProperty ;
  rdfs:comment "Avsnitt i Håndbok v440"@no ;
  rdfs:label "Avsnitt"@no ;
.

Exempel:

:Kassebru_konstant_hoyde_skra_vegger
  rdf:type owl:Class ;
  **:avsnitt "V-6.1" ;**
  **:kapitel "V-6" ;**
  :kode "415"^^xsd:int ;
  rdfs:label "Kassebru, konstant høyde, skrå vegger"@no ;
  rdfs:subClassOf :Kassebru_konstant_hoyde ;

Taxonomi (hierarki typ-av)

Tolkningen av håndbok v440 har anpassats till grundstrukturen i ISO 12006-2. Standarden innehåller ett antal begrepp relevanta för håndbok v440. Nedanstående tabell visar hur de olika begreppen förhåller sig:

Begrepp i ISO 12006-2 Motsvarande begrepp i V440
construction entity
an independent unit of the built environment with a characteristic spatial structure, serving at least one user activity or function
Brukategorier
"Prinsippet for å klassifisere et byggverk i en bestemt kategori er at hovedfunksjonen til byggverket lar seg identifisere. Som nevnt ovenfor kan et byggverk kun tilhøre én kategori, men den kan bestå av flere typer."
construction entity part
constituent of a construction entity
Brutyper
"Ved klassifisering av byggverk i vegnettet bestemmes først kategori ut fra hvilken funksjon byggverket har i forhold til vegen det betjener. Deretter bestemmes byggverkets type ut fra hvordan den fysisk og teknisk oppfyller denne funksjonen."
construction element
constituent of a construction entity with a characteristic technical function, form or position
Bruelementer
"For å beskrive byggverkene i detalj deles de inn i hensiktsmessige mindre deler eller komponenter som kalles elementer."
construction property
property characterizing a construction object
Kapitel 7 Brudata

En taxonomi innebär att vi bygger en trädstruktur av specialiseringar, dvs generella begrepp högst upp och mera specifika begrepp ju längre ner i strukturen man kommer. Hierarkin byggs genom att man använder predikatet rdfs:subClassOf mellan den specifika klassen och den generellare. Formellt innebär detta att en instans av den specifika klassen också alltid, per definition, är en instans av den generellare klassen.

Utgående från detta så har vi valt att bygga taxonomin på följande sätt:

  • owl:Thing
    • v440:Root
      • v440:Byggverk - Motsvarar indelningen i brukategorier enligt v440
        • De olika kategorierna som subklasser till v440:Byggverk.
        • Beroende på att vi vill kunna knyta egenskaper på ett entydigt sätt (se kapitel egenskaper) så har en extra nivå "Ordinær bru i dagen" införts. T ex beskrivs i kapitel 7.9.1 att "Disse størrelsene gjelder for Kategori 1-Vegbruer, 3-G/S-bruer og 8-Jernbanebruer, dvs. ordinære bruer i dagen.". Detta har inneburit att klasserna Vegbru, Jernbanebru och G/S Bru är subklasser till "Ordinær bru i dagen".
      • v440:Byggverksdel - Motsvarar indelningen i brutyper enligt v440
        • De olika brutyperna beskrivs som subklasser till v440:Byggverksdel. Varje ny nivå innebär att en ny subklass-nivå skapas. Ett exempel kan vara (varje nivå innebär ytterligare specialisering)
          • v440:Byggverksdel
            • v440:Kassebru (subklass till v440:Byggverksdel)
              • v440:Kassebru_konstant_hoyde (subklass till v440:Kassebru)
                • v440:Kassebru_konstant_hoyde_skra_vegger (subklass till v440:Kassebru_konstant_hoyde)
      • v440:Byggverkselement - motsvarar indelningen i byggverkselement
        • De olika typerna av byggverkselement beskrivs i en subklass-hierarki enligt v440. Varje ny nivå innebär att en ny subklass-nivå skapas. Ett exempel kan vara
          • v440:Byggverkselement
            • v440:Grunn_og_underbygning_element (subklass till v440:Byggverkselement)
              • v440:Grunnen (subklass till v440:Grunn_og_underbygning_element)
                • v440:Grunnen_Peler (subklass till v440:Grunnen)
      • v440bd:KompleksEgenskap - används för alla egenskaper i kapitel 7 - Brudata som är sammansatta av sub-egenskaper. Även här byggs vid behov en taxonomi-struktur. Ett exempel kan vara:
        • v440bd:KompleksEgenskap
          • v440bd:Akse
          • v440bd:Materialdefinisjon
            • v440bd:Materialdefinisjon_Betong
            • v440bd:Materialdefinisjon_Stal
            • v440bd:Materialdefinisjon_Tre
            • v440bd:Materialdefinisjon_Andre

Meronomi (hierarki består-av)

Taxonomin beskriver förhållande mellan generella och specifika begrepp medan meronomin beskriver hur olika delar kan sättas samman i en består-av struktur. Här har man stora möjligheter att i ontologin begränsa urvalet av delar som något kan bestå av. Dock har vi ännu så länge gjort detta enkelt, utan stora restriktioner. Grovt sett ser meronomin ut på följande sätt:

Som synes är v440:Byggverk och v440:Byggverksdel länkade på två sätt, både via v440bd:Type och v440bd:Hovedbyggverkstype. Detta är för att en byggverksdel utgör hovedbyggverkstype när flera typer ingår i ett byggverk enligt v440 och vi vill kunna skilja på dessa. v440:Byggverksdel innehåller i sin tur v440:Byggverkselement via v440bd:harElement.

Detta innebär att vi kan bygga en struktur enligt detta exempel:

:Vegbru_1
  rdf:type v440:Vegbru ;
  v440bd:Hovedbyggverkstype :Platebru_massiv_BH5_med_overliggende_forsterkning_1 ;
  v440bd:Type :Ribbeplatebru_1 ;
.
:Platebru_massiv_BH5_med_overliggende_forsterkning_1
  rdf:type v440:Platebru_massiv_BH5_med_overliggende_forsterkning ;
  v440bd:harElement :Grunnen_Armert_jord_1 ;
.
:Grunnen_Armert_jord_1
  rdf:type v440:Grunnen_Armert_jord ;
.

v440bd:Hovedbyggverkstype, v440bd:Type och v440bd:harElement är alla definierade som sub-properties till basicsemantics:hasPart. Detta innebär att en reasoner kan automatiskt härleda följande triples till de ovan:

:Vegbru_1
  bs:hasPart :Platebru_massiv_BH5_med_overliggende_forsterkning_1, :Ribbeplatebru_1 ;
.
:Platebru_massiv_BH5_med_overliggende_forsterkning_1
  bs:hasPart :Grunnen_Armert_jord_1 ;
.

Kodlistor

Kodlistor är listor av fördefinierade värden (eller koder), t ex för Statiskt system. Alla kodlisteklasser har en gemensam basklass v440:Kodelisteoch är utformade på samma sätt men med olika innehåll. Kodlistan som helhet är definierad som en klass, t ex:

v440:Statisk_system
  rdf:type owl:Class ;
  v440:avsnitt "V-6" ;
  v440:kapitel "V-6" ;
  v440:kode "-" ;
  rdfs:label "Statisk system"@no ;
  rdfs:subClassOf :Kodeliste ;
.

Alla valbara värden (eller koder) är sedan definierade som instanser/medlemmar, i ontologin, av kodlisteklassen:

v440:Statisk_system_Fritt_opplagt_system
  rdf:type :Statisk_system ;
  v440:avsnitt "V-6.2" ;
  v440:kapitel "V-6" ;
  v440:kode "1"^^xsd:int ;
  rdfs:label "Fritt opplagt system"@no ;
.
v440:Statisk_system_Kontinuerlig_system
  rdf:type :Statisk_system ;
  v440:avsnitt "V-6.2" ;
  v440:kapitel "V-6" ;
  v440:kode "2"^^xsd:int ;
  rdfs:label "Kontinuerlig system"@no ;
.

Osv...

Detta har fördelen att vi till varje fördefinierat värde (eller "kod") har möjlighet att knyta information som språkanpassade namn och definitioner eller länka mot andra system. Normalt sett bör man hänvisa till en kod i kodlistan genom sin unika URI, t ex v440:Statisk_system_Kontinuerlig_system eftersom detta ger en definitiv hänvisning till korrekt definition som hittas i ontologin. Men som synes lagras även motsvarande sifferkod från v440 i ontologin.

Egenskaper

I OWL finns det två typer av egenskaper: owl:DatatypeProperty och owl:ObjectProperty. owl:DatatypeProperty används när objektet i en trippel med detta property utgörs av en literal, dvs någon typ av värde (heltal, textsträng, datum etc).

owl:ObjectProperty används när objektet i en trippel med detta property utgörs av ett annat objekt (dvs en URI). I v440 beskrivs egenskaper i kapitel 7 - Brudata oftast som sammansatta av sub-egenskaper. Exempelvis har vi kapitel 7.3 Hoveddata/Bruidentifikasjon som beskriver egenskaperna Nummer, Navn och Bygd.

Vi har valt att definiera alla egenskaper och dess kopplingar till objekt i en separat ontologi http://rdf.vegdata.no/v440-brudata-owl (prefix v440bd:). Vi har även försökt bevara strukturen i handboken. Det har inneburit att alla sammansatta egenskaper (egenskaper som bryts ner i ytterligare sub-attribut) definieras som klasser. Alla dessa klasser är subklasser till klassen v440bd:KompleksEgenskap.

Komplexa egenskaper

Den sammansatta egenskapen definieras som en klass enligt exempel nedan:

v440bd:Hoveddata_Bruidentifikasjon
  rdf:type owl:Class ;
  v440:kapitel "7.3" ;
  rdfs:label "Hoveddata/Bruidentifikasjon"@no ;
  rdfs:subClassOf v440bd:KompleksEgenskap ;
.

För var och en av dessa klasser finns ett motsvarande owl:ObjectProperty, t ex:

v440bd:harBruidentifikasjon (anm: kanske namnet skulle vara v440bd:harHoveddata_Bruidentifikasjon)
  rdf:type owl:ObjectProperty ;
  v440:kapitel "7.3" ;
  rdfs:domain v440:Byggverk ;
  rdfs:label "Hoveddata/Bruidentifikasjon"@no ;
  rdfs:range v440bd:Hoveddata_Bruidentifikasjon ;
  rdfs:subPropertyOf bs:hasProperty ;
.

Som synes används rdfs:domain och rdfs:range för att koppla samman egenskapsklassen (v440bd:Hoveddata_Bruidentifikasjon) med objektklassen (v440:Byggverk). Detta görs konsekvent i ontologin. Detta anger alltså att en trippel med predikatet v440bd:harBruidentifikasjon har en instans av typen v440:Byggverk som subjekt och en instans av v440bd:Hoveddata_Bruidentifikasjon som objekt.

Restriktioner för kardinaliteter (dvs hur många objekt av en viss typ som får förekomma för samma subjekt) specificeras i domän-klassen på följande sätt:

v440:Byggverk
  rdfs:subClassOf [
      rdf:type owl:Restriction ;
      owl:cardinality "1"^^xsd:nonNegativeInteger ;
      owl:onProperty v440bd:harBruidentifikasjon ;
    ] ;
.

Motsvarande i t ex Protege ser ut så här för klassen v440:Byggverk:

image-20200310133220598

Detta följer en annan syntax (Manchester syntax) och är mera praktisk och överskådlig än OWL i ren "trippelform". Det kan tyckas konstigt att man i OWL uttrycker denna begränsning som en subklass, men förklaringen är att man ska läsa detta som att en restriktion som innebär att det ska finnas exakt en förekomst av egenskapen v440bd:harBruidentifikasjon betraktas som en klass (=mängd). Detta är alltså mängden av alla objekt som har exakt en förekomst av egenskapen. Eftersom v440:Byggverk är en subklass till nämnda klass så innebär det att ett byggverk MÅSTE HA exakt en förekomst av egenskapen v440bd:harBruidentifikasjon eftersom en instans av en subklass även tillhör basklassen. Det finns mera "finesser" kring detta som vi inte går in på mera här.

Den fullständiga beskrivningen av klassen v440:Byggverk ser ut så här (i Protege):

image-20200310134556059

Detta är alltså alla egenskaper som kan knytas till ett byggverk. Samtliga av dessa gäller även samtliga subklasser till byggverk. Eftersom t ex v440:Vegbru är en subklass till v440:Byggverk så gäller alltså detta även för vegbruer. En vegbru har dessutom ytterligare en egenskap som är unik för just vegbruer:

image-20200310134822712

Detta är alltså en egenskap som tillkommer för vegbru utöver de som angivits generellt för byggverk.

Enkla egenskaper

En enkel egenskap definieras med hjälp av owl:DatatypeProperty, t ex:

v440bd:Aksenummer
  rdf:type owl:DatatypeProperty ;
  rdfs:comment "Aksenummereringen skal normalt følge stigende kilometreringsretning på vegen og kan starte med 0 eller 1, men dersom oversiktstegning viser annen retning følges tegningen."@no ;
  rdfs:domain v440bd:Akse ;
  rdfs:label "Aksenummer"@no ;
  rdfs:range xsd:integer ;
.

Detta anger att egenskapen v440:Aksenummer ska ha ett heltalsvärde som objekt i en trippel eftersom rdfs:range hänvisar till xsd:integer.

Enkla egenskaper kan användas direkt från en objektklass eller direkt från en egenskapsklass på samma sätt som beskrivits ovan. Om vi för fallet ovan tittar på definitionen av v440bd:Akse så ser den ut så här:

v440bd:Akse
  rdf:type owl:Class ;
  v440:kapitel "7.9.6" ;
  rdfs:comment """Akser benyttes til å stedfeste beliggenheten av bruas hovedelementer og danner utgangspunktet for registrering av bæresystemets spennvidder. Akser må derfor angis slik at korrekte spennvidder blir registrert. Identifisering av akser skjer ved tildeling av et entydig aksenummer. Aksenummereringen skal normalt følge stigende kilometreringsretning på vegen og kan starte med 0 eller 1, men dersom oversiktstegning viser annen retning følges tegningen."""@no ;
  rdfs:label "Akse"@no ;
  rdfs:subClassOf v440bd:KompleksEgenskap ;
  rdfs:subClassOf [
      rdf:type owl:Restriction ;
      owl:cardinality "1"^^xsd:nonNegativeInteger ;
      owl:onProperty v440bd:Aksenummer ;
    ] ;
  rdfs:subClassOf [
      rdf:type owl:Restriction ;
      owl:cardinality "1"^^xsd:nonNegativeInteger ;
      owl:onProperty v440bd:Spennvidde ;
    ] ;
.

Eller i protege:

image-20200310135500031

Detta betyder alltså att en v440bd:Akse ska ha exakt en förekomst av v440bd:Aksenummer samt exakt en förekomst av v440bd:Spennvidde

Kodelister som egenskap

Att referera kodelister blir ingen skillnad mot ovan. För varje kodeliste (som är en klass, t ex v440:Statisk_system) så finns motsvarande owl:ObjectProperty (i detta fall v440bd:StatiskSystem). Eftersom det finns en mängd fördefinierade instanser av statiskt system så kan man referera någon av dessa, t ex:

:GrundegenskaperVanligBru_1
  rdf:type v440bd:GrundegenskaperVanligBru ;
  v440bd:StatiskSystem v440:Statisk_system_Kontinuerlig_system ;
.