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

1# SPDX-FileCopyrightText: 2025 Arcangelo Massari <arcangelo.massari@unibo.it> 

2# 

3# SPDX-License-Identifier: ISC 

4 

5from rdflib import XSD 

6 

7from heritrace.utils.datatypes_validation import * 

8 

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 

16 

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 ] 

53 

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]