Skip to content

Commit 84b2d0c

Browse files
committed
feat: support for qudt units
1 parent c20c83a commit 84b2d0c

2 files changed

Lines changed: 42 additions & 16 deletions

File tree

src/ontology/AREMA-ontology.ttl

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
@prefix me: <https://ontology.atlas-regenmat.ch/> .
33
@prefix qudt: <http://qudt.org/schema/qudt/> .
44
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
5+
@prefix unit: <http://qudt.org/vocab/unit/> .
56
@prefix vann: <http://purl.org/vocab/vann/> .
67

78
me:AbsorptionCoefficientAt500hz a skos:Concept ;
@@ -98,7 +99,7 @@ me:Column a skos:Concept ;
9899

99100
me:CompressiveStrength a skos:Concept ;
100101
qudt:symbol "σc" ;
101-
qudt:unit "MPa" ;
102+
qudt:unit unit:MegaPA ;
102103
skos:broader me:Mechanical ;
103104
skos:inScheme me:AREMA ;
104105
skos:prefLabel "Druckfestigkeit"@de,
@@ -123,7 +124,7 @@ me:Craftsman a skos:Concept ;
123124

124125
me:Density a skos:Concept ;
125126
qudt:symbol "ρ" ;
126-
qudt:unit "kg/m3" ;
127+
qudt:unit unit:KiloGM-PER-M3 ;
127128
skos:broader me:Mechanical ;
128129
skos:inScheme me:AREMA ;
129130
skos:prefLabel "Dichte"@de,
@@ -146,7 +147,7 @@ me:Earth a skos:Concept ;
146147

147148
me:Effusivity a skos:Concept ;
148149
qudt:symbol "E" ;
149-
qudt:unit "kJ/(K*m2*sqrt(s))" ;
150+
qudt:unit unit:KiloJ-PER-K-M2-SEC0_5 ;
150151
skos:broader me:Hygrothermal ;
151152
skos:inScheme me:AREMA ;
152153
skos:prefLabel "Effusivität"@de,
@@ -212,7 +213,7 @@ me:Foundation a skos:Concept ;
212213

213214
me:FreeSaturation a skos:Concept ;
214215
qudt:symbol "wf" ;
215-
qudt:unit "kg/m3" ;
216+
qudt:unit unit:KiloGM-PER-M3 ;
216217
skos:broader me:Hygrothermal ;
217218
skos:inScheme me:AREMA ;
218219
skos:prefLabel "Freie Wassersättigung"@de,
@@ -256,7 +257,7 @@ me:InterventionType a skos:Concept ;
256257

257258
me:LiquidTransferCoefficientForAbsorption a skos:Concept ;
258259
qudt:symbol "A" ;
259-
qudt:unit "kg/(m2*sqrt(s))" ;
260+
qudt:unit unit:KiloGM-PER-M2-SEC0_5 ;
260261
skos:broader me:Hygrothermal ;
261262
skos:inScheme me:AREMA ;
262263
skos:prefLabel "Wasseraufnahmekoeffizient"@de,
@@ -281,7 +282,7 @@ me:MaterialProducer a skos:Concept ;
281282

282283
me:MoistureBufferingValue a skos:Concept ;
283284
qudt:symbol "MBV" ;
284-
qudt:unit "g/(m2*%RH)" ;
285+
qudt:unit unit:GM-PER-M2 ;
285286
skos:broader me:Hygrothermal ;
286287
skos:inScheme me:AREMA ;
287288
skos:prefLabel "Moisture Buffering value"@en .
@@ -327,7 +328,7 @@ me:PartitionWall a skos:Concept ;
327328

328329
me:Porosity a skos:Concept ;
329330
qudt:symbol "ξ" ;
330-
qudt:unit "%vol" ;
331+
qudt:unit unit:PERCENT ;
331332
skos:broader me:Hygrothermal ;
332333
skos:inScheme me:AREMA ;
333334
skos:prefLabel "Porosität"@de,
@@ -434,7 +435,7 @@ me:TechnicalEquipement a skos:Concept ;
434435

435436
me:TensileStrength a skos:Concept ;
436437
qudt:symbol "σ" ;
437-
qudt:unit "MPa" ;
438+
qudt:unit unit:MegaPA ;
438439
skos:broader me:Mechanical ;
439440
skos:inScheme me:AREMA ;
440441
skos:prefLabel "Zugfestigkeit"@de,
@@ -443,7 +444,7 @@ me:TensileStrength a skos:Concept ;
443444

444445
me:ThermalCapacity a skos:Concept ;
445446
qudt:symbol "c" ;
446-
qudt:unit "J(kg*K)" ;
447+
qudt:unit unit:J-PER-KiloGM-K ;
447448
skos:broader me:Hygrothermal ;
448449
skos:inScheme me:AREMA ;
449450
skos:prefLabel "Wärmekapazität"@de,
@@ -452,7 +453,7 @@ me:ThermalCapacity a skos:Concept ;
452453

453454
me:ThermalConductivity a skos:Concept ;
454455
qudt:symbol "λ" ;
455-
qudt:unit "W/(m*K)" ;
456+
qudt:unit unit:W-PER-M-K ;
456457
skos:broader me:Hygrothermal ;
457458
skos:inScheme me:AREMA ;
458459
skos:prefLabel "Wärmeleitfähigkeit"@de,
@@ -461,7 +462,7 @@ me:ThermalConductivity a skos:Concept ;
461462

462463
me:WaterContentAt80 a skos:Concept ;
463464
qudt:symbol "w80%" ;
464-
qudt:unit "kg/m3" ;
465+
qudt:unit unit:KiloGM-PER-M3 ;
465466
skos:broader me:Hygrothermal ;
466467
skos:inScheme me:AREMA ;
467468
skos:prefLabel "Wassergehalt bei 80%"@de,
@@ -491,7 +492,7 @@ me:Wood a skos:Concept ;
491492

492493
me:YoungSModulus a skos:Concept ;
493494
qudt:symbol "E" ;
494-
qudt:unit "Gpa" ;
495+
qudt:unit unit:GigaPA ;
495496
skos:broader me:Mechanical ;
496497
skos:inScheme me:AREMA ;
497498
skos:prefLabel "E-Modul"@de,
@@ -635,4 +636,5 @@ me:AREMA a skos:ConceptScheme ;
635636
skos:prefLabel "AREMA Ontologie"@de,
636637
"AREMA Ontology"@en,
637638
"Ontologie AREMA"@fr,
638-
"Ontologia AREMA"@it .
639+
"Ontologia AREMA"@it .
640+

tools/python/converter/csv2ont.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,20 @@
1818
BASE_URI = "https://ontology.atlas-regenmat.ch/"
1919
ME = Namespace(BASE_URI)
2020
QUDT = Namespace("http://qudt.org/schema/qudt/")
21+
UNIT = Namespace("http://qudt.org/vocab/unit/")
22+
23+
# Mapping from Google Sheets unit strings to QUDT unit URIs
24+
UNIT_MAPPING = {
25+
"kg/m3": UNIT["KiloGM-PER-M3"],
26+
"MPa": UNIT.MegaPA,
27+
"Gpa": UNIT.GigaPA,
28+
"W/(m*K)": UNIT["W-PER-M-K"],
29+
"J(kg*K)": UNIT["J-PER-KiloGM-K"],
30+
"g/(m2*%RH)": UNIT["GM-PER-M2"],
31+
"%vol": UNIT.PERCENT,
32+
"kJ/(K*m2*sqrt(s))": UNIT["KiloJ-PER-K-M2-SEC0_5"],
33+
"kg/(m2*sqrt(s))": UNIT["KiloGM-PER-M2-SEC0_5"],
34+
}
2135

2236
# Google Sheets IDs, you can find them in the URL of the sheet
2337
sheet_id = "1RL6Y120_H9-yD8x52eZO44S2iLQpLoZHitcExHsPfPs"
@@ -63,9 +77,17 @@ def add_concept_from_row(g, row, is_property=False):
6377

6478
# Extra fields for properties
6579
if is_property:
66-
for extra_field in ['symbol', 'unit']:
67-
if pd.notna(row.get(extra_field)):
68-
g.add((concept_uri, QUDT[extra_field], Literal(row[extra_field])))
80+
if pd.notna(row.get('symbol')):
81+
g.add((concept_uri, QUDT.symbol, Literal(row['symbol'])))
82+
if pd.notna(row.get('unit')):
83+
unit_str = row['unit']
84+
if unit_str in UNIT_MAPPING:
85+
# Use QUDT unit URI
86+
g.add((concept_uri, QUDT.unit, UNIT_MAPPING[unit_str]))
87+
else:
88+
# Fallback to literal if not in mapping
89+
print(f"⚠️ Unit '{unit_str}' not in mapping, using literal")
90+
g.add((concept_uri, QUDT.unit, Literal(unit_str)))
6991

7092
# === MAIN ===
7193
# Load environment variables
@@ -87,6 +109,7 @@ def add_concept_from_row(g, row, is_property=False):
87109
g.bind("dct", "http://purl.org/dc/terms/")
88110
g.bind("vann", "http://purl.org/vocab/vann/")
89111
g.bind("qudt", "http://qudt.org/schema/qudt/")
112+
g.bind("unit", "http://qudt.org/vocab/unit/")
90113

91114
# Static ontology metadata
92115
ontology_metadata = """
@@ -100,6 +123,7 @@ def add_concept_from_row(g, row, is_property=False):
100123
@prefix dct: <http://purl.org/dc/terms/> .
101124
@prefix vann: <http://purl.org/vocab/vann/> .
102125
@prefix qudt: <http://qudt.org/schema/qudt/> .
126+
@prefix unit: <http://qudt.org/vocab/unit/> .
103127
104128
@base <https://ontology.atlas-regenmat.ch/> .
105129

0 commit comments

Comments
 (0)