diff --git a/docs/src/paradox/02-knora-ontologies/knora-base.md b/docs/src/paradox/02-knora-ontologies/knora-base.md index 0d2e46d805..f13bcb51f3 100644 --- a/docs/src/paradox/02-knora-ontologies/knora-base.md +++ b/docs/src/paradox/02-knora-ontologies/knora-base.md @@ -428,6 +428,17 @@ regardless of the calendar in which they were entered. Properties: : The precision of the end of the period. +##### TimeValue + +A Knora time value represents a precise moment in time in the Gregorian +calendar. Since nanosecond precision can be included, it is suitable +for use as a timestamp. Properties: + +`valueHasTimeStamp` (1) + +: An `xsd:dateTimeStamp`, stored as an `xsd:dateTime` (because SPARQL + does not support `xsd:dateTimeStamp`). + ##### IntValue Represents an integer. Property: @@ -933,6 +944,8 @@ Standoff data type tags are subclasses of `ValueBase` classes. is stored in the same form that is used for `kb:IntervalValue`. See @ref:[IntervalValue](#intervalvalue). * `StandoffBooleanTag` Indicates that a substring represents a Boolean, which is stored in the same form that is used for `kb:BooleanValue`. See @ref:[BooleanValue](#booleanvalue). +* `StandoffTimeTag` Indicates that a substring represents a timestamp, which is stored + in the same form that is used for `kb:TimeValue`. See @ref:[TimeValue](#timevalue). ##### StandoffLinkTag diff --git a/docs/src/paradox/03-apis/api-v1/xml-to-standoff-mapping.md b/docs/src/paradox/03-apis/api-v1/xml-to-standoff-mapping.md index 0f4c904d85..264c69e071 100644 --- a/docs/src/paradox/03-apis/api-v1/xml-to-standoff-mapping.md +++ b/docs/src/paradox/03-apis/api-v1/xml-to-standoff-mapping.md @@ -280,6 +280,8 @@ Knora allows the use of all its value types as standoff data types type attribute, e.g. `1.1,2.2`). - `knora-base:StandoffBooleanTag`: Represents a Boolean value (`true` or `false` must be submitted in the data type attribute). +- `knora-base:StandoffTimeTag`: Represents a timestamp value (an `xsd:dateTimeStamp` + must be submitted in the data type attribute). The basic idea is that parts of a text can be marked up in a way that allows using Knora's built-in data types. In order to do so, the typed diff --git a/docs/src/paradox/05-internals/development/updating-repositories.md b/docs/src/paradox/05-internals/development/updating-repositories.md index aa3d04f73d..d9a0d59a25 100644 --- a/docs/src/paradox/05-internals/development/updating-repositories.md +++ b/docs/src/paradox/05-internals/development/updating-repositories.md @@ -37,6 +37,9 @@ with existing data, the following must happen: existing repositories so that they are compatible with the code changes introduced in the pull request. +The order of version numbers must correspond to the order in which the pull requests +are merged. + ## Adding an Upgrade Plugin An upgrade plugin is a Scala class that extends `UpgradePlugin`. The name of the plugin diff --git a/knora-ontologies/knora-base.ttl b/knora-ontologies/knora-base.ttl index fd0847c0c7..d5f19ef41c 100644 --- a/knora-ontologies/knora-base.ttl +++ b/knora-ontologies/knora-base.ttl @@ -33,7 +33,7 @@ :attachedToProject knora-admin:SystemProject ; - :ontologyVersion "knora-base v6" . + :ontologyVersion "knora-base v7" . @@ -1535,6 +1535,18 @@ +### http://www.knora.org/ontology/knora-base#valueHasTimeStamp + +:valueHasTimeStamp rdf:type owl:DatatypeProperty ; + + rdfs:subPropertyOf :valueHas ; + + :subjectClassConstraint :TimeBase ; + + :objectDatatypeConstraint xsd:dateTime . + + + ### http://www.knora.org/ontology/knora-base#valueHasListNode :valueHasListNode rdf:type owl:ObjectProperty ; @@ -1546,7 +1558,6 @@ :objectClassConstraint :ListNode . - ### http://www.knora.org/ontology/knora-base#valueHasOrder :valueHasOrder rdf:type owl:DatatypeProperty ; @@ -2008,6 +2019,24 @@ rdfs:comment "Represents a time interval, e.g. in an audio recording"@en . +:TimeBase rdf:type owl:Class ; + + rdfs:subClassOf :ValueBase , + [ rdf:type owl:Restriction ; + owl:onProperty :valueHasTimeStamp ; + owl:cardinality "1"^^xsd:nonNegativeInteger + ] . + + +### http://www.knora.org/ontology/knora-base#IntervalValue + +:TimeValue rdf:type owl:Class ; + + rdfs:subClassOf :Value , + :TimeBase ; + + rdfs:comment "Represents a timestamp"@en . + ### http://www.knora.org/ontology/knora-base#LinkObj @@ -2431,6 +2460,16 @@ rdfs:comment "Represents an interval in a TextValue"@en . +### http://www.knora.org/ontology/knora-base#StandoffTimeTag + +:StandoffTimeTag rdf:type owl:Class ; + + rdfs:subClassOf :StandoffDataTypeTag, + :TimeBase ; + + rdfs:comment "Represents a timestamp in a TextValue"@en . + + ### http://www.knora.org/ontology/knora-base#StandoffBooleanTag :StandoffBooleanTag rdf:type owl:Class ; diff --git a/knora-ontologies/salsah-gui.ttl b/knora-ontologies/salsah-gui.ttl index 6c183c0f51..8e5bde0478 100644 --- a/knora-ontologies/salsah-gui.ttl +++ b/knora-ontologies/salsah-gui.ttl @@ -141,6 +141,13 @@ +### http://www.knora.org/ontology/salsah-gui#TimeStamp + +:TimeStamp rdf:type :Guielement , + owl:NamedIndividual . + + + ### http://www.knora.org/ontology/salsah-gui#List :List rdf:type :Guielement , diff --git a/salsah1/src/public/js/00_init_javascript.js b/salsah1/src/public/js/00_init_javascript.js index d90d93f465..2980d51c60 100644 --- a/salsah1/src/public/js/00_init_javascript.js +++ b/salsah1/src/public/js/00_init_javascript.js @@ -70,7 +70,6 @@ var VALTYPE_FLOAT = "http://www.knora.org/ontology/knora-base#DecimalValue"; var VALTYPE_DATE = "http://www.knora.org/ontology/knora-base#DateValue"; var VALTYPE_PERIOD = 5; var VALTYPE_RESPTR = "http://www.knora.org/ontology/knora-base#LinkValue"; -var VALTYPE_TIME = "http://www.knora.org/ontology/knora-base#TimeValue"; var VALTYPE_INTERVAL = "http://www.knora.org/ontology/knora-base#IntervalValue"; var VALTYPE_GEOMETRY = "http://www.knora.org/ontology/knora-base#GeomValue"; var VALTYPE_COLOR = "http://www.knora.org/ontology/knora-base#ColorValue"; @@ -81,6 +80,7 @@ var VALTYPE_RICHTEXT = "http://www.knora.org/ontology/knora-base#TextValue"; var VALTYPE_GEONAME = 15; var VALTYPE_URI = "http://www.knora.org/ontology/knora-base#UriValue"; var VALTYPE_BOOLEAN = "http://www.knora.org/ontology/knora-base#BooleanValue"; +var VALTYPE_TIME = "http://www.knora.org/ontology/knora-base#TimeValue"; var RESOURCE_TYPE_REGION = "http://www.knora.org/ontology/knora-base#Region"; diff --git a/salsah1/src/public/js/03_showval.js b/salsah1/src/public/js/03_showval.js index cf40c6a386..b654ce383c 100644 --- a/salsah1/src/public/js/03_showval.js +++ b/salsah1/src/public/js/03_showval.js @@ -20,7 +20,7 @@ SALSAH.showval = function(value_container, prop, value_index, options) { - //console.log("in showval: valtype is " + prop.valuetype_id); + // console.log("in showval: valtype is " + prop.valuetype_id); switch (prop.valuetype_id) { // this value type is mot used anymore: every text is a richtext now /*case VALTYPE_TEXT: { @@ -41,6 +41,10 @@ SALSAH.showval = function(value_container, prop, value_index, options) value_container.append(prop.values[value_index]); break; } + case VALTYPE_TIME: { + value_container.append(prop.values[value_index]); + break; + } case VALTYPE_BOOLEAN: { var checkbox = $('', { type: "checkbox" @@ -166,11 +170,6 @@ SALSAH.showval = function(value_container, prop, value_index, options) } break; } - case VALTYPE_TIME: { - value_container.timeobj('init', prop.values[value_index]); - //value_container.append(prop.values[value_index]); - break; - } case VALTYPE_INTERVAL: { //value_container.append(prop.values[value_index]); value_container.timeobj('init', prop.values[value_index]); diff --git a/salsah1/src/public/js/jquery.editvalue.js b/salsah1/src/public/js/jquery.editvalue.js index 1cf29c3d2a..457273a3ab 100644 --- a/salsah1/src/public/js/jquery.editvalue.js +++ b/salsah1/src/public/js/jquery.editvalue.js @@ -101,6 +101,10 @@ ele.append(settings.property.values[value_index]); break; } + case VALTYPE_TIME: { + ele.append(settings.property.values[value_index]); + break; + } case VALTYPE_DATE: { ele.dateobj('init', settings.property.values[value_index]); break; @@ -189,11 +193,6 @@ } break; } - case VALTYPE_TIME: { - ele.timeobj('init', settings.property.values[value_index]); - //ele.append(settings.property.values[value_index]); - break; - } case VALTYPE_INTERVAL: { //ele.append(settings.property.values[value_index]); ele.append('VALTYPE_INTERVAL: NOT YET IMPLEMENTED!'); @@ -510,6 +509,7 @@ postdata[VALTYPE_INTEGER] = postdata[VALTYPE_TEXT]; postdata[VALTYPE_FLOAT] = postdata[VALTYPE_TEXT]; + postdata[VALTYPE_TIME] = postdata[VALTYPE_TEXT]; postdata[VALTYPE_RICHTEXT] = function(value, is_new_value) { var data = {}; diff --git a/salsah1/src/public/js/jquery.extsearch.js b/salsah1/src/public/js/jquery.extsearch.js index 709965db1e..6cb0edfab5 100644 --- a/salsah1/src/public/js/jquery.extsearch.js +++ b/salsah1/src/public/js/jquery.extsearch.js @@ -268,6 +268,17 @@ valfield.append($('', {'type': 'text', name: 'searchval', size: 16, maxlength: 32}).addClass('propval').data('gui_element', 'text')); break; } + case VALTYPE_TIME: { // we use gui_element = "text" + compop.append($('