diff --git a/CHANGELOG.md b/CHANGELOG.md index edde7f3a..fd3b2d9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Upgrade to QUDT 3.1.4 + - Calculation of scalings and factor units now happens in QUDT (see PR [1129](https://github.com/qudt/qudt-public-repo/pull/1129)) + However, a few things have changed: + - rename `qudt:isScalingOf` to `qudt:scalingOf` + - rename `qudt:factorUnit/qudt:unit` to `qudt:hasFactorUnit/qudt:hasUnit` + - Currency units have changed: + - they were moved back into the graph 'http://qudt.org/vocab/unit/' + - their localnames have received the prefix `CCY_` + - both changes are 'soft', ie, the old way is still available, but deprecated + - for example: `http://qudt.org/vocab/currency/EUR` is now `http://qudt.org/vocab/unit/CCY_EUR`. + - QUDTLib makes the change now instead of adopting the deprecation, as there are other breaking changes as well, so upgrading will require work anyway. + - for QUDTLib constants, this means that the pattern `${CurrencyName}_Currency` is dropped in favor of the QUDT style `CCY_${CurrencyName}`, e.g. `Qudt.Units.EUR_Currency` becomes `Qudt.Units.CCY_EUR` + - Many conversion multipliers were changed in QUDT. They now consistently have at most 34 significant digits (ie, BigDecimal's precision of 34). This fixes problems such as the one reported in [Conversion error from MilliSV__PER__HR to MicroSV__PER__HR](https://github.com/qudtlib/qudtlib-java/issues/109). + - scalings of `unit:GM` deserve special mention: + - in the upcoming QUDT release we have `unit:GM qudt:scalingOf unit:KiloGM`, making `qudt:scalingOf` and `qudt:conversionMultiplier` consistent in all cases + - QUDTLib makes the change as well, with the effect that unit factorization does not use `Units.GM` (which probably surprised a few people) for the mass dimension but `Units.KiloGM` (which is what one would expect) + - Sorting in `Qudt.derivedUnitListFromFactorUnits` now takes more aspects into account and ordering has changed in some cases. + - When creating a Unit instance, its factor units are checked for factors `x^N^M`, where x has no more factors. + Such factors are simplified as x^(N*M). The same is applied to newly instantiated `FactorUnits` objects. + +### Fixed + +- Fixed a sorting bug in `Qudt.derivedUnitListFromFactorUnits` that caused wrong sorting for some very similar units. + +### Added + +- `Unit.dependents` - the number of units that refer to that unit as one of its factor units or are scaled from that base unit. + this value is required to achieve better sorting in `Qudt.derivedUnitListFromFactorUnits`, allowing to prefer + more important units (those with more dependents) + ## [6.8.1] - 2025-01-29 ### Fixed @@ -93,13 +125,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Simplified BEST_MATCH algorithm for obtaining a unit from a set of factor units. Recent additions to the data model (isScalingOf and factorUnit relationships) led to a larger set of candidates and the complexity of the previous algorithm led to very high computation time. +- Simplified BEST_MATCH algorithm for obtaining a unit from a set of factor units. Recent additions to the data model (scalingOf and factorUnit relationships) led to a larger set of candidates and the complexity of the previous algorithm led to very high computation time. - Changed the behaviour of Unit.hasFactorUnits() such that for a FactorUnits object with only one top-level factor unit (such as [N^1]), the method returns false. ### Fixed - `unit:MHO`, `unit:MicroMHO`: fix dimension vector and quantity kind -- `unit:F`: fix `unit:isScalingOf` +- `unit:F`: fix `unit:scalingOf` ## [6.1.0] - 2024-01-05 diff --git a/pom.xml b/pom.xml index 4aad0a96..dfe94d3d 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ 17 17 UTF-8 - 2.1.47 + 3.1.4 1.25.0 @@ -331,6 +331,12 @@ + + skip-test + + true + + diff --git a/qudtlib-constants-gen/src/main/java/io/github/qudtlib/constgen/ConstantsGenerator.java b/qudtlib-constants-gen/src/main/java/io/github/qudtlib/constgen/ConstantsGenerator.java index 4021be9e..a8918804 100644 --- a/qudtlib-constants-gen/src/main/java/io/github/qudtlib/constgen/ConstantsGenerator.java +++ b/qudtlib-constants-gen/src/main/java/io/github/qudtlib/constgen/ConstantsGenerator.java @@ -30,7 +30,6 @@ public class ConstantsGenerator { // input data private static final String DATA_UNITS = "qudtlib/qudt-units.ttl"; private static final String DATA_QUANTITYKINDS = "qudtlib/qudt-quantitykinds.ttl"; - private static final String DATA_CURRENCY = "qudtlib/qudt-currency.ttl"; private static final String DATA_PREFIXES = "qudtlib/qudt-prefixes.ttl"; private static final String DATA_SYSTEMS_OF_UNITS = "qudtlib/qudt-systems-of-units.ttl"; private static final String DATA_PHYSICAL_CONSTANTS = "qudtlib/qudt-constants.ttl"; @@ -148,9 +147,6 @@ private Map getConstantNamesByQuery(String queryFile, String... typeName.substring(0, 1).toLowerCase() + typeName.substring(1) + "FromLocalnameRequired"; - if (typeName.equals("Unit") && constName.endsWith("_Currency")) { - valueFactory = "currencyFromLocalnameRequired"; - } Constant constant = new Constant( constName, diff --git a/qudtlib-data-gen/src/main/java/io/github/qudtlib/data/DataGenerator.java b/qudtlib-data-gen/src/main/java/io/github/qudtlib/data/DataGenerator.java index a46ef2ba..ab93aa68 100644 --- a/qudtlib-data-gen/src/main/java/io/github/qudtlib/data/DataGenerator.java +++ b/qudtlib-data-gen/src/main/java/io/github/qudtlib/data/DataGenerator.java @@ -35,8 +35,6 @@ public class DataGenerator { // QUDT files private static final String UNITS_FILE = "qudt/vocab/unit/VOCAB_QUDT-UNITS-ALL.ttl"; - private static final String CURRENCIES_FILE = - "qudt/vocab/currency/VOCAB_QUDT-UNITS-CURRENCY.ttl"; private static final String PREFIXES_FILE = "qudt/vocab/prefixes/VOCAB_QUDT-PREFIXES.ttl"; private static final String QUANTITYKINDS_FILE = "qudt/vocab/quantitykinds/VOCAB_QUDT-QUANTITY-KINDS-ALL.ttl"; @@ -44,18 +42,13 @@ public class DataGenerator { private static final String CONSTANTS_FILE = "qudt/vocab/constants/VOCAB_QUDT-CONSTANTS.ttl"; // queries - private static final String FACTOR_UNITS_QUERY = "factorUnit.rq"; - private static final String IS_SCALING_OF_QUERY = "isScalingOf.rq"; private static final String MISSING_UNITS_QUERY = "missing-units.rq"; - private static final String DELETE_KILOGM_SCALINGS_QUERY = "delete-kiloGM-scalings.rq"; private static final String DELETE_UNITS_QUERY = "delete-units.rq"; - private static final String DELETE_FROM_UNITS_BY_QUERY_PATTERN = - "delete-from-units-by-query[N].rq"; - private static final String DELETE_FROM_QUANTITYKINDS_BY_QUERY_PATTERN = - "delete-from-quantitykinds-by-query[N].rq"; + private static final String UPDATE_UNITS_BY_QUERY_PATTERN = "update-units-by-query[N].rq"; + private static final String UPDATE_QUANTITYKINDS_BY_QUERY_PATTERN = + "update-quantitykinds-by-query[N].rq"; // additional data - private static final String SI_BASE_UNITS_DATA = "si-base-units.ttl"; private static final String ADD_TO_UNITS = "add-to-units.ttl"; private static final String ADD_TO_QUANTITYKINDS = "add-to-quantitykinds.ttl"; private static final String DELETE_FROM_UNITS = "delete-from-units.ttl"; @@ -137,11 +130,9 @@ private void processQuantityKinds() { Repository outputRepo = new SailRepository(new MemoryStore()); try (RepositoryConnection outputCon = outputRepo.getConnection()) { RdfOps.addStatementsFromFile(outputCon, QUANTITYKINDS_FILE); - RdfOps.addStatementsFromFile(outputCon, CURRENCIES_FILE); RdfOps.updateDataUsingQuery(outputCon, DELETE_UNITS_QUERY); // remove unwanted individual triples - RdfOps.updateDataUsingNQueries( - outputCon, DELETE_FROM_QUANTITYKINDS_BY_QUERY_PATTERN, 5); + RdfOps.updateDataUsingNQueries(outputCon, UPDATE_QUANTITYKINDS_BY_QUERY_PATTERN, 5); RdfOps.removeStatementsFromFile(outputCon, DELETE_FROM_QUANTITYKINDS); // add missing triples RdfOps.addStatementsFromFile(outputCon, ADD_TO_QUANTITYKINDS); @@ -157,30 +148,20 @@ void processUnits() { try (RepositoryConnection outputCon = outputRepo.getConnection()) { // start with the original units data in the INPUT repo RdfOps.addStatementsFromFile(inputCon, UNITS_FILE); - RdfOps.addStatementsFromFile(inputCon, CURRENCIES_FILE); - // deal with kg - RdfOps.updateDataUsingQuery(inputCon, DELETE_KILOGM_SCALINGS_QUERY); // if we have identified wrong data in this query, remove it - RdfOps.updateDataUsingNQueries(inputCon, DELETE_FROM_UNITS_BY_QUERY_PATTERN, 5); + RdfOps.updateDataUsingNQueries(inputCon, UPDATE_UNITS_BY_QUERY_PATTERN, 5); // remove unwanted individual triples RdfOps.removeStatementsFromFile(inputCon, DELETE_FROM_UNITS); // add missing triples RdfOps.addStatementsFromFile(inputCon, ADD_TO_UNITS); - // add SI base units - RdfOps.addStatementsFromFile(outputCon, SI_BASE_UNITS_DATA); // put result in OUTPUT repo RdfOps.copyData(inputCon, outputCon); // add prefixes to INPUT repo (cannot be in output, but is required for queries!) RdfOps.addStatementsFromFile(inputCon, PREFIXES_FILE); - // find isScalingOf where missing, write result in INPUT and OUTPUT repos + // find scalingOf where missing, write result in INPUT and OUTPUT repos if (DEBUG) { RdfOps.writeTurtleFile(inputCon, new File("/tmp/scaling-data.ttl").toPath()); } - RdfOps.addDataUsingQuery(inputCon, IS_SCALING_OF_QUERY, inputCon, outputCon); - // find factor units, write result in INPUT and OUTPUT repos - RdfOps.addDataUsingQuery(inputCon, FACTOR_UNITS_QUERY, inputCon, outputCon); - // we generate some units in the above, add basic unit info for those, write to - // INPUT and OUTPUT repos RdfOps.addDataUsingQuery(inputCon, MISSING_UNITS_QUERY, inputCon, outputCon); copyNamespaces(inputCon, outputCon); // write units file from OUTPUT repo @@ -215,7 +196,7 @@ private void compareWithExpected(RepositoryConnection outputCon) { .collect(Collectors.toList())); RdfOps.message( "\n\nExpected data subset of generated: " + Models.isomorphic(actual, expected)); - compareForProperty(expected, actual, QUDT.isScalingOf); + compareForProperty(expected, actual, QUDT.scalingOf); compareForProperty(expected, actual, QUDTX.factorUnit); } diff --git a/qudtlib-data-gen/src/main/resources/add-to-units.ttl b/qudtlib-data-gen/src/main/resources/add-to-units.ttl index 68115ad6..139597f9 100644 --- a/qudtlib-data-gen/src/main/resources/add-to-units.ttl +++ b/qudtlib-data-gen/src/main/resources/add-to-units.ttl @@ -1,53 +1,2 @@ -@prefix xsd: . -@prefix qudt: . -@prefix unit: . - -unit:DEG_C2 - qudt:symbol "°C²" . - -unit:GM-PER-M2-HR - qudt:symbol "g/m²·hr" . - -unit:GM-PER-M2-YR - qudt:symbol "g/m²·yr" . - -unit:GM-PER-M3-CentiPOISE - qudt:symbol "g/(m³·cP)" . - -unit:GM-PER-M3-PA-SEC - qudt:symbol "g/(m³Pa·s)" . - -unit:KiloGM-PER-M2-DAY - qudt:symbol "kg/(m²·d)" . - -unit:KiloTONNE-PER-YR - qudt:symbol "kt/yr" . - -unit:MegaGM-PER-HA-YR - qudt:symbol "Mg/(ha·yr)" . - -unit:MegaJ-PER-M2-DAY - qudt:symbol "MJ/(m²·d)" . - -unit:MicroGM-PER-GM-HR - qudt:symbol "μg/(g·h)" . - -unit:MicroGM-PER-L-DAY - qudt:symbol "μg/(L·d)" . - -unit:MicroMOL-PER-M2-SEC2 - qudt:symbol "μmol/(m²·s²)" . - -unit:MilliM-PER-M2 - qudt:symbol "mm/m²" . - -unit:MilliMOL-PER-M2-HR - qudt:symbol "mmol/(m²·h)" . - -unit:NanoMOL-PER-GM-HR - qudt:symbol "nmol/(g.h)" . - -unit:NanoMOL-PER-M2-SEC - qudt:symbol "nmol/(m²·s)" . diff --git a/qudtlib-data-gen/src/main/resources/delete-from-quantitykinds-by-query1_dontfind.rq b/qudtlib-data-gen/src/main/resources/delete-from-quantitykinds-by-query1_dontfind.rq deleted file mode 100644 index 634a83fc..00000000 --- a/qudtlib-data-gen/src/main/resources/delete-from-quantitykinds-by-query1_dontfind.rq +++ /dev/null @@ -1,7 +0,0 @@ -PREFIX qudt: -PREFIX unit: -prefix quantitykind: -DELETE { ?qk ?b ?c . ?d ?e ?qk } -WHERE { { ?qk ?b ?c .} union { ?d ?e ?qk } - VALUES ?qk { quantitykind:VaporPermeability } -} \ No newline at end of file diff --git a/qudtlib-data-gen/src/main/resources/delete-from-units-by-query1.rq b/qudtlib-data-gen/src/main/resources/delete-from-units-by-query1.rq deleted file mode 100644 index 6f99bcc9..00000000 --- a/qudtlib-data-gen/src/main/resources/delete-from-units-by-query1.rq +++ /dev/null @@ -1,24 +0,0 @@ -PREFIX qudt: -PREFIX unit: -prefix quantitykind: -DELETE { ?u qudt:symbol ?s } -WHERE { ?u qudt:symbol ?s - VALUES ?u { - unit:DEG_C2 - unit:GM-PER-M2-HR - unit:GM-PER-M2-YR - unit:GM-PER-M3-CentiPOISE - unit:GM-PER-M3-PA-SEC - unit:KiloGM-PER-M2-DAY - unit:KiloTONNE-PER-YR - unit:MegaGM-PER-HA-YR - unit:MegaJ-PER-M2-DAY - unit:MicroGM-PER-L-DAY - unit:MicroGM-PER-GM-HR - unit:MicroMOL-PER-M2-SEC2 - unit:MilliM-PER-M2 - unit:MilliMOL-PER-M2-HR - unit:NanoMOL-PER-GM-HR - unit:NanoMOL-PER-M2-SEC - } -} \ No newline at end of file diff --git a/qudtlib-data-gen/src/main/resources/delete-from-units-by-query2_dontfind.rq b/qudtlib-data-gen/src/main/resources/delete-from-units-by-query2_dontfind.rq deleted file mode 100644 index a25e03c2..00000000 --- a/qudtlib-data-gen/src/main/resources/delete-from-units-by-query2_dontfind.rq +++ /dev/null @@ -1,10 +0,0 @@ -PREFIX qudt: -PREFIX unit: -prefix quantitykind: -DELETE { ?u qudt:symbol ?symb } -INSERT { ?u qudt:symbol ?repl } -WHERE { - ?u qudt:symbol ?symb - filter(regex(?symb, "^1/.+")) - BIND (replace(?symb, "^1", "") as ?repl) -} \ No newline at end of file diff --git a/qudtlib-data-gen/src/main/resources/delete-kiloGM-scalings.rq b/qudtlib-data-gen/src/main/resources/delete-kiloGM-scalings.rq deleted file mode 100644 index 532aeeda..00000000 --- a/qudtlib-data-gen/src/main/resources/delete-kiloGM-scalings.rq +++ /dev/null @@ -1,24 +0,0 @@ -PREFIX qudt: -PREFIX unit: -PREFIX prefix: -PREFIX kind: -PREFIX rdfs: - -DELETE { - ?scaledUnit qudt:isScalingOf ?baseUnit . -} -where -{ - ?scaledUnit - a qudt:Unit ; - qudt:isScalingOf ?baseUnit . - ?baseUnit a qudt:Unit . - OPTIONAL { - ?scaledUnit qudt:convertsTo ?convertsToUnit . - ?convertsToUnit a qudt:Unit. - } - FILTER (?baseUnit = unit:KiloGM) -} - - - diff --git a/qudtlib-data-gen/src/main/resources/factorUnit.rq b/qudtlib-data-gen/src/main/resources/factorUnit.rq deleted file mode 100644 index e94330e7..00000000 --- a/qudtlib-data-gen/src/main/resources/factorUnit.rq +++ /dev/null @@ -1,83 +0,0 @@ -PREFIX qudt: -PREFIX unit: -PREFIX prefix: -PREFIX kind: -PREFIX rdfs: -PREFIX xsd: - -CONSTRUCT { - ?derivedUnit qudt:factorUnit [ - qudt:unit ?baseUnit ; - qudt:exponent ?exponent - ] . -} -#SELECT * WHERE -#SELECT ?derivedUnit ?baseUnitLocalNameExtracted ?newlyMintedBaseUnit ?existingBaseUnit ?existingBaseUnitLocalName ?baseUnit -#select count(*) where -{ - SELECT DISTINCT ?derivedUnit ?baseUnit ?exponent WHERE - { - { - ?derivedUnit a qudt:Unit ; - BIND(REPLACE(STR(?derivedUnit), "^.+/", "") as ?derivedUnitLocalName) - FILTER(REPLACE(?derivedUnitLocalName, "(PER|2|3|4|5|6|-)\\b", "") != ?derivedUnitLocalName) - FILTER(?derivedUnitLocalName NOT IN ( - "Gold-OunceTroy", - "Palladium-OunceTroy", - "Silver-OunceTroy", - "Platinum-OunceTroy", - "failures-in-time", - "USDollar-NextDay", - "Kilo-FT3" - )) - - VALUES ?skipUnits { 0 1 2 3 4 5 6 } - BIND("(\\w+(_\\w+)?\\d?)" as ?baseUnitRegex) - BIND("(\\w+(_\\w+)?\\d?|PER)" as ?skipUnitRegex) - BIND(CONCAT("^(",?skipUnitRegex,"-){", STR(?skipUnits), "}", ?baseUnitRegex, "(-" ,?skipUnitRegex, ")*$") as ?selectUnitRegex ) - BIND(REPLACE(?derivedUnitLocalName, ?selectUnitRegex, "$4") as ?baseUnitLocalNameExtractedTmp) - BIND(REPLACE(?baseUnitLocalNameExtractedTmp, "^(\\w*[^\\d])(\\d?)$", "$1") as ?baseUnitLocalNameExtracted) - BIND(REPLACE(?baseUnitLocalNameExtractedTmp, "^(\\w*[^\\d])(\\d?)$", "$2") as ?exponentTmpStr) - BIND(IF(?exponentTmpStr = "", STRDT("1",xsd:integer), STRDT(?exponentTmpStr,xsd:integer)) as ?exponentTmp) - VALUES ( ?matchString ?dontMatchString ?expFactor) { - ( "^.*PER-.*\\b@@UNIT@@\\b.*$" "dontfindthis" -1 ) - ( "^.*\\b@@UNIT@@\\b.*PER.*$" "dontfindthis" 1 ) - ( ".+" "\\bPER\\b" 1 ) - } - FILTER(REPLACE(?derivedUnitLocalName, REPLACE(?matchString, "@@UNIT@@", ?baseUnitLocalNameExtractedTmp), "") != ?derivedUnitLocalName) - FILTER(REPLACE(?derivedUnitLocalName, ?dontMatchString, "") = ?derivedUnitLocalName) - BIND(?exponentTmp * ?expFactor as ?exponent) - FILTER( ?baseUnitLocalNameExtractedTmp != "PER" ) - FILTER( ! CONTAINS(?baseUnitLocalNameExtractedTmp, "-") ) - BIND(IRI(CONCAT("http://qudt.org/vocab/unit/", ?baseUnitLocalNameExtracted)) as ?newlyMintedBaseUnit) - # find an existing unit or currencyunit with the localname we have determined. if we find none, we will - # assume that the factor unit is a normal unit and that it is missing. - OPTIONAL { - { - ?existingBaseUnit a qudt:Unit - BIND(REPLACE(STR(?existingBaseUnit), "^.+/", "") AS ?existingBaseUnitLocalName) - } - UNION - { - ?existingBaseUnit a qudt:CurrencyUnit - BIND(REPLACE(STR(?existingBaseUnit), "^.+/", "") AS ?existingBaseUnitLocalName) - } - FILTER(?existingBaseUnitLocalName = ?baseUnitLocalNameExtracted) - } - # did we find an existing unit/currencyunit with that localname? use it. Otherwise: use newly minted unit iri. - BIND(IF(BOUND(?existingBaseUnit), ?existingBaseUnit, ?newlyMintedBaseUnit) as ?baseUnit) - } - - FILTER NOT EXISTS { - ?derivedUnit qudt:factorUnit [ - qudt:unit ?baseUnit ; - qudt:exponent ?exponent - ] . - } - - FILTER NOT EXISTS { - ?derivedUnit qudt:isScalingOf ?someOtherUnit - } - } -} -order by ?derivedUnit ?baseUnit diff --git a/qudtlib-data-gen/src/main/resources/isScalingOf.rq b/qudtlib-data-gen/src/main/resources/isScalingOf.rq deleted file mode 100644 index 5653b80e..00000000 --- a/qudtlib-data-gen/src/main/resources/isScalingOf.rq +++ /dev/null @@ -1,102 +0,0 @@ -PREFIX qudt: -PREFIX unit: -PREFIX prefix: -PREFIX kind: -PREFIX rdfs: - -CONSTRUCT { - ?scaledUnit - qudt:isScalingOf ?baseUnit ; - qudt:conversionMultiplier ?scaledUnitConversionMultiplier ; - qudt:conversionOffset ?scaledUnitConversionOffset ; - qudt:prefix ?prefix . -} -#SELECT ?scaledUnit ?baseUnit ?prefix ?scaledUnitConversionMultiplier ?scaledUnitConversionOffset -where -{ - { - { SELECT DISTINCT ?scaledUnit ?scaledUnitLocalName ?prefixRegex - WHERE - { - - # select all base units (not using prefixes) - { - ?scaledUnit a qudt:Unit . - } UNION { - ?factor qudt:unit ?scaledUnit ; - FILTER NOT EXISTS { - ?scaledUnit a qudt:Unit . - } - } - BIND(REPLACE(STR(?scaledUnit), "^.+/", "") as ?scaledUnitLocalName) - FILTER(REPLACE(?scaledUnitLocalName, ?prefixRegex, "") != ?scaledUnitLocalName) - { - SELECT (CONCAT("\\b(",GROUP_CONCAT(STR(?prefixLabel); separator ="|"), ")") as ?prefixRegex) where - { - ?prefix - a qudt:Prefix ; - rdfs:label ?prefixLabel . - } - } - } - } - - # select all base units (not using prefixes) - # special handling for prefix + time, e.g. - # 'unit:MegaYR qudt:isScalingOf unit:YR', not unit:SEC - - ?baseUnit a qudt:Unit ; - BIND(REPLACE(STR(?baseUnit), "^.+/", "") as ?baseUnitLocalName) - # we don't generate isScalingOf for bases that are derived units - FILTER(! CONTAINS(?baseUnitLocalName, "-")) - # we don't generate isScalingOf for bases with a non-1 exponent (because then we cannot use the existing factor as would have to be exponentiated) - FILTER(! REGEX(?baseUnitLocalName,".+\\d+")) - BIND("(YR|MO|DAY|HR|MIN)\\b" as ?timeRegex) - FILTER ( - ( - REPLACE(?scaledUnitLocalName, CONCAT(?prefixRegex, ?timeRegex), "") = ?scaledUnitLocalName - && ?baseUnitLocalName = REPLACE(REPLACE(?scaledUnitLocalName, ?prefixRegex, ""), ?timeRegex, "SEC") - ) || ( - REPLACE(?scaledUnitLocalName, CONCAT(?prefixRegex, ?timeRegex), "") != ?scaledUnitLocalName - && ?baseUnitLocalName = REPLACE(?scaledUnitLocalName, ?prefixRegex, "") - ) - ) - } - OPTIONAL { - # if the scaled unit has a prefix, match it so we can add the triple - ?prefix a qudt:Prefix ; - rdfs:label ?prefixLabel ; - FILTER (!CONTAINS(?baseUnitLocalName, "-")) - FILTER (CONTAINS(?scaledUnitLocalName, STR(?prefixLabel))) - } - OPTIONAL { - # if the scaled unit does not have a conversionMultiplier, generate it - FILTER NOT EXISTS { - ?scaledUnit qudt:conversionMultiplier ?any . - } - ?baseUnit qudt:conversionMultiplier ?cm . - optional { - ?baseUnit qudt:conversionOffset ?co - } - ?prefix a qudt:Prefix ; - qudt:prefixMultiplier ?prefixMultiplier ; - rdfs:label ?prefixLabel ; - FILTER (!CONTAINS(?baseUnitLocalName, "-")) - FILTER (CONTAINS(?scaledUnitLocalName, STR(?prefixLabel))) - BIND (?cm * ?prefixMultiplier as ?scaledUnitConversionMultiplier ) - BIND (?co as ?scaledUnitConversionOffset ) - } - - OPTIONAL { - ?baseUnit qudt:dimensionVector ?dv . - } - FILTER NOT EXISTS { - ?scaledUnit qudt:isScalingOf ?baseUnit . - { - ?scaledUnit qudt:prefix ?prefix - } UNION { - ?scaledUnit qudt:factorUnit ?x . # for derived units, we don't generate a prefix. - } - } -} -order by ?baseUnit ?scaledUnit \ No newline at end of file diff --git a/qudtlib-data-gen/src/main/resources/missing-units.rq b/qudtlib-data-gen/src/main/resources/missing-units.rq index 99930ad9..f83c1da5 100644 --- a/qudtlib-data-gen/src/main/resources/missing-units.rq +++ b/qudtlib-data-gen/src/main/resources/missing-units.rq @@ -17,16 +17,16 @@ CONSTRUCT { { { - ?x qudt:factorUnit/qudt:unit ?unit . + ?x qudt:hasFactorUnit/qudt:hasUnit ?unit . BIND("factor unit" as ?reason) } UNION { - ?unit qudt:factorUnit/qudt:unit ?x . + ?unit qudt:hasFactorUnit/qudt:hasUnit ?x . BIND("derived unit" as ?reason) } UNION { - ?x qudt:isScalingOf ?unit . + ?x qudt:scalingOf ?unit . BIND("base unit" as ?reason) } UNION { - ?unit qudt:isScalingOf ?x . + ?unit qudt:scalingOf ?x . BIND("scaled unit" as ?reason) } FILTER NOT EXISTS { @@ -36,9 +36,9 @@ CONSTRUCT { ?unit a qudt:CurrencyUnit } OPTIONAL { - ?unit qudt:isScalingOf/qudt:hasDimensionVector ?dimensionVector . + ?unit qudt:scalingOf/qudt:hasDimensionVector ?dimensionVector . } BIND(REPLACE(STR(?unit), "^.+/", "") as ?unitLocalName) - BIND(STRLANG(CONCAT("This unit was added while generating qudt:factorUnit. This unit is a ", ?reason, " of ", (REPLACE(STR(?x), "http://qudt.org/vocab/unit/", "unit:")), ", missing from the original QUDT data."), "en") as ?comment) + BIND(STRLANG(CONCAT("This unit was added while generating qudt:hasFactorUnit. This unit is a ", ?reason, " of ", (REPLACE(STR(?x), "http://qudt.org/vocab/unit/", "unit:")), ", missing from the original QUDT data."), "en") as ?comment) } order by ?unit \ No newline at end of file diff --git a/qudtlib-data-gen/src/main/resources/si-base-units.ttl b/qudtlib-data-gen/src/main/resources/si-base-units.ttl deleted file mode 100644 index 5471f17f..00000000 --- a/qudtlib-data-gen/src/main/resources/si-base-units.ttl +++ /dev/null @@ -1,1099 +0,0 @@ -@prefix xsd: . -@prefix qudt: . -@prefix unit: . - -unit:AC - qudt:isScalingOf unit:M2 . - -unit:AMU - qudt:isScalingOf unit:KiloGM . - -unit:ANGSTROM - qudt:isScalingOf unit:M . - -unit:ARE - qudt:isScalingOf unit:M2 . - -unit:AT - qudt:isScalingOf unit:A . - -unit:ATM - qudt:isScalingOf unit:PA . - -unit:ATM_T - qudt:isScalingOf unit:PA . - -unit:AU - qudt:isScalingOf unit:M . - -unit:A_Ab - qudt:isScalingOf unit:A . - -unit:A_Stat - qudt:isScalingOf unit:A . - -unit:BAR - qudt:isScalingOf unit:PA . - -unit:BARAD - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:DYN ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:CentiM ; - ] . - -unit:BARN - qudt:isScalingOf unit:M2 . - -unit:BARYE - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:DYN ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:CentiM ; - ] . - -unit:BBL_UK_PET - qudt:isScalingOf unit:M3 . - -unit:BBL_US - qudt:isScalingOf unit:M3 . - -unit:BBL_US_DRY - qudt:isScalingOf unit:M3 . - -unit:BIOT - qudt:isScalingOf unit:A . - -unit:BQ - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:SEC ; - ] . - -unit:BTU_IT - qudt:isScalingOf unit:J . - -unit:BTU_MEAN - qudt:isScalingOf unit:J . - -unit:BTU_TH - qudt:isScalingOf unit:J . - -unit:BU_UK - qudt:isScalingOf unit:M3 . - -unit:BU_US - qudt:factorUnit [ - qudt:exponent 3 ; - qudt:unit unit:IN ; - ] ; - qudt:factorUnitScalar 2150.42 . - -unit:C - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:SEC ; - ] ; - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:A ; - ] . - -unit:CAL_15_DEG_C - qudt:isScalingOf unit:J . - -unit:CAL_IT - qudt:isScalingOf unit:J . - -unit:CAL_MEAN - qudt:isScalingOf unit:J . - -unit:CAL_TH - qudt:isScalingOf unit:J . - -unit:CARAT - qudt:isScalingOf unit:KiloGM . - -unit:CH - qudt:isScalingOf unit:M . - -unit:CLO - qudt:isScalingOf unit:M2-K-PER-W . - -unit:CM_H2O - qudt:isScalingOf unit:PA . - -unit:CORD - qudt:isScalingOf unit:M3 . - -unit:CP - qudt:isScalingOf unit:CD . - -unit:CUP - qudt:isScalingOf unit:M3 . - -unit:CUP_US - qudt:isScalingOf unit:M3 . - -unit:CWT_LONG - qudt:isScalingOf unit:KiloGM . - -unit:CWT_SHORT - qudt:isScalingOf unit:KiloGM . - -unit:C_Ab - qudt:isScalingOf unit:A-SEC . - -unit:C_Stat - qudt:isScalingOf unit:C . - -unit:CentiM_H2O - qudt:isScalingOf unit:PA . - -unit:CentiM_HG - qudt:isScalingOf unit:PA . - -unit:Ci - qudt:isScalingOf unit:BQ . - -unit:DARCY - qudt:isScalingOf unit:M2 . - -unit:DAY - qudt:isScalingOf unit:SEC . - -unit:DAY_Sidereal - qudt:isScalingOf unit:SEC . - -unit:DEG - qudt:isScalingOf unit:RAD . - -unit:DEG_C - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:K ; - ] ; - qudt:isScalingOf unit:K . - -unit:DEG_F - qudt:isScalingOf unit:K . - -unit:DEG_R - qudt:isScalingOf unit:K . - -unit:DIOPTER - qudt:isScalingOf unit:PER-M . - -unit:DPI - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:NUM ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:IN ; - ] . - -unit:DRAM_UK - qudt:isScalingOf unit:KiloGM . - -unit:DRAM_US - qudt:isScalingOf unit:KiloGM . - -unit:DWT - qudt:isScalingOf unit:KiloGM . - -unit:DYN - qudt:isScalingOf unit:N . - -unit:Da - qudt:isScalingOf unit:KiloGM . - -unit:Debye - qudt:isScalingOf unit:C-M . - -unit:Denier - qudt:isScalingOf unit:GM-PER-MilliM . - -unit:E - qudt:isScalingOf unit:A-SEC . - -unit:ERG - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:GM ; - ] ; - qudt:factorUnit [ - qudt:exponent 2 ; - qudt:unit unit:CentiM ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:SEC ; - ] . - -unit:EV - qudt:isScalingOf unit:J . - -unit:E_h - qudt:isScalingOf unit:J . - -unit:EarthMass - qudt:isScalingOf unit:KiloGM . - -unit:ElementaryCharge - qudt:isScalingOf unit:C . - -unit:F - qudt:isScalingOf unit:C . - -unit:FARAD - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:C ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:V ; - ] . - -unit:FARAD_Ab - qudt:isScalingOf unit:FARAD . - -unit:FARAD_Stat - qudt:isScalingOf unit:FARAD . - -unit:FATH - qudt:isScalingOf unit:M . - -unit:FBM - qudt:isScalingOf unit:M3 . - -unit:FC - qudt:isScalingOf unit:CD-PER-M2 . - -unit:FM - qudt:isScalingOf unit:M . - -unit:FR - qudt:isScalingOf unit:A-SEC . - -unit:FT - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:IN ; - ] ; - qudt:factorUnitScalar 12.0 . - -unit:FT_H2O - qudt:isScalingOf unit:PA . - -unit:FT_HG - qudt:isScalingOf unit:PA . - -unit:FT_US - qudt:isScalingOf unit:M . - -unit:FUR - qudt:isScalingOf unit:M . - -unit:G - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:M ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:SEC ; - ] ; - qudt:factorUnitScalar 9.80665 . - -unit:GALILEO - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:CentiM ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:SEC ; - ] . - -unit:GAL_IMP - qudt:isScalingOf unit:M3 . - -unit:GAL_UK - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:L ; - ] ; - qudt:factorUnitScalar 4.54609 . - -unit:GAL_US - qudt:factorUnit [ - qudt:exponent 3 ; - qudt:unit unit:IN ; - ] ; - qudt:factorUnitScalar 231 . - -unit:GAL_US_DRY - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:BU_US ; - ] ; - qudt:factorUnitScalar 0.125 . - -unit:GAUGE_FR - qudt:isScalingOf unit:M . - -unit:GAUSS - qudt:isScalingOf unit:T . - -unit:GI - qudt:isScalingOf unit:A . - -unit:GI_UK - qudt:isScalingOf unit:M3 . - -unit:GI_US - qudt:isScalingOf unit:M3 . - -unit:GM_F - qudt:isScalingOf unit:N . - -unit:GRAIN - qudt:isScalingOf unit:KiloGM . - -unit:GRAY - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:J ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:KiloGM ; - ] . - -unit:Gamma - qudt:isScalingOf unit:T . - -unit:Gs - qudt:isScalingOf unit:T . - -unit:H - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:WB ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:A ; - ] . - -unit:HA - qudt:isScalingOf unit:M2 . - -unit:HP - qudt:isScalingOf unit:J-PER-SEC . - -unit:HP_Boiler - qudt:isScalingOf unit:J-PER-SEC . - -unit:HP_Brake - qudt:isScalingOf unit:J-PER-SEC . - -unit:HP_Electric - qudt:isScalingOf unit:J-PER-SEC . - -unit:HP_H2O - qudt:isScalingOf unit:J-PER-SEC . - -unit:HP_Metric - qudt:isScalingOf unit:J-PER-SEC . - -unit:HR - qudt:isScalingOf unit:SEC . - -unit:HR_Sidereal - qudt:isScalingOf unit:SEC . - -unit:HZ - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:SEC ; - ] . - -unit:H_Ab - qudt:isScalingOf unit:H . - -unit:H_Stat - qudt:isScalingOf unit:H . - -unit:Hundredweight_UK - qudt:isScalingOf unit:KiloGM . - -unit:Hundredweight_US - qudt:isScalingOf unit:KiloGM . - -unit:IN - qudt:isScalingOf unit:M . - -unit:IN_H2O - qudt:isScalingOf unit:PA . - -unit:IN_HG - qudt:isScalingOf unit:PA . - -unit:J - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:N ; - ] ; - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:M ; - ] . - -unit:KAT - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:MOL ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:SEC ; - ] . - -unit:KIP_F - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:LB_F ; - ] ; - qudt:factorUnitScalar 1000.0 . - -unit:KN - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:MI_N ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:HR ; - ] . - -unit:KY - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:CentiM ; - ] . - -unit:Kilo-FT3 - qudt:isScalingOf unit:M3 . - -unit:KiloCAL - qudt:isScalingOf unit:J . - -unit:KiloCAL_Mean - qudt:isScalingOf unit:J . - -unit:KiloPA_A - qudt:isScalingOf unit:PA . - -unit:L - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:DeciM3 ; - ] . - -unit:LA - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:CD ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:M ; - ] ; - qudt:factorUnitScalar 0.31830988618 . - -unit:LA_FT - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:CD ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:FT ; - ] ; - qudt:factorUnitScalar 0.31830988618 . - -unit:LB - qudt:isScalingOf unit:KiloGM . - -unit:LB_F - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:SLUG ; - ] ; - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:FT ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:SEC ; - ] . - -unit:LB_M - qudt:isScalingOf unit:KiloGM . - -unit:LB_T - qudt:isScalingOf unit:KiloGM . - -unit:LM - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:CD ; - ] ; - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:SR ; - ] . - -unit:LUX - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:LM ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:M ; - ] . - -unit:LY - qudt:isScalingOf unit:M . - -unit:LunarMass - qudt:isScalingOf unit:KiloGM . - -unit:MHO - qudt:isScalingOf unit:S . - -unit:MHO_Stat - qudt:isScalingOf unit:S-PER-M . - -unit:MI - qudt:isScalingOf unit:M . - -unit:MIL_Circ - qudt:isScalingOf unit:M2 . - -unit:MIN - qudt:isScalingOf unit:SEC . - -unit:MIN_Sidereal - qudt:isScalingOf unit:SEC . - -unit:MI_N - qudt:isScalingOf unit:M . - -unit:MI_US - qudt:isScalingOf unit:M . - -unit:MO - qudt:isScalingOf unit:SEC . - -unit:MOL_LB - qudt:isScalingOf unit:MOL . - -unit:MX - qudt:isScalingOf unit:WB . - -unit:MilLength - qudt:isScalingOf unit:M . - -unit:MilliGAL - qudt:isScalingOf unit:GALILEO . - -unit:MilliM_H2O - qudt:isScalingOf unit:PA . - -unit:MilliM_HG - qudt:isScalingOf unit:PA . - -unit:MilliM_HGA - qudt:isScalingOf unit:PA . - -unit:N - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:M ; - ] ; - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:KiloGM ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:SEC ; - ] . - -unit:OERSTED - qudt:isScalingOf unit:A-PER-M . - -unit:OHM - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:V ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:A ; - ] . - -unit:OHM_Ab - qudt:isScalingOf unit:OHM . - -unit:OHM_Stat - qudt:isScalingOf unit:OHM . - -unit:OZ - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:LB ; - ] ; - qudt:factorUnitScalar 0.0625 . - -unit:OZ_F - qudt:isScalingOf unit:N . - -unit:OZ_M - qudt:isScalingOf unit:KiloGM . - -unit:OZ_TROY - qudt:isScalingOf unit:KiloGM . - -unit:OZ_VOL_UK - qudt:isScalingOf unit:M3 . - -unit:OZ_VOL_US - qudt:isScalingOf unit:M3 . - -unit:P - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:N ; - ] ; - qudt:factorUnitScalar 0.00980665 . - -unit:PA - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:N ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:M ; - ] . - -unit:PARSEC - qudt:isScalingOf unit:M . - -unit:PCA - qudt:isScalingOf unit:M . - -unit:PDL - qudt:isScalingOf unit:N . - -unit:PERM_Metric - qudt:isScalingOf unit:SEC-PER-M . - -unit:PERM_US - qudt:isScalingOf unit:SEC-PER-M . - -unit:PHOT - qudt:isScalingOf unit:CD-PER-M2 . - -unit:PINT - qudt:isScalingOf unit:M3 . - -unit:PINT_UK - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:QT_UK ; - ] ; - qudt:factorUnitScalar 0.5 . - -unit:PINT_US - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:QT_US ; - ] ; - qudt:factorUnitScalar 0.5 . - -unit:PINT_US_DRY - qudt:isScalingOf unit:M3 . - -unit:PK_UK - qudt:isScalingOf unit:M3 . - -unit:PK_US_DRY - qudt:isScalingOf unit:M3 . - -unit:POISE - qudt:isScalingOf unit:KiloGM-PER-M-SEC . - -unit:POND - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:N ; - ] ; - qudt:factorUnitScalar 0.00980665 . - -unit:PSI - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:LB_F ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:IN ; - ] . - -unit:PT - qudt:isScalingOf unit:M . - -unit:PT_BIG - qudt:isScalingOf unit:M . - -unit:Pennyweight - qudt:isScalingOf unit:KiloGM . - -unit:PlanckArea - qudt:isScalingOf unit:M2 . - -unit:PlanckCharge - qudt:isScalingOf unit:A-SEC . - -unit:PlanckCurrent - qudt:isScalingOf unit:A . - -unit:PlanckCurrentDensity - qudt:isScalingOf unit:A-PER-M2 . - -unit:PlanckDensity - qudt:isScalingOf unit:GM-PER-DeciM3 . - -unit:PlanckEnergy - qudt:isScalingOf unit:J . - -unit:PlanckForce - qudt:isScalingOf unit:N . - -unit:PlanckFrequency - qudt:isScalingOf unit:BQ . - -unit:PlanckFrequency_Ang - qudt:isScalingOf unit:BQ . - -unit:PlanckImpedance - qudt:isScalingOf unit:OHM . - -unit:PlanckLength - qudt:isScalingOf unit:M . - -unit:PlanckMass - qudt:isScalingOf unit:KiloGM . - -unit:PlanckMomentum - qudt:isScalingOf unit:KiloGM-M-PER-SEC . - -unit:PlanckPower - qudt:isScalingOf unit:J-PER-SEC . - -unit:PlanckPressure - qudt:isScalingOf unit:KiloGM-PER-M-SEC2 . - -unit:PlanckTemperature - qudt:isScalingOf unit:DEG_C . - -unit:PlanckTime - qudt:isScalingOf unit:SEC . - -unit:PlanckVolt - qudt:isScalingOf unit:V . - -unit:PlanckVolume - qudt:isScalingOf unit:M3 . - -unit:QT_UK - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:GAL_UK ; - ] ; - qudt:factorUnitScalar 0.25 . - -unit:QT_US - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:GAL_US ; - ] ; - qudt:factorUnitScalar 0.25 . - -unit:QT_US_DRY - qudt:isScalingOf unit:M3 . - -unit:QUAD - qudt:isScalingOf unit:J . - -unit:Quarter_UK - qudt:isScalingOf unit:KiloGM . - -unit:R - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:C ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:KiloGM ; - ] ; - qudt:factorUnitScalar 0.000258 . - -unit:RAD - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:M ; - ] ; - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:M ; - ] . - -unit:RAD_R - qudt:isScalingOf unit:M2-PER-SEC2 . - -unit:RAYL - qudt:isScalingOf unit:KiloGM-PER-M2-SEC . - -unit:REM - qudt:isScalingOf unit:M2-PER-SEC2 . - -unit:ROD - qudt:isScalingOf unit:M . - -unit:RT - qudt:isScalingOf unit:M3 . - -unit:R_man - qudt:isScalingOf unit:SV . - -unit:S - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:A ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:V ; - ] . - -unit:SH - qudt:isScalingOf unit:SEC . - -unit:SLUG - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:LB ; - ] ; - qudt:factorUnitScalar 32.17405 . - -unit:SR - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:M ; - ] ; - qudt:factorUnit [ - qudt:exponent 2 ; - qudt:unit unit:M ; - ] . - -unit:ST - qudt:factorUnit [ - qudt:exponent 2 ; - qudt:unit unit:M ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:SEC ; - ] ; - qudt:factorUnitScalar 0.0001 . - -unit:STILB - qudt:isScalingOf unit:CD-PER-M2 . - -unit:STR - qudt:isScalingOf unit:M3 . - -unit:SV - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:J ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:KiloGM ; - ] . - -unit:S_Ab - qudt:isScalingOf unit:S-PER-M . - -unit:S_Stat - qudt:isScalingOf unit:S-PER-M . - -unit:SolarMass - qudt:isScalingOf unit:KiloGM . - -unit:Standard - qudt:isScalingOf unit:M3 . - -unit:Stone_UK - qudt:isScalingOf unit:KiloGM . - -unit:T - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:WB ; - ] ; - qudt:factorUnit [ - qudt:exponent -2 ; - qudt:unit unit:M ; - ] . - -unit:TBSP - qudt:isScalingOf unit:M3 . - -unit:TEX - qudt:isScalingOf unit:GM-PER-MilliM . - -unit:THM_US - qudt:isScalingOf unit:J . - -unit:TOE - qudt:isScalingOf unit:J . - -unit:TON - qudt:isScalingOf unit:KiloGM . - -unit:TONNE - qudt:isScalingOf unit:KiloGM . - -unit:TON_Assay - qudt:isScalingOf unit:KiloGM . - -unit:TON_FG - qudt:isScalingOf unit:J-PER-SEC . - -unit:TON_F_US - qudt:isScalingOf unit:N . - -unit:TON_LONG - qudt:isScalingOf unit:KiloGM . - -unit:TON_Metric - qudt:isScalingOf unit:KiloGM . - -unit:TON_SHIPPING_US - qudt:isScalingOf unit:M3 . - -unit:TON_SHORT - qudt:isScalingOf unit:KiloGM . - -unit:TON_UK - qudt:isScalingOf unit:KiloGM . - -unit:TON_US - qudt:isScalingOf unit:KiloGM . - -unit:TORR - qudt:isScalingOf unit:PA . - -unit:TSP - qudt:isScalingOf unit:M3 . - -unit:T_Ab - qudt:isScalingOf unit:T . - -unit:TonEnergy - qudt:isScalingOf unit:J . - -unit:U - qudt:isScalingOf unit:KiloGM . - -unit:UnitPole - qudt:isScalingOf unit:WB . - -unit:V - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:W ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:A ; - ] . - -unit:V_Ab - qudt:isScalingOf unit:V . - -unit:V_Stat - qudt:isScalingOf unit:V . - -unit:W - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:J ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:SEC ; - ] . - -unit:WB - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:J ; - ] ; - qudt:factorUnit [ - qudt:exponent -1 ; - qudt:unit unit:A ; - ] . - -unit:WK - qudt:isScalingOf unit:SEC . - -unit:YD - qudt:factorUnit [ - qudt:exponent 1 ; - qudt:unit unit:FT ; - ] ; - qudt:factorUnitScalar 3.0 . - -unit:YR - qudt:isScalingOf unit:SEC . - -unit:YR_Common - qudt:isScalingOf unit:SEC . - -unit:YR_Sidereal - qudt:isScalingOf unit:SEC . - -unit:YR_TROPICAL - qudt:isScalingOf unit:SEC . - - diff --git a/qudtlib-data-gen/src/main/resources/tmpExpected/newtriples.ttl b/qudtlib-data-gen/src/main/resources/tmpExpected/newtriples.ttl index f7d5a523..474fae4d 100644 --- a/qudtlib-data-gen/src/main/resources/tmpExpected/newtriples.ttl +++ b/qudtlib-data-gen/src/main/resources/tmpExpected/newtriples.ttl @@ -4,76 +4,76 @@ unit:A-PER-CentiM qudt:convertsTo unit:A-PER-M ; - qudt:isScalingOf unit:A-PER-M . + qudt:scalingOf unit:A-PER-M . unit:A-PER-CentiM2 qudt:convertsTo unit:A-PER-M2 ; - qudt:isScalingOf unit:A-PER-M2 . + qudt:scalingOf unit:A-PER-M2 . unit:A-PER-MilliM qudt:convertsTo unit:A-PER-M ; - qudt:isScalingOf unit:A-PER-M . + qudt:scalingOf unit:A-PER-M . unit:A-PER-MilliM2 qudt:convertsTo unit:A-PER-M2 ; - qudt:isScalingOf unit:A-PER-M2 . + qudt:scalingOf unit:A-PER-M2 . unit:AttoC qudt:convertsTo unit:C ; - qudt:isScalingOf unit:C ; - qudt:prefix prefix:Atto . + qudt:prefix prefix:Atto ; + qudt:scalingOf unit:C . unit:AttoFARAD qudt:convertsTo unit:FARAD ; - qudt:isScalingOf unit:FARAD ; - qudt:prefix prefix:Atto . + qudt:prefix prefix:Atto ; + qudt:scalingOf unit:FARAD . unit:AttoJ qudt:convertsTo unit:J ; - qudt:isScalingOf unit:J ; - qudt:prefix prefix:Atto . + qudt:prefix prefix:Atto ; + qudt:scalingOf unit:J . unit:AttoJ-SEC qudt:convertsTo unit:J-SEC ; - qudt:isScalingOf unit:J-SEC . + qudt:scalingOf unit:J-SEC . unit:C-PER-CentiM2 qudt:convertsTo unit:C-PER-M2 ; - qudt:isScalingOf unit:C-PER-M2 . + qudt:scalingOf unit:C-PER-M2 . unit:C-PER-CentiM3 qudt:convertsTo unit:C-PER-M3 ; - qudt:isScalingOf unit:C-PER-M3 . + qudt:scalingOf unit:C-PER-M3 . unit:C-PER-MilliM2 qudt:convertsTo unit:C-PER-M2 ; - qudt:isScalingOf unit:C-PER-M2 . + qudt:scalingOf unit:C-PER-M2 . unit:C-PER-MilliM3 qudt:convertsTo unit:C-PER-M3 ; - qudt:isScalingOf unit:C-PER-M3 . + qudt:scalingOf unit:C-PER-M3 . unit:CentiBAR - qudt:isScalingOf unit:BAR ; - qudt:prefix prefix:Centi . + qudt:prefix prefix:Centi ; + qudt:scalingOf unit:BAR . unit:CentiC qudt:convertsTo unit:C ; - qudt:isScalingOf unit:C ; - qudt:prefix prefix:Centi . + qudt:prefix prefix:Centi ; + qudt:scalingOf unit:C . unit:CentiGM - qudt:isScalingOf unit:GM ; - qudt:prefix prefix:Centi . + qudt:prefix prefix:Centi ; + qudt:scalingOf unit:GM . unit:CentiL - qudt:isScalingOf unit:L ; - qudt:prefix prefix:Centi . + qudt:prefix prefix:Centi ; + qudt:scalingOf unit:L . unit:CentiM qudt:convertsTo unit:M ; - qudt:isScalingOf unit:M ; - qudt:prefix prefix:Centi . + qudt:prefix prefix:Centi ; + qudt:scalingOf unit:M . unit:CentiM-PER-HR qudt:convertsTo unit:M-PER-SEC ; diff --git a/qudtlib-data-gen/src/main/resources/tmpExpected/qudt-unit.ttl b/qudtlib-data-gen/src/main/resources/tmpExpected/qudt-unit.ttl index 3377089a..3dc829b8 100644 --- a/qudtlib-data-gen/src/main/resources/tmpExpected/qudt-unit.ttl +++ b/qudtlib-data-gen/src/main/resources/tmpExpected/qudt-unit.ttl @@ -27,12 +27,12 @@ unit:1000000I a qudt:Unit ; - rdfs:comment "This unit was added while generating qudt:factorUnit information as a missing factor unit"@en ; + rdfs:comment "This unit was added while generating qudt:hasFactorUnit information as a missing factor unit"@en ; rdfs:label "1000000I" . unit:1000I a qudt:Unit ; - rdfs:comment "This unit was added while generating qudt:factorUnit information as a missing factor unit"@en ; + rdfs:comment "This unit was added while generating qudt:hasFactorUnit information as a missing factor unit"@en ; rdfs:label "1000I" . unit:A @@ -69,15 +69,15 @@ unit:A-HR a qudt:DerivedUnit, qudt:Unit ; dcterms:description "\\(\\textbf{Ampere hour}\\) is a practical unit of electric charge equal to the charge flowing in one hour through a conductor passing one ampere. An ampere-hour or amp-hour (symbol \\(Ah,\\,AHr,\\, A \\cdot h, A h\\)) is a unit of electric charge, with sub-units milliampere-hour (\\(mAh\\)) and milliampere second (\\(mAs\\)). One ampere-hour is equal to 3600 coulombs (ampere-seconds), the electric charge transferred by a steady current of one ampere for one hour. The ampere-hour is frequently used in measurements of electrochemical systems such as electroplating and electrical batteries. The commonly seen milliampere-hour (\\(mAh\\) or \\(mA \\cdot h\\)) is one-thousandth of an ampere-hour (\\(3.6 \\,coulombs\\))."^^qudt:LatexString ; qudt:conversionMultiplier 3600.0 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L0I0M0H0T1D0 ; + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:HR ; + qudt:hasUnit unit:HR ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L0I0M0H0T1D0 ; qudt:hasQuantityKind quantitykind:ElectricCharge ; qudt:iec61360Code "0112/2///62720#UAA102" ; qudt:informativeReference "http://en.wikipedia.org/wiki/Ampere-hour"^^xsd:anyURI ; @@ -93,15 +93,15 @@ unit:A-M2 a qudt:DerivedUnit, qudt:Unit ; dcterms:description "The SI unit of electromagnetic moment."^^rdf:HTML ; qudt:expression "\\(A-M^2\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L2I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent 2 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L2I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:MagneticDipoleMoment ; qudt:iec61360Code "0112/2///62720#UAA106" ; qudt:informativeReference "http://encyclopedia2.thefreedictionary.com/ampere+meter+squared"^^xsd:anyURI ; @@ -116,23 +116,23 @@ unit:A-M2-PER-J-SEC a qudt:DerivedUnit, qudt:Unit ; dcterms:description "The SI unit of gyromagnetic ratio."^^rdf:HTML ; qudt:expression "\\(A-m^2/J-s\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L2I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 2 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:J ; + qudt:hasUnit unit:J ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L2I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:GyromagneticRatio ; qudt:hasQuantityKind quantitykind:MagneticDipoleMoment ; qudt:informativeReference "http://encyclopedia2.thefreedictionary.com/ampere+square+meter+per+joule+second"^^xsd:anyURI ; @@ -147,20 +147,20 @@ unit:A-PER-CentiM a qudt:Unit ; qudt:conversionMultiplier 100.0 ; qudt:convertsTo unit:A-PER-M ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:CentiM ; + qudt:hasUnit unit:CentiM ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:LinearElectricCurrentDensity ; qudt:hasQuantityKind quantitykind:MagneticFieldStrength_H ; qudt:iec61360Code "0112/2///62720#UAB073" ; - qudt:isScalingOf unit:A-PER-M ; qudt:plainTextDescription "SI base unit ampere divided by the 0.01-fold of the SI base unit metre" ; + qudt:scalingOf unit:A-PER-M ; qudt:ucumCode "A.cm-1"^^qudt:UCUMcs ; qudt:uneceCommonCode "A2" ; rdfs:isDefinedBy ; @@ -171,19 +171,19 @@ unit:A-PER-CentiM2 a qudt:Unit ; qudt:conversionMultiplier 10000.0 ; qudt:convertsTo unit:A-PER-M2 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -2 ; - qudt:unit unit:CentiM ; + qudt:hasUnit unit:CentiM ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:ElectricCurrentDensity ; qudt:iec61360Code "0112/2///62720#UAB052" ; - qudt:isScalingOf unit:A-PER-M2 ; qudt:plainTextDescription "SI base unit ampere divided by the 0.0001-fold of the power of the SI base unit metre by exponent 2" ; + qudt:scalingOf unit:A-PER-M2 ; qudt:ucumCode "A.cm-2"^^qudt:UCUMcs ; qudt:ucumCode "A/cm2"^^qudt:UCUMcs ; qudt:uneceCommonCode "A4" ; @@ -196,15 +196,15 @@ unit:A-PER-DEG_C dcterms:description "A measure used to express how a current is subject to temperature. Originally used in Wien's Law to describe phenomena related to filaments. One use today is to express how a current generator derates with temperature."^^rdf:HTML ; qudt:conversionMultiplier 57.2957795 ; qudt:expression "\\(A/degC\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L0I0M0H-1T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:DEG_C ; + qudt:hasUnit unit:DEG_C ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L0I0M0H-1T0D0 ; qudt:hasQuantityKind quantitykind:ElectricCurrentPerUnitTemperature ; qudt:informativeReference "http://books.google.com/books?id=zkErAAAAYAAJ&pg=PA60&lpg=PA60&dq=ampere+per+degree"^^xsd:anyURI ; qudt:informativeReference "http://web.mit.edu/course/21/21.guide/use-tab.htm"^^xsd:anyURI ; @@ -220,15 +220,15 @@ unit:A-PER-J qudt:conversionMultiplier 1.0 ; qudt:derivedCoherentUnitOfSystem sou:SI ; qudt:expression "\\(A/J\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-2I0M-1H0T3D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:J ; + qudt:hasUnit unit:J ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-2I0M-1H0T3D0 ; qudt:hasQuantityKind quantitykind:ElectricCurrentPerUnitEnergy ; qudt:ucumCode "A.J-1"^^qudt:UCUMcs ; qudt:ucumCode "A/J"^^qudt:UCUMcs ; @@ -242,15 +242,15 @@ unit:A-PER-M qudt:definedUnitOfSystem sou:SI ; qudt:derivedCoherentUnitOfSystem sou:SI ; qudt:expression "\\(A/m\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:Coercivity ; qudt:hasQuantityKind quantitykind:LinearElectricCurrentDensity ; qudt:hasQuantityKind quantitykind:MagneticFieldStrength_H ; @@ -269,15 +269,15 @@ unit:A-PER-M2 qudt:definedUnitOfSystem sou:SI ; qudt:derivedCoherentUnitOfSystem sou:SI ; qudt:expression "\\(A/m^2\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -2 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:DisplacementCurrentDensity ; qudt:hasQuantityKind quantitykind:ElectricCurrentDensity ; qudt:hasQuantityKind quantitykind:TotalCurrentDensity ; @@ -293,19 +293,19 @@ unit:A-PER-M2 unit:A-PER-M2-K2 a qudt:Unit ; qudt:expression "\\(a/m^2-k^2\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-2I0M0H-2T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -2 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent -2 ; - qudt:unit unit:K ; + qudt:hasUnit unit:K ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-2I0M0H-2T0D0 ; qudt:hasQuantityKind quantitykind:RichardsonConstant ; qudt:iec61360Code "0112/2///62720#UAB353" ; qudt:informativeReference "http://www.iso.org/iso/catalogue_detail?csnumber=31897"^^xsd:anyURI ; @@ -320,20 +320,20 @@ unit:A-PER-MilliM a qudt:Unit ; qudt:conversionMultiplier 1000.0 ; qudt:convertsTo unit:A-PER-M ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:MilliM ; + qudt:hasUnit unit:MilliM ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:LinearElectricCurrentDensity ; qudt:hasQuantityKind quantitykind:MagneticFieldStrength_H ; qudt:iec61360Code "0112/2///62720#UAB072" ; - qudt:isScalingOf unit:A-PER-M ; qudt:plainTextDescription "SI base unit ampere divided by the 0.001-fold of the SI base unit metre" ; + qudt:scalingOf unit:A-PER-M ; qudt:ucumCode "A.mm-1"^^qudt:UCUMcs ; qudt:ucumCode "A/mm"^^qudt:UCUMcs ; qudt:uneceCommonCode "A3" ; @@ -345,19 +345,19 @@ unit:A-PER-MilliM2 a qudt:Unit ; qudt:conversionMultiplier 1000000.0 ; qudt:convertsTo unit:A-PER-M2 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -2 ; - qudt:unit unit:MilliM ; + qudt:hasUnit unit:MilliM ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:ElectricCurrentDensity ; qudt:iec61360Code "0112/2///62720#UAB051" ; - qudt:isScalingOf unit:A-PER-M2 ; qudt:plainTextDescription "SI base unit ampere divided by the 0.000 001-fold of the power of the SI base unit metre by exponent 2" ; + qudt:scalingOf unit:A-PER-M2 ; qudt:ucumCode "A.mm-2"^^qudt:UCUMcs ; qudt:ucumCode "A/mm2"^^qudt:UCUMcs ; qudt:uneceCommonCode "A7" ; @@ -372,15 +372,15 @@ unit:A-PER-RAD qudt:definedUnitOfSystem sou:SI ; qudt:derivedCoherentUnitOfSystem sou:SI ; qudt:expression "\\(a-per-rad\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L0I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:RAD ; + qudt:hasUnit unit:RAD ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L0I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:ElectricCurrentPerAngle ; qudt:ucumCode "A.rad-1"^^qudt:UCUMcs ; qudt:ucumCode "A/rad"^^qudt:UCUMcs ; @@ -390,15 +390,15 @@ unit:A-PER-RAD unit:A-SEC a qudt:Unit ; qudt:conversionMultiplier 1.0 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L0I0M0H0T1D0 ; + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A ; + qudt:hasUnit unit:A ; ] ; - qudt:hasDimensionVector qkdv:A0E1L0I0M0H0T1D0 ; qudt:hasQuantityKind quantitykind:ElectricCharge ; qudt:iec61360Code "0112/2///62720#UAA107" ; qudt:plainTextDescription "product out of the SI base unit ampere and the SI base unit second" ; @@ -433,15 +433,15 @@ unit:AC-FT qudt:conversionMultiplier 1233.4818375475202 ; qudt:definedUnitOfSystem sou:IMPERIAL ; qudt:definedUnitOfSystem sou:USCS ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:FT ; + qudt:hasUnit unit:FT ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:AC ; + qudt:hasUnit unit:AC ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:Volume ; qudt:informativeReference "http://en.wikipedia.org/wiki/Acre-foot"^^xsd:anyURI ; qudt:informativeReference "http://www.oxfordreference.com/view/10.1093/acref/9780198605225.001.0001/acref-9780198605225-e-35"^^xsd:anyURI ; @@ -581,15 +581,15 @@ unit:AT-PER-IN dcterms:description "The \\(\\textit{Ampere Turn per Inch}\\) is a measure of magnetic field intensity and is eual to 12.5664 Oersted."^^rdf:HTML ; qudt:conversionMultiplier 39.3700787 ; qudt:expression "\\(At/in\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:IN ; + qudt:hasUnit unit:IN ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:AT ; + qudt:hasUnit unit:AT ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:MagneticFieldStrength_H ; qudt:unitOfSystem sou:USCS ; rdfs:isDefinedBy ; @@ -602,15 +602,15 @@ unit:AT-PER-M qudt:definedUnitOfSystem sou:SI ; qudt:derivedCoherentUnitOfSystem sou:SI ; qudt:expression "\\(At/m\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:AT ; + qudt:hasUnit unit:AT ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-1I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:MagneticFieldStrength_H ; rdfs:isDefinedBy ; rdfs:label "Ampere Turn per Meter"@en-us ; @@ -710,10 +710,10 @@ unit:A_Ab qudt:informativeReference "http://en.wikipedia.org/wiki/Abampere?oldid=489318583"^^xsd:anyURI ; qudt:informativeReference "http://wordinfo.info/results/abampere"^^xsd:anyURI ; qudt:informativeReference "http://www.oxfordreference.com/view/10.1093/acref/9780198605225.001.0001/acref-9780198605225-e-13?rskey=i2kRRz"^^xsd:anyURI ; - qudt:isScalingOf unit:A ; qudt:latexDefinition "\\(1\\,abA = 10\\,A\\)"^^qudt:LatexString ; qudt:omUnit ; qudt:plainTextDescription "The Abampere (aA), also called the biot after Jean-Baptiste Biot, is the basic electromagnetic unit of electric current in the emu-cgs system of units (electromagnetic cgs). One abampere is equal to ten amperes in the SI system of units. An abampere is the constant current that produces, when maintained in two parallel conductors of negligible circular section and of infinite length placed 1 centimetre apart, a force of 2 dynes per centimetre between the two conductors." ; + qudt:scalingOf unit:A ; qudt:symbol "abA" ; qudt:ucumCode "Bi"^^qudt:UCUMcs ; qudt:unitOfSystem sou:CGS ; @@ -726,15 +726,15 @@ unit:A_Ab-CentiM2 dcterms:description "\"Abampere Square centimeter\" is the unit of magnetic moment in the electromagnetic centimeter-gram-second system."^^rdf:HTML ; qudt:conversionMultiplier 1000000000.0 ; qudt:expression "\\(aAcm2\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E2L-3I0M-1H0T3D0 ; + qudt:hasFactorUnit [ qudt:exponent 2 ; - qudt:unit unit:CentiM ; + qudt:hasUnit unit:CentiM ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A_Ab ; + qudt:hasUnit unit:A_Ab ; ] ; - qudt:hasDimensionVector qkdv:A0E2L-3I0M-1H0T3D0 ; qudt:hasQuantityKind quantitykind:ElectricConductivity ; qudt:informativeReference "http://wordinfo.info/unit/4266"^^xsd:anyURI ; qudt:ucumCode "Bi.cm2"^^qudt:UCUMcs ; @@ -750,15 +750,15 @@ unit:A_Ab-PER-CentiM2 qudt:conversionMultiplier 100000.0 ; qudt:derivedUnitOfSystem sou:CGS-EMU ; qudt:expression "\\(aba-per-cm2\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -2 ; - qudt:unit unit:CentiM ; + qudt:hasUnit unit:CentiM ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A_Ab ; + qudt:hasUnit unit:A_Ab ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:ElectricCurrentDensity ; qudt:informativeReference "http://wordinfo.info/results/abampere"^^xsd:anyURI ; qudt:informativeReference "http://www.efunda.com/glossary/units/units--electric_current_density--abampere_per_square_centimeter.cfm"^^xsd:anyURI ; @@ -771,7 +771,7 @@ unit:A_Ab-PER-CentiM2 unit:A_Reactive a qudt:Unit ; - rdfs:comment "This unit was added while generating qudt:factorUnit information as a missing factor unit"@en ; + rdfs:comment "This unit was added while generating qudt:hasFactorUnit information as a missing factor unit"@en ; rdfs:label "A_Reactive" . unit:A_Stat @@ -794,15 +794,15 @@ unit:A_Stat-PER-CentiM2 qudt:conversionMultiplier 0.000003335641 ; qudt:derivedUnitOfSystem sou:CGS-ESU ; qudt:expression "\\(statA / cm^{2}\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; + qudt:hasFactorUnit [ qudt:exponent -2 ; - qudt:unit unit:CentiM ; + qudt:hasUnit unit:CentiM ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:A_Stat ; + qudt:hasUnit unit:A_Stat ; ] ; - qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:ElectricCurrentDensity ; qudt:unitOfSystem sou:CGS ; rdfs:isDefinedBy ; @@ -817,8 +817,8 @@ unit:AttoC qudt:derivedUnitOfSystem sou:SI ; qudt:hasDimensionVector qkdv:A0E1L0I0M0H0T1D0 ; qudt:hasQuantityKind quantitykind:ElectricCharge ; - qudt:isScalingOf unit:C ; qudt:prefix prefix:Atto ; + qudt:scalingOf unit:C ; qudt:symbol "aC" ; qudt:ucumCode "aC"^^qudt:UCUMcs ; rdfs:isDefinedBy ; @@ -830,9 +830,9 @@ unit:AttoFARAD qudt:hasDimensionVector qkdv:A0E2L-2I0M-1H0T4D0 ; qudt:hasQuantityKind quantitykind:Capacitance ; qudt:iec61360Code "0112/2///62720#UAA319" ; - qudt:isScalingOf unit:FARAD ; qudt:plainTextDescription "0,000 000 000 000 000 001-fold of the SI derived unit farad" ; qudt:prefix prefix:Atto ; + qudt:scalingOf unit:FARAD ; qudt:ucumCode "aF"^^qudt:UCUMcs ; qudt:uneceCommonCode "H48" ; rdfs:isDefinedBy ; @@ -844,9 +844,9 @@ unit:AttoJ qudt:hasDimensionVector qkdv:A0E0L2I0M1H0T-2D0 ; qudt:hasQuantityKind quantitykind:Energy ; qudt:iec61360Code "0112/2///62720#UAB125" ; - qudt:isScalingOf unit:J ; qudt:plainTextDescription "0,000 000 000 000 000 001-fold of the derived SI unit joule" ; qudt:prefix prefix:Atto ; + qudt:scalingOf unit:J ; qudt:ucumCode "aJ"^^qudt:UCUMcs ; qudt:uneceCommonCode "A13" ; rdfs:isDefinedBy ; @@ -856,19 +856,19 @@ unit:AttoJ-SEC a qudt:Unit ; qudt:conversionMultiplier 0.000000000000000001 ; qudt:convertsTo unit:J-SEC ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L2I0M1H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:AttoJ ; + qudt:hasUnit unit:AttoJ ; ] ; - qudt:hasDimensionVector qkdv:A0E0L2I0M1H0T-1D0 ; qudt:hasQuantityKind quantitykind:Action ; qudt:iec61360Code "0112/2///62720#UAB151" ; - qudt:isScalingOf unit:J-SEC ; qudt:plainTextDescription "unit of the Planck's constant as product of the SI derived unit joule and the SI base unit second" ; + qudt:scalingOf unit:J-SEC ; qudt:ucumCode "aJ.s"^^qudt:UCUMcs ; qudt:uneceCommonCode "B18" ; rdfs:isDefinedBy ; @@ -921,19 +921,19 @@ unit:BAR unit:BAR-L-PER-SEC a qudt:Unit ; qudt:conversionMultiplier 100.0 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L2I0M1H0T-3D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:L ; + qudt:hasUnit unit:L ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BAR ; + qudt:hasUnit unit:BAR ; ] ; - qudt:hasDimensionVector qkdv:A0E0L2I0M1H0T-3D0 ; qudt:hasQuantityKind quantitykind:Power ; qudt:iec61360Code "0112/2///62720#UAA326" ; qudt:plainTextDescription "product of the unit bar and the unit litre divided by the SI base unit second" ; @@ -947,19 +947,19 @@ unit:BAR-L-PER-SEC unit:BAR-M3-PER-SEC a qudt:Unit ; qudt:conversionMultiplier 100.0 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L2I0M1H0T-3D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 3 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BAR ; + qudt:hasUnit unit:BAR ; ] ; - qudt:hasDimensionVector qkdv:A0E0L2I0M1H0T-3D0 ; qudt:hasQuantityKind quantitykind:Power ; qudt:iec61360Code "0112/2///62720#UAA814" ; qudt:plainTextDescription "product out of the 0.001-fold of the unit bar and the power of the SI base unit metre with the exponent 3 divided by the SI base unit second" ; @@ -973,15 +973,15 @@ unit:BAR-M3-PER-SEC unit:BAR-PER-BAR a qudt:Unit ; qudt:conversionMultiplier 1.0 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T0D1 ; + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BAR ; + qudt:hasUnit unit:BAR ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:BAR ; + qudt:hasUnit unit:BAR ; ] ; - qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T0D1 ; qudt:hasQuantityKind quantitykind:PressureRatio ; qudt:iec61360Code "0112/2///62720#UAA325" ; qudt:plainTextDescription "pressure relation consisting of the unit bar divided by the unit bar" ; @@ -994,15 +994,15 @@ unit:BAR-PER-BAR unit:BAR-PER-K a qudt:Unit ; qudt:conversionMultiplier 100000.0 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L-1I0M1H-1T-2D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:K ; + qudt:hasUnit unit:K ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BAR ; + qudt:hasUnit unit:BAR ; ] ; - qudt:hasDimensionVector qkdv:A0E0L-1I0M1H-1T-2D0 ; qudt:hasQuantityKind quantitykind:PressureCoefficient ; qudt:iec61360Code "0112/2///62720#UAA324" ; qudt:plainTextDescription "unit with the name bar divided by the SI base unit kelvin" ; @@ -1102,15 +1102,15 @@ unit:BBL_UK_PET unit:BBL_UK_PET-PER-DAY a qudt:Unit ; qudt:conversionMultiplier 0.000001841587 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:DAY ; + qudt:hasUnit unit:DAY ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BBL_UK_PET ; + qudt:hasUnit unit:BBL_UK_PET ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:VolumeFlowRate ; qudt:iec61360Code "0112/2///62720#UAA331" ; qudt:plainTextDescription "unit of the volume barrel (UK petroleum) for crude oil according to the Imperial system of units divided by the unit day" ; @@ -1121,15 +1121,15 @@ unit:BBL_UK_PET-PER-DAY unit:BBL_UK_PET-PER-HR a qudt:Unit ; qudt:conversionMultiplier 0.0000441981 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:HR ; + qudt:hasUnit unit:HR ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BBL_UK_PET ; + qudt:hasUnit unit:BBL_UK_PET ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:VolumeFlowRate ; qudt:iec61360Code "0112/2///62720#UAA332" ; qudt:plainTextDescription "unit of the volume barrel (UK petroleum) for crude oil according to the Imperial system of units divided by the unit hour" ; @@ -1140,15 +1140,15 @@ unit:BBL_UK_PET-PER-HR unit:BBL_UK_PET-PER-MIN a qudt:Unit ; qudt:conversionMultiplier 0.002651886 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:MIN ; + qudt:hasUnit unit:MIN ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BBL_UK_PET ; + qudt:hasUnit unit:BBL_UK_PET ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:VolumeFlowRate ; qudt:iec61360Code "0112/2///62720#UAA330" ; qudt:plainTextDescription "unit of the volume barrel (UK petroleum) for crude oil according to the Imperial system of units divided by the unit minute" ; @@ -1159,15 +1159,15 @@ unit:BBL_UK_PET-PER-MIN unit:BBL_UK_PET-PER-SEC a qudt:Unit ; qudt:conversionMultiplier 0.1591132 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BBL_UK_PET ; + qudt:hasUnit unit:BBL_UK_PET ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:VolumeFlowRate ; qudt:iec61360Code "0112/2///62720#UAA333" ; qudt:plainTextDescription "unit of the volume barrel (UK petroleum) for crude oil according to the Imperial system of units divided by the SI base unit second" ; @@ -1190,15 +1190,15 @@ unit:BBL_US unit:BBL_US-PER-DAY a qudt:Unit ; qudt:conversionMultiplier 0.00000184 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:DAY ; + qudt:hasUnit unit:DAY ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BBL_US ; + qudt:hasUnit unit:BBL_US ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:VolumeFlowRate ; qudt:iec61360Code "0112/2///62720#UAA335" ; qudt:plainTextDescription "unit of the volume barrel (US petroleum) for crude oil according to the Anglo-American system of units divided by the unit day" ; @@ -1211,15 +1211,15 @@ unit:BBL_US-PER-DAY unit:BBL_US-PER-MIN a qudt:Unit ; qudt:conversionMultiplier 0.0026498 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:MIN ; + qudt:hasUnit unit:MIN ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BBL_US ; + qudt:hasUnit unit:BBL_US ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:VolumeFlowRate ; qudt:iec61360Code "0112/2///62720#UAA337" ; qudt:plainTextDescription "unit of the volume barrel (US petroleum) for crude oil according to the Anglo-American system of units divided by the unit minute" ; @@ -1242,21 +1242,21 @@ unit:BBL_US_DRY unit:BBL_US_PET a qudt:Unit ; - rdfs:comment "This unit was added while generating qudt:factorUnit information as a missing factor unit"@en ; + rdfs:comment "This unit was added while generating qudt:hasFactorUnit information as a missing factor unit"@en ; rdfs:label "BBL_US_PET" . unit:BBL_US_PET-PER-HR a qudt:Unit ; qudt:conversionMultiplier 0.000044163 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:HR ; + qudt:hasUnit unit:HR ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BBL_US_PET ; + qudt:hasUnit unit:BBL_US_PET ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:VolumeFlowRate ; qudt:iec61360Code "0112/2///62720#UAA336" ; qudt:plainTextDescription "unit of the volume barrel (US petroleum) for crude oil according to the Anglo-American system of units divided by the unit hour" ; @@ -1269,15 +1269,15 @@ unit:BBL_US_PET-PER-HR unit:BBL_US_PET-PER-SEC a qudt:Unit ; qudt:conversionMultiplier 0.1589873 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BBL_US_PET ; + qudt:hasUnit unit:BBL_US_PET ; ] ; - qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:VolumeFlowRate ; qudt:iec61360Code "0112/2///62720#UAA338" ; qudt:plainTextDescription "unit of the volume barrel (US petroleum) for crude oil according to the Anglo-American system of units divided by the SI base unit second" ; @@ -1300,21 +1300,21 @@ unit:BDT unit:BEAT a qudt:Unit ; - rdfs:comment "This unit was added while generating qudt:factorUnit information as a missing factor unit"@en ; + rdfs:comment "This unit was added while generating qudt:hasFactorUnit information as a missing factor unit"@en ; rdfs:label "BEAT" . unit:BEAT-PER-MIN a qudt:DerivedUnit, qudt:Unit ; dcterms:description "\"Heart Beat per Minute\" is a unit for 'Heart Rate' expressed as \\(BPM\\)."^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:MIN ; + qudt:hasUnit unit:MIN ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BEAT ; + qudt:hasUnit unit:BEAT ; ] ; - qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:HeartRate ; qudt:symbol "beats-per-min" ; qudt:ucumCode "/min{H.B.}"^^qudt:UCUMcs ; @@ -1382,15 +1382,15 @@ unit:BIT-PER-SEC a qudt:DerivedUnit, qudt:Unit ; dcterms:description "A bit per second (B/s) is a unit of data transfer rate equal to 1 bits per second."^^rdf:HTML ; qudt:conversionMultiplier 0.69314718055994530941723212145818 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BIT ; + qudt:hasUnit unit:BIT ; ] ; - qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:DataRate ; qudt:informativeReference "http://en.wikipedia.org/wiki/Data_rate_units#Kilobyte_per_second"^^xsd:anyURI ; qudt:symbol "bit/s" ; @@ -1407,11 +1407,11 @@ unit:BQ qudt:dbpediaMatch "http://dbpedia.org/resource/Becquerel"^^xsd:anyURI ; qudt:definedUnitOfSystem sou:SI ; qudt:derivedCoherentUnitOfSystem sou:SI ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; - qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:Activity ; qudt:iec61360Code "0112/2///62720#UAA111" ; qudt:informativeReference "http://en.wikipedia.org/wiki/Becquerel?oldid=493710036"^^xsd:anyURI ; @@ -1427,15 +1427,15 @@ unit:BQ-PER-KiloGM dcterms:description "The only unit in the category of Specific radioactivity. It is also known as becquerels per kilogram, becquerel/kilogram. This unit is commonly used in the SI unit system. Becquerel Per Kilogram (Bq/kg) has a dimension of \\(M{-1}T{-1}\\) where \\(M\\) is mass, and \\(T\\) is time. It essentially the same as the corresponding standard SI unit \\(/kg/s\\)."^^qudt:LatexString ; qudt:conversionMultiplier 1.0 ; qudt:expression "\\(Bq/kg\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L0I0M-1H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:KiloGM ; + qudt:hasUnit unit:KiloGM ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BQ ; + qudt:hasUnit unit:BQ ; ] ; - qudt:hasDimensionVector qkdv:A0E0L0I0M-1H0T-1D0 ; qudt:hasQuantityKind quantitykind:MassicActivity ; qudt:hasQuantityKind quantitykind:SpecificActivity ; qudt:iec61360Code "0112/2///62720#UAA112" ; @@ -1452,15 +1452,15 @@ unit:BQ-PER-L a qudt:Unit ; dcterms:description "One radioactive disintegration per second from a one part in 10**3 of the SI unit of volume (cubic metre)."@en ; qudt:conversionMultiplier 1000.0 ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L-3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -1 ; - qudt:unit unit:L ; + qudt:hasUnit unit:L ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BQ ; + qudt:hasUnit unit:BQ ; ] ; - qudt:hasDimensionVector qkdv:A0E0L-3I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:ActivityConcentration ; qudt:ucumCode "Bq.L-1"^^qudt:UCUMcs ; rdfs:isDefinedBy ; @@ -1470,15 +1470,15 @@ unit:BQ-PER-M2 a qudt:DerivedUnit, qudt:Unit ; qudt:conversionMultiplier 1.0 ; qudt:expression "\\(Bq/m^2\\)"^^qudt:LatexString ; - qudt:factorUnit [ + qudt:hasDimensionVector qkdv:A0E0L-2I0M0H0T-1D0 ; + qudt:hasFactorUnit [ qudt:exponent -2 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; - qudt:factorUnit [ + qudt:hasFactorUnit [ qudt:exponent 1 ; - qudt:unit unit:BQ ; + qudt:hasUnit unit:BQ ; ] ; - qudt:hasDimensionVector qkdv:A0E0L-2I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:SurfaceActivityDensity ; qudt:isoNormativeReference "http://www.iso.org/iso/catalogue_detail?csnumber=31895"^^xsd:anyURI ; qudt:ucumCode "Bq.m-2"^^qudt:UCUMcs ; @@ -1492,15 +1492,15 @@ unit:BQ-PER-M3 dcterms:description "Becquerel Per Cubic Meter (\\(Bq/m3\\)) is a unit in the category of Radioactivity concentration. It is also known as becquerels per cubic meter, becquerel per cubic metre, becquerels per cubic metre, becquerel/cubic inch. This unit is commonly used in the SI unit system. Becquerel Per Cubic Meter (Bq/m3) has a dimension of \\(L{-3}T{-1}\\) where \\(L\\) is length, and \\(T\\) is time. It essentially the same as the corresponding standard SI unit \\(/s\\cdot m{3}\\)."^^qudt:LatexString ; qudt:conversionMultiplier 1.0 ; qudt:expression "\\(Bq/m^3\\)"^^qudt:LatexString ; - qudt:factorUnit [ - qudt:exponent -3 ; - qudt:unit unit:M ; - ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:BQ ; + qudt:hasUnit unit:BQ ; ] ; qudt:hasDimensionVector qkdv:A0E0L-3I0M0H0T-1D0 ; + qudt:hasFactorUnit [ + qudt:exponent -3 ; + qudt:hasUnit unit:M ; + ] ; qudt:hasQuantityKind quantitykind:ActivityConcentration ; qudt:iec61360Code "0112/2///62720#UAB126" ; qudt:informativeReference "http://www.efunda.com/glossary/units/units--radioactivity_concentration--becquerel_per_cubic_meter.cfm"^^xsd:anyURI ; @@ -1519,15 +1519,15 @@ unit:BQ-SEC-PER-M3 qudt:conversionMultiplier 1.0 ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; qudt:factorUnit [ qudt:exponent -3 ; - qudt:unit unit:M ; + qudt:hasUnit unit:M ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:BQ ; + qudt:hasUnit unit:BQ ; ] ; qudt:hasDimensionVector qkdv:A0E0L-3I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:AbsoluteActivity ; @@ -1546,11 +1546,11 @@ unit:BREATH-PER-MIN qudt:expression "\\(breaths/min\\)"^^qudt:LatexString ; qudt:factorUnit [ qudt:exponent -1 ; - qudt:unit unit:MIN ; + qudt:hasUnit unit:MIN ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:BREATH ; + qudt:hasUnit unit:BREATH ; ] ; qudt:hasDimensionVector qkdv:A0E0L0I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:RespiratoryRate ; @@ -1597,11 +1597,11 @@ unit:BTU_IT-FT qudt:expression "\\(Btu-ft\\)"^^qudt:LatexString ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:FT ; + qudt:hasUnit unit:FT ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:BTU_IT ; + qudt:hasUnit unit:BTU_IT ; ] ; qudt:hasDimensionVector qkdv:A0E0L3I0M1H0T-2D0 ; qudt:hasQuantityKind quantitykind:ThermalEnergyLength ; @@ -1617,23 +1617,23 @@ unit:BTU_IT-FT-PER-FT2-HR-DEG_F qudt:expression "\\(Btu(IT) ft/(hr ft^2 degF)\\)"^^qudt:LatexString ; qudt:factorUnit [ qudt:exponent -1 ; - qudt:unit unit:HR ; + qudt:hasUnit unit:HR ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:FT ; + qudt:hasUnit unit:FT ; ] ; qudt:factorUnit [ qudt:exponent -2 ; - qudt:unit unit:FT ; + qudt:hasUnit unit:FT ; ] ; qudt:factorUnit [ qudt:exponent -1 ; - qudt:unit unit:DEG_F ; + qudt:hasUnit unit:DEG_F ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:BTU_IT ; + qudt:hasUnit unit:BTU_IT ; ] ; qudt:hasDimensionVector qkdv:A0E0L1I0M1H-1T-3D0 ; qudt:hasQuantityKind quantitykind:ThermalConductivity ; @@ -1658,11 +1658,11 @@ unit:BTU_IT-IN qudt:expression "\\(Btu-in\\)"^^qudt:LatexString ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:IN ; + qudt:hasUnit unit:IN ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:BTU_IT ; + qudt:hasUnit unit:BTU_IT ; ] ; qudt:hasDimensionVector qkdv:A0E0L3I0M1H0T-2D0 ; qudt:hasQuantityKind quantitykind:ThermalEnergyLength ; @@ -1679,23 +1679,23 @@ unit:BTU_IT-IN-PER-FT2-HR-DEG_F qudt:expression "\\(Btu(it)-in-per-hr-ft2-degF\\)"^^qudt:LatexString ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:IN ; + qudt:hasUnit unit:IN ; ] ; qudt:factorUnit [ qudt:exponent -1 ; - qudt:unit unit:HR ; + qudt:hasUnit unit:HR ; ] ; qudt:factorUnit [ qudt:exponent -2 ; - qudt:unit unit:FT ; + qudt:hasUnit unit:FT ; ] ; qudt:factorUnit [ qudt:exponent -1 ; - qudt:unit unit:DEG_F ; + qudt:hasUnit unit:DEG_F ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:BTU_IT ; + qudt:hasUnit unit:BTU_IT ; ] ; qudt:hasDimensionVector qkdv:A0E0L1I0M1H-1T-3D0 ; qudt:hasQuantityKind quantitykind:ThermalConductivity ; @@ -1719,23 +1719,23 @@ unit:BTU_IT-IN-PER-FT2-SEC-DEG_F qudt:expression "\\(Btu(it)-in-per-s-ft2-degF\\)"^^qudt:LatexString ; qudt:factorUnit [ qudt:exponent -1 ; - qudt:unit unit:SEC ; + qudt:hasUnit unit:SEC ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:IN ; + qudt:hasUnit unit:IN ; ] ; qudt:factorUnit [ qudt:exponent -2 ; - qudt:unit unit:FT ; + qudt:hasUnit unit:FT ; ] ; qudt:factorUnit [ qudt:exponent -1 ; - qudt:unit unit:DEG_F ; + qudt:hasUnit unit:DEG_F ; ] ; qudt:factorUnit [ qudt:exponent 1 ; - qudt:unit unit:BTU_IT ; + qudt:hasUnit unit:BTU_IT ; ] ; qudt:hasDimensionVector qkdv:A0E0L1I0M1H-1T-3D0 ; qudt:hasQuantityKind quantitykind:ThermalConductivity ; @@ -2912,8 +2912,8 @@ unit:BYTE qudt:hasQuantityKind quantitykind:InformationEntropy ; qudt:iec61360Code "0112/2///62720#UAA354" ; qudt:informativeReference "http://en.wikipedia.org/wiki/Byte?oldid=493588918"^^xsd:anyURI ; - qudt:isScalingOf unit:BIT ; qudt:omUnit ; + qudt:scalingOf unit:BIT ; qudt:symbol "B" ; qudt:ucumCode "By"^^qudt:UCUMcs ; qudt:uneceCommonCode "AD" ; @@ -3131,8 +3131,8 @@ unit:C-PER-CentiM2 qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T1D0 ; qudt:hasQuantityKind quantitykind:ElectricChargePerArea ; qudt:iec61360Code "0112/2///62720#UAB101" ; - qudt:isScalingOf unit:C-PER-M2 ; qudt:plainTextDescription "derived SI unit coulomb divided by the 0.0001-fold of the power of the SI base unit metre by exponent 2" ; + qudt:scalingOf unit:C-PER-M2 ; qudt:ucumCode "C.cm-2"^^qudt:UCUMcs ; qudt:ucumCode "C/cm2"^^qudt:UCUMcs ; qudt:uneceCommonCode "A33" ; @@ -3155,8 +3155,8 @@ unit:C-PER-CentiM3 qudt:hasDimensionVector qkdv:A0E1L-3I0M0H0T1D0 ; qudt:hasQuantityKind quantitykind:ElectricChargeVolumeDensity ; qudt:iec61360Code "0112/2///62720#UAB120" ; - qudt:isScalingOf unit:C-PER-M3 ; qudt:plainTextDescription "derived SI unit coulomb divided by the 0.000 001-fold of the power of the SI base unit metre by exponent 3" ; + qudt:scalingOf unit:C-PER-M3 ; qudt:ucumCode "C.m-3"^^qudt:UCUMcs ; qudt:ucumCode "C/cm3"^^qudt:UCUMcs ; qudt:uneceCommonCode "A28" ; @@ -3332,8 +3332,8 @@ unit:C-PER-MilliM2 qudt:hasDimensionVector qkdv:A0E1L-2I0M0H0T1D0 ; qudt:hasQuantityKind quantitykind:ElectricChargePerArea ; qudt:iec61360Code "0112/2///62720#UAB100" ; - qudt:isScalingOf unit:C-PER-M2 ; qudt:plainTextDescription "derived SI unit coulomb divided by the 0.000 001-fold of the power of the SI base unit metre by exponent 2" ; + qudt:scalingOf unit:C-PER-M2 ; qudt:ucumCode "C.mm-2"^^qudt:UCUMcs ; qudt:ucumCode "C/mm2"^^qudt:UCUMcs ; qudt:uneceCommonCode "A35" ; @@ -3356,8 +3356,8 @@ unit:C-PER-MilliM3 qudt:hasDimensionVector qkdv:A0E1L-3I0M0H0T1D0 ; qudt:hasQuantityKind quantitykind:ElectricChargeVolumeDensity ; qudt:iec61360Code "0112/2///62720#UAB119" ; - qudt:isScalingOf unit:C-PER-M3 ; qudt:plainTextDescription "derived SI unit coulomb divided by the 0.000 000 001-fold of the power of the SI base unit metre by exponent 3" ; + qudt:scalingOf unit:C-PER-M3 ; qudt:ucumCode "C.mm-3"^^qudt:UCUMcs ; qudt:ucumCode "C/mm3"^^qudt:UCUMcs ; qudt:uneceCommonCode "A30" ; @@ -4275,8 +4275,8 @@ unit:CentiBAR qudt:hasDimensionVector qkdv:A0E0L-1I0M1H0T-2D0 ; qudt:hasQuantityKind quantitykind:ForcePerArea ; qudt:informativeReference "http://en.wikipedia.org/wiki/Bar_(unit)"^^xsd:anyURI ; - qudt:isScalingOf unit:BAR ; qudt:prefix prefix:Centi ; + qudt:scalingOf unit:BAR ; qudt:symbol "cbar" ; qudt:ucumCode "cbar"^^qudt:UCUMcs ; rdfs:isDefinedBy ; @@ -4290,8 +4290,8 @@ unit:CentiC qudt:derivedUnitOfSystem sou:SI ; qudt:hasDimensionVector qkdv:A0E1L0I0M0H0T1D0 ; qudt:hasQuantityKind quantitykind:ElectricCharge ; - qudt:isScalingOf unit:C ; qudt:prefix prefix:Centi ; + qudt:scalingOf unit:C ; qudt:symbol "cC" ; qudt:ucumCode "cC"^^qudt:UCUMcs ; rdfs:isDefinedBy ; @@ -4303,9 +4303,9 @@ unit:CentiGM qudt:hasDimensionVector qkdv:A0E0L0I0M1H0T0D0 ; qudt:hasQuantityKind quantitykind:Mass ; qudt:iec61360Code "0112/2///62720#UAB077" ; - qudt:isScalingOf unit:GM ; qudt:plainTextDescription "0,000 01-fold of the SI base unit kilogram" ; qudt:prefix prefix:Centi ; + qudt:scalingOf unit:GM ; qudt:ucumCode "cg"^^qudt:UCUMcs ; qudt:uneceCommonCode "CGM" ; rdfs:isDefinedBy ; @@ -4317,9 +4317,9 @@ unit:CentiL qudt:hasDimensionVector qkdv:A0E0L3I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:LiquidVolume ; qudt:iec61360Code "0112/2///62720#UAA373" ; - qudt:isScalingOf unit:L ; qudt:plainTextDescription "0,01-fold of the unit litre" ; qudt:prefix prefix:Centi ; + qudt:scalingOf unit:L ; qudt:ucumCode "cL"^^qudt:UCUMcs ; qudt:uneceCommonCode "CLT" ; rdfs:isDefinedBy ; @@ -4335,8 +4335,8 @@ unit:CentiM qudt:hasQuantityKind quantitykind:Length ; qudt:iec61360Code "0112/2///62720#UAA375" ; qudt:informativeReference "http://en.wikipedia.org/wiki/Centimetre?oldid=494931891"^^xsd:anyURI ; - qudt:isScalingOf unit:M ; qudt:prefix prefix:Centi ; + qudt:scalingOf unit:M ; qudt:symbol "cm" ; qudt:ucumCode "cm"^^qudt:UCUMcs ; qudt:uneceCommonCode "CMT" ; @@ -4361,8 +4361,8 @@ unit:CentiM-PER-HR qudt:hasDimensionVector qkdv:A0E0L1I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:Velocity ; qudt:iec61360Code "0112/2///62720#UAA378" ; - qudt:isScalingOf unit:M-PER-SEC ; qudt:plainTextDescription "0,01-fold of the SI base unit metre divided by the unit hour" ; + qudt:scalingOf unit:M-PER-SEC ; qudt:ucumCode "cm.h-1"^^qudt:UCUMcs ; qudt:ucumCode "cm/h"^^qudt:UCUMcs ; qudt:uneceCommonCode "H49" ; @@ -4385,8 +4385,8 @@ unit:CentiM-PER-K qudt:hasDimensionVector qkdv:A0E0L1I0M0H-1T0D0 ; qudt:hasQuantityKind quantitykind:LinearThermalExpansion ; qudt:iec61360Code "0112/2///62720#UAA376" ; - qudt:isScalingOf unit:M-PER-K ; qudt:plainTextDescription "0,01-fold of the SI base unit metre divided by the SI base unit kelvin" ; + qudt:scalingOf unit:M-PER-K ; qudt:ucumCode "cm.K-1"^^qudt:UCUMcs ; qudt:ucumCode "cm/K"^^qudt:UCUMcs ; qudt:uneceCommonCode "F51" ; @@ -4408,7 +4408,7 @@ unit:CentiM-PER-KiloYR ] ; qudt:hasDimensionVector qkdv:A0E0L1I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:Velocity ; - qudt:isScalingOf unit:M-PER-YR ; + qudt:scalingOf unit:M-PER-YR ; qudt:ucumCode "cm.ka-1"^^qudt:UCUMcs ; rdfs:isDefinedBy ; rdfs:label "Centimetres per thousand years"@en . @@ -4432,8 +4432,8 @@ unit:CentiM-PER-SEC qudt:hasDimensionVector qkdv:A0E0L1I0M0H0T-1D0 ; qudt:hasQuantityKind quantitykind:Velocity ; qudt:iec61360Code "0112/2///62720#UAA379" ; - qudt:isScalingOf unit:M-PER-SEC ; qudt:latexDefinition "\\(cm/s\\)"^^qudt:LatexString ; + qudt:scalingOf unit:M-PER-SEC ; qudt:ucumCode "cm.s-1"^^qudt:UCUMcs ; qudt:ucumCode "cm/s"^^qudt:UCUMcs ; qudt:uneceCommonCode "2M" ; @@ -4461,7 +4461,7 @@ unit:CentiM-PER-SEC2 qudt:hasDimensionVector qkdv:A0E0L1I0M0H0T-2D0 ; qudt:hasQuantityKind quantitykind:Acceleration ; qudt:iec61360Code "0112/2///62720#UAB398" ; - qudt:isScalingOf unit:M-PER-SEC2 ; + qudt:scalingOf unit:M-PER-SEC2 ; qudt:ucumCode "cm.s-2"^^qudt:UCUMcs ; qudt:ucumCode "cm/s2"^^qudt:UCUMcs ; qudt:unitOfSystem sou:CGS ; @@ -4509,8 +4509,8 @@ unit:CentiM2 qudt:hasDimensionVector qkdv:A0E0L2I0M0H0T0D0 ; qudt:hasQuantityKind quantitykind:Area ; qudt:iec61360Code "0112/2///62720#UAA384" ; - qudt:isScalingOf unit:M2 ; qudt:prefix prefix:Centi ; + qudt:scalingOf unit:M2 ; qudt:ucumCode "cm2"^^qudt:UCUMcs ; qudt:uneceCommonCode "CMK" ; qudt:unitOfSystem sou:CGS ; diff --git a/qudtlib-data-gen/src/main/resources/update-units-by-query1.rq b/qudtlib-data-gen/src/main/resources/update-units-by-query1.rq new file mode 100644 index 00000000..bd8494c2 --- /dev/null +++ b/qudtlib-data-gen/src/main/resources/update-units-by-query1.rq @@ -0,0 +1,23 @@ +PREFIX qudt: +PREFIX unit: +prefix quantitykind: +INSERT { + ?unit qudt:dependents ?dependents +} WHERE { + { + SELECT ?unit (count(?other) as ?dependents) + WHERE + { + { + ?other + qudt:hasFactorUnit [ + qudt:hasUnit ?unit ; + ] ; + } UNION { + ?other + qudt:scalingOf ?unit + + } + } group by ?unit + } +} \ No newline at end of file diff --git a/qudtlib-hardcoded-model-gen/src/main/resources/template/InitializerImpl.ftl b/qudtlib-hardcoded-model-gen/src/main/resources/template/InitializerImpl.ftl index d3c9acff..4b62b3ad 100644 --- a/qudtlib-hardcoded-model-gen/src/main/resources/template/InitializerImpl.ftl +++ b/qudtlib-hardcoded-model-gen/src/main/resources/template/InitializerImpl.ftl @@ -71,6 +71,7 @@ public class InitializerImpl implements Initializer { private static void addUnit${iri?index?c}(Definitions definitions) { Unit.Definition def = Unit .definition(${q(iri)}) + .dependents(${unit.dependents}) <#if unit.isDeprecated()> .deprecated(true) diff --git a/qudtlib-ingest-qudt/pom.xml b/qudtlib-ingest-qudt/pom.xml index 8da3b267..f8c96373 100644 --- a/qudtlib-ingest-qudt/pom.xml +++ b/qudtlib-ingest-qudt/pom.xml @@ -17,6 +17,45 @@ + + org.codehaus.gmavenplus + gmavenplus-plugin + 4.1.1 + + + + defineAdditionalProperties + validate + + execute + + + + + + + + + + + org.apache.groovy + groovy-ant + 4.0.23 + runtime + + + + org.apache.maven.plugins maven-jar-plugin @@ -171,7 +210,7 @@ https://github.com/ - qudt/qudt-public-repo/releases/download/v${qudt.release.version}/qudt-public-repo-${qudt.release.version}.zip + qudt/qudt-public-repo/releases/download/${qudt.release.download.directory}/qudt-public-repo-${qudt.release.version}.zip ${project.build.directory}/qudt diff --git a/qudtlib-ingest-qudt/src/test/resources/query/allScalingOf.rq b/qudtlib-ingest-qudt/src/test/resources/query/allScalingOf.rq index af1708a4..6a8d6051 100644 --- a/qudtlib-ingest-qudt/src/test/resources/query/allScalingOf.rq +++ b/qudtlib-ingest-qudt/src/test/resources/query/allScalingOf.rq @@ -4,7 +4,7 @@ SELECT * where { ?unit a qudt:Unit. optional { - ?unit qudt:isScalingOf ?base . + ?unit qudt:scalingOf ?base . } optional { ?unit qudt:prefix ?prefix . diff --git a/qudtlib-ingest-qudt/src/test/resources/query/isScalingOf-inconsistencies.rq b/qudtlib-ingest-qudt/src/test/resources/query/isScalingOf-inconsistencies.rq index 9e8876a1..07aa3635 100644 --- a/qudtlib-ingest-qudt/src/test/resources/query/isScalingOf-inconsistencies.rq +++ b/qudtlib-ingest-qudt/src/test/resources/query/isScalingOf-inconsistencies.rq @@ -5,7 +5,7 @@ SELECT * where { ?unit a qudt:Unit. optional { - ?unit qudt:isScalingOf ?base . + ?unit qudt:scalingOf ?base . } optional { ?unit qudt:prefix ?prefix . diff --git a/qudtlib-ingest-qudt/src/test/resources/query/missingScalingTriples.rq b/qudtlib-ingest-qudt/src/test/resources/query/missingScalingTriples.rq index d2b006cb..64ac691a 100644 --- a/qudtlib-ingest-qudt/src/test/resources/query/missingScalingTriples.rq +++ b/qudtlib-ingest-qudt/src/test/resources/query/missingScalingTriples.rq @@ -4,7 +4,7 @@ SELECT * where { ?unit a qudt:Unit. optional { - ?unit qudt:isScalingOf ?base . + ?unit qudt:scalingOf ?base . } optional { ?unit qudt:prefix ?prefix . diff --git a/qudtlib-init-rdf/src/main/java/io/github/qudtlib/init/InitializerImpl.java b/qudtlib-init-rdf/src/main/java/io/github/qudtlib/init/InitializerImpl.java index cecd02b4..9f607c89 100644 --- a/qudtlib-init-rdf/src/main/java/io/github/qudtlib/init/InitializerImpl.java +++ b/qudtlib-init-rdf/src/main/java/io/github/qudtlib/init/InitializerImpl.java @@ -491,7 +491,10 @@ private static Unit.Definition makeUnitBuilder(BindingSet bs, Definitions defini getIfPresent( bs, "scalingOf", - compose(Value::stringValue, definitions::expectUnitDefinition))); + compose(Value::stringValue, definitions::expectUnitDefinition))) + .dependents( + getIfPresent( + bs, "dependents", compose(Value::stringValue, Integer::valueOf))); } private static QuantityKind.Definition makeQuantityKindBuilder(BindingSet bs) { diff --git a/qudtlib-init-rdf/src/main/resources/qudtlib/query/factor-units.rq b/qudtlib-init-rdf/src/main/resources/qudtlib/query/factor-units.rq index 8f5ba345..63d0de0b 100644 --- a/qudtlib-init-rdf/src/main/resources/qudtlib/query/factor-units.rq +++ b/qudtlib-init-rdf/src/main/resources/qudtlib/query/factor-units.rq @@ -11,9 +11,9 @@ SELECT DISTINCT ?scaleFactor WHERE { - ?derivedUnit qudt:factorUnit ?endFactor . + ?derivedUnit qudt:hasFactorUnit ?endFactor . ?endFactor - qudt:unit ?factorUnit ; + qudt:hasUnit ?factorUnit ; qudt:exponent ?exponent . OPTIONAL { ?derivedUnit qudt:factorUnitScalar ?scaleFactor diff --git a/qudtlib-init-rdf/src/main/resources/qudtlib/query/unit.rq b/qudtlib-init-rdf/src/main/resources/qudtlib/query/unit.rq index aee340e6..6279055e 100644 --- a/qudtlib-init-rdf/src/main/resources/qudtlib/query/unit.rq +++ b/qudtlib-init-rdf/src/main/resources/qudtlib/query/unit.rq @@ -46,7 +46,10 @@ SELECT * where ?unit qudt:prefix ?prefix } optional { - ?unit qudt:isScalingOf ?scalingOf + ?unit qudt:scalingOf ?scalingOf + } + optional { + ?unit qudt:dependents ?dependents } optional { ?unit qudt:hasDimensionVector ?dimensionVector diff --git a/qudtlib-js b/qudtlib-js index 2443658a..12abd426 160000 --- a/qudtlib-js +++ b/qudtlib-js @@ -1 +1 @@ -Subproject commit 2443658a83cea34953f6c4ab82feb63a95c8d112 +Subproject commit 12abd426f288661a97b0f71be319854127d15d6d diff --git a/qudtlib-main/src/main/java/io/github/qudtlib/Qudt.java b/qudtlib-main/src/main/java/io/github/qudtlib/Qudt.java index 0768add6..bb81359c 100644 --- a/qudtlib-main/src/main/java/io/github/qudtlib/Qudt.java +++ b/qudtlib-main/src/main/java/io/github/qudtlib/Qudt.java @@ -191,12 +191,25 @@ public static Unit unitFromLocalnameRequired(String localname) { return unitRequired(unitIriFromLocalname(localname)); } + /** + * @deprecated use unitFromLocalnameRequired() instead. (no special handling for currencies any + * more) + * @param localname + * @return + */ + @Deprecated() public static Unit currencyFromLocalnameRequired(String localname) { - return unitRequired(currencyIriFromLocalname(localname)); + return unitRequired(unitIriFromLocalname(localname)); } + /** + * @deprecated use unitFromLocalname() instead. (no special handling for currencies any more) + * @param localname + * @return + */ + @Deprecated() public static Optional currencyFromLocalname(String localname) { - return unit(currencyIriFromLocalname(localname)); + return unit(unitIriFromLocalname(localname)); } /** @@ -290,8 +303,14 @@ public static String unitIriFromLocalname(String localname) { return NAMESPACES.unit.makeIriInNamespace(localname); } + /** + * @deprecated use unitIriFromLocalname() instead. (no special handling for currencies any more) + * @param localname + * @return + */ + @Deprecated public static String currencyIriFromLocalname(String localname) { - return NAMESPACES.currency.makeIriInNamespace(localname); + return unitIriFromLocalname(localname); } public static Unit scale(String prefixLabel, String baseUnitLabel) { @@ -309,6 +328,17 @@ public static Unit scale(String prefixLabel, String baseUnitLabel) { u.getScalingOf().get().getLabels().stream() .anyMatch(labelMatcher::matches)) .findFirst() + .or( + () -> { + // special case: KiloGM is not a scaling of GM, it's the other way + // around - need + // to handle specifically. + if (prefixLabel.toLowerCase(Locale.ROOT).equals("kilo") + && baseUnitLabel.toLowerCase(Locale.ROOT).equals("gram")) { + return unitFromLabel("kilogram"); + } + return Optional.empty(); + }) .orElseThrow( () -> new NotFoundException( @@ -333,6 +363,15 @@ public static Unit scale(Prefix prefix, Unit baseUnit) { .filter(u -> u.getScalingOf().isPresent()) .filter(u -> u.getScalingOf().get().equals(baseUnit)) .findFirst() + .or( + () -> { + if (prefix.getIri().equals(NAMESPACES.prefix.makeIriInNamespace("Kilo")) + && baseUnit.getIri() + .equals(NAMESPACES.unit.makeIriInNamespace("GM"))) { + return unitFromLabel("kilogram"); + } + return Optional.empty(); + }) .orElseThrow( () -> new NotFoundException( @@ -612,8 +651,7 @@ public static List unitsWithSameFractionalDimensionVector(Unit unit) { .collect(Collectors.toList()); } - private static Comparator bestMatchForFactorUnitsComparator( - FactorUnits requestedFactorUnits) { + static Comparator bestMatchForFactorUnitsComparator(FactorUnits requestedFactorUnits) { FactorUnits reqNorm = requestedFactorUnits.normalize(); FactorUnits reqNum = requestedFactorUnits.numerator(); @@ -627,13 +665,43 @@ private static Comparator bestMatchForFactorUnitsComparator( public int compare(Unit left, Unit right) { if (left.getFactorUnits().equals(requestedFactorUnits)) { if (!right.getFactorUnits().equals(requestedFactorUnits)) { - return -1; + return -1; // prefer a unit that matches the factors exactly } } else { if (right.getFactorUnits().equals(requestedFactorUnits)) { return 1; } } + if (right.isDeprecated()) { + if (!left.isDeprecated()) { + return -1; // prefer a non-deprecated unit + } + } else if (left.isDeprecated()) { + return 1; // prefer a non-deprecated unit + } + if (right.isGenerated()) { + if (!left.isGenerated()) { + return -1; // prefer a unit that was not generated as a missing factor unit + } + } else if (left.isGenerated()) { + return 1; + } + if (right.isDefinedAsOtherUnit() + && left.getFactorUnits().getFactorUnits().size() == 1 + && left.getFactorUnits().getFactorUnits().get(0).getUnit().equals(left) + && right.getFactorUnits().getFactorUnits().get(0).getExponent() + == left.getFactorUnits().getFactorUnits().get(0).getExponent()) { + return -1; // if a unit is just another name of another unit with same exponent, + // prefer the other (thus L would be preferred over DeciM) + } + if (left.isDefinedAsOtherUnit() + && left.getFactorUnits().getFactorUnits().size() == 1 + && right.getFactorUnits().getFactorUnits().get(0).getUnit().equals(left) + && right.getFactorUnits().getFactorUnits().get(0).getExponent() + == left.getFactorUnits().getFactorUnits().get(0).getExponent()) { + return 1; + } + if (!left.getIriLocalname().contains("-")) { if (right.getIriLocalname().contains("-")) { return -1; // prefer a derived unit with a new name (such as W, J, N etc.) @@ -642,55 +710,77 @@ public int compare(Unit left, Unit right) { return 1; } - FactorUnits leftDen = left.getFactorUnits().denominator(); - FactorUnits rightDen = right.getFactorUnits().denominator(); - int leftFactorsDenCnt = leftDen.expand().size(); - int rightFactorsDenCnt = rightDen.expand().size(); - int reqFactorsDenCnt = reqDen.expand().size(); - int diffFactorsCountDen = - Math.abs(reqFactorsDenCnt - leftFactorsDenCnt) - - Math.abs(reqFactorsDenCnt - rightFactorsDenCnt); + final int diffFactorsCountDen = + expandedFactorsCountDiff( + left.getFactorUnits().denominator(), + right.getFactorUnits().denominator(), + reqDen); if (diffFactorsCountDen != 0) { return diffFactorsCountDen; } - - FactorUnits leftNum = left.getFactorUnits().numerator(); - FactorUnits rightNum = right.getFactorUnits().denominator(); - int leftFactorsNumCnt = leftNum.expand().size(); - int rightFactorsNumCnt = rightNum.expand().size(); - int reqFactorsNumCnt = reqNum.expand().size(); - int diffFactorsCountNum = - Math.abs(reqFactorsNumCnt - leftFactorsNumCnt) - - Math.abs(reqFactorsNumCnt - rightFactorsNumCnt); + final int diffFactorsCountNum = + expandedFactorsCountDiff( + left.getFactorUnits().numerator(), + right.getFactorUnits().numerator(), + reqNum); if (diffFactorsCountNum != 0) { return diffFactorsCountNum; } - int leftCnt = left.getFactorUnits().expand().size(); - int rightCnt = right.getFactorUnits().expand().size(); - int reqCnt = requestedFactorUnits.expand().size(); - if (leftCnt == reqCnt) { - if (rightCnt != reqCnt) { + final int factorCountDiff = + expandedFactorsCountDiff( + left.getFactorUnits(), + right.getFactorUnits(), + requestedFactorUnits); + if (factorCountDiff != 0) { + return factorCountDiff; + } + if (left.getDependents() >= 10 + && left.getDependents() > 2 * right.getDependents()) { + return -1; // prefer a unit that has more dependents (other units that refer to + // it as their factor unit or base unit) + } else if (right.getDependents() >= 10 + && right.getDependents() > 2 * left.getDependents()) { + return 1; + } + String leftLocalname = left.getIriLocalname(); + String rightLocalname = right.getIriLocalname(); + if (reqLocalNamePossibilities.contains(leftLocalname)) { + if (!reqLocalNamePossibilities.contains(rightLocalname)) { return -1; } + } else if (reqLocalNamePossibilities.contains(rightLocalname)) { + return 1; + } + long leftUnderscores = leftLocalname.codePoints().filter(c -> c == '_').count(); + long rightUnderscores = rightLocalname.codePoints().filter(c -> c == '_').count(); + if (leftUnderscores < rightUnderscores) { + return -1; // prefer a unit without modifier in one of its components + } else if (leftUnderscores > rightUnderscores) { + return 1; + } + if (left.getFactorUnits().equals(reqNorm)) { + if (!right.getFactorUnits().equals(reqNorm)) { + return -1; // prefer a unit that matches the normalized factors exactly + } } else { - if (rightCnt == reqCnt) { + if (right.getFactorUnits().equals(reqNorm)) { return 1; } } - if (reqLocalNamePossibilities.contains(left.getIriLocalname())) { - if (!reqLocalNamePossibilities.contains(right.getIriLocalname())) { - return -1; - } - } else if (reqLocalNamePossibilities.contains(right.getIriLocalname())) { - return 1; - } return left.getIriLocalname().compareTo(right.getIriLocalname()); } - }; - } - private static String getIriLocalName(String iri) { - return iri.replaceAll("^.+[/|#]", ""); + private int expandedFactorsCountDiff( + FactorUnits leftDen, FactorUnits rightDen, FactorUnits target) { + int leftFactorsDenCnt = leftDen.expand().size(); + int rightFactorsDenCnt = rightDen.expand().size(); + int reqFactorsDenCnt = target.expand().size(); + int diffFactorsCountDen = + Math.abs(reqFactorsDenCnt - leftFactorsDenCnt) + - Math.abs(reqFactorsDenCnt - rightFactorsDenCnt); + return diffFactorsCountDen; + } + }; } /** @@ -709,7 +799,7 @@ public static Map.Entry scaleToBaseUnit(Unit unit) { .orElseThrow( () -> new IllegalStateException( - "Scaled unit has null isScalingOf() unit - that's a bug!")); + "Scaled unit has null scalingOf() unit - that's a bug!")); BigDecimal multiplier = unit.getConversionMultiplier(baseUnit); return Map.entry(baseUnit, multiplier); } @@ -1150,7 +1240,7 @@ private static class LabelMatcher { private final String labelToMatch; public LabelMatcher(String labelToMatch) { - this.labelToMatch = labelToMatch.replaceAll("_", " ").toUpperCase(Locale.US); + this.labelToMatch = labelToMatch.replaceAll("_", " ").toUpperCase(Locale.ROOT); } public boolean matches(LangString candidateLabel) { @@ -1158,7 +1248,7 @@ public boolean matches(LangString candidateLabel) { } public boolean matches(String candiateLabel) { - return candiateLabel.toUpperCase(Locale.US).equals(labelToMatch); + return candiateLabel.toUpperCase(Locale.ROOT).equals(labelToMatch); } } diff --git a/qudtlib-main/src/main/java/io/github/qudtlib/support/fractional/FractionalUnits.java b/qudtlib-main/src/main/java/io/github/qudtlib/support/fractional/FractionalUnits.java index 7924370d..c95a06c8 100644 --- a/qudtlib-main/src/main/java/io/github/qudtlib/support/fractional/FractionalUnits.java +++ b/qudtlib-main/src/main/java/io/github/qudtlib/support/fractional/FractionalUnits.java @@ -40,7 +40,7 @@ public static FractionalDimensionVector getFractionalDimensionVector(Unit unit) } catch (NotFoundException e2) { throw new RuntimeException( String.format( - "Name particle %s of unit %s is not a QUDT unit or currency", + "Name particle %s of unit %s is not a QUDT unit", currentUnitNameConstituent, unit.getIri()), e2); } diff --git a/qudtlib-model/src/main/java/io/github/qudtlib/model/FactorUnits.java b/qudtlib-model/src/main/java/io/github/qudtlib/model/FactorUnits.java index a7975efc..b93bfb6b 100644 --- a/qudtlib-model/src/main/java/io/github/qudtlib/model/FactorUnits.java +++ b/qudtlib-model/src/main/java/io/github/qudtlib/model/FactorUnits.java @@ -25,10 +25,35 @@ public FactorUnits( if (iriForSortingFactors != null) { factorUnits = sortAccordingToUnitLocalname(iriForSortingFactors, factorUnits); } - this.factorUnits = factorUnits.stream().collect(Collectors.toUnmodifiableList()); + this.factorUnits = normalizeSingleUnitFactors(factorUnits); this.scaleFactor = Optional.ofNullable(scaleFactor).orElse(BigDecimal.ONE); } + private static List normalizeSingleUnitFactors(List factorUnits) { + if (factorUnits == null) return List.of(); + return factorUnits.stream() + .map( + fu -> { + Unit u = fu.getUnit(); + int exponent = fu.getExponent(); + // if both the factor unit (fu) and its only factor have exponent != 1, + // pull them together + // into one factor unit, thus making e.g. (M3=M^3)^-1 -> M^-3 + if (exponent != 1 + && u.hasFactorUnits() + && u.getFactorUnits().getFactorUnits().size() == 1) { + FactorUnit onlyFactor = u.getFactorUnits().getFactorUnits().get(0); + int factorExponent = onlyFactor.getExponent(); + if (Math.abs(factorExponent) != 1f) { + return new FactorUnit( + onlyFactor.getUnit(), exponent * factorExponent); + } + } + return fu; + }) + .toList(); + } + public FactorUnits(List factorUnits, BigDecimal scaleFactor) { this(factorUnits, scaleFactor, null); } @@ -120,6 +145,20 @@ public static boolean hasFactorUnits(List factorUnits) { return true; } + public boolean hasOneFactorUnit() { + if (this.factorUnits == null) { + return false; + } + if (this.factorUnits.size() != 1) { + return false; + } + FactorUnit factorUnit = this.factorUnits.get(0); + if (this.equals(factorUnit.getUnit().getFactorUnits())) { + return false; + } + return true; + } + public static class Builder { private List factorUnitBuilders = new ArrayList<>(); private BigDecimal scale = BigDecimal.ONE; @@ -441,9 +480,13 @@ public BigDecimal conversionFactor(FactorUnits otherFactorUnits) { private BigDecimal conversionFactorInternal(FactorUnits otherFactorUnits) { FactorUnits myFactors = this.normalize(); FactorUnits otherFactors = otherFactorUnits.normalize(); - List myFactorUnitList = new ArrayList<>(myFactors.getFactorUnits()); - List otherFactorUnitList = new ArrayList<>(otherFactors.getFactorUnits()); + List myFactorUnitList = new ArrayList<>(myFactors.normalize().getFactorUnits()); + List otherFactorUnitList = + new ArrayList<>(otherFactors.normalize().getFactorUnits()); FactorUnit processed = null; + if (myFactors.scaleFactor.signum() == 0 || otherFactors.scaleFactor.signum() == 0) { + return BigDecimal.ZERO; + } BigDecimal factor = myFactors.scaleFactor.divide(otherFactors.scaleFactor, MathContext.DECIMAL128); for (FactorUnit myFactor : myFactorUnitList) { @@ -650,7 +693,8 @@ private static List sortBy(FactorUnits factorUnits, String localName fu -> fu, fu -> localName.indexOf( - FactorUnits.getLocalname(List.of(fu))))); + FactorUnits.getLocalname(List.of(fu))), + (l, r) -> l)); return factorUnits.getFactorUnits().stream() .sorted(Comparator.comparing(factorUnit -> orderMap.get(factorUnit))) .collect(Collectors.toList()); diff --git a/qudtlib-model/src/main/java/io/github/qudtlib/model/QudtNamespaces.java b/qudtlib-model/src/main/java/io/github/qudtlib/model/QudtNamespaces.java index 66ee500a..7e32ea64 100644 --- a/qudtlib-model/src/main/java/io/github/qudtlib/model/QudtNamespaces.java +++ b/qudtlib-model/src/main/java/io/github/qudtlib/model/QudtNamespaces.java @@ -4,8 +4,14 @@ public class QudtNamespaces { public static final Namespace quantityKind = new Namespace("http://qudt.org/vocab/quantitykind/", "qk"); public static final Namespace unit = new Namespace("http://qudt.org/vocab/unit/", "unit"); + + /** + * @deprecated no special handling for currencies any more, use unit namespace instead. + */ + @Deprecated public static final Namespace currency = new Namespace("http://qudt.org/vocab/currency/", "cur"); + public static final Namespace prefix = new Namespace("http://qudt.org/vocab/prefix/", "prefix"); public static final Namespace systemOfUnits = new Namespace("http://qudt.org/vocab/sou/", "sou"); diff --git a/qudtlib-model/src/main/java/io/github/qudtlib/model/Unit.java b/qudtlib-model/src/main/java/io/github/qudtlib/model/Unit.java index 827bba17..0b04908b 100644 --- a/qudtlib-model/src/main/java/io/github/qudtlib/model/Unit.java +++ b/qudtlib-model/src/main/java/io/github/qudtlib/model/Unit.java @@ -75,6 +75,8 @@ public static class Definition extends NodeDefinitionBase { private Boolean deprecated; + private Integer dependents; + private Set> exactMatches = new HashSet<>(); private Set> systemsOfUnits = new HashSet<>(); @@ -103,6 +105,11 @@ public T symbol(String symbol) { return (T) this; } + public T dependents(Integer dependents) { + this.dependents = dependents; + return (T) this; + } + public T altSymbol(String symbol) { if (symbol != null && !symbol.trim().isEmpty()) { this.altSymbols.add(symbol); @@ -271,6 +278,7 @@ public Unit doBuild() { private final String ucumCode; private final LangStrings labels; private final Unit scalingOf; + private final int dependents; private final Set exactMatches; private final FactorUnits factorUnits; private final String currencyCode; @@ -303,6 +311,7 @@ protected Unit(Definition definition) { this.description = definition.description; this.prefix = definition.prefix == null ? null : definition.prefix.build(); this.scalingOf = definition.scalingOf == null ? null : definition.scalingOf.build(); + this.dependents = definition.dependents == null ? 0 : definition.dependents; this.exactMatches = buildSet(definition.exactMatches); this.quantityKinds = buildSet(definition.quantityKinds); this.unitOfSystems = buildSet(definition.systemsOfUnits); @@ -665,6 +674,10 @@ public Optional getScalingOf() { return Optional.ofNullable(scalingOf); } + public int getDependents() { + return dependents; + } + public Set getQuantityKinds() { return Collections.unmodifiableSet(quantityKinds); } @@ -736,19 +749,15 @@ public String toString() { } public boolean isCurrencyUnit() { - return QudtNamespaces.currency.isFullNamespaceIri(this.iri); + return getIriLocalname().startsWith("CCY_"); } public String getIriLocalname() { - return this.isCurrencyUnit() - ? QudtNamespaces.currency.getLocalName(this.iri) - : QudtNamespaces.unit.getLocalName(this.iri); + return QudtNamespaces.unit.getLocalName(this.iri); } public String getIriAbbreviated() { - return this.isCurrencyUnit() - ? QudtNamespaces.currency.abbreviate(this.iri) - : QudtNamespaces.unit.abbreviate(this.iri); + return QudtNamespaces.unit.abbreviate(this.iri); } private boolean findInBasesRecursively(Unit toFind) { diff --git a/qudtlib-test/src/test/java/io/github/qudtlib/CurrencyTests.java b/qudtlib-test/src/test/java/io/github/qudtlib/CurrencyTests.java index 65c83a82..1b77f647 100644 --- a/qudtlib-test/src/test/java/io/github/qudtlib/CurrencyTests.java +++ b/qudtlib-test/src/test/java/io/github/qudtlib/CurrencyTests.java @@ -8,7 +8,7 @@ public class CurrencyTests { @Test public void testCurrency() { - Unit euro = Qudt.Units.EUR_Currency; + Unit euro = Qudt.Units.CCY_EUR; Assertions.assertTrue(euro.hasLabel("Euro")); } } diff --git a/qudtlib-test/src/test/java/io/github/qudtlib/DerivedUnitTests.java b/qudtlib-test/src/test/java/io/github/qudtlib/DerivedUnitTests.java index 68cbdf68..9af69243 100644 --- a/qudtlib-test/src/test/java/io/github/qudtlib/DerivedUnitTests.java +++ b/qudtlib-test/src/test/java/io/github/qudtlib/DerivedUnitTests.java @@ -102,7 +102,11 @@ public void testMatchingModeAllowScaled() { @Test public void testMatchingModeExact() { assertTrue(Qudt.Units.GM__PER__DeciM3.matches(Qudt.Units.KiloGM, 1, Qudt.Units.M, -3)); + assertFalse(Qudt.Units.GM__PER__DeciM3.matches(Qudt.Units.KiloGM, 1, Qudt.Units.DeciM, -3)); + assertTrue(Qudt.Units.GM__PER__DeciM3.matches(Qudt.Units.GM, 1, Qudt.Units.DeciM, -3)); assertFalse(Qudt.Units.KiloGM__PER__M3.matches(Qudt.Units.GM, 1, Qudt.Units.M, -3)); + assertFalse(Qudt.Units.KiloGM__PER__M3.matches(Qudt.Units.KiloGM, 1, Qudt.Units.DeciM, -3)); + assertTrue(Qudt.Units.KiloGM__PER__M3.matches(Qudt.Units.KiloGM, 1, Qudt.Units.M, -3)); } @Test @@ -342,6 +346,13 @@ public void testScale_squareInDenominator1() { assertTrue(Qudt.Units.N__PER__M2.matches(FactorUnits.ofFactorUnitSpec(factors))); } + @Test + public void testGM() { + assertEquals( + FactorUnits.ofFactorUnitSpec(new BigDecimal(0.001), Units.KiloGM, 1), + Units.GM.normalize()); + } + @Test public void testScale_squareInDenominator2() { Object[] factors = @@ -451,13 +462,27 @@ public void testWatt() { FactorUnits.ofFactorUnitSpec(Qudt.Units.J, 1, Qudt.Units.SEC, -1).getFactorUnits(); List units = Qudt.unitsFromFactorUnits(DerivedUnitSearchMode.BEST_MATCH, wattFactors); assertEquals(1, units.size()); - assertEquals(Qudt.Units.W, units.stream().findFirst().get()); + Unit bestMatch = units.stream().findFirst().get(); + assertEquals( + Qudt.Units.W, + bestMatch, + "Expected %s but was %s" + .formatted(formatUnit(Qudt.Units.W), formatUnit(bestMatch))); wattFactors = FactorUnits.ofUnit(W).getFactorUnits(); units = Qudt.unitsFromFactorUnits(DerivedUnitSearchMode.BEST_MATCH, wattFactors); assertEquals(1, units.size()); assertEquals(W, units.stream().findFirst().get()); } + private String formatUnit(Unit unit) { + return """ + %s: + dependents: %d + %s + """ + .formatted(unit.getIriLocalname(), unit.getDependents(), unit.getFactorUnits()); + } + @ParameterizedTest @MethodSource("testDerivedUnits") public void testDerivedUnitsExpectedResultPresent( diff --git a/qudtlib-test/src/test/java/io/github/qudtlib/FactorUnitsTests.java b/qudtlib-test/src/test/java/io/github/qudtlib/FactorUnitsTests.java index ba40cff9..85fb8d26 100644 --- a/qudtlib-test/src/test/java/io/github/qudtlib/FactorUnitsTests.java +++ b/qudtlib-test/src/test/java/io/github/qudtlib/FactorUnitsTests.java @@ -15,6 +15,7 @@ import java.util.stream.Stream; import org.hamcrest.Matchers; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -36,28 +37,28 @@ public static Stream testNormalize() { Arguments.of( FactorUnits.ofFactorUnitSpec(KiloGM, 1), new FactorUnits( - FactorUnits.ofFactorUnitSpec(Units.GM, 1).getFactorUnits(), - BigDecimal.valueOf(1E3))), + FactorUnits.ofFactorUnitSpec(Units.KiloGM, 1).getFactorUnits(), + BigDecimal.valueOf(1))), Arguments.of( - FactorUnits.ofFactorUnitSpec(KiloGM, 2), + FactorUnits.ofFactorUnitSpec(GM, 2), new FactorUnits( - FactorUnits.ofFactorUnitSpec(Units.GM, 2).getFactorUnits(), - BigDecimal.valueOf(1E6))), + FactorUnits.ofFactorUnitSpec(Units.KiloGM, 2).getFactorUnits(), + BigDecimal.valueOf(0.000001))), Arguments.of( - FactorUnits.ofFactorUnitSpec(KiloGM, 2, KiloGM, -2), - FactorUnits.ofFactorUnitSpec(GM, 2, GM, -2)), + FactorUnits.ofFactorUnitSpec(GM, 2, GM, -2), + FactorUnits.ofFactorUnitSpec(KiloGM, 2, KiloGM, -2)), Arguments.of( - FactorUnits.ofFactorUnitSpec(KiloGM, 1, Units.M, -3), + FactorUnits.ofFactorUnitSpec(GM, 1, Units.M, -3), new FactorUnits( - FactorUnits.ofFactorUnitSpec(Units.GM, 1, Units.M, -3) + FactorUnits.ofFactorUnitSpec(Units.KiloGM, 1, Units.M, -3) .getFactorUnits(), - BigDecimal.valueOf(1E3))), + BigDecimal.valueOf(1E-3))), Arguments.of( - FactorUnits.ofFactorUnitSpec(KiloGM, 1, Units.M3, -1), + FactorUnits.ofFactorUnitSpec(GM, 1, Units.M3, -1), new FactorUnits( - FactorUnits.ofFactorUnitSpec(Units.GM, 1, Units.M, -3) + FactorUnits.ofFactorUnitSpec(Units.KiloGM, 1, Units.M, -3) .getFactorUnits(), - BigDecimal.valueOf(1E3)))); + BigDecimal.valueOf(1E-3)))); } @ParameterizedTest @@ -479,6 +480,7 @@ public static Stream testConversionMultiplierOpt() { return Qudt.allUnits().stream().map(u -> Arguments.of(u)); } + @Disabled @Test public void testIssue100() { // 3 km^3 * 5 hr / 87654 N^2. I would like to reduce this to 6.16e+8 m s5 / kg2. @@ -551,6 +553,7 @@ public void testIssue100() { System.out.println("converted " + q.convert(KiloGM)); } + @Disabled @Test public void testIssue100_solved() { // 3 km^3 * 5 hr / 87654 N^2. I would like to reduce this to 6.16e+8 m s5 / kg2. diff --git a/qudtlib-test/src/test/java/io/github/qudtlib/NumericStabilityTests.java b/qudtlib-test/src/test/java/io/github/qudtlib/NumericStabilityTests.java index e6f52217..34065b33 100644 --- a/qudtlib-test/src/test/java/io/github/qudtlib/NumericStabilityTests.java +++ b/qudtlib-test/src/test/java/io/github/qudtlib/NumericStabilityTests.java @@ -8,7 +8,7 @@ public class NumericStabilityTests { @Test public void testStabilitiyOfSimpleFractions() { Assertions.assertEquals( - "0.0010", + "0.001", Qudt.Prefixes.Milli.getMultiplier().toString(), "Numerically instable multiplier detected"); /* diff --git a/qudtlib-test/src/test/java/io/github/qudtlib/QudtTests.java b/qudtlib-test/src/test/java/io/github/qudtlib/QudtTests.java index 00e2ef8b..1a8ef19d 100644 --- a/qudtlib-test/src/test/java/io/github/qudtlib/QudtTests.java +++ b/qudtlib-test/src/test/java/io/github/qudtlib/QudtTests.java @@ -50,9 +50,9 @@ public void testPrefix() { @Test public void testUnit() { Unit metre = Qudt.Units.M; - Assertions.assertTrue(metre.hasLabel("metre")); + Assertions.assertTrue(metre.hasLabel("Metre")); Assertions.assertTrue(metre.hasLabel("Meter")); - Assertions.assertEquals("metre", metre.getLabelForLanguageTag("en").get().getString()); + Assertions.assertEquals("Metre", metre.getLabelForLanguageTag("en").get().getString()); Assertions.assertEquals(Qudt.unitRequired(metre.getIri()), metre); Assertions.assertEquals(Qudt.unitRequired(metre.getIri()), metre); } @@ -386,6 +386,8 @@ public void testScaledUnit() { Assertions.assertEquals(Qudt.Units.KiloGM, unit); unit = Qudt.scale(Qudt.Prefixes.Nano, Qudt.Units.M); Assertions.assertEquals(Qudt.Units.NanoM, unit); + unit = Qudt.scale(Qudt.Prefixes.Kilo, Units.GM); + Assertions.assertEquals(Qudt.Units.KiloGM, unit); } @Test @@ -395,7 +397,7 @@ public void testGetUnitFactors() { Assertions.assertTrue( unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("meter"), 2))); Assertions.assertTrue( - unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("gram"), 1))); + unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("kilogram"), 1))); Assertions.assertTrue( unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("second"), -2))); unit = Qudt.unitFromLabelRequired("newton meter per square meter"); @@ -405,7 +407,7 @@ public void testGetUnitFactors() { Assertions.assertTrue( unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("meter"), -2))); Assertions.assertTrue( - unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("gram"), 1))); + unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("kilogram"), 1))); Assertions.assertTrue( unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("second"), -2))); unit = Qudt.Units.KiloN__M; @@ -413,7 +415,7 @@ public void testGetUnitFactors() { Assertions.assertTrue( unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("meter"), 2))); Assertions.assertTrue( - unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("gram"), 1))); + unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("kilogram"), 1))); Assertions.assertTrue( unitFactors.contains(new FactorUnit(Qudt.unitFromLabelRequired("second"), -2))); } @@ -425,7 +427,15 @@ public void testGetUnitFactorsUnscaled() { FactorUnits.ofFactorUnitSpec(KiloGM, 1, M, 2, SEC, -2).getFactorUnits(), false, false); - Assertions.assertTrue(unitFactors.contains(new FactorUnit(Qudt.Units.GM, 1))); + Assertions.assertTrue(unitFactors.contains(new FactorUnit(Qudt.Units.KiloGM, 1))); + Assertions.assertTrue(unitFactors.contains(new FactorUnit(Qudt.Units.M, 2))); + Assertions.assertTrue(unitFactors.contains(new FactorUnit(Qudt.Units.SEC, -2))); + unitFactors = + Qudt.unscale( + FactorUnits.ofFactorUnitSpec(GM, 1, M, 2, SEC, -2).getFactorUnits(), + false, + false); + Assertions.assertTrue(unitFactors.contains(new FactorUnit(Qudt.Units.KiloGM, 1))); Assertions.assertTrue(unitFactors.contains(new FactorUnit(Qudt.Units.M, 2))); Assertions.assertTrue(unitFactors.contains(new FactorUnit(Qudt.Units.SEC, -2))); } @@ -482,7 +492,7 @@ public void testConvert_L_to_GAL_US() { BigDecimal converted = Qudt.convert(BigDecimal.ONE, Qudt.Units.L, Qudt.Units.GAL_US); MatcherAssert.assertThat( converted, - Matchers.comparesEqualTo(new BigDecimal("0.2641720372841846541406853467997671"))); + Matchers.comparesEqualTo(new BigDecimal("0.2641720523581484153798999216091625"))); } @Test @@ -493,7 +503,7 @@ public void testConvert_Celsius_to_Fahrenheit() { Assertions.assertNotNull(fahrenheit); MatcherAssert.assertThat( fahrenheit.getValue(), - Matchers.comparesEqualTo(new BigDecimal("211.9999999999999462664000000000043"))); + Matchers.comparesEqualTo(new BigDecimal("211.9999999999999999999999999999999"))); Assertions.assertEquals(Qudt.unitIriFromLocalname("DEG_F"), fahrenheit.getUnit().getIri()); } @@ -504,8 +514,7 @@ public void testConvert_Celsius_to_Fahrenheit_tempdiff() { QuantityValue fahrenheit = Qudt.convert(celsius100, DEG_F, TemperatureDifference); Assertions.assertNotNull(fahrenheit); MatcherAssert.assertThat( - fahrenheit.getValue(), - Matchers.comparesEqualTo(new BigDecimal("179.9999999999999856000000000000012"))); + fahrenheit.getValue(), Matchers.comparesEqualTo(new BigDecimal("180.0"))); Assertions.assertEquals(Qudt.unitIriFromLocalname("DEG_F"), fahrenheit.getUnit().getIri()); } @@ -524,28 +533,46 @@ public void testConvert_Celsius_to_Kelvin_tempdiff() { public void testConvert_Celsius_to_Fahrenheit_2() { MatcherAssert.assertThat( Qudt.convert(new BigDecimal("100"), Units.DEG_C, Units.DEG_F), - Matchers.comparesEqualTo(new BigDecimal("211.9999999999999462664000000000043"))); + Matchers.comparesEqualTo(new BigDecimal("211.9999999999999999999999999999999"))); } @Test public void testConvert_Fahrenheit_to_Celsius() { MatcherAssert.assertThat( Qudt.convert(new BigDecimal("100"), Units.DEG_F, Units.DEG_C), - Matchers.comparesEqualTo(new BigDecimal("37.777777777777802652"))); + Matchers.comparesEqualTo(new BigDecimal("37.7777777777777777777777777777778"))); } @Test public void testConvert_byte_to_megabyte() { MatcherAssert.assertThat( Qudt.convert(new BigDecimal("1000000"), Units.BYTE, Units.MegaBYTE), - Matchers.comparesEqualTo(new BigDecimal("1.000000000000000446394706347217183"))); + Matchers.comparesEqualTo(BigDecimal.ONE)); } @Test public void testConvert_megabyte_to_byte() { MatcherAssert.assertThat( Qudt.convert(new BigDecimal("1"), Units.MegaBYTE, Units.BYTE), - Matchers.comparesEqualTo(new BigDecimal("999999.9999999995536052936527830164"))); + Matchers.comparesEqualTo(new BigDecimal("1000000"))); + } + + @Test + public void testMilliSV__PER__HR_to_MicroSV__PER__HR() { + /* + Stream.of(Units.HR, PER__HR, SV, MilliSV, MicroSV, MilliSV__PER__HR, MicroSV__PER__HR) + .forEach( + u -> + System.out.println( + String.format( + "%30s: %s", + u.getIriLocalname(), + u.getConversionMultiplier().get().toString()))); + */ + MatcherAssert.assertThat( + Qudt.convert( + new BigDecimal("15.12"), Units.MilliSV__PER__HR, Units.MicroSV__PER__HR), + Matchers.comparesEqualTo(new BigDecimal(15120))); } @Test @@ -764,7 +791,6 @@ public static Stream testAllPossibleUnitFactors() { Units.N__M, new Object[][] { {Units.N__M, 1}, - {Units.GM, 1, Units.M, 2, Units.SEC, -2}, {Units.KiloGM, 1, Units.M, 2, Units.SEC, -2}, {Units.N, 1, Units.M, 1} }), @@ -774,7 +800,6 @@ public static Stream testAllPossibleUnitFactors() { new Object[][] { {Units.N, 1}, {Units.KiloGM, 1, Units.M, 1, Units.SEC, -2}, - {Units.GM, 1, Units.M, 1, Units.SEC, -2} }), Arguments.of( 3, @@ -785,10 +810,6 @@ public static Stream testAllPossibleUnitFactors() { Qudt.Units.N, 1, Qudt.Units.M, -1 }, - { - Qudt.Units.GM, 1, - Qudt.Units.SEC, -2 - }, { Qudt.Units.KiloGM, 1, Qudt.Units.SEC, -2 @@ -798,12 +819,6 @@ public static Stream testAllPossibleUnitFactors() { Qudt.Units.M, 1, Qudt.Units.M, -2 }, - { - Qudt.Units.M, -2, - Qudt.Units.M, 2, - Qudt.Units.GM, 1, - Qudt.Units.SEC, -2 - }, { Qudt.Units.M, -2, Qudt.Units.M, 2, @@ -1038,7 +1053,7 @@ public static Stream testParseUnit_specificCases() { Set.of(N__M__PER__M__RAD)), Arguments.of("°C", QuantityKinds.Temperature, Set.of(Units.DEG_C)), Arguments.of("°F", QuantityKinds.Temperature, Set.of(Units.DEG_F)), - Arguments.of("γ", QuantityKinds.MagneticField, Set.of(Units.Gamma)), + Arguments.of("γ", QuantityKinds.MagneticField, Set.of(Units.GAMMA)), Arguments.of("Å", QuantityKinds.Length, Set.of(Units.ANGSTROM)), Arguments.of( "cycles/s", QuantityKinds.RotationalFrequency, Set.of(Units.CYC__PER__SEC)), @@ -1060,52 +1075,146 @@ public static Stream testParseUnit_specificCases() { } public static Stream testParseUnit_allUnitsBySymbol() { - return Qudt.allUnits().stream() - .filter(not(Unit::isDeprecated)) - .filter(u -> u.getSymbol().isPresent()) - .filter(u -> !u.equals(UNKNOWN)) - .collect(Collectors.groupingBy(u -> u.getSymbol().get())) - .entrySet() - .stream() - .flatMap( - e -> { - List> partitioned = new ArrayList<>(); - Set unpartitioned = new HashSet<>(e.getValue()); - for (Unit cur : e.getValue()) { - if (unpartitioned.contains(cur)) { - Set newPartition = - unpartitioned.stream() - .filter( - cand -> - cur.getQuantityKinds().stream() - .anyMatch( - qk -> - cand - .getQuantityKinds() - .stream() - .anyMatch( - qk2 -> - qk - .equals( - qk2)))) + List>> all = + Qudt.allUnits().stream() + .filter(not(Unit::isDeprecated)) + .filter(u -> u.getSymbol().isPresent()) + .filter(u -> !u.equals(UNKNOWN)) + .collect(Collectors.groupingBy(u -> u.getSymbol().get())) + .entrySet() + .stream() + .map( + e -> { + List unitsWithSameSymbol = e.getValue(); + Set quantityKinds = + unitsWithSameSymbol.stream() + .flatMap(u -> u.getQuantityKinds().stream()) .collect(Collectors.toSet()); - unpartitioned.removeAll(newPartition); - partitioned.add(newPartition); - } - } - return partitioned.stream(); - }) + Map> expectedUnitsForQuantityKind = + new HashMap<>(); + for (QuantityKind selectedQuantityKind : quantityKinds) { + expectedUnitsForQuantityKind.put( + selectedQuantityKind, + unitsWithSameSymbol.stream() + .filter( + u -> + u.getQuantityKinds() + .contains( + selectedQuantityKind)) + .collect(Collectors.toSet())); + } + return expectedUnitsForQuantityKind; + }) + .toList(); + return all.stream() + .map(Map::entrySet) + .flatMap(Collection::stream) .map( - units -> - Arguments.of( - units.stream() - .findFirst() - .get() - .getSymbol() - .orElse("[no symbol]"), - units.stream().findFirst().get().getQuantityKinds().stream() - .findFirst() - .orElse(null), - units)); + entry -> { + Set expectedUnits = entry.getValue(); + QuantityKind selectedQuantityKind = entry.getKey(); + return Arguments.of( + expectedUnits.stream() + .findFirst() + .get() + .getSymbol() + .orElse("[no symbol]"), + selectedQuantityKind, + expectedUnits); + }); + } + + private static boolean unitsHaveSameQuantityKinds(Unit left, Unit right) { + Set leftQK = left.getQuantityKinds(); + Set rightQK = right.getQuantityKinds(); + return leftQK.equals(rightQK); + } + + @ParameterizedTest + @MethodSource + public void testBestMatchForFactorUnitsComparator( + FactorUnits factorUnits, Unit left, Unit right, int expectedResultSign) { + Comparator cmp = Qudt.bestMatchForFactorUnitsComparator(factorUnits); + int result = cmp.compare(left, right); + float expectedResultSignF = Math.signum(expectedResultSign); // make sure + float resultSignF = Math.signum(result); + if (expectedResultSignF == 0.0f) { + Assertions.assertEquals( + expectedResultSignF, + resultSignF, + "factor units %s\n%s should equally good matches for %s, but %s is wrongly chosen to be better" + .formatted( + factorUnits.toString(), + left, + right, + resultSignF < 0 ? left : right)); + } else { + Unit expectedBetter = null; + Unit expectedWorse = null; + if (expectedResultSignF == 1.0f) { + expectedBetter = right; + expectedWorse = left; + } else if (expectedResultSignF == -1.0f) { + expectedBetter = left; + expectedWorse = right; + } else { + fail("Illegal value provided for expectedResultSign: " + expectedResultSign); + } + if (resultSignF == 0.0) { + Assertions.assertEquals( + Math.signum(expectedResultSign), + Math.signum(result), + "factor units %s\n%s should be a better match than %s, but they are wrongly assessed as equally good matches" + .formatted(factorUnits.toString(), expectedBetter, expectedWorse)); + } else { + Assertions.assertEquals( + Math.signum(expectedResultSign), + Math.signum(result), + "factor units %s\n%s should be a better match than %s, but the inverse is the case" + .formatted(factorUnits.toString(), expectedBetter, expectedWorse)); + } + } + } + + public static Stream testBestMatchForFactorUnitsComparator() { + return Stream.of( + Arguments.of(FactorUnits.ofFactorUnitSpec(M, -3), PER__M3, PER__L, -1), + Arguments.of(FactorUnits.ofFactorUnitSpec(M3, -1), PER__M3, PER__L, -1), + Arguments.of(FactorUnits.ofFactorUnitSpec(L, -1), PER__M3, PER__L, 1), + Arguments.of( + FactorUnits.ofFactorUnitSpec(KiloGM, 1, M, 1, SEC, -2, M, -1), + N__PER__M, + J__PER__M2, + -1), + Arguments.of( + FactorUnits.ofFactorUnitSpec(KiloGM, 1, M, -3), + KiloGM__PER__M3, + GM__PER__DeciM3, + -1), + Arguments.of( + FactorUnits.ofFactorUnitSpec(KiloGM, 1, M, -3), + KiloGM__PER__M3, + GM__PER__L, + -1), + Arguments.of( + FactorUnits.ofFactorUnitSpec(KiloGM, 1, M, -3), + GM__PER__DeciM3, + GM__PER__L, + -1), + Arguments.of( + FactorUnits.ofFactorUnitSpec(KiloGM, 1, M3, -1), + KiloGM__PER__M3, + GM__PER__DeciM3, + -1), + Arguments.of( + FactorUnits.ofFactorUnitSpec(KiloGM, 1, M3, -1), + KiloGM__PER__M3, + GM__PER__L, + -1), + Arguments.of( + FactorUnits.ofFactorUnitSpec(KiloGM, 1, M3, -1), + GM__PER__DeciM3, + GM__PER__L, + -1)); } } diff --git a/qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/GenerateNumericValuesAsXsdDoubleAndXsdDecimal.java b/qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/GenerateNumericValuesAsXsdDoubleAndXsdDecimal.java index b3ac98b5..7c40f70d 100644 --- a/qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/GenerateNumericValuesAsXsdDoubleAndXsdDecimal.java +++ b/qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/GenerateNumericValuesAsXsdDoubleAndXsdDecimal.java @@ -122,10 +122,6 @@ private static void printDeleteQuery(Map> unitsByReplace "PREFIX %s: <%s>\n", Qudt.NAMESPACES.constant.getAbbreviationPrefix(), Qudt.NAMESPACES.constant.getBaseIri()); - System.out.format( - "PREFIX %s: <%s>\n", - Qudt.NAMESPACES.currency.getAbbreviationPrefix(), - Qudt.NAMESPACES.currency.getBaseIri()); System.out.format("DELETE { ?u %s ?m } \n", predicate); System.out.format("WHERE { ?u %s ?m .\n", predicate); System.out.println("\tVALUES ?u {"); @@ -147,10 +143,6 @@ private static String abbreviateIfPossible(String iri) { if (abbrev != null) { return abbrev; } - abbrev = abbreviateIfPossible(iri, Qudt.NAMESPACES.currency); - if (abbrev != null) { - return abbrev; - } return iri; } diff --git a/qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/archive/CheckConversionMultipliers.java b/qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/archive/CheckConversionMultipliers.java index 843f12a4..6dec90a0 100644 --- a/qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/archive/CheckConversionMultipliers.java +++ b/qudtlib-tools/src/main/java/io/github/qudtlib/tools/contributions/archive/CheckConversionMultipliers.java @@ -204,18 +204,18 @@ private static void analyzeUnitsWithDimVector( missingScalingOfAdded.add(nonBaseUnit); if (bases.isEmpty()) { output.println( - "Found unit without isScalingOf or factorUnit, but no base to link it to: " + "Found unit without scalingOf or factorUnit, but no base to link it to: " + nonBaseUnit.getIriAbbreviated()); } else { if (bestBaseOpt.isPresent()) { ttlPrintStream.format( "%s %s %s .\n", nonBaseUnit.getIriAbbreviated(), - QudtNamespaces.qudt.abbreviate(QUDT.isScalingOf.toString()), + QudtNamespaces.qudt.abbreviate(QUDT.scalingOf.toString()), bestBaseOpt.get().getIriAbbreviated()); } else { output.println( - "Found unit without isScalingOf or factorUnit, but no base to link it to after filtering. Candidates were: " + "Found unit without scalingOf or factorUnit, but no base to link it to after filtering. Candidates were: " + unitCollectionToString(bases)); } } diff --git a/qudtlib-vocab/src/main/java/io/github/qudtlib/vocab/QUDT.java b/qudtlib-vocab/src/main/java/io/github/qudtlib/vocab/QUDT.java index c2b6e52e..d7285f23 100644 --- a/qudtlib-vocab/src/main/java/io/github/qudtlib/vocab/QUDT.java +++ b/qudtlib-vocab/src/main/java/io/github/qudtlib/vocab/QUDT.java @@ -584,7 +584,7 @@ public class QUDT { public static final IRI isQuantityKindOf = create("isQuantityKindOf"); /** is scaling of * */ - public static final IRI isScalingOf = create("isScalingOf"); + public static final IRI scalingOf = create("scalingOf"); /** normative reference (ISO) * */ public static final IRI isoNormativeReference = create("isoNormativeReference");