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