You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi. In units.ttl, constants.ttl, prefixes.ttl there are some numbers with the datatype xsd:float. The accuracy of the values intended to represent is impaired by the use of xsd:float, as by definition the semantically represented value is a value, that can be represented with a IEEE 754 32 bit binary floating point number. Literals with lexical representations that do not exactly match a 32 bit binary floating point number are rounded. Following, the lexical representation suggests an accuracy that is not given. For example,
For xsd:float, only the first 7 digits are guaranteed (16 digits in case of xsd:double). Instead, xsd:decimal should be used, as it preserves arbitrary precision. xsd:decimal has the disadvantage to not permit exponential notation. But I think, preserving the accuracy of the numbers is of highest importance for the SI Reference Point, so this disadvantage is acceptable. Using xsd:decimal would also permit to use Turtle shorthand syntax for decimal numbers. Further, as xsd:integer is a subtype of xsd:decimal properties with Integer and Decimal Number values, could get the rdfs:range xsd:decimal, in contrast to xsd:float and xsd:integer that are not in a subtype relation to each other.
Thank you very much.
Using the functions you present in Figure 2 of your manuscript makes the issue evident on our side. For example, querying the prefixes in our SPARQL assistant:
Now, if we run it on a ttl file where data type was changed to xsd:decimal, but keep scientific notation, turtle shorthand notation (as mentioned by @jmkeil, also in issue #59) assumes the value as double, and the query does not return an ActualValue column (but, why?):
If we replace scientific notation, the column appears and values are same as presented, not distorted anymore:
Above mentionned commit (in a separate branch) is just a proposal, I was curious how we could implement that starting from the yaml... The idea is that the scripts themselves are in charge of converting exponents to the correct number of zeros in the string inside the TTL (then it is the user's choice how he wants it to be displayed).
(some PEP8 changes slipped in due to my editor's settings... If you want a cleaner view of the commit, the cog icon offers the way to ignore "whitespaces" diffs)
the value as double, and the query does not return an ActualValue column (but, why?)
STRDT returns null if the lexical value is illegal for the datatype and the triple store seems to skip columns without a value in the first binding. Adding ORDER BY DESC(STR(?value)) will bring it back.
Which triplestore do you use? This seems to be a bug of it, comparing the results of SELECT * WHERE { VALUES (?a ?b) {(1 1) (UNDEF 1)} } and SELECT * WHERE { VALUES (?a ?b) {(UNDEF 1) (1 1)} }.
In my proposal there is minimal intervention to the YAML files, values are read as strings, converted to decimal using the decimal library (which @mgrub mentioned in the last meeting allowed exponent notation) and then stored as xsd:decimal or xsd:integer (according to what is in the YAML) into the TTL files.
Sorry @Crparedes I did not realize you already started (although the name of the branch is perfectly clear and should have warned me !)
The motivation behind my approach was:
to remove as much as possible redundant data in the manually modified YAML (i.e. remove scaling factors, which can be deduced from exponent; and set all types to decimal for homogeneity)
to avoid any possible conversion error at the YAML -> rdflib level, e.g. if you forget to enclose the value in double quotes for constants. Separating between mantissa and exponent makes it impossible to miss.
... also using the Decimal lib, but constructing the input within the script.
I guess that the result is equivalent (except integer vs decimal cases)
Coming new to this repo, I will nevertheless jump in with a bold proposal:
Proposal: an exact-decimal datatype for authoritative numeric values
Problem
SIRP and the experimental CODATA Constants SemWeb service publish numeric values that are exact at source — defining constants are exact by construction following the 2019 SI redefinition; recommended values of measured constants are stated decimals with stated uncertainties; unit conversion factors are exact rationals. Both the values themselves and their associated standard uncertainties need to be representable exactly: an uncertainty such as 1.5×10⁻⁵ carries the same exactness contract as the value it qualifies, and is itself a small-magnitude decimal. The XSD numeric datatypes currently available do not preserve this exactness [1]:
xsd:float and xsd:double silently distort decimal values that have no exact binary representation.
xsd:decimal preserves precision but does not permit exponent notation. Several Planck-scale quantities published by CODATA already exceed the SI prefix range — Planck length is of order 10⁻³⁵ m, Planck time of order 10⁻⁴⁴ s — and the SI prefix range itself, recently extended to 10⁻³⁰ (quecto) and 10³⁰ (quetta) [2], is likely to be pushed further with compound prefixes already envisaged as a future extension [3]. Values requiring 30+ leading zeros in plain decimal notation are not a hypothetical future concern but a present one. This is a sustainability problem, not a stylistic one.
xsd:precisionDecimal would have solved both — it supports exponent notation, arbitrary precision, and special values — but was removed from XSD 1.1 at Candidate Recommendation stage. The W3C Working Group's reason was a laconic statement that "there does not seem to be sufficient consensus in the community for its retention" [4]. The definition survives only as a Working Group Note [5], RDF implementations are not required to support it [1, §2], and to our knowledge no mainstream RDF framework (Jena, RDF4J, rdflib, Oxigraph) recognizes it as a built-in numeric datatype. In practical terms, xsd:precisionDecimal is not available.
Why this matters for SIRP and CODATA Constants
These are authoritative upstream sources. Consumers fall into two groups: SemWeb tooling (SPARQL, SHACL, reasoners) and everything else (Python, R, Julia, Rust, C/C++, Java, SQL, ...). The "everything else" group is dominant in scientific computing. Every existing XSD numeric datatype carries an implicit consumption convention that loses exactness — xsd:float/xsd:double map to native IEEE 754 binary, and xsd:decimal falls back to binary in most consumer pipelines because non-Decimal math libraries demand it. Importantly, the datatype tag itself does not signal to the consumer that the value should be treated as exact.
What is needed is a datatype whose contract is a publisher-side statement of fidelity: this value is exact at our end; no rounding, truncation, or binary approximation has been applied during publication. The datatype clearly signals that the default numeric pipeline (typically IEEE 754 binary) risks degrading precision, and that consumers requiring exactness should reach for arbitrary-precision tooling.
Proposal
Define a datatype — si:exactScientific — whose lexical form is mantissa + e + exponent (e.g. 1.602176634e-19), with arbitrary mantissa precision and arbitrary integer exponent. The value space is the exact rational mantissa × 10^exponent. Lexical form preserves trailing zeros (as precisionDecimal did) so that 1.60e-19 and 1.6000000e-19 are distinguishable in precision even though they denote the same value.
Defining a new datatype, rather than waiting for a possible future W3C process to revisit xsd:precisionDecimal, is justified by the position SIRP and CODATA occupy: as authoritative metrology publishers with a clear need that current XSD types do not meet, and no current indication that the W3C process will re-engage. The lexical form is deliberately identical to what xsd:precisionDecimal would have used, so if and when a standardized type does become available, migration is mechanical.
This datatype does not address:
Symbolic constants such as π or e, which require structural representation (named entity + ratio) as discussed separately. In practice, however, consumers outside symbolic-mathematics tools work with finite-precision approximations of these constants (50, 100, or more decimal places). Such an approximation is itself an exact rational of the form mantissa × 10^exponent and is faithfully representable as si:exactScientific. The publisher states the truncation explicitly; the consumer knows precisely what they have received.
Genuinely binary-native data (instrument output, computational results from binary-float pipelines), for which a hexadecimal-lexical datatype as proposed in [1, §7] would be appropriate. CODATA Constants and SIRP do not produce binary-native data, so this is out of scope here.
Why now
SIRP is in active development, as is CODATA Constants SemWeb publication. Both data models are still mutable. Once consumer codebases harden around the current representations, changing the published format becomes substantially more expensive. The diagnosis is now documented [1]; the SI prefix trajectory shows the magnitude problem will worsen, not improve [2, 3]; and no other authoritative metrology source has yet committed to a representation. The SIRP and CODATA
Constants teams are well-placed to coordinate on a shared convention before independent decisions diverge.
We propose that the two teams join forces on a shared exact-decimal datatype, with the goal of aligning on lexical form and value-space semantics before either project's representation is locked in — by independent decisions, or by users establishing their own ad hoc interpretations of what is currently available from the beta SIRP and experimental CODATA Constants services. A natural deliverable would be a jointly-authored paper in Metrologia or the Data Science Journal, both to document the agreed specification and to seed adoption beyond the two source projects.
A similar proposal was made on the last meeting of the SI Digital Framework task group (2026-03-09, by @mgrub). However, a general response was that it could have negative effects on the interoperability of the data, as it could probably get treated as a typed literal with no numeric meaning, difficulting comparing and filter, or the performing of operations that are well established for adopted XSD datatypes. We could, of course, reopen the discussion.
To me, the current approach by CODATA Constants is good, it uses codata:valueFloat to present numeric values in scientific notation (sxd:float); codata:value for values typed as xsd:string; and codata:valueDecimal to present the calues in the (not so human-friendly, I admit) xsd:decimal. We propose a similar approach in the SI Reference Point, where the si:hasValue will contain the xsd:decimal, and the si:hasValueAsString currently presents the HTML-friendly version of that value. We could consider adding a si:hasValueAsFloat to incorporate the scientific notation version into the knowledge graph. This, I think, was also one of the proposals in the last meeting.
Obviously I was not aware of the preceding discussion. And I realize that I forgot to mention one important part in my proposal: it is intended to complement (not replace!) the values represented as xsd:decimal to support established SemWeb applications and workflows. The new datatype is genuinely a non-standard addition (CODATA's existing pattern uses custom properties with standard XSD datatypes; this proposal is the further step of introducing a non-standard datatype), and the case for it rests on technical gaps that the standard XSD types do not cover:
The first is future-proofing for extreme magnitudes. xsd:decimal preserves exactness but cannot express exponent notation. CODATA already publishes Planck-scale quantities that require 35 to 44 leading zeros in plain decimal form. Values published at the SI Reference Point have not yet reached that magnitude, but that may come in the not so distant future. What today is a reality for the CODATA Constants may soon also face SIRP. And, now, when both services still are in a formative phase, is a good time to look at current potential limitations and hedge for future needs.
The second is a publisher-side fidelity contract. Mantissa-and-exponent notation is the natural form for these values, as the existing si:hasValueAsString channel demonstrates with its typographic styling. The machine-actionable channel currently has no exact equivalent: xsd:decimal cannot express exponent notation, and xsd:float introduces silent binary distortion. si:exactScientific provides an ASCII-mantissa-and-exponent form that mirrors the structure of the existing human-readable channel, exactly preserved.
On the interoperability concern: it is a real point. A custom datatype IRI is, today, opaque to mainstream RDF tooling. But consumers that don't recognise the IRI fall back to RDF's standard behaviour for unknown datatypes -- exposing the lexical form as a typed string. The lexical form is the faithful, lossless representation of the exact value, so no consumer silently receives a corrupted value; they either get datatype-aware operations or a parseable string. In any case, the property name itself signals to a consumer outside the SemWeb context that the value requires extended-precision tooling. The existing xsd:decimal channel continues to serve consumers needing SPARQL-queryable numerics today.
The suggested si:hasValueAsFloat and si:exactScientific would occupy different points in the design space. si:hasValueAsFloat (typed as xsd:float) gives scientific notation that is queryable by mainstream tooling but inherits the already identified problem of binary approximation. si:exactScientific gives scientific notation that is exact but, today, requires fallback handling in tooling that doesn't recognise the IRI. Whether one, the other, or both are appropriate is a design decision for SIRP and CODATA, but the exactness need is not addressed by xsd:float.
My proposal was/is intended to offer a forward-looking perspective and possible solution to a known problem (cf. Keil & Gänßinger) of numeric representation in SemWeb context, where I think that SI and CODATA together have the unique authoritative position and a real use case for making a decisive impact. But, of course, I do not know anything about the considerations and technical aspects behind the current design path. Whether this warrants to reopen the discussion is really up to you. My perspective is really that of a user of the SIRP API and the coming CODATA Constants API (and other), where I have seen this kind of binary distortion of values.
Your proposal of the si:exactScientific typed literals as a complement of the xsd:decimal values, with the possibility of mechanically migrating to xsd:precisionDecimal if it becomes available in the future, sounds more sensible to me now.
Currently, we have implemented the xsd:decimal datatype and are close to releasing the first stable version of the knowledge model. The addition of si:exactScientific is something we should discuss also with members of the task group and, depending on the outcome, implement for upcoming updates.
A few comments and clarifications on the discussions:
Exponential notation is not part of the represented value of a xsd:float literal. It is only a supported way to express a xsd:float values: "1e-3"^^xsd:float is identical to "0.001"^^xsd:float, both represent 0.0000999999974737875163555145263671875 and nothing more. The scientific notation is only a feature of the lexical representation. It would be completely standard compliant for any tool to replace one serialization with the other and serialized RDF graph would still be identical.
The discussion is all the time about xsd:float. I would like to stress that xsd:double would be the much better choice, compared to xsd:float, under the prerequisite that exponential notation should be supported, as it guarantees a precision of 16 digits instead of 7 digits.
I don't see additional value in having a custom datatype value with exponential notation and a property for a string containing the exponential representation in parallel. The lexical representation would look exactly the same. Further the property definition could restrict the string to match a specific regular expression, enforcing adherence to a specific format. Consumers could then consume the string literal in arbitrary way useful for them, without adding even more redundancy into the RDF.
Moreover, I like the idea of proposing the addition of a precises datatype to RDF, supported by these highly authoritative bodies. Currently RDF 1.2 is under development. Not sure if there is still time to provide new feature proposals. In any way, this proposal should be well prepared and coordinated.
Hi @larsbarring.
At the last meeting of the SIDF Task Group, @mgrub brought up the topic of a joint CODATA-BIPM initiative to propose the datatype you described. The topic was well received, and follow-up discussions are expected, hopefully involving also other organizations from the quality infrastructure.
Thanks @Crparedes for the positive feedback, and thanks @mgrub for bringing the topic up at the meeting. I would be happy to provide further input if/when needed. Just say the word.
Activity
Crparedes commentedon Mar 26, 2026
Thank you very much.
Using the functions you present in Figure 2 of your manuscript makes the issue evident on our side. For example, querying the prefixes in our SPARQL assistant:
Shows the reality:

If we change to
xsd:decimaland replace scientific notation, the values remain unaltered (test done in our internal dev server):Crparedes commentedon Mar 26, 2026
The same goes for constants, running:
Produces distorted values:
Now, if we run it on a ttl file where data type was changed to
xsd:decimal, but keep scientific notation, turtle shorthand notation (as mentioned by @jmkeil, also in issue #59) assumes the value as double, and the query does not return anActualValuecolumn (but, why?):If we replace scientific notation, the column appears and values are same as presented, not distorted anymore:
Change some types to decimal
fmeynadier commentedon Mar 27, 2026
Above mentionned commit (in a separate branch) is just a proposal, I was curious how we could implement that starting from the yaml... The idea is that the scripts themselves are in charge of converting exponents to the correct number of zeros in the string inside the TTL (then it is the user's choice how he wants it to be displayed).
fmeynadier commentedon Mar 27, 2026
(some PEP8 changes slipped in due to my editor's settings... If you want a cleaner view of the commit, the cog icon offers the way to ignore "whitespaces" diffs)
jmkeil commentedon Mar 27, 2026
STRDTreturns null if the lexical value is illegal for the datatype and the triple store seems to skip columns without a value in the first binding. AddingORDER BY DESC(STR(?value))will bring it back.jmkeil commentedon Mar 27, 2026
Which triplestore do you use? This seems to be a bug of it, comparing the results of
SELECT * WHERE { VALUES (?a ?b) {(1 1) (UNDEF 1)} }andSELECT * WHERE { VALUES (?a ?b) {(UNDEF 1) (1 1)} }.Crparedes commentedon Mar 27, 2026
@fmeynadier the branch https://github.com/TheBIPM/SI-Reference-Point-2023/tree/77-decimal-datatype associated with this issue generates the decimal datatypes in the serialized TTL files from the YAML and the cuq Python scripts.
In my proposal there is minimal intervention to the YAML files, values are read as strings, converted to decimal using the decimal library (which @mgrub mentioned in the last meeting allowed exponent notation) and then stored as xsd:decimal or xsd:integer (according to what is in the YAML) into the TTL files.
fmeynadier commentedon Mar 27, 2026
Sorry @Crparedes I did not realize you already started (although the name of the branch is perfectly clear and should have warned me !)
The motivation behind my approach was:
... also using the Decimal lib, but constructing the input within the script.
I guess that the result is equivalent (except integer vs decimal cases)
Crparedes commentedon Mar 30, 2026
@jmkeil, we are importing Jena 3.17. This needs to be upgraded and is a pending task.
larsbarring commentedon Apr 28, 2026
Coming new to this repo, I will nevertheless jump in with a bold proposal:
Proposal: an exact-decimal datatype for authoritative numeric values
Problem
SIRP and the experimental CODATA Constants SemWeb service publish numeric values that are exact at source — defining constants are exact by construction following the 2019 SI redefinition; recommended values of measured constants are stated decimals with stated uncertainties; unit conversion factors are exact rationals. Both the values themselves and their associated standard uncertainties need to be representable exactly: an uncertainty such as
1.5×10⁻⁵carries the same exactness contract as the value it qualifies, and is itself a small-magnitude decimal. The XSD numeric datatypes currently available do not preserve this exactness [1]:xsd:floatandxsd:doublesilently distort decimal values that have no exact binary representation.xsd:decimalpreserves precision but does not permit exponent notation. Several Planck-scale quantities published by CODATA already exceed the SI prefix range — Planck length is of order 10⁻³⁵ m, Planck time of order 10⁻⁴⁴ s — and the SI prefix range itself, recently extended to 10⁻³⁰ (quecto) and 10³⁰ (quetta) [2], is likely to be pushed further with compound prefixes already envisaged as a future extension [3]. Values requiring 30+ leading zeros in plain decimal notation are not a hypothetical future concern but a present one. This is a sustainability problem, not a stylistic one.xsd:precisionDecimalwould have solved both — it supports exponent notation, arbitrary precision, and special values — but was removed from XSD 1.1 at Candidate Recommendation stage. The W3C Working Group's reason was a laconic statement that "there does not seem to be sufficient consensus in the community for its retention" [4]. The definition survives only as a Working Group Note [5], RDF implementations are not required to support it [1, §2], and to our knowledge no mainstream RDF framework (Jena, RDF4J, rdflib, Oxigraph) recognizes it as a built-in numeric datatype. In practical terms,xsd:precisionDecimalis not available.Why this matters for SIRP and CODATA Constants
These are authoritative upstream sources. Consumers fall into two groups: SemWeb tooling (SPARQL, SHACL, reasoners) and everything else (Python, R, Julia, Rust, C/C++, Java, SQL, ...). The "everything else" group is dominant in scientific computing. Every existing XSD numeric datatype carries an implicit consumption convention that loses exactness —
xsd:float/xsd:doublemap to native IEEE 754 binary, andxsd:decimalfalls back to binary in most consumer pipelines because non-Decimalmath libraries demand it. Importantly, the datatype tag itself does not signal to the consumer that the value should be treated as exact.What is needed is a datatype whose contract is a publisher-side statement of fidelity: this value is exact at our end; no rounding, truncation, or binary approximation has been applied during publication. The datatype clearly signals that the default numeric pipeline (typically IEEE 754 binary) risks degrading precision, and that consumers requiring exactness should reach for arbitrary-precision tooling.
Proposal
Define a datatype —
si:exactScientific— whose lexical form is mantissa +e+ exponent (e.g.1.602176634e-19), with arbitrary mantissa precision and arbitrary integer exponent. The value space is the exact rationalmantissa × 10^exponent. Lexical form preserves trailing zeros (asprecisionDecimaldid) so that1.60e-19and1.6000000e-19are distinguishable in precision even though they denote the same value.Defining a new datatype, rather than waiting for a possible future W3C process to revisit
xsd:precisionDecimal, is justified by the position SIRP and CODATA occupy: as authoritative metrology publishers with a clear need that current XSD types do not meet, and no current indication that the W3C process will re-engage. The lexical form is deliberately identical to whatxsd:precisionDecimalwould have used, so if and when a standardized type does become available, migration is mechanical.This datatype does not address:
mantissa × 10^exponentand is faithfully representable assi:exactScientific. The publisher states the truncation explicitly; the consumer knows precisely what they have received.Why now
SIRP is in active development, as is CODATA Constants SemWeb publication. Both data models are still mutable. Once consumer codebases harden around the current representations, changing the published format becomes substantially more expensive. The diagnosis is now documented [1]; the SI prefix trajectory shows the magnitude problem will worsen, not improve [2, 3]; and no other authoritative metrology source has yet committed to a representation. The SIRP and CODATA
Constants teams are well-placed to coordinate on a shared convention before independent decisions diverge.
We propose that the two teams join forces on a shared exact-decimal datatype, with the goal of aligning on lexical form and value-space semantics before either project's representation is locked in — by independent decisions, or by users establishing their own ad hoc interpretations of what is currently available from the beta SIRP and experimental CODATA Constants services. A natural deliverable would be a jointly-authored paper in Metrologia or the Data Science Journal, both to document the agreed specification and to seed adoption beyond the two source projects.
References
[1] Keil, J. M. and Gänßinger, M. (2022). The Problem with XSD Binary Floating Point Datatypes in RDF. ESWC 2022.
https://2022.eswc-conferences.org/wp-content/uploads/2022/05/paper_98_Keil_et_al.pdf
[2] Brown, R. J. C. (2023). A further short history of the SI prefixes. Metrologia 60, 013001. https://doi.org/10.1088/1681-7575/ac6afd
[3] Brown, R. J. C. (2019). Considerations on compound SI prefixes. Measurement 140, 237–239.
[4] W3C XML Schema Working Group (2011). W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes — Changes since version 1.0. W3C Candidate Recommendation, 21 July 2011. https://www.w3.org/TR/2011/CR-xmlschema11-2-20110721/datatypes.diff-1.0.html
[5] W3C XML Schema Working Group (2011). An XSD datatype for IEEE floating-point decimal. W3C Working Group Note, 9 June 2011. https://www.w3.org/TR/2011/NOTE-xsd-precisionDecimal-20110609/
Crparedes commentedon Apr 29, 2026
Thank you @larsbarring,
A similar proposal was made on the last meeting of the SI Digital Framework task group (2026-03-09, by @mgrub). However, a general response was that it could have negative effects on the interoperability of the data, as it could probably get treated as a typed literal with no numeric meaning, difficulting comparing and filter, or the performing of operations that are well established for adopted XSD datatypes. We could, of course, reopen the discussion.
To me, the current approach by CODATA Constants is good, it uses
codata:valueFloatto present numeric values in scientific notation (sxd:float);codata:valuefor values typed as xsd:string; andcodata:valueDecimalto present the calues in the (not so human-friendly, I admit) xsd:decimal. We propose a similar approach in the SI Reference Point, where thesi:hasValuewill contain thexsd:decimal, and thesi:hasValueAsStringcurrently presents the HTML-friendly version of that value. We could consider adding asi:hasValueAsFloatto incorporate the scientific notation version into the knowledge graph. This, I think, was also one of the proposals in the last meeting.larsbarring commentedon Apr 29, 2026
Thanks for the response @Crparedes
Obviously I was not aware of the preceding discussion. And I realize that I forgot to mention one important part in my proposal: it is intended to complement (not replace!) the values represented as
xsd:decimalto support established SemWeb applications and workflows. The new datatype is genuinely a non-standard addition (CODATA's existing pattern uses custom properties with standard XSD datatypes; this proposal is the further step of introducing a non-standard datatype), and the case for it rests on technical gaps that the standard XSD types do not cover:The first is future-proofing for extreme magnitudes.
xsd:decimalpreserves exactness but cannot express exponent notation. CODATA already publishes Planck-scale quantities that require 35 to 44 leading zeros in plain decimal form. Values published at the SI Reference Point have not yet reached that magnitude, but that may come in the not so distant future. What today is a reality for the CODATA Constants may soon also face SIRP. And, now, when both services still are in a formative phase, is a good time to look at current potential limitations and hedge for future needs.The second is a publisher-side fidelity contract. Mantissa-and-exponent notation is the natural form for these values, as the existing
si:hasValueAsStringchannel demonstrates with its typographic styling. The machine-actionable channel currently has no exact equivalent:xsd:decimalcannot express exponent notation, andxsd:floatintroduces silent binary distortion.si:exactScientificprovides an ASCII-mantissa-and-exponent form that mirrors the structure of the existing human-readable channel, exactly preserved.On the interoperability concern: it is a real point. A custom datatype IRI is, today, opaque to mainstream RDF tooling. But consumers that don't recognise the IRI fall back to RDF's standard behaviour for unknown datatypes -- exposing the lexical form as a typed string. The lexical form is the faithful, lossless representation of the exact value, so no consumer silently receives a corrupted value; they either get datatype-aware operations or a parseable string. In any case, the property name itself signals to a consumer outside the SemWeb context that the value requires extended-precision tooling. The existing
xsd:decimalchannel continues to serve consumers needing SPARQL-queryable numerics today.The suggested
si:hasValueAsFloatandsi:exactScientificwould occupy different points in the design space.si:hasValueAsFloat(typed asxsd:float) gives scientific notation that is queryable by mainstream tooling but inherits the already identified problem of binary approximation.si:exactScientificgives scientific notation that is exact but, today, requires fallback handling in tooling that doesn't recognise the IRI. Whether one, the other, or both are appropriate is a design decision for SIRP and CODATA, but the exactness need is not addressed byxsd:float.My proposal was/is intended to offer a forward-looking perspective and possible solution to a known problem (cf. Keil & Gänßinger) of numeric representation in SemWeb context, where I think that SI and CODATA together have the unique authoritative position and a real use case for making a decisive impact. But, of course, I do not know anything about the considerations and technical aspects behind the current design path. Whether this warrants to reopen the discussion is really up to you. My perspective is really that of a user of the SIRP API and the coming CODATA Constants API (and other), where I have seen this kind of binary distortion of values.
Crparedes commentedon May 11, 2026
Sorry for the very late reply @larsbarring,
Your proposal of the
si:exactScientifictyped literals as a complement of thexsd:decimalvalues, with the possibility of mechanically migrating toxsd:precisionDecimalif it becomes available in the future, sounds more sensible to me now.Currently, we have implemented the
xsd:decimaldatatype and are close to releasing the first stable version of the knowledge model. The addition ofsi:exactScientificis something we should discuss also with members of the task group and, depending on the outcome, implement for upcoming updates.jmkeil commentedon May 12, 2026
A few comments and clarifications on the discussions:
"1e-3"^^xsd:floatis identical to"0.001"^^xsd:float, both represent0.0000999999974737875163555145263671875and nothing more. The scientific notation is only a feature of the lexical representation. It would be completely standard compliant for any tool to replace one serialization with the other and serialized RDF graph would still be identical.Moreover, I like the idea of proposing the addition of a precises datatype to RDF, supported by these highly authoritative bodies. Currently RDF 1.2 is under development. Not sure if there is still time to provide new feature proposals. In any way, this proposal should be well prepared and coordinated.
2 remaining items
Merge pull request #89 from TheBIPM/77-decimal-datatype
Crparedes commentedon May 13, 2026
Reopening until we deploy the updated files
Crparedes commentedon Jun 3, 2026
Hi @larsbarring.
At the last meeting of the SIDF Task Group, @mgrub brought up the topic of a joint CODATA-BIPM initiative to propose the datatype you described. The topic was well received, and follow-up discussions are expected, hopefully involving also other organizations from the quality infrastructure.
larsbarring commentedon Jun 4, 2026
Thanks @Crparedes for the positive feedback, and thanks @mgrub for bringing the topic up at the meeting. I would be happy to provide further input if/when needed. Just say the word.
Crparedes commentedon Jun 5, 2026
This is very kind of you @larsbarring, thank you very much!