Skip to content

Commit 745e5e9

Browse files
committed
Add PhysicalConstant and ConstantValue
1 parent 87d9228 commit 745e5e9

File tree

19 files changed

+904
-16
lines changed

19 files changed

+904
-16
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- Add model classes PhysicalConstant and ConstantValue, populate from data.
13+
1014
## [6.4.3] - 2024-02-20
1115

1216
### Added

qudtlib-constants-gen/src/main/java/io/github/qudtlib/constgen/ConstantsGenerator.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ public class ConstantsGenerator {
3232
private static final String DATA_QUANTITYKINDS = "qudtlib/qudt-quantitykinds.ttl";
3333
private static final String DATA_PREFIXES = "qudtlib/qudt-prefixes.ttl";
3434
private static final String DATA_SYSTEMS_OF_UNITS = "qudtlib/qudt-systems-of-units.ttl";
35+
private static final String DATA_PHYSICAL_CONSTANTS = "qudtlib/qudt-constants.ttl";
3536
// queries
3637
private static final String QUERY_UNITS = "query/units.rq";
3738
private static final String QUERY_QUANTITYKINDS = "query/quantitykinds.rq";
3839
private static final String QUERY_PREFIXES = "query/prefixes.rq";
3940
private static final String QUERY_SYSTEMS_OF_UNITS = "query/systems-of-units.rq";
41+
private static final String QUERY_PHYSICAL_CONSTANTS = "query/physicalConstants.rq";
4042
// output
4143
private static final String DESTINATION_PACKAGE = "io.github.qudtlib.model";
4244
// template
@@ -72,6 +74,7 @@ public void generate() throws IOException, TemplateException {
7274
generateQuantityKindConstants(cfg);
7375
generatePrefixConstants(cfg);
7476
generateSystemOfUnitsConstants(cfg);
77+
generatePhysicalConstantConstants(cfg);
7578
}
7679

7780
private void generatePrefixConstants(Configuration config)
@@ -99,6 +102,13 @@ private void generateSystemOfUnitsConstants(Configuration config)
99102
generateJavaFile(config, templateVars, "SystemOfUnits", "SystemsOfUnits");
100103
}
101104

105+
private void generatePhysicalConstantConstants(Configuration config)
106+
throws IOException, TemplateException {
107+
Map<String, Object> templateVars =
108+
getConstantNamesByQuery(QUERY_PHYSICAL_CONSTANTS, DATA_PHYSICAL_CONSTANTS);
109+
generateJavaFile(config, templateVars, "PhysicalConstant", "PhysicalConstants");
110+
}
111+
102112
private Map<String, Object> getConstantNamesByQuery(String queryFile, String dataFile) {
103113
String queryStr = RdfOps.loadQuery(queryFile);
104114
Repository repo = new SailRepository(new MemoryStore());
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
PREFIX qudt: <http://qudt.org/schema/qudt/>
2+
PREFIX unit: <http://qudt.org/vocab/unit/>
3+
PREFIX constant: <http://qudt.org/vocab/constant/>
4+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
5+
6+
SELECT DISTINCT ?constName ?localName ?label (?qk as ?iri) ("PhysicalConstant" as ?typeName) ?symbol
7+
where
8+
{
9+
?qk a qudt:PhysicalConstant .
10+
{
11+
select ?qk (MIN(STR(?labelVal)) as ?label) where {
12+
?qk a qudt:PhysicalConstant .
13+
optional {
14+
?qk rdfs:label ?labelVal .
15+
FILTER(LANG(?labelVal) = "en")
16+
}
17+
} GROUP BY ?qk ?symbol
18+
}
19+
{
20+
select ?qk (GROUP_CONCAT(STR(?smb); separator=" or ") as ?symbol) where {
21+
?qk a qudt:PhysicalConstant .
22+
optional {
23+
?qk qudt:symbol ?smb .
24+
}
25+
} GROUP BY ?qk
26+
}
27+
BIND(REPLACE(STR(?qk), "^.+/", "") as ?localName)
28+
BIND(REPLACE(?localName, "-", "__") as ?constName)
29+
} order by ?qk

qudtlib-data-gen/src/main/java/io/github/qudtlib/data/DataGenerator.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class DataGenerator {
3131
private static final String PREFIXES_OUTFILE = "qudt-prefixes.ttl";
3232
private static final String QUANTITYKINDS_OUTFILE = "qudt-quantitykinds.ttl";
3333
private static final String SYSTEMS_OF_UNITS_OUTFILE = "qudt-systems-of-units.ttl";
34+
private static final String CONSTANTS_OUTFILE = "qudt-constants.ttl";
3435

3536
// QUDT files
3637
private static final String UNITS_FILE = "qudt/vocab/unit/VOCAB_QUDT-UNITS-ALL-v2.1.ttl";
@@ -40,6 +41,9 @@ public class DataGenerator {
4041
private static final String QUANTITYKINDS_FILE =
4142
"qudt/vocab/quantitykinds/VOCAB_QUDT-QUANTITY-KINDS-ALL-v2.1.ttl";
4243

44+
private static final String CONSTANTS_FILE =
45+
"qudt/vocab/constants/VOCAB_QUDT-CONSTANTS-v2.1.ttl";
46+
4347
// queries
4448
private static final String FACTOR_UNITS_QUERY = "factorUnit.rq";
4549
private static final String IS_SCALING_OF_QUERY = "isScalingOf.rq";
@@ -95,6 +99,7 @@ public static void main(String[] args) {
9599
generator.processPrefixes();
96100
generator.processQuantityKinds();
97101
generator.processSystemsOfUnits();
102+
generator.processConstants();
98103
RdfOps.message("Done generating qudtlib-flavored TTL files");
99104
}
100105

@@ -107,6 +112,15 @@ private void processSystemsOfUnits() {
107112
}
108113
}
109114

115+
private void processConstants() {
116+
RdfOps.message("Processing QUDT Constants");
117+
Repository outputRepo = new SailRepository(new MemoryStore());
118+
try (RepositoryConnection outputCon = outputRepo.getConnection()) {
119+
RdfOps.addStatementsFromFile(outputCon, CONSTANTS_FILE);
120+
RdfOps.writeTurtleFile(outputCon, outFile(CONSTANTS_OUTFILE));
121+
}
122+
}
123+
110124
private void processPrefixes() {
111125
RdfOps.message("Processing QUDT prefixes");
112126
Repository outputRepo = new SailRepository(new MemoryStore());

qudtlib-hardcoded-model-gen/src/main/java/io/github/qudtlib/HardcodedModelGenerator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ private void generateInitializer(Configuration config) throws IOException, Templ
6565
templateVars.put("quantityKinds", new TreeMap<>(Qudt.getQuantityKindsMap()));
6666
templateVars.put("units", new TreeMap<>(Qudt.getUnitsMap()));
6767
templateVars.put("systemsOfUnits", new TreeMap<>(Qudt.getSystemsOfUnitsMap()));
68+
templateVars.put("constantValues", new TreeMap<>(Qudt.getConstantValuesMap()));
69+
templateVars.put("physicalConstants", new TreeMap<>(Qudt.getPhysicalConstantsMap()));
6870
generateJavaFile(config, templateVars);
6971
}
7072

qudtlib-hardcoded-model-gen/src/main/resources/template/InitializerImpl.ftl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class InitializerImpl implements Initializer {
5656
populatePrefixDefinitions(definitions);
5757
populateFactorUnits(definitions);
5858
populateSystemOfUnitsDefinitions(definitions);
59+
populateConstantValueDefinitions(definitions);
60+
populatePhysicalConstantDefinitions(definitions);
5961
return definitions;
6062
}
6163

@@ -222,5 +224,39 @@ public class InitializerImpl implements Initializer {
222224
definitions.addSystemOfUnitsDefinition(def);
223225
</#list>
224226
}
227+
228+
private void populateConstantValueDefinitions(Definitions definitions) {
229+
ConstantValue.Definition def = null;
230+
<#list constantValues as iri, cv>
231+
def = ConstantValue.definition(${q(iri)})
232+
<#list cv.labels as label>
233+
.addLabel(new LangString(${q(label.string)}, ${optStr(label.languageTag)}))
234+
</#list>
235+
<#if cv.isDeprecated()>
236+
.deprecated(true)
237+
</#if>
238+
.value(${bigDec(cv.value)})
239+
.standardUncertainty((BigDecimal) ${optBigDec(cv.standardUncertainty)})
240+
.unit(definitions.expectUnitDefinition(${q(cv.unit.iri)}));
241+
definitions.addConstantValueDefinition(def);
242+
</#list>
243+
}
244+
245+
246+
private void populatePhysicalConstantDefinitions(Definitions definitions) {
247+
PhysicalConstant.Definition def = null;
248+
<#list physicalConstants as iri, pc>
249+
def = PhysicalConstant.definition(${q(iri)})
250+
<#list pc.labels as label>
251+
.addLabel(new LangString(${q(label.string)}, ${optStr(label.languageTag)}))
252+
</#list>
253+
<#if pc.isDeprecated()>
254+
.deprecated(true)
255+
</#if>
256+
.constantValue(definitions.expectConstantValueDefinition(${q(pc.constantValue.iri)}))
257+
.quantityKind(definitions.expectQuantityKindDefinition(${q(pc.quantityKind.iri)}));
258+
definitions.addPhysicalConstantDefinition(def);
259+
</#list>
260+
}
225261
}
226262

qudtlib-init-rdf/src/main/java/io/github/qudtlib/init/InitializerImpl.java

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ public class InitializerImpl implements Initializer {
4747
private final String queryLoadFactorUnits;
4848
private final String queryLoadSystemsOfUnits;
4949

50+
private final String queryLoadConstantValue;
51+
52+
private final String queryLoadPhysicalConstant;
53+
5054
public InitializerImpl() {
5155
Model m = loadQudtModel();
5256
qudtRepository = new SailRepository(new MemoryStore());
@@ -59,6 +63,8 @@ public InitializerImpl() {
5963
queryLoadPrefix = loadQuery("qudtlib/query/prefix.rq");
6064
queryLoadFactorUnits = loadQuery("qudtlib/query/factor-units.rq");
6165
queryLoadSystemsOfUnits = loadQuery("qudtlib/query/system-of-units.rq");
66+
queryLoadConstantValue = loadQuery("qudtlib/query/constantValue.rq");
67+
queryLoadPhysicalConstant = loadQuery("qudtlib/query/physicalConstant.rq");
6268
}
6369

6470
@Override
@@ -70,6 +76,8 @@ public Definitions loadData() {
7076
populatePrefixDefinitions(con, definitions);
7177
populateFactorUnits(con, definitions);
7278
populateSystemOfUnitsDefinitions(con, definitions);
79+
populateConstantValues(con, definitions);
80+
populatePhysicalConstants(con, definitions);
7381
}
7482
return definitions;
7583
}
@@ -320,6 +328,93 @@ private void populateFactorUnits(RepositoryConnection con, Definitions definitio
320328
}
321329
}
322330

331+
private void populateConstantValues(RepositoryConnection con, Definitions definitions) {
332+
TupleQuery query = con.prepareTupleQuery(queryLoadConstantValue);
333+
try (TupleQueryResult result = query.evaluate()) {
334+
Iterator<BindingSet> solutions = result.iterator();
335+
ConstantValue.Definition constantValueDef = null;
336+
while (solutions.hasNext()) {
337+
BindingSet bs = solutions.next();
338+
String currentIri = bs.getValue("constantValue").stringValue();
339+
if (constantValueDef != null && !constantValueDef.getId().equals(currentIri)) {
340+
definitions.addConstantValueDefinition(constantValueDef);
341+
constantValueDef = null;
342+
}
343+
if (constantValueDef == null) {
344+
constantValueDef = makeConstantValueBuilder(bs, definitions);
345+
}
346+
constantValueDef
347+
.standardUncertainty(
348+
(String)
349+
getIfPresent(
350+
bs, "standardUncertainty", v -> v.stringValue()))
351+
.deprecated(
352+
Optional.ofNullable(
353+
getIfPresent(
354+
bs,
355+
"deprecated",
356+
v -> ((Literal) v).booleanValue()))
357+
.orElse(false))
358+
.addLabel(
359+
(LangString)
360+
getIfPresent(
361+
bs,
362+
"label",
363+
v ->
364+
new LangString(
365+
((Literal) v).getLabel(),
366+
((Literal) v)
367+
.getLanguage()
368+
.orElse(null))));
369+
}
370+
if (constantValueDef != null) {
371+
definitions.addConstantValueDefinition(constantValueDef);
372+
}
373+
}
374+
}
375+
376+
private void populatePhysicalConstants(RepositoryConnection con, Definitions definitions) {
377+
TupleQuery query = con.prepareTupleQuery(queryLoadPhysicalConstant);
378+
try (TupleQueryResult result = query.evaluate()) {
379+
Iterator<BindingSet> solutions = result.iterator();
380+
PhysicalConstant.Definition physicalConstantDef = null;
381+
while (solutions.hasNext()) {
382+
BindingSet bs = solutions.next();
383+
String currentIri = bs.getValue("physicalConstant").stringValue();
384+
if (physicalConstantDef != null
385+
&& !physicalConstantDef.getId().equals(currentIri)) {
386+
definitions.addPhysicalConstantDefinition(physicalConstantDef);
387+
physicalConstantDef = null;
388+
}
389+
if (physicalConstantDef == null) {
390+
physicalConstantDef = makePhysicalConstantBuilder(bs, definitions);
391+
}
392+
physicalConstantDef
393+
.deprecated(
394+
Optional.ofNullable(
395+
getIfPresent(
396+
bs,
397+
"deprecated",
398+
v -> ((Literal) v).booleanValue()))
399+
.orElse(false))
400+
.addLabel(
401+
(LangString)
402+
getIfPresent(
403+
bs,
404+
"label",
405+
v ->
406+
new LangString(
407+
((Literal) v).getLabel(),
408+
((Literal) v)
409+
.getLanguage()
410+
.orElse(null))));
411+
}
412+
if (physicalConstantDef != null) {
413+
definitions.addPhysicalConstantDefinition(physicalConstantDef);
414+
}
415+
}
416+
}
417+
323418
private String loadQuery(String queryFile) {
324419
try (InputStream in =
325420
Thread.currentThread().getContextClassLoader().getResourceAsStream(queryFile)) {
@@ -341,6 +436,7 @@ private Model loadQudtModel() {
341436
loadTtlFile("qudtlib/qudt-quantitykinds.ttl", parser);
342437
loadTtlFile("qudtlib/qudt-units.ttl", parser);
343438
loadTtlFile("qudtlib/qudt-systems-of-units.ttl", parser);
439+
loadTtlFile("qudtlib/qudt-constants.ttl", parser);
344440
return model;
345441
}
346442

@@ -404,6 +500,24 @@ private static QuantityKind.Definition makeQuantityKindBuilder(BindingSet bs) {
404500
.symbol(getIfPresent(bs, "symbol", Value::stringValue));
405501
}
406502

503+
private static ConstantValue.Definition makeConstantValueBuilder(
504+
BindingSet bs, Definitions definitions) {
505+
return ConstantValue.definition(bs.getValue("constantValue").stringValue())
506+
.value(bs.getValue("value").stringValue())
507+
.unit(definitions.expectUnitDefinition(bs.getValue("unit").stringValue()));
508+
}
509+
510+
private static PhysicalConstant.Definition makePhysicalConstantBuilder(
511+
BindingSet bs, Definitions definitions) {
512+
return PhysicalConstant.definition(bs.getValue("physicalConstant").stringValue())
513+
.constantValue(
514+
definitions.expectConstantValueDefinition(
515+
bs.getValue("quantityValue").stringValue()))
516+
.quantityKind(
517+
definitions.expectQuantityKindDefinition(
518+
bs.getValue("quantityKind").stringValue()));
519+
}
520+
407521
private static Prefix.Definition makePrefixBuilder(BindingSet bs) {
408522
return Prefix.definition(bs.getValue("prefix").stringValue())
409523
.multiplier(
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
PREFIX qudt: <http://qudt.org/schema/qudt/>
2+
PREFIX unit: <http://qudt.org/vocab/unit/>
3+
PREFIX kind: <http://qudt.org/vocab/quantitykind/>
4+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
5+
6+
SELECT * where
7+
{
8+
?constantValue
9+
a qudt:ConstantValue ;
10+
qudt:hasUnit ?unit ;
11+
qudt:value ?value .
12+
OPTIONAL {
13+
?constantValue qudt:standardUncertainty ?standardUncertainty ;
14+
}
15+
OPTIONAL {
16+
?constantValue qudt:deprecated ?deprecated ;
17+
}
18+
} order by ?constantValue
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
PREFIX qudt: <http://qudt.org/schema/qudt/>
2+
PREFIX unit: <http://qudt.org/vocab/unit/>
3+
PREFIX kind: <http://qudt.org/vocab/quantitykind/>
4+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
5+
6+
SELECT * where
7+
{
8+
?physicalConstant
9+
a qudt:PhysicalConstant ;
10+
qudt:hasQuantityKind ?quantityKind ;
11+
qudt:quantityValue ?quantityValue ;
12+
rdfs:label ?label .
13+
OPTIONAL {
14+
?physicalConstant qudt:deprecated ?deprecated ;
15+
}
16+
} order by ?physicalConstant

qudtlib-js

0 commit comments

Comments
 (0)