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

1from rdflib import XSD 

2 

3from heritrace.utils.datatypes_validation import * 

4 

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 

12 

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 ] 

49 

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]