Skip to content

Commit 24d3ecf

Browse files
committed
Improve SN/decimal values generation
1 parent 8e94938 commit 24d3ecf

File tree

2 files changed

+79
-6
lines changed

2 files changed

+79
-6
lines changed

CHANGELOG.md

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

1212
- Add model classes PhysicalConstant and ConstantValue, populate from data.
13+
- Add tool for generating the decimal/scientific values for QUDT
1314

1415
## [6.4.3] - 2024-02-20
1516

qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/GenerateNumericValuesAsXsdDoubleAndXsdDecimal.java

Lines changed: 78 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package io.github.qudtlib.tools.contributions;
22

3+
import static java.util.stream.Collectors.joining;
4+
35
import io.github.qudtlib.Qudt;
6+
import io.github.qudtlib.model.Namespace;
47
import io.github.qudtlib.model.QudtNamespaces;
58
import io.github.qudtlib.tools.contribute.QudtEntityGenerator;
69
import io.github.qudtlib.vocab.QUDT;
710
import java.math.BigDecimal;
8-
import java.util.Optional;
11+
import java.util.*;
912
import org.eclipse.rdf4j.model.IRI;
1013
import org.eclipse.rdf4j.model.Model;
1114
import org.eclipse.rdf4j.model.Value;
@@ -16,6 +19,8 @@
1619

1720
public class GenerateNumericValuesAsXsdDoubleAndXsdDecimal {
1821

22+
private static Map<IRI, Collection<String>> unitsByReplacedPredicate = new HashMap<>();
23+
1924
public static void main(String[] args) {
2025
QudtEntityGenerator generator = new QudtEntityGenerator();
2126
Model addedStatements = new TreeModel();
@@ -32,7 +37,8 @@ public static void main(String[] args) {
3237
val.get(),
3338
QUDT.conversionMultiplier,
3439
QUDT.conversionMultiplierSN,
35-
addedStatements);
40+
addedStatements,
41+
unitsByReplacedPredicate);
3642
}
3743
val = unit.getConversionOffset();
3844
if (val.isPresent()) {
@@ -41,7 +47,8 @@ public static void main(String[] args) {
4147
val.get(),
4248
QUDT.conversionOffset,
4349
QUDT.conversionOffsetSN,
44-
addedStatements);
50+
addedStatements,
51+
unitsByReplacedPredicate);
4552
}
4653
});
4754
tool.writeOut(addedStatements, System.out);
@@ -61,7 +68,8 @@ public static void main(String[] args) {
6168
constantValue.getValue(),
6269
QUDT.value,
6370
QUDT.valueSN,
64-
addedStatements);
71+
addedStatements,
72+
unitsByReplacedPredicate);
6573
Optional<BigDecimal> val =
6674
constantValue.getStandardUncertainty();
6775
if (val.isPresent()) {
@@ -70,16 +78,30 @@ public static void main(String[] args) {
7078
val.get(),
7179
QUDT.standardUncertainty,
7280
QUDT.standardUncertaintySN,
73-
addedStatements);
81+
addedStatements,
82+
unitsByReplacedPredicate);
7483
}
7584
});
7685
tool.writeOut(addedStatements, System.out);
7786
});
87+
88+
printDeleteQuery(unitsByReplacedPredicate);
7889
}
7990

8091
private static void addNewNumericProperty(
81-
String iri, BigDecimal value, IRI property, IRI propertySN, Model addedStatements) {
92+
String iri,
93+
BigDecimal value,
94+
IRI property,
95+
IRI propertySN,
96+
Model addedStatements,
97+
Map<IRI, Collection<String>> unitsByReplacedPredicate) {
8298
ValueFactory vf = SimpleValueFactory.getInstance();
99+
Collection<String> units = unitsByReplacedPredicate.get(property);
100+
if (units == null) {
101+
units = new HashSet<>();
102+
unitsByReplacedPredicate.put(property, units);
103+
}
104+
units.add(iri);
83105
addedStatements.add(vf.createIRI(iri), property, vf.createLiteral(value));
84106
addedStatements.add(vf.createIRI(iri), propertySN, createDoubleLiteral(value));
85107
}
@@ -88,4 +110,54 @@ private static Value createDoubleLiteral(BigDecimal val) {
88110
ValueFactory vf = SimpleValueFactory.getInstance();
89111
return vf.createLiteral(val.toString(), CoreDatatype.XSD.DOUBLE);
90112
}
113+
114+
private static void printDeleteQuery(Map<IRI, Collection<String>> unitsByReplacedPredicate) {
115+
for (Map.Entry<IRI, Collection<String>> entry : unitsByReplacedPredicate.entrySet()) {
116+
IRI predicate = entry.getKey();
117+
Collection<String> subjects = entry.getValue();
118+
System.out.println("\n\n\nSTATEMENTS TO DELETE:\n");
119+
System.out.println("PREFIX qudt: <http://qudt.org/schema/qudt/>");
120+
System.out.println("PREFIX unit: <http://qudt.org/vocab/unit/>");
121+
System.out.format(
122+
"PREFIX %s: <%s>\n",
123+
Qudt.NAMESPACES.constant.getAbbreviationPrefix(),
124+
Qudt.NAMESPACES.constant.getBaseIri());
125+
System.out.format(
126+
"PREFIX %s: <%s>\n",
127+
Qudt.NAMESPACES.currency.getAbbreviationPrefix(),
128+
Qudt.NAMESPACES.currency.getBaseIri());
129+
System.out.format("DELETE { ?u %s ?m } \n", predicate);
130+
System.out.format("WHERE { ?u %s ?m .\n", predicate);
131+
System.out.println("\tVALUES ?u {");
132+
System.out.println(
133+
subjects.stream()
134+
.map(iri -> abbreviateIfPossible(iri))
135+
.sorted()
136+
.collect(joining("\n\t\t", "\n\t\t", "")));
137+
System.out.println("\t}\n}\n\n\n");
138+
}
139+
}
140+
141+
private static String abbreviateIfPossible(String iri) {
142+
String abbrev = abbreviateIfPossible(iri, Qudt.NAMESPACES.unit);
143+
if (abbrev != null) {
144+
return abbrev;
145+
}
146+
abbrev = abbreviateIfPossible(iri, Qudt.NAMESPACES.constant);
147+
if (abbrev != null) {
148+
return abbrev;
149+
}
150+
abbrev = abbreviateIfPossible(iri, Qudt.NAMESPACES.currency);
151+
if (abbrev != null) {
152+
return abbrev;
153+
}
154+
return iri;
155+
}
156+
157+
private static String abbreviateIfPossible(String iri, Namespace namespace) {
158+
if (namespace.isFullNamespaceIri(iri)) {
159+
return namespace.abbreviate(iri);
160+
}
161+
return null;
162+
}
91163
}

0 commit comments

Comments
 (0)