Coverage for heritrace / utils / datatypes.py: 100%
6 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-21 12:56 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-21 12:56 +0000
1# SPDX-FileCopyrightText: 2025 Arcangelo Massari <arcangelo.massari@unibo.it>
2#
3# SPDX-License-Identifier: ISC
5from rdflib import XSD
7from heritrace.utils.datatypes_validation import *
9def get_datatype_options():
10 """
11 Returns an ordered list of datatype options with human-readable names mapped to their XSD URIs.
12 This function requires Flask-Babel to be initialized for translations.
13 Ordered by frequency of use (most common first).
14 """
15 from flask_babel import gettext
17 return [
18 # Most common types first
19 {"label": gettext("Text (string)"), "uri": str(XSD.string)},
20 {"label": gettext("Web address (URL)"), "uri": str(XSD.anyURI)},
21 {"label": gettext("Whole number (integer)"), "uri": str(XSD.integer)},
22 {"label": gettext("True or False (boolean)"), "uri": str(XSD.boolean)},
23 {"label": gettext("Date (YYYY-MM-DD)"), "uri": str(XSD.date)},
24 {"label": gettext("Decimal number"), "uri": str(XSD.decimal)},
25 {"label": gettext("Date and Time (YYYY-MM-DDThh:mm:ss)"), "uri": str(XSD.dateTime)},
26 {"label": gettext("Year (YYYY)"), "uri": str(XSD.gYear)},
27 {"label": gettext("Floating point number"), "uri": str(XSD.float)},
28 {"label": gettext("Time (hh:mm:ss)"), "uri": str(XSD.time)},
29 {"label": gettext("Normalized text (no line breaks)"), "uri": str(XSD.normalizedString)},
30 {"label": gettext("Language code (e.g., en, it)"), "uri": str(XSD.language)},
31 {"label": gettext("Double precision floating point number"), "uri": str(XSD.double)},
32 {"label": gettext("Tokenized text (single word)"), "uri": str(XSD.token)},
33 # Less common numeric types
34 {"label": gettext("Non-negative integer (0 or positive)"), "uri": str(XSD.nonNegativeInteger)},
35 {"label": gettext("Positive integer (greater than 0)"), "uri": str(XSD.positiveInteger)},
36 {"label": gettext("Non-positive integer (0 or negative)"), "uri": str(XSD.nonPositiveInteger)},
37 {"label": gettext("Negative integer"), "uri": str(XSD.negativeInteger)},
38 {"label": gettext("Long integer"), "uri": str(XSD.long)},
39 {"label": gettext("Short integer"), "uri": str(XSD.short)},
40 {"label": gettext("Byte-sized integer"), "uri": str(XSD.byte)},
41 {"label": gettext("Unsigned integer"), "uri": str(XSD.unsignedInt)},
42 {"label": gettext("Unsigned long integer"), "uri": str(XSD.unsignedLong)},
43 {"label": gettext("Unsigned short integer"), "uri": str(XSD.unsignedShort)},
44 {"label": gettext("Unsigned byte"), "uri": str(XSD.unsignedByte)},
45 # Date/time variations
46 {"label": gettext("Month (MM)"), "uri": str(XSD.gMonth)},
47 {"label": gettext("Day of the month (DD)"), "uri": str(XSD.gDay)},
48 {"label": gettext("Duration (e.g., P1Y2M3DT4H5M6S)"), "uri": str(XSD.duration)},
49 # Rarely used types
50 {"label": gettext("Hexadecimal binary"), "uri": str(XSD.hexBinary)},
51 {"label": gettext("Base64 encoded binary"), "uri": str(XSD.base64Binary)},
52 ]
54DATATYPE_MAPPING = [
55 [XSD.string, validate_string, "text"],
56 # Una stringa che non può contenere caratteri di interruzione (ad es. newline).
57 [XSD.normalizedString, validate_normalizedString, "text"],
58 [XSD.integer, validate_integer, "number"],
59 [XSD.int, validate_integer, "number"],
60 [XSD.positiveInteger, validate_positive_integer, "number"],
61 [XSD.negativeInteger, validate_negative_integer, "number"],
62 [XSD.nonNegativeInteger, validate_non_negative_integer, "number"],
63 [XSD.nonPositiveInteger, validate_non_positive_integer, "number"],
64 # Intero compreso tra -128 e 127
65 [XSD.byte, validate_byte, "number"],
66 # Intero compreso tra -32,768 e 32,767
67 [XSD.short, validate_short, "number"],
68 # Intero compreso tra -2,147,483,648 e 2,147,483,647 (Nota: questa definizione può variare tra le implementazioni, ma in generale, un long è spesso equivalente a un int a 32 bit in molti linguaggi.)
69 [XSD.long, validate_long, "number"],
70 # Intero compreso tra 0 e 255
71 [XSD.unsignedByte, validate_unsigned_byte, "number"],
72 # Intero compreso tra 0 e 65,535
73 [XSD.unsignedShort, validate_unsigned_short, "number"],
74 # Intero compreso tra 0 e 4,294,967,295 (anche qui, come per long, la definizione può variare.)
75 [XSD.unsignedLong, validate_unsigned_long, "number"],
76 # Intero compreso tra 0 e 4,294,967,295
77 [XSD.unsignedInt, validate_unsigned_int, "number"],
78 [XSD.float, validate_float, "number"],
79 # Un numero in virgola mobile doppia precisione
80 [XSD.double, validate_double, "number"],
81 # Un numero decimale esatto
82 [XSD.decimal, validate_decimal, "number"],
83 # Una durata nel formato PnYnMnDTnHnMnS, dove P è il designatore di periodo.
84 [XSD.duration, validate_duration, "text"],
85 # Una durata limitata ai giorni, ore, minuti e secondi.
86 [XSD.dayTimeDuration, validate_dayTimeDuration, "text"],
87 # Una durata limitata agli anni e ai mesi.
88 [XSD.yearMonthDuration, validate_yearMonthDuration, "text"],
89 [XSD.dateTime, validate_dateTime, "datetime-local"],
90 [XSD.dateTimeStamp, validate_dateTimeStamp, "datetime-local"],
91 # Un anno gregoriano, ad es. 2023.
92 [XSD.gYear, validate_gYear, "number"],
93 # Un anno e un mese gregoriano, ad es. 2023-09.
94 [XSD.gYearMonth, validate_gYearMonth, "month"],
95 [XSD.date, validate_date, "date"],
96 [XSD.time, validate_time, "time"],
97 [XSD.hour, validate_hour, "time"],
98 # Offset del fuso orario, come +05:00.
99 [XSD.timezoneOffset, validate_timezoneOffset, "time"],
100 [XSD.minute, validate_minute, "time"],
101 [XSD.second, validate_second, "time"],
102 [XSD.boolean, validate_boolean, "checkbox"],
103 # Sequenza binaria in esadecimale
104 [XSD.hexBinary, validate_hexBinary, "password"],
105 # Sequenza binaria codificata in Base64.
106 [XSD.base64Binary, validate_base64Binary, "password"],
107 [XSD.anyURI, validate_url, "url"],
108 [XSD.QName, validate_QName, "text"],
109 [XSD.ENTITIES, validate_ENTITIES, "text"],
110 [XSD.ENTITY, validate_ENTITY, "text"],
111 [XSD.ID, validate_ID, "text"],
112 [XSD.IDREF, validate_IDREF, "text"],
113 [XSD.IDREFS, validate_IDREFS, "text"],
114 [XSD.NCName, validate_NCName, "text"],
115 [XSD.NMTOKEN, validate_NMTOKEN, "text"],
116 [XSD.NMTOKENS, validate_NMTOKENS, "text"],
117 [XSD.NOTATION, validate_NOTATION, "text"],
118 [XSD.Name, validate_Name, "text"],
119]