-
Notifications
You must be signed in to change notification settings - Fork 7
01 Oppbygging ontologi
Ontologin för håndbok v440 har delats upp i två delar:
-
v440-owl.ttl innehåller klasser, klasstaxonomi (rdfs:subClassOf) samt kodlistor med innehåll
- Namespace-uri : http://rdf.vegdata.no/V440/v440-owl
- Namespace-prefix : v440
- v440-owl.ttl importerar följande ontologier:
- http://xmlns.com/foaf/spec/ (foaf)
- http://purl.org/dc/terms (dcterms)
-
v440-brudata-owl.ttl innehåller definitioner av egenskaper enligt kapitel 7 (Brudata) samt egenskapernas knytning til klasserna i v440-owl.ttl
- Namespace-uri : http://rdf.vegdata.no/V440/v440-brudata-owl
- Namespace-prefix : v440bd
- v440-brudata-owl.ttl importerar följande ontologier:
- http://rdf.vegdata.no/V440/v440-owl (v440)
- http://xmlns.com/foaf/spec/ (foaf)
- http://purl.org/dc/terms (dcterms)
- https://w3id.org/def/basicsemantics-owl (basicsemantics). Basicsamentics importerar i sin tur ontologier från qudt (http://qudt.org/schema/qudt)
- Båda ontologierna använder dessutom properties från vann (http://purl.org/vocab/vann) för metadata på ontologi-nivå
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
).
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 ;
.
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.
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 ;
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:Kassebru_konstant_hoyde (subklass till v440:Kassebru)
-
v440:Kassebru (subklass till v440:Byggverksdel)
-
v440:Byggverksdel
- 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: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)
-
v440:Grunnen (subklass till v440:Grunn_og_underbygning_element)
-
v440:Grunn_og_underbygning_element (subklass till v440:Byggverkselement)
-
v440: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
-
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
-
v440bd:KompleksEgenskap
-
v440:Byggverk - Motsvarar indelningen i brukategorier enligt v440
-
v440:Root
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 är listor av fördefinierade värden (eller koder), t ex för Statiskt system. Alla kodlisteklasser har en gemensam basklass v440:Kodeliste
och ä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.
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
.
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
:
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):
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:
Detta är alltså en egenskap som tillkommer för vegbru utöver de som angivits generellt för byggverk.
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:
Detta betyder alltså att en v440bd:Akse
ska ha exakt en förekomst av v440bd:Aksenummer
samt exakt en förekomst av v440bd:Spennvidde
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 ;
.
Maskinlesbar V440 - Et samarbeidsprosjekt mellom buildingSMART Norge og Statens vegvesen