From 517c6469e35f147aca9ae767fdf198a97d3874a8 Mon Sep 17 00:00:00 2001
From: Gregg Kellogg
the properties The property value of an annotation is that defined in the metadata, unless otherwise noted.Annotating Tables
name, title, and dc:description are used to create the name, titles, and dc:description annotations on the column in the data model. The datatype property is an inherited property that affects the value of each cell in that column (see for more on inherited properties).
Metadata Format
@@ -244,7 +243,7 @@ Metadata Format
This section defines a set of properties and permitted values for annotating tabular data, and how these properties should be interpreted by applications.
- A metadata document is a JSON document which holds an object at the top level. This object is a description object of either a group of tables or a single table. A description object describes a component of the annotated tabular data model (a group of tables, a table, a column, a row, or a cell) and has one or more properties are mapped into properties on that component. Within a metadata document, description objects are JSON objects describing group of tables, tables, and columns. Additional JSON objects, not part of the annotated tabular data model, are used to describe tableSchemas, dialect descriptions and transformation definitions. + A metadata document is a JSON document which holds an object at the top level. This object is a description object of either a group of tables or a single table. A description object describes a component of the annotated tabular data model (a group of tables, a table, a column, a row, or a cell) and has one or more properties are mapped into properties on that component. Within a metadata document, description objects are JSON objects describing group of tables, tables, and columns. Additional JSON objects, not part of the annotated tabular data model, are used to describe Schemas, dialect descriptions and transformation definitions.
name of the column and the value is derived from the value of the cell in that column in the row that is currently being processed, namely one of:
+ null_sourceRow_sourceRow is set to the source number of the row that is currently being processed; this usually varies from _row by skip rows and header rows_name_name is set to the URI decoded property value of the name property on the cell column that is currently being processed. (Percent-decoding is necessary as name may have been encoded if taken from title; this prevents double percent-encoding.)
+ _name is set to the URI decoded column name annotation, as defined in [[!tabular-data-model]], for the column that is currently being processed. (Percent-decoding is necessary as name may have been encoded if taken from title; this prevents double percent-encoding.)
- The property value of a URI template property is only available when processing individual cells in a table, usually while converting tables as defined in [[!tabular-data-model]]. The value is the result of: + The annotation value is the result of:
- The property value of a natural language property is an object whose properties are language codes and where the values of those properties are an array of strings (see Language Maps in [[!JSON-LD]]). + The annotation value of a natural language property is an object whose properties are language codes and where the values of those properties are an array of strings (see Language Maps in [[!JSON-LD]]).
- When extracting a property value from a metadata that will have already been merged, a natural language property will already have this form. + When extracting a annotation value from a metadata that will have already been merged, a natural language property will already have this form.
- The property value of a boolean atomic property is false if unset; otherwise, the property value of an atomic property is that set in metadata or null, if unset. Processors MUST raise an error if a property is set to an invalid value type, such as a boolean atomic property being set to the number 1 or a numeric atomic property being set to the string "3.1415".
+ The annotation value of a boolean atomic property is false if unset; otherwise, the annotation value of an atomic property is normalized value of that property, or null, if unset. Processors MUST raise an error if a property is set to an invalid value type, such as a boolean atomic property being set to the number 1 or a numeric atomic property being set to the string "3.1415".
"rtl", "ltr" or "default". Indicates whether the tables in the group should be displayed with the first column on the right, on the left, or based on the first character in the table that has a specific direction. The value of this property becomes the value of the direction annotation for all the tables in the table group. See Bidirectional Tables in [[!tabular-data-model]] for details.
- tableSchemaAn object property that provides a single schema description as described in , used as the default for all the tables in the group. This may be provided as an embedded object within the JSON metadata or as a URL reference to a separate JSON schema document.
tableSchemaAn object property that provides a single schema description as described in . This may be provided as an embedded object within the JSON metadata or as a URL reference to a separate JSON schema document. If a table description is within a table group description, the tableSchema from that table group acts as the default for this property.
The property value of a tableSchema is that defined in the table description, if any, or that defined in the table group description, if any, or null.
If a tableSchema is not declared in table description, it may be declared on the table group description, which is then used as the Schema for this table description.
transformationsAs defined for table groups. The value of this property becomes the value of the transformations annotation for this table.
- A tableSchema is a definition of a tabular format that may be common to multiple tables. For example, multiple tables from different sources may have the same columns and be designed such that they can be aggregated together. + A Schema is a definition of a tabular format that may be common to multiple tables. For example, multiple tables from different sources may have the same columns and be designed such that they can be aggregated together.
- A schema description is a JSON object that encodes the information about a schema, which describes the structure of a table. All the properties of a schema description are optional. + A schema description is a JSON object that encodes the information about a schema, which describes the structure of a table. All the properties of a schema description are optional.
columnsresourceA link property holding a URL that is the identifier for a specific table that is being referenced. If this property is present then schemaReference MUST NOT be present. The table group MUST contain a table whose url annotation is identical to the property value of this property. That table is the referenced table.
A link property holding a URL that is the identifier for a specific table that is being referenced. If this property is present then schemaReference MUST NOT be present. The table group MUST contain a table whose url annotation is identical to the expanded value of this property. That table is the referenced table.
schemaReferenceA link property holding a URL that is the identifier for a schema that is being referenced. If this property is present then resource MUST NOT be present. The table group MUST contain a table with a tableSchema having a @id that is identical to the property value of this property, and there MUST NOT be more than one such table. That table is the referenced table.
A link property holding a URL that is the identifier for a schema that is being referenced. If this property is present then resource MUST NOT be present. The table group MUST contain a table with a tableSchema having a @id that is identical to the expanded value of this property, and there MUST NOT be more than one such table. That table is the referenced table.
columnReference
For ease of reference within URI template properties, column names are restricted as defined in Variables in [[!URI-TEMPLATE]] with the additional provision that names beginning with "_" are reserved by this specification and MUST NOT be used.
The property value of name is that defined within metadata, if it exists. Otherwise, it is the first value from the property value of title, having the same language tag as default language or und if not specified, percent-encoded as necessary to conform to the syntactic requirements as a string without language, as defined in [[!RFC3986]]. Otherwise, it is the string "_col.[N]" where [N] is the column number.
+
The name annotation in [[!tabular-data-model]] defaults to the first value from the titles annotation, having the same language tag as default language or und if not specified as a name property, percent-encoded as necessary to conform to the syntactic requirements as a string without language, as defined in [[!RFC3986]]. Otherwise, it is the string "_col.[N]" where [N] is the column number.
suppressOutput
This allows a cell value to define one or more RDF resources value of a cell instead of a literal values, as defined in [[rdf-concepts]]. For example, if the value were "{#reference}", each cell value of a column named reference would be used to create a URI such as http://example.com/#1234, if 1234 were a cell value of that column.
valueUrl is typically defined on a column description. If defined on a schema description, table description or table group description, care must be taken to ensure that transformed cell values maintain an appropriate semantic relationship.
The property value of valueUrl is null if the cell value is null and the cell column is not a virtual column.
The value URL annotation is null if the cell value is null and the cell column is not a virtual column.
The value of an inherited property is the first value, if any, found by looking in the current description object through all of its containing objects: a inherited property defined in a column description takes precedence of one defined in a schema description, which in turn takes precedence of one defined in a table description, which in turn takes precedence of one defined in a table group description.
@@ -1403,10 +1402,9 @@Dialect descriptions do not provide a mechanism for handling CSV files in which there are multiple tables within a single file (eg separated by empty lines).
-The property value of a dialect description is that defined in the table description, if any, or that defined in the table group description, if any, or the default defined for that property.
-- The default dialect description for CSV files is: -
++ The default dialect description for CSV files is: +
{
diff --git a/syntax/index.html b/syntax/index.html
index dd665d5e..ea58f120 100644
--- a/syntax/index.html
+++ b/syntax/index.html
@@ -165,7 +165,7 @@ Introduction
Tabular Data Models
- This section defines an annotated tabular data model: a model for tables that are annotated with metadata. Annotations provide information about the cells, rows, columns, tables, and groups of tables with which they are associated. The values of these annotations may be lists, structured objects, or atomic values. Core annotations are those that affect the behavior of processors defined in this specification, but other annotations may also be present on any of the components of the model.
+ This section defines an annotated tabular data model: a model for tables that are annotated with metadata. Annotations provide information about the cells, rows, columns, tables, and groups of tables with which they are associated. The values of these annotations may be lists, structured objects, or atomic values. Core annotations are those that affect the behavior of processors defined in this specification, but other annotations may also be present on any of the components of the model.
Annotations may be described directly in [[!tabular-metadata]], be embedded in a tabular data file, or created during the process of generating an annotated table.
@@ -281,9 +281,9 @@
Cells
- ordered — a boolean that, if the value of this cell is a list, indicates whether the order of that list should be preserved or not
- errors — a (possibly empty) list of validation errors generated while parsing the value of the cell
- text direction — which direction the text within the cell should be displayed, as described in
- - about URL — a URL for the entity that this cell provides information about, or
null
- - property URL — a URL for the property that this cell provides, or
null
- - value URL — a URL for this cell's value, or
null
+ - about URL — a URL for the entity that this cell provides information about, or
null. The value of this annotation is derived as described in .
+ - property URL — a URL for the property that this cell provides, or
null. The value of this annotation is derived as described in .
+ - value URL — a URL for this cell's value, or
null. The value of this annotation is derived as described in .
There presence or absence of quotes around a value within a CSV file is a syntactic detail that is not reflected in the tabular data model. In other words, there is no distinction in the model between the second value in a,,z and the second value in a,"",z.
From b0480262fa2a07dc1023d3679637c771a6767390 Mon Sep 17 00:00:00 2001
From: Gregg Kellogg
Date: Thu, 9 Apr 2015 10:05:25 -0700
Subject: [PATCH 02/18] Remove detail about how annotations are derived from
the model document.
---
syntax/index.html | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/syntax/index.html b/syntax/index.html
index 272d321c..dec5f88f 100644
--- a/syntax/index.html
+++ b/syntax/index.html
@@ -229,23 +229,23 @@ Columns
A column represents a vertical arrangement of cells within a table. The core annotations of a column are:
- - about URL — the expected about URL URI template used to create a URL identifier for each value of cell in this column relative to the row in which it is contained, as defined in [[!tabular-metadata]].
+ - about URL — the about URL URI template used to create a URL identifier for each value of cell in this column relative to the row in which it is contained, as defined in [[!tabular-metadata]].
- cells — the list of cells in the column. A column MUST contain one cell from each row in the table. The order of the cells in the list MUST match the order of the rows in which they appear within the rows for the associated table.
- datatype — the expected datatype for the values of cells in this column, as defined in [[!tabular-metadata]].
- - default — the default value for cells whose string value is an empty string, as defined in [[!tabular-metadata]].
- - lang — the expected language for the values of cells in this column, as defined in [[!tabular-metadata]].
+ - default — the default value for cells whose string value is an empty string.
+ - lang — the expected language for the values of cells in this column.
- name — the name of the column.
- - null — the string or strings which cause the value of cells having string value matching any of these values to be
null, as defined in [[!tabular-metadata]].
+ - null — the string or strings which cause the value of cells having string value matching any of these values to be
null.
- number — the position of the column amongst the columns for the associated table, starting from 1.
- - property URL — the expected property URL URI template used to create a URL identifier for the property of each value of cell in this column relative to the row in which it is contained, as defined in [[!tabular-metadata]].
+ - property URL — the expected property URL URI template used to create a URL identifier for the property of each value of cell in this column relative to the row in which it is contained, as defined in [[!tabular-metadata]].
- required — a boolean that indicates that values of cells in this column MUST NOT be empty.
- - separator — a string value used to create multiple values of cells in this column by splitting the string value on the separator, as defined in [[!tabular-metadata]].
+ - separator — a string value used to create multiple values of cells in this column by splitting the string value on the separator.
- source number — the position of the column in the file at the url of the table, or
null.
- suppress output — a boolean that indicates whether or not this column should be suppressed in any output generated from converting the table, as described in .
- table — the table in which the column appears.
- - text direction — the indicator of the text direction values of cells in this column, as described in and [[!tabular-metadata]].
- - titles — any number of human-readable titles for the column, each of which has an associated language.
- - value URL — the expected value URL URI template used to create the URL identifier for the value of each cell in this, as defined in [[!tabular-metadata]].
+ - text direction — the indicator of the text direction values of cells in this column, as described in .
+ - titles — any number of human-readable titles for the column, each of which has an associated language represented as an object whose properties MUST be language codes as defined by [[!BCP47]] and whose values are arrays of strings related to that language.
+ - value URL — the expected value URL URI template used to create the URL identifier for the value of each cell in this, as defined in [[!tabular-metadata]].
- virtual — a boolean that indicates whether the column is a virtual column. Virtual columns are used to extend the source data with additional empty columns to support more advanced conversions; when this annotation is
false, the column is a real column, which exists in the source data for the table.
@@ -282,17 +282,17 @@
Cells
A cell represents a cell at the intersection of a row and a column within a table. The core annotations of a cell are:
- - about URL — a URL for the entity that this cell provides information about, or
null. The value of this annotation is derived as described in .
+ - about URL — an absolute URL for the entity about which this cell provides information, or
null.
- column — the column in which the cell appears; the cell MUST be in the cells for that column.
- errors — a (possibly empty) list of validation errors generated while parsing the value of the cell.
- ordered — a boolean that, if the value of this cell is a list, indicates whether the order of that list should be preserved or not.
- - property URL — a URL for the property that this cell provides, or
null. The value of this annotation is derived as described in .
+ - property URL — an absolute URL for the property associated with this cell, or
null.
- row — the row in which the cell appears; the cell MUST be in the cells for that row.
- string value — a string that is the original syntactic representation of the value of the cell, eg how the cell appears within a CSV file; this may be an empty string.
- table — the table in which the cell appears.
- text direction — which direction the text within the cell should be displayed, as described in .
- - value — the semantic value of the cell; this MAY be of a datatype other than a string, MAY be a list, and MAY be
null. For example, annotations might enable a processor to understand the string value of the cell as representing a number or a date. By default, if the string value is an empty string, the semantic value of the cell is null. See Parsing Cells in [[!tabular-metadata]] for details about how to compute the cell value.
- - value URL — a URL for this cell's value, or
null. The value of this annotation is derived as described in .
+ - value — the semantic value of the cell; this MAY be of a datatype other than a string, MAY be a list, and MAY be
null. For example, annotations might enable a processor to understand the string value of the cell as representing a number or a date. By default, if the string value is an empty string, the semantic value of the cell is null.
+ - value URL — an absolute URL for this cell's value, or
null.
There presence or absence of quotes around a value within a CSV file is a syntactic detail that is not reflected in the tabular data model. In other words, there is no distinction in the model between the second value in a,,z and the second value in a,"",z.
From 8a20f0b300fff58fd7ec8123343c065d1c346c11 Mon Sep 17 00:00:00 2001
From: Gregg Kellogg
Date: Thu, 9 Apr 2015 12:22:15 -0700
Subject: [PATCH 03/18] Clean up language in metadata for creating annotations
on TableGroup, Table and Column. #463.
---
metadata/index.html | 40 ++++++++++++++++++++--------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/metadata/index.html b/metadata/index.html
index 48f4b5e8..a4ee58bf 100644
--- a/metadata/index.html
+++ b/metadata/index.html
@@ -663,7 +663,7 @@ Optional Properties
notes
-
- An array property that provides an array of objects representing arbitrary annotations on the annotated tabular data model. The value of this property becomes the value of the notes annotation for the annotated table. The properties on these objects are interpreted equivalently to common properties as described in . When an array of note objects B is merged into an original array of note objects A, each note object from B is appended into the array A.
+ An array property that provides an array of objects representing arbitrary annotations on the annotated tabular data model. The value of this property becomes the value of the notes annotation for the table. The properties on these objects are interpreted equivalently to common properties as described in . When an array of note objects B is merged into an original array of note objects A, each note object from B is appended into the array A.
The Web Annotation Working Group is developing a vocabulary for expressing annotations. In future versions of this specification, we anticipate referencing that vocabulary.
@@ -766,7 +766,7 @@
Schemas
- The value of this property is used to create the value of the foreign keys annotation on the table using this schema by creating a list of foreign keys comprising a list of columns in the table and a list of columns in the referenced table. The value of this property is also used to create the value of the referenced rows annotation on each of the rows in the table that uses this schema, which is a pair of the relevant foreign key and the referenced row in the referenced table.
+ The value of this property becomes the foreign keys annotation on the table using this schema by creating a list of foreign keys comprising a list of columns in the table and a list of columns in the referenced table. The value of this property is also used to create the value of the referenced rows annotation on each of the rows in the table that uses this schema, which is a pair of the relevant foreign key and the referenced row in the referenced table.
As defined in [[!tabular-data-model]], validators MUST check that, for each row, the combination of cells in the referencing columns reference a unique row within the referenced table through a combination of cells in the referenced columns. For examples, see and .
@@ -783,7 +783,7 @@
Schemas
primaryKey
-
- A column reference property that holds either a single reference to a column description object or an array of references. The value of this property is used to create the value of the primary key annotation for each row within a table that uses this schema by creating a list of the cells in that row that are in the referenced columns.
+ A column reference property that holds either a single reference to a column description object or an array of references. The value of this property becomes the primary key annotation for each row within a table that uses this schema by creating a list of the cells in that row that are in the referenced columns.
As defined in [[!tabular-data-model]], validators MUST check that each row has a unique combination of cells in the indicated columns. For example, if primaryKey is set to ["familyName", "givenName"] then every row must have a unique value for the combination of the familyName and givenName columns.
@@ -976,27 +976,26 @@
Columns
name
-
- An atomic property that gives a single canonical name for the column. The value of this property is used to create the value of the name annotation for the described column. This MUST be a string. Conversion specifications MUST use this property as the basis for the names of properties/elements/attributes in the results of conversions.
+ An atomic property that gives a single canonical name for the column. The value of this property becomes the name annotation for the described column. This MUST be a string. Conversion specifications MUST use this property as the basis for the names of properties/elements/attributes in the results of conversions.
For ease of reference within URI template properties, column names are restricted as defined in Variables in [[!URI-TEMPLATE]] with the additional provision that names beginning with "_" are reserved by this specification and MUST NOT be used.
- The name annotation in [[!tabular-data-model]] defaults to the first value from the titles annotation, having the same language tag as default language or und if not specified as a name property, percent-encoded as necessary to conform to the syntactic requirements as a string without language, as defined in [[!RFC3986]]. Otherwise, it is the string "_col.[N]" where [N] is the column number.
-
suppressOutput
-
-
A boolean atomic property. If true, suppresses any output that would be generated when converting cells in this column. The value of this property is used to create the value of the suppress output annotation for the described column.
+ A boolean atomic property. If true, suppresses any output that would be generated when converting cells in this column. The value of this property becomes the suppress output annotation for the described column.
titles
-
- A natural language property that provides possible alternative names for the column. The value of this property is used to create the value of the titles annotation for the described column.
+ A natural language property that provides possible alternative names for the column. The value of this property becomes the titles annotation for the described column.
+ If there is no name property defined on this column, the first titles string value having the same language tag as default language or und or if not specified, becomes the name annotation for the described column. This annotation MUST be percent-encoded as necessary to conform to the syntactic requirements defined in [[!RFC3986]]
virtual
-
-
A boolean atomic property taking a single value which indicates whether the column is a virtual column not present in the original source. The value of this property is used to create the value of the virtual annotation for the described column. If present, a virtual column MUST appear after all other non-virtual column definitions.
+ A boolean atomic property taking a single value which indicates whether the column is a virtual column not present in the original source. The normalized value of this property becomes the virtual annotation for the described column. If present, a virtual column MUST appear after all other non-virtual column definitions.
Virtual columns are useful for inserting cells with default values into an annotated table to control the results of conversions.
We invite comment on whether virtual columns are useful enough to include in the final recommendation in spite of the added complexity.
@@ -1011,6 +1010,7 @@ Columns
+ If the column description has neither name nor titles properties, the string "_col.[N]" where [N] is the column number, becomes the name annotation for the described column.
The description MAY contain any common properties to provide extra metadata about the column as a whole, such as a full description.
@@ -1087,7 +1087,7 @@ Inherited Properties
aboutUrl
-
-
A URI template property that MAY be used to create a unique identifier for each cell within a row when mapping data to other formats. There are no compatibility restrictions on this property. The value of this property is used to create the value of the about URL annotation for the described column, and the about URL annotation for the cell.
+ A URI template property that MAY be used to create a unique identifier for each cell within a row when mapping data to other formats. There are no compatibility restrictions on this property. The value of this property becomes the about URL annotation for the described column,.
aboutUrl is typically defined on a schema description or table description. If defined on individual column descriptions, care must be taken to ensure that transformed cell values maintain a semantic relationship.
datatype
@@ -1098,55 +1098,55 @@ Inherited Properties
A value for this property is compatible with an inherited value if they are identical, or if the value is a subtype within the datatype hierarchy defined in , including if the inherited value is explicitly specified as the base of this value.
- The value of this property is used to create the value of the datatype annotation for the described column.
+ The normalized value of this property becomes the datatype annotation for the described column.
We invite comment on whether datatype should allow for a "union" of types for a cell; this would allow for a set of datatypes that could be matched against the string value of a cell, choosing the first match; e.g., to match either a date or datetime.
default
-
- An atomic property holding a single string that is used to create a default value for the cell in cases where the original string value is an empty string. This default value MAY be used when converting the table into other formats, or when the table is displayed. If not specified, the default for the default property is the empty string, "". A value for this property is compatible with an inherited value only if they are identical. The value of this property is used to create the value of the default annotation for the described column.
+ An atomic property holding a single string that is used to create a default value for the cell in cases where the original string value is an empty string. This default value MAY be used when converting the table into other formats, or when the table is displayed. If not specified, the default for the default property is the empty string, "". A value for this property is compatible with an inherited value only if they are identical. The value of this property becomes the default annotation for the described column.
lang
-
- An atomic property giving a single string language code as defined by [[!BCP47]]. Indicates the language of the value within the cell. A value for this property is compatible with an inherited value if it is a sub-language of the inherited value; for example en-US is compatible with en but not fr. The value of this property is used to create the value of the lang annotation for the described column.
+ An atomic property giving a single string language code as defined by [[!BCP47]]. Indicates the language of the value within the cell. A value for this property is compatible with an inherited value if it is a sub-language of the inherited value; for example en-US is compatible with en but not fr. The value of this property becomes the lang annotation for the described column.
null
-
- An atomic property giving the string or strings used for null values within the data. If the string value of the cell is equal to any one of these values, the cell value is null. If not specified, the default for the null property is the empty string. A value for this property is compatible with an inherited value if it is a subset of the inherited value. The value of this property is used to create the value of the null annotation for the described column.
+ An atomic property giving the string or strings used for null values within the data. If the string value of the cell is equal to any one of these values, the cell value is null. If not specified, the default for the null property is the empty string. A value for this property is compatible with an inherited value if it is a subset of the inherited value. The value of this property becomes the null annotation for the described column.
ordered
-
-
A boolean atomic property taking a single value which indicates whether a list that is the value of the cell is ordered (if true) or unordered (if false). The default is false. This property is irrelevant if the separator is null or undefined, but this is not an error. A value for this property is compatible with an inherited value only if they are identical. The value of this property is used to create the value of the ordered annotation for the described column, and the ordered annotation for the described cell.
+ A boolean atomic property taking a single value which indicates whether a list that is the value of the cell is ordered (if true) or unordered (if false). The default is false. This property is irrelevant if the separator is null or undefined, but this is not an error. A value for this property is compatible with an inherited value only if they are identical. The value of this property becomes the ordered annotation for the described column, and the ordered annotation for the described cell.
propertyUrl
-
-
An URI template property that MAY be used to create a URI for a property if the table is mapped to another format. There are no compatibility restrictions on this property. The value of this property is used to create the value of the property URL annotation for the described column, and the property URL annotation for the cell.
+ An URI template property that MAY be used to create a URI for a property if the table is mapped to another format. There are no compatibility restrictions on this property. The value of this property becomes the property URL annotation for the described column.
propertyUrl is typically defined on a column description. If defined on a schema description, table description or table group description, care must be taken to ensure that transformed cell values maintain an appropriate semantic relationship, for example by including the name of the column in the generated URL by using _name in the template.
required
-
-
A boolean atomic property taking a single value which indicates whether the cell must have a non-null value. The default is false. A value for this property is compatible with an inherited value only if they are identical. The value of this property is used to create the value of the required annotation for the described column.
+ A boolean atomic property taking a single value which indicates whether the cell must have a non-null value. The default is false. A value for this property is compatible with an inherited value only if they are identical. The value of this property becomes the required annotation for the described column.
separator
-
- An atomic property that MUST have a single string value that is the character used to separate items in the string value of the cell. If null or unspecified, the cell does not contain a list. Otherwise, application MUST split the string value of the cell on the specified separator character and parse each of the resulting strings separately. The cell's value will then be a list. Conversion specifications MUST use the separator to determine the conversion of a cell into the target format. See for more details. A value for this property is compatible with an inherited value only if they are identical. The value of this property is used to create the value of the separator annotation for the described column.
+ An atomic property that MUST have a single string value that is the character used to separate items in the string value of the cell. If null or unspecified, the cell does not contain a list. Otherwise, application MUST split the string value of the cell on the specified separator character and parse each of the resulting strings separately. The cell's value will then be a list. Conversion specifications MUST use the separator to determine the conversion of a cell into the target format. See for more details. A value for this property is compatible with an inherited value only if they are identical. The value of this property becomes the separator annotation for the described column.
textDirection
-
- An atomic property that MUST have a single string value that is one of "rtl" or "ltr" (the default). Indicates whether the text within cells should be displayed by default as left-to-right or right-to-left text. The value of this property is used to create the value of the text direction annotation for the column, and the text direction annotation for the cell. A value for this property is compatible with an inherited value only if they are identical. See Bidirectional Tables in [[!tabular-data-model]] for details.
+ An atomic property that MUST have a single string value that is one of "rtl" or "ltr" (the default). Indicates whether the text within cells should be displayed by default as left-to-right or right-to-left text. The value of this property becomes the text direction annotation for the column. A value for this property is compatible with an inherited value only if they are identical. See Bidirectional Tables in [[!tabular-data-model]] for details.
valueUrl
-
-
An URI template property that is used to map the values to the cells into URLs. See for details. There are no compatibility restrictions on this property. The value of this property is used to create the value of the value URL annotation for the described column, and the value URL annotation for the cell.
+ An URI template property that is used to map the values to the cells into URLs. See for details. There are no compatibility restrictions on this property. The value of this property becomes the value URL annotation for the described column.
This allows a cell value to define one or more RDF resources value of a cell instead of a literal values, as defined in [[rdf-concepts]]. For example, if the value were "{#reference}", each cell value of a column named reference would be used to create a URI such as http://example.com/#1234, if 1234 were a cell value of that column.
valueUrl is typically defined on a column description. If defined on a schema description, table description or table group description, care must be taken to ensure that transformed cell values maintain an appropriate semantic relationship.
From d567e9ce87c972e4345ec73a34e48400377fe6cb Mon Sep 17 00:00:00 2001
From: Gregg Kellogg
Date: Thu, 9 Apr 2015 18:00:17 -0700
Subject: [PATCH 04/18] Move Cell Parsing and Datatype details from metadata to
syntax. Leave enough of Datatypes in metadata to describe how the annotations
are created. Fixes #463.
---
metadata/index.html | 344 +-----
syntax/datatypes.key | Bin 0 -> 457370 bytes
syntax/datatypes.pdf | Bin 0 -> 22663 bytes
syntax/datatypes.png | Bin 0 -> 41692 bytes
syntax/datatypes.svg | 2730 ++++++++++++++++++++++++++++++++++++++++++
syntax/index.html | 368 +++++-
6 files changed, 3108 insertions(+), 334 deletions(-)
create mode 100644 syntax/datatypes.key
create mode 100644 syntax/datatypes.pdf
create mode 100644 syntax/datatypes.png
create mode 100644 syntax/datatypes.svg
diff --git a/metadata/index.html b/metadata/index.html
index a4ee58bf..5be2c2a1 100644
--- a/metadata/index.html
+++ b/metadata/index.html
@@ -1135,7 +1135,7 @@ Inherited Properties
separator
-
- An atomic property that MUST have a single string value that is the character used to separate items in the string value of the cell. If null or unspecified, the cell does not contain a list. Otherwise, application MUST split the string value of the cell on the specified separator character and parse each of the resulting strings separately. The cell's value will then be a list. Conversion specifications MUST use the separator to determine the conversion of a cell into the target format. See for more details. A value for this property is compatible with an inherited value only if they are identical. The value of this property becomes the separator annotation for the described column.
+ An atomic property that MUST have a single string value that is the character used to separate items in the string value of the cell. If null or unspecified, the cell does not contain a list. Otherwise, application MUST split the string value of the cell on the specified separator character and parse each of the resulting strings separately. The cell's value will then be a list. Conversion specifications MUST use the separator to determine the conversion of a cell into the target format. See Parsing Cells in [[!tabular-data-model]] for more details. A value for this property is compatible with an inherited value only if they are identical. The value of this property becomes the separator annotation for the described column.
textDirection
@@ -1146,11 +1146,10 @@ Inherited Properties
valueUrl
-
-
An URI template property that is used to map the values to the cells into URLs. See for details. There are no compatibility restrictions on this property. The value of this property becomes the value URL annotation for the described column.
+ An URI template property that is used to map the values to the cells into URLs. See Parsing Cells in [[!tabular-data-model]] for details. There are no compatibility restrictions on this property. The value of this property becomes the value URL annotation for the described column.
This allows a cell value to define one or more RDF resources value of a cell instead of a literal values, as defined in [[rdf-concepts]]. For example, if the value were "{#reference}", each cell value of a column named reference would be used to create a URI such as http://example.com/#1234, if 1234 were a cell value of that column.
valueUrl is typically defined on a column description. If defined on a schema description, table description or table group description, care must be taken to ensure that transformed cell values maintain an appropriate semantic relationship.
- The value URL annotation is null if the cell value is null and the cell column is not a virtual column.
The value of an inherited property is the first value, if any, found by looking in the current description object through all of its containing objects: a inherited property defined in a column description takes precedence of one defined in a schema description, which in turn takes precedence of one defined in a table description, which in turn takes precedence of one defined in a table group description.
@@ -1510,7 +1509,7 @@ Example
Datatypes
- Cells within tables may be annotated with a datatype which indicates the type of the values obtained by parsing the string value of the cell. See for details of how string values are parsed against datatypes.
+ Cells within tables may be annotated with a datatype which indicates the type of the values obtained by parsing the string value of the cell. See [[!tabular-data-model]] for a description of annotations on a datatype.
Built-in Datatypes
@@ -1541,67 +1540,67 @@ Derived Datatypes
base
-
- An atomic property that contains a single string: a term defined in the default context representing a built-in datatype URL, as listed above. If this property is missing, its default is string. All values of the datatype MUST be valid values of the base datatype.
+ An atomic property that contains a single string: a term defined in the default context representing a built-in datatype URL, as listed above. If this property is missing, its default is string. All values of the datatype MUST be valid values of the base datatype. The value of this property becomes the base annotation for the described datatype.
format
-
- An atomic property that contains either a single string or an object that defines the format of a value of this type, used when parsing a string value as described in .
+ An atomic property that contains either a single string or an object that defines the format of a value of this type, used when parsing a string value as described in Parsing Cells in [[!tabular-data-model]]. The value of this property becomes the format annotation for the described datatype.
length
-
- A numeric atomic property that contains a single integer that is the exact length of the value. See for details.
+ A numeric atomic property that contains a single integer that is the exact length of the value. The value of this property becomes the length annotation for the described datatype. See Length Constraints in [[!tabular-data-model]] for details.
minLength
-
- An atomic property that contains a single integer that is the minimum length of the value. See for details.
+ An atomic property that contains a single integer that is the minimum length of the value. The value of this property becomes the minimum length annotation for the described datatype. See Length Constraints in [[!tabular-data-model]] for details.
maxLength
-
- A numeric atomic property that contains a single integer that is the maximum length of the value. See for details.
+ A numeric atomic property that contains a single integer that is the maximum length of the value. The value of this property becomes the maximum length annotation for the described datatype. See Length Constraints in [[!tabular-data-model]] for details.
minimum
-
- An atomic property that contains a single number that is the minimum valid value (inclusive); equivalent to minInclusive. See for details.
+ An atomic property that contains a single number or string that is the minimum valid value (inclusive); equivalent to minInclusive. The value of this property becomes the minimum annotation for the described datatype. See Value Constraints in [[!tabular-data-model]] for details.
maximum
-
- An atomic property that contains a single number that is the maximum valid value (inclusive); equivalent to maxInclusive. See for details.
+ An atomic property that contains a single number or string that is the maximum valid value (inclusive); equivalent to maxInclusive. The value of this property becomes the maximum annotation for the described datatype. See Value Constraints in [[!tabular-data-model]] for details.
minInclusive
-
- An atomic property that contains a single number that is the minimum valid value (inclusive). See for details.
+ An atomic property that contains a single number or string that is the minimum valid value (inclusive). The value of this property becomes the minimum annotation for the described datatype. See Value Constraints in [[!tabular-data-model]] for details.
maxInclusive
-
- An atomic property that contains a single number that is the maximum valid value (inclusive). See for details.
+ An atomic property that contains a single number or string that is the maximum valid value (inclusive). The value of this property becomes the maximum annotation for the described datatype. See Value Constraints in [[!tabular-data-model]] for details.
minExclusive
-
- An atomic property that contains a single number that is the minimum valid value (exclusive). See for details.
+ An atomic property that contains a single number or string that is the minimum valid value (exclusive). The value of this property becomes the minimum exclusive annotation for the described datatype. See Value Constraints in [[!tabular-data-model]] for details.
maxExclusive
-
- An atomic property that contains a single number that is the maximum valid value (exclusive). See for details.
+ An atomic property that contains a single number or string that is the maximum valid value (exclusive). The value of this property becomes the maximum exclusive annotation for the described datatype. See Value Constraints in [[!tabular-data-model]] for details.
@@ -1609,321 +1608,6 @@ Derived Datatypes
The datatype description MAY contain any common properties to provide extra metadata about the datatype, such as a title or description.
-
- Length Constraints
-
- The length, minLength and maxLength properties indicate the exact, minimum and maximum lengths of values of a datatype.
-
-
- Applications MUST raise an error if both length and minLength are specified and they do not have the same value. Similarly, applications MUST raise an error if both length and maxLength are specified and they do not have the same value. Applications MUST raise an error if length, maxLength, or minLength are specified and the base datatype is not string or one of its subtypes, or a binary type.
-
-
- The length of a value is determined as follows:
-
-
- - if the value is
null, its length is zero
- - if the value is a string or one of its subtypes, its length is the number of characters in the value
- - if the value is of a binary type, its length is the number of bytes in the binary value
-
-
-
- Value Constraints
-
- The minimum, maximum, minInclusive, maxInclusive, minExclusive, and maxExclusive properties indicate limits on values of a datatype. These apply to numeric, date/time, and duration types.
-
-
- In all ways, including the errors described below, the minimum property is equivalent to the minInclusive property and the maximum property is equivalent to the maxInclusive property. Applications MUST raise an error if both minimum and minInclusive are specified and they do not have the same value. Similarly, applications MUST raise an error if both maximum and maxInclusive are specified and they do not have the same value.
-
-
- Applications MUST raise an error if both minInclusive and minExclusive are specified, or if both maxInclusive and maxExclusive are specified. Applications MUST raise an error if both minInclusive and maxInclusive are specified and maxInclusive is less than minInclusive, or if both minInclusive and maxExclusive are specified and maxExclusive is less than or equal to minInclusive. Similarly, applications MUST raise an error if both minExclusive and maxExclusive are specified and maxExclusive is less than minExclusive, or if both minExclusive and maxInclusive are specified and maxInclusive is less than or equal to minExclusive.
-
-
- Applications MUST raise an error if minimum, minInclusive, maximum, maxInclusive, minExclusive, or maxExclusive are specified and the base datatype is not a numeric, date/time, or duration type.
-
-
- Validation against these properties is as defined in [[!xmlschema11-2]].
-
-
-
-
-
- Parsing cells
-
- Unlike many other data formats, tabular data is designed to be read by humans. For that reason, it's common for data to be represented within tabular data in a human-readable way. The null, required, default, separator, datatype, and lang properties provide the information needed to parse the string value of a cell into its (semantic) value. This is used:
-
-
- - by validators to check that the data in the table is in the expected format,
- - by converters to parse the values before mapping them into values in the target of the conversion,
- - when displaying data, to map it into formats that are meaningful for those viewing the data (as opposed to those publishing it), and
- - when inputting data, to turn entered values into representations in a consistent format.
-
-
- After parsing, the cell value can be:
-
-
- null,
- - a single value with an associated optional datatype or language, or
- - a sequence of such values.
-
-
- The process of parsing the string value of a cell into a single value or a list of values is as follows:
-
-
- - unless the
datatype is string, json, xml, html, anyAtomicType, or any, replace all carriage return (#xD), line feed (#xA), and tab (#x9) characters with space characters.
- - unless the
datatype is string, json, xml, html, anyAtomicType, any, or normalizedString, strip leading and trailing whitespace from the string value and replace all instances of two or more whitespace characters with a single space character.
- - if the resulting string is an empty string, apply the remaining steps to the string given by the
default property.
- - if the
separator property is not null and the resulting string is an empty string, the cell value is an empty list. If the required property is true, add an error to the list of errors for the cell.
- - if the
separator property is not null, the cell value is a list of values created by:
-
- - if the normalized string is an empty string, apply the remaining steps to the string given by the
default property.
- - if the normalized string is the same as any one of the values of the
null property, then the resulting value is null.
- - split the normalized string at the character specified by the
separator property.
- - unless the
datatype is string, anyAtomicType, or any, strip leading and trailing whitespace from these strings.
- - applying the remaining steps to each of the strings in turn.
-
-
- - if the string is an empty string, apply the remaining steps to the string given by the
default property.
- - if the string is the same as any one of the values of the
null property, then the resulting value is null. If the separator property is null and the required property is true, add an error to the list of errors for the cell.
- - validate the string based on the datatype, using the
format property if one is specified, as described below, and then against the constraints described in ; if there are any errors, add them to the list of errors for the cell; the resulting value is typed as a string with the language provided by the lang property.
- - otherwise, if there are no errors, parse the string using the
format if one is specified, as described below; the resulting value is typed according to the datatype and if the datatype is string, or there is no datatype, it has the language provided by the lang property.
-
-
- Parsing examples
-
- When no metadata is available, the value of a cell is the same as its string value. For example, a cell with a string value of "99" would similarly have the (semantic) value "99".
-
-
- If a datatype is provided for the cell, that is used to create a (semantic) value for the cell. For example, if the metadata contains:
-
-
-"datatype": "integer"
-
-
- for the cell with the string value "99" then the value of that cell will be the integer 99. A cell whose string value was not a valid integer (such as "one" or "1.0") would be assigned that string value as its (semantic) value, but also have a validation error listed in its errors annotation.
-
-
- Sometimes data uses special codes to indicate unknown or null values. For example, a particular column might contain a number that is expected to be between 1 and 10, with the string 99 used in the original tabular data file to indicate a null value. The metadata for such a column would include:
-
-
-"datatype": {
- "base": "integer",
- "minimum": 1,
- "maximum": 10
-},
-"null": "99"
-
-
- In this case, a cell with a string value of "5" would have the (semantic) value of the integer 5; a cell with a string value of "99" would have the value null.
-
-
- Similarly, a cell may be assigned a default value if the string value for the cell is empty. A configuration such as:
-
-
-"datatype": {
- "base": "integer",
- "minimum": 1,
- "maximum": 10
-},
-"default": "5"
-
-
- In this case, a cell whose string value is "" would be assigned the value of the integer 5. A cell whose string value contains whitespace, such as a single tab character, would also be assigned the value of the integer 5: when the datatype is something other than string, anyAtomicType, or any, leading and trailing whitespace is stripped from string values before the remainder of the processing is carried out.
-
-
- Cells can contain sequences of values. For example, a cell might have the string value "1 5 7.0". In this case, the separator is a space character. The appropriate configuration would be:
-
-
-"datatype": {
- "base": "integer",
- "minimum": 1,
- "maximum": 10
-},
-"default": "5",
-"separator": " "
-
-
- and this would mean that the cell's value would be an array containing two integers and a string: [1, 5, "7.0"]. The final value of the array is a string because it is not a valid integer; the cell's errors annotation will also contain a validation error.
-
-
- Also, with this configuration, if the string value of the cell were "" (ie it was an empty cell) the value of the cell would be an empty list.
-
-
- A cell value can be inserted into a URL created using a URI template property such as valueUrl. For example, if a cell with the string value "1 5 7.0" were in a column named values, defined with:
-
-
-"datatype": "decimal",
-"separator": " ",
-"valueUrl": "{?values}"
-
-
- then after expansion of the URI template, the resulting valueUrl would be ?values=1.0,5.0,7.0. The canonical representations of the decimal values are used within the URL.
-
-
-
- Formats for numeric types
-
- It is not uncommon for numbers within tabular data to be formatted for human consumption, which may involve using commas for decimal points, grouping digits in the number using commas, or adding currency symbols or percent signs to the number.
-
-
- If the datatype is a numeric type, the format property indicates the expected format for that number. Its value MUST be either a single string or an object with one or more of the properties:
-
-
- decimalChar
- - An atomic property containing a single character string whose value is used to represent a decimal point within the number. The default value is
".".
- groupChar
- - An atomic property containing a single character string whose value is used to group digits within the number. The default value is
",".
- pattern
- - An atomic property containing a regular expression string, in the syntax and interpreted as defined by [[!ECMASCRIPT]].
-
-
- Authors are encouraged to be conservative in the regular expressions that they use, sticking to the basic features of regular expressions that are likely to be supported across implementations.
-
-
- If the format property is a single string, this is interpreted in the same way as if it were an object with a pattern property whose value is that string.
-
-
- When parsing the string value of a cell against this format specification, implementations MUST recognise and parse numbers that consist of:
-
-
- - an optional
+ or - sign,
- - followed by a decimal digit (
0-9),
- - followed by any number of decimal digits (
0-9) and the character specified as the groupChar,
- - followed by an optional
decimalChar followed by one or more decimal digits (0-9),
- - followed by an optional exponent, consisting of an
E followed by an optional + or - sign followed by one or more decimal digits (0-9), or
- - followed by an optional percent (
%) or per-mille (‰) sign.
-
-
- or that are one of the special values:
-
-
- NaN,
- INF, or
- -INF.
-
-
- Implementations MUST add a validation error to the errors annotation for the cell if the string being parsed:
-
-
- - does not meet the numeric format defined above,
- - contains two consecutive
groupChar characters,
- - does not match the regular expression defined in the
pattern property, if there is one,
- - contains the
decimalChar, if the datatype is integer or one of its sub-values,
- - contains an exponent, if the
datatype is decimal or one of its sub-values, or
- - is one of the special values
NaN, INF, or -INF, if the datatype is decimal or one of its sub-values.
-
-
- Implementations MUST use the sign, exponent, percent, and per-mille signs when parsing the string value of a cell to provide the value of the cell. For example, the string value "-25%" must be interpreted as -0.25 and the string value "1E6" as 1000000.
-
-
-
- Formats for booleans
-
- Boolean values may be represented in many ways aside from the standard 1 and 0 or true and false.
-
-
- If the datatype for a cell is boolean, the format property provides the true and false values expected, separated by |. For example if format is Y|N then cells must hold either Y or N with Y meaning true and N meaning false.
-
-
- The resulting cell value will be one or more boolean true or false values.
-
-
-
- Formats for dates and times
-
- Dates and times are commonly represented in tabular data in formats other than those defined in [[!xmlschema11-2]].
-
-
- If the datatype is a date or time type, the format property indicates the expected format for that date or time.
-
-
- The supported date and time formats listed here are expressed in terms of the date field symbols defined in [[!UAX35]] and MUST be interpreted by implementations as defined in that specification.
-
-
- The following date formats MUST be recognised by implementations:
-
-
- yyyy-MM-dd e.g., 2015-03-22
- yyyyMMdd e.g., 20150322
- dd-MM-yyyy e.g., 22-03-2015
- d-M-yyyy e.g., 22-3-2015
- MM-dd-yyyy e.g., 03-22-2015
- M-d-yyyy e.g., 3-22-2015
- dd/MM/yyyy e.g., 22/03/2015
- d/M/yyyy e.g., 22/3/2015
- MM/dd/yyyy e.g., 03/22/2015
- M/d/yyyy e.g., 3/22/2015
- dd.MM.yyyy e.g., 22.03.2015
- d.M.yyyy e.g., 22.3.2015
- MM.dd.yyyy e.g., 03.22.2015
- M.d.yyyy e.g., 3.22.2015
-
-
- The following time formats MUST be recognised by implementations:
-
-
- HH:mm:ss e.g., 15:02:37
- HHmmss e.g., 150237
- HH:mm e.g., 15:02
- HHmm e.g., 1502
-
-
- The following date/time formats MUST be recognised by implementations:
-
-
- yyyy-MM-ddTHH:mm:ss e.g., 2015-03-15T15:02:37
- yyyy-MM-ddTHH:mm e.g., 2015-03-15T15:02
- - any of the date formats above, followed by a single space, followed by any of the time formats above, e.g.,
M/d/yyyy HH:mm for 3/22/2015 15:02 or dd.MM.yyyy HH:mm:ss for 22.03.2015 15:02:37
-
-
- Implementations MUST also recognise date, time, and date/time formats that end with timezone markers consisting of between one and three xs or Xs, possibly after a single space. These MUST be interpreted as follows:
-
-
- X e.g., -08, +0530, or Z (minutes are optional)
- XX e.g., -0800, +0530, or Z
- XXX e.g., -08:00, +05:30, or Z
- x e.g., -08 or +0530 (Z is not permitted)
- xx e.g., -0800 or +0530 (Z is not permitted)
- xxx e.g., -08:00 or +05:30 (Z is not permitted)
-
-
- For example, formats could include yyyy-MM-ddTHH:mm:ssXXX for 2015-03-15T15:02:37Z or 2015-03-15T15:02:37-05:00, or HH:mm x for 15:02 -05.
-
-
- The cell value will one or more dates/time values extracted using the format.
-
-
- For simplicity, this version of this standard does not support abbreviated or full month or day names, or double digit years. Future versions of this standard may support other date and time formats, or general purpose date/time pattern strings. Authors of schemas SHOULD use appropriate regular expressions, along with the string datatype, for dates and times that use a format other than that specified here.
-
-
-
- Formats for durations
-
- Durations MUST be formatted and interpreted as defined in [[!xmlschema11-2]], using the [[!ISO8601]] format -?PnYnMnDTnHnMnS. For example, the duration P1Y1D is used for a year and a day; the duration PT2H30M for 2 hours and 30 minutes.
-
-
- If the datatype is a duration type, the format property provides a regular expression for the string values, in the syntax and processed as defined by [[!ECMASCRIPT]].
-
-
- Authors are encouraged to be conservative in the regular expressions that they use, sticking to the basic features of regular expressions that are likely to be supported across implementations.
-
-
- The cell value will be one or more durations extracted using the format.
-
-
-
- Formats for other types
-
- If the datatype is not numeric, boolean, a date/time type, or a duration type, the format property provides a regular expression for the string values, in the syntax and processed as defined by [[!ECMASCRIPT]].
-
-
- Authors are encouraged to be conservative in the regular expressions that they use, sticking to the basic features of regular expressions that are likely to be supported across implementations.
-
-
- Values that are labelled as html, xml, or json are not validated against those formats.
-
-
- Metadata creators who wish to check the syntax of HTML, XML, or JSON within tabular data should use the format property to specify a regular expression against which such values will be tested.
-
diff --git a/syntax/datatypes.key b/syntax/datatypes.key
new file mode 100644
index 0000000000000000000000000000000000000000..f1bbbbe7ca086faad56c4ae0ad0a67410ebe1bbf
GIT binary patch
literal 457370
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 q8$Y?sJwk~=d
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