From 517c6469e35f147aca9ae767fdf198a97d3874a8 Mon Sep 17 00:00:00 2001 From: Gregg Kellogg Date: Wed, 8 Apr 2015 13:28:32 -0700 Subject: [PATCH 01/18] Change the `value` term in the model document to `annotation value`. Remove `property value` term, and use within the model document refering instead to the appropriate annotation value within the model document. Fixes #463. --- metadata/index.html | 38 ++++++++++++++++++-------------------- syntax/index.html | 8 ++++---- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/metadata/index.html b/metadata/index.html index 12a218a9..29ca99fd 100644 --- a/metadata/index.html +++ b/metadata/index.html @@ -236,7 +236,6 @@

Annotating Tables

the properties 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).

-

The property value of an annotation is that defined in the metadata, unless otherwise noted.

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.

Metadata Properties @@ -307,7 +306,7 @@

URI Template Properties

column names
-
a variable is set for each column within the schema; the name of the variable is the 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: +
a variable is set for each column within the schema; the name of the variable is the column name of the column from the annotated table 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
  • the canonical representation of the value of the cell, as defined in [[!xmlschema11-2]], if it has a single value
  • @@ -323,11 +322,11 @@

    URI Template Properties

    _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:

  1. applying the template against the cell in that column in the row that is currently being processed
  2. @@ -514,10 +513,10 @@

    Natural Language Properties

    }

    - 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.

@@ -533,7 +532,7 @@

Atomic Properties

  • arrays — lists of numbers, booleans, strings, or objects
  • - 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".

    @@ -607,7 +606,7 @@

    Optional Properties

    An atomic property that MUST have a single string value that is one of "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.

    -
    tableSchema
    +

    An 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.

    @@ -679,7 +678,7 @@

    Optional Properties

    tableSchema

    An 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.

    transformations

    As defined for table groups. The value of this property becomes the value of the transformations annotation for this table.

    @@ -703,10 +702,10 @@

    Optional Properties

    Schemas

    - 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.

    columns
    @@ -755,11 +754,11 @@

    Schemas

    resource
    -

    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 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.

    schemaReference
    -

    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 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
    @@ -982,7 +981,7 @@

    Columns

    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
    @@ -1150,7 +1149,7 @@

    Inherited Properties

    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

    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: -

    - -

    - After parsing, the cell value can be: -

    - -

    - The process of parsing the string value of a cell into a single value or a list of values is as follows: -

    -
      -
    1. 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.
    2. -
    3. 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.
    4. -
    5. if the resulting string is an empty string, apply the remaining steps to the string given by the default property.
    6. -
    7. 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.
    8. -
    9. if the separator property is not null, the cell value is a list of values created by: -
        -
      1. if the normalized string is an empty string, apply the remaining steps to the string given by the default property.
      2. -
      3. if the normalized string is the same as any one of the values of the null property, then the resulting value is null.
      4. -
      5. split the normalized string at the character specified by the separator property.
      6. -
      7. unless the datatype is string, anyAtomicType, or any, strip leading and trailing whitespace from these strings.
      8. -
      9. applying the remaining steps to each of the strings in turn.
      10. -
      -
    10. -
    11. if the string is an empty string, apply the remaining steps to the string given by the default property.
    12. -
    13. 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.
    14. -
    15. 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.
    16. -
    17. 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.
    18. -
    -
    -

    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: -

    -
      -
    1. an optional + or - sign,
    2. -
    3. followed by a decimal digit (0-9),
    4. -
    5. followed by any number of decimal digits (0-9) and the character specified as the groupChar,
    6. -
    7. followed by an optional decimalChar followed by one or more decimal digits (0-9),
    8. -
    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
    10. -
    11. followed by an optional percent (%) or per-mille () sign.
    12. -
    -

    - or that are one of the special values: -

    -
      -
    1. NaN,
    2. -
    3. INF, or
    4. -
    5. -INF.
    6. -
    -

    - 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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

    H<8 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 q8$Y?sJwk~=d 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

    2B!+l;0UOz+>P}e4!>Ue;tO9hO%83 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%0D6`sps4@itygQ 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

    Y!dE-x;Z(!p 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 L_^T~HDMU{~X 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%0Du{D;g?KtbxK(+!F)L}o%;p?ClK& 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 F`ajq`cv=7e literal 0 HcmV?d00001 diff --git a/syntax/datatypes.png b/syntax/datatypes.png new file mode 100644 index 0000000000000000000000000000000000000000..a907a8cbe38d2bd806c2f5723bd6677ed379c179 GIT binary patch literal 41692 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

    QzZ^J~dMp-XUKFaEZP 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

    QJjr|+&^i$^ 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 IExnTd7o>$?m;e9( literal 0 HcmV?d00001 diff --git a/syntax/datatypes.svg b/syntax/datatypes.svg new file mode 100644 index 00000000..2e7059ef --- /dev/null +++ b/syntax/datatypes.svg @@ -0,0 +1,2730 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/syntax/index.html b/syntax/index.html index dec5f88f..e0818dd0 100644 --- a/syntax/index.html +++ b/syntax/index.html @@ -231,12 +231,13 @@

    Columns

    • 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]].
    • +
    • 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.
    • 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.
    • number — the position of the column amongst the columns for the associated table, starting from 1.
    • +
    • ordered — a boolean that indicates whether the order of values of a cell should be preserved or not.
    • 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.
    • @@ -277,7 +278,7 @@

      Rows

    -

    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:

    @@ -308,6 +309,67 @@

    Cells

    Neither this specification nor [[!tabular-metadata]] defines a method to specify such annotations. Implementations MAY define a method for adding annotations to cells by interpreting notes on the table.

    +
    +

    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. +

    +

    + Datatypes are based on a subset of those defined in [[!xmlschema11-2]] with aliases. The annotated tabular data model limits cell values to have datatypes as shown on the diagram: +

    +
      +
    • the datatypes defined in [[!xmlschema11-2]] as derived from and including anyAtomicType
    • +
    • the datatype number which is exactly equivalent to double
    • +
    • the datatype binary which is exactly equivalent to base64Binary
    • +
    • the datatype datetime which is exactly equivalent to dateTime
    • +
    • the datatype any which is exactly equivalent to anyAtomicType
    • +
    • the datatype xml, a sub-type of string, which indicates the value is an XML fragment
    • +
    • the datatype html, a sub-type of string, which indicates the value is an HTML fragment
    • +
    • the datatype json, a sub-type of string, which indicates the value is serialized JSON
    • +
    +
    + Built-in Datatype Hierarchy diagram +
    Diagram showing the built-in datatypes, based on [[!xmlschema11-2]]; names in paranthesis denote aliases to the [[!xmlschema11-2]] terms (see the diagram in SVG or PNG formats)
    +
    +

    The core annotations of a datatype are:

    +
      +
    • base — a string representing the datatype identifier from the set defined above. All values of the datatype MUST be valid values of the base datatype.
    • +
    • format — a string or object that defines the format of a value of this type, used when parsing a cell string value as described in .
    • +
    • length — a number that the exact length of a cell string value as described in .
    • +
    • minimum length — a number that the minimum length of a cell string value as described in .
    • +
    • maximum length — a number that the maximum length of a cell string value as described in .
    • +
    • minimum — a number that the minimum valid value (inclusive) of a cell string value as described in .
    • +
    • maximum — a number that the maximum valid value (inclusive) of a cell string value as described in .
    • +
    • minimum exclusive — a number that the minimum valid value (exclusive) of a cell string value as described in .
    • +
    • maximum exclusive — a number that the maximum valid value (exclusive) of a cell string value as described in .
    • +
    +

    + Datatypes MAY have any number of additional annotations. The annotations on a datatype provide metadata about the datatype such as title or description. These arise from common properties defined on datatype descriptions within metadata documents, as defined in [[!tabular-metadata]]. +

    +
    +

    Length Constraints

    +

    + The length, minimum length and maximum length annotations indicate the exact, minimum and maximum lengths for cell string values. +

    +

    + 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, minimum exclusive, and maximum exclusive annotations indicate limits on cell string values. These apply to numeric, date/time, and duration types. +

    +

    + Validation of cell string values against these datatypes is as defined in [[!xmlschema11-2]]. +

    +
    +

    Locating Metadata

    @@ -533,6 +595,304 @@

    Creating Annotated Tables

    In the case of starting with a metadata file, UMM will describe a table or group of tables, and no other metadata files will be retrieved. Thus the metadata file must provide all applicable metadata aside from that embedded within the tabular data files themselves.

    +
    +

    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 + datatype, + default, + lang, + null, + required, and + separator annotations 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.
    • +
    +

    The process of parsing a cell creates a cell with annotations based on the original string value, parsed value and other column annotations and adds the cell to the list of cells in a row and cells in a column:

    + +

    + 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 into a single value or a list of values is as follows: +

    +
      +
    1. unless the datatype base is string, json, xml, html, anyAtomicType, or any, replace all carriage return (#xD), line feed (#xA), and tab (#x9) characters with space characters.
    2. +
    3. unless the datatype base 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.
    4. +
    5. if the resulting string is an empty string, apply the remaining steps to the string given by the column default annotation.
    6. +
    7. if the column separator annotation is not null and the resulting string is an empty string, the cell value is an empty list. If the column required annotation is true, add an error to the list of errors for the cell.
    8. +
    9. if the column separator annotation is not null, the cell value is a list of values created by: +
        +
      1. if the normalized string is an empty string, apply the remaining steps to the string given by the column default annotation.
      2. +
      3. if the normalized string is the same as any one of the values of the column null annotation, then the resulting value is null.
      4. +
      5. split the normalized string at the character specified by the column separator annotation.
      6. +
      7. unless the datatype base is string, anyAtomicType, or any, strip leading and trailing whitespace from these strings.
      8. +
      9. applying the remaining steps to each of the strings in turn.
      10. +
      +
    10. +
    11. if the string is an empty string, apply the remaining steps to the string given by the column default annotation.
    12. +
    13. if the string is the same as any one of the values of the column null annotation, then the resulting value is null. If the column separator annotation is null and the column required annotation is true, add an error to the list of errors for the cell.
    14. +
    15. validate the string based on the datatype, using the datatype format annotation 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 column lang annotation.
    16. +
    17. otherwise, if there are no errors, parse the string using the datatype format if one is specified, as described below; the resulting value is typed according to the datatype base and if the datatype base is string, or there is no datatype, it has the language provided by the column lang annotation.
    18. +
    +

    The final value (or values) become the value annotation on the cell.

    +

    If there is a about URL annotation on the column, it becomes the about URL annotation on the cell, after being transformed into an absolute URL as described in URI Template Properties of [[!tabular-metadata]].

    +

    If there is a property URL annotation on the column, it becomes the property URL annotation on the cell, after being transformed into an absolute URL as described in URI Template Properties of [[!tabular-metadata]].

    +

    If there is a value URL annotation on the column, it becomes the value URL annotation on the cell, after being transformed into an absolute URL as described in URI Template Properties of [[!tabular-metadata]]. The value URL annotation is null if the cell value is null and the column virtual annotation is false.

    +
    +

    Parsing examples

    +

    + When datatype annotation 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 base 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 base is a numeric type, the datatype format annotation 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
    +
    A single character string whose value is used to represent a decimal point within the number. The default value is ".".
    +
    groupChar
    +
    A single character string whose value is used to group digits within the number. The default value is ",".
    +
    pattern
    +
    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 datatype format annotation 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: +

    +
      +
    1. an optional + or - sign,
    2. +
    3. followed by a decimal digit (0-9),
    4. +
    5. followed by any number of decimal digits (0-9) and the character specified as the groupChar,
    6. +
    7. followed by an optional decimalChar followed by one or more decimal digits (0-9),
    8. +
    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
    10. +
    11. followed by an optional percent (%) or per-mille () sign.
    12. +
    +

    + or that are one of the special values: +

    +
      +
    1. NaN,
    2. +
    3. INF, or
    4. +
    5. -INF.
    6. +
    +

    + 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 base is integer or one of its sub-values,
    • +
    • contains an exponent, if the datatype base is decimal or one of its sub-values, or
    • +
    • is one of the special values NaN, INF, or -INF, if the datatype base 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 base for a cell is boolean, the datatype format annotation 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 base is a date or time type, the datatype format annotation 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 base is a duration type, the datatype format annotation 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 base is not numeric, boolean, a date/time type, or a duration type, the datatype format annotation 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 datatype format annotation to specify a regular expression against which such values will be tested. +

    +
    +

    Displaying Tables

    @@ -670,7 +1030,7 @@

    Grammar

    -

    Parsing Tabular Data

    +

    Parsing Tabular Data

    As described in , there may be many formats which an application might interpret into the tabular data model described in , including using different separators or fixed format tables, multiple tables within a single file, or ones that have metadata lines before a table header.

    @@ -908,7 +1268,7 @@

    Parsing Tabular Data

    This parsing algorithm does not account for the possibility of there being more than one area of tabular data within a single CSV file.

    -
    +

    Bidirectionality in CSV Files

    Bidirectional content does not alter the definition of rows or the assignment of cells to columns. Whether or not a CSV file contains right-to-left characters, the first column's content is the first cell of each row, which is the text prior to the first occurrence of a comma within that row. From ba2d36b466827a096b7b685a5aea7e56d9a816cc Mon Sep 17 00:00:00 2001 From: Ivan Herman Date: Fri, 10 Apr 2015 11:56:31 +0200 Subject: [PATCH 05/18] Some editing on the latest changes: Syntax document: * I have added some words in the abstract to make it clear that other applications may come with other means of creating annotations, although the standard metadata format is the one we have defined * In 3.1 I have changed "resources" to "tables", to be consistent with the changes we introduced elsewhere * I changed a bit the reference to common properties. Other mechanisms may generate those additional annotations through different means, and the current text read as if those would come only from the common properties * I also removed the dependency of notes on the metadata document. It does not really bring too much to refer to it. * I have added a reference to BCP47 for the lang annotation for columns. The document already uses that for the titles, and this restriction is needed for conversions. Metadata document: * I have added (well copied from the text) a paragraph from the abstract. It define the role of this document better... --- metadata/index.html | 3 + .../WD-syntax-2015-04/datatypes.png | Bin 0 -> 41692 bytes .../WD-syntax-2015-04/datatypes.svg | 2730 +++++++++++++++++ syntax/index.html | 25 +- 4 files changed, 2744 insertions(+), 14 deletions(-) create mode 100644 publishing-snapshots/WD-syntax-2015-04/datatypes.png create mode 100644 publishing-snapshots/WD-syntax-2015-04/datatypes.svg diff --git a/metadata/index.html b/metadata/index.html index 5be2c2a1..24236289 100644 --- a/metadata/index.html +++ b/metadata/index.html @@ -119,6 +119,9 @@

    Validation, conversion, display, and search of tabular data on the web requires additional metadata that describes how the data should be interpreted. This document defines a vocabulary for metadata that annotates tabular data. This can be used to provide metadata at various levels, from collections of data from CSV documents, and how they relate to each other down to individual cells within a table.

    +

    + The metadata defined in this specification is used to provide annotations on an annotated table or group of tables, as defined in [[!tabular-data-model]]. Annotated tables form the basis for all further processing, such as validating, converting, or displaying the tables. +

    diff --git a/publishing-snapshots/WD-syntax-2015-04/datatypes.png b/publishing-snapshots/WD-syntax-2015-04/datatypes.png new file mode 100644 index 0000000000000000000000000000000000000000..a907a8cbe38d2bd806c2f5723bd6677ed379c179 GIT binary patch literal 41692 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

    QzZ^J~dMp-XUKFaEZP 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

    QJjr|+&^i$^ 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 IExnTd7o>$?m;e9( literal 0 HcmV?d00001 diff --git a/publishing-snapshots/WD-syntax-2015-04/datatypes.svg b/publishing-snapshots/WD-syntax-2015-04/datatypes.svg new file mode 100644 index 00000000..2e7059ef --- /dev/null +++ b/publishing-snapshots/WD-syntax-2015-04/datatypes.svg @@ -0,0 +1,2730 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/syntax/index.html b/syntax/index.html index e0818dd0..96bdfe4f 100644 --- a/syntax/index.html +++ b/syntax/index.html @@ -111,10 +111,10 @@

    - Tabular data is routinely transferred on the web in a variety of formats, including variants on CSV, tab-delimited files, fixed field formats, spreadsheets, HTML tables, and SQL dumps. This document outlines a data model or infoset for tabular data and metadata about that tabular data that can be used as a basis for validation, display, or creating other formats. It also contains some non-normative guidance for publishing tabular data as CSV and how that maps into the tabular data model. + Tabular data is routinely transferred on the web in a variety of formats, including variants on CSV, tab-delimited files, fixed field formats, spreadsheets, HTML tables, and SQL dumps. This document outlines a data model, or infoset, for tabular data and metadata about that tabular data that can be used as a basis for validation, display, or creating other formats. It also contains some non-normative guidance for publishing tabular data as CSV and how that maps into the tabular data model.

    - An annotated model of tabular data can be supplemented by separate metadata about the table. This specification defines how implementations should locate that metadata, given a file containing tabular data. The syntax for that metadata is defined in [[!tabular-metadata]]. + An annotated model of tabular data can be supplemented by separate metadata about the table. This specification defines how implementations should locate that metadata, given a file containing tabular data. The standard syntax for that metadata is defined in [[!tabular-metadata]]. Note, however, that applications may have other means to create annotated tables, e.g., through some application specific API-s; this model does not depend on the specificities described in [[!tabular-metadata]].

    Tables

    @@ -205,7 +205,7 @@

    Tables

  • direction — the direction in which the columns in the table should be displayed, as described in .
  • foreign keys — a list of foreign keys on the table, as defined in [[!tabular-metadata]], which may be an empty list.
  • id — an identifier for this table, or null if this is undefined.
  • -
  • notes — a list of notes on the table, as described in [[!tabular-metadata]], which may be an empty list.
  • +
  • notes — any number of additional annotations on the table. This annotation may be empty.
  • rows — the list of rows in the table. A table MUST have one or more rows and the order of the rows within the list is significant and MUST be preserved by applications.
  • suppress output — a boolean that indicates whether or not this table should be suppressed in any output generated from the converting the group of tables that this table belongs to into another format, as described in .
  • transformations — a (possibly empty) list of specifications for converting this table into other formats, as defined in [[!tabular-metadata]].
  • @@ -219,9 +219,7 @@

    Tables

  • information about the source or provenance of the data in the table, or
  • links to other tables (eg to indicate tables that include related information).
  • -

    - These arise from common properties defined on table descriptions within metadata documents, as defined in [[!tabular-metadata]]. -

    +

    When originating from [[!tabular-metadata]], these annotations arise from common properties defined on table group descriptions within metadata documents.

    Columns

    @@ -233,7 +231,7 @@

    Columns

  • 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.
  • -
  • lang — the expected language for the values of cells in this column.
  • +
  • lang — the code for the expected language for the values of cells in this column, expressed in the format defined by [[!BCP47]]
  • 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.
  • number — the position of the column amongst the columns for the associated table, starting from 1.
  • @@ -250,8 +248,7 @@

    Columns

  • 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.
  • - Columns MAY in addition have any number of other annotations, such as a description. These arise from common properties defined on column descriptions within metadata documents, as defined in [[!tabular-metadata]]. -

    + Columns MAY in addition have any number of other annotations, such as a description. When originating from [[!tabular-metadata]], these annotations arise from common properties defined on table group descriptions within metadata documents.

    Rows

    From 4b4f6f92907b42967548cc93bcfce59d3ef8cf2e Mon Sep 17 00:00:00 2001 From: Jeni Tennison Date: Fri, 10 Apr 2015 12:10:00 +0100 Subject: [PATCH 06/18] editorial changes --- csv2json/index.html | 44 ++++++++++++++++++++------------------------ csv2rdf/index.html | 45 ++++++++++++++++++++++----------------------- 2 files changed, 42 insertions(+), 47 deletions(-) diff --git a/csv2json/index.html b/csv2json/index.html index 67ec580d..6d08e23d 100644 --- a/csv2json/index.html +++ b/csv2json/index.html @@ -114,7 +114,7 @@

    Introduction

    The [[!tabular-data-model]] defines an annotated tabular data model consisting of tables, columns, rows, and cells, enriched with annotations that describe the structure of the tabular data and the meaning of its content. A table group is a collection of tables published as a single atomic unit.

    -

    The conversion procedure described in this specification operates on the tabular data. This specification does not specify the processes needed to convert CSV-encoded data into tabular data form. Please refer to [[!tabular-data-model]] for details of parsing tabular data.

    +

    The conversion procedure described in this specification operates on the annotated tabular data model. This specification does not specify the processes needed to convert CSV-encoded data into tabular data form. Please refer to [[!tabular-data-model]] for details of parsing tabular data.

    Conversion applications MUST provide at least two modes of operation: standard and minimal.

    @@ -126,13 +126,14 @@

    Introduction

    Conversion applications MAY offer additional implementation specific conversion modes.

    -

    Conversion specifications, as defined in [[!tabular-metadata]] MAY be used to specify how tabular data can be transformed into another format using a script or template. Such a conversion specification MAY use the JSON output described in this specification as input.

    - -

    The conversion procedure described in this specification is considered to be entirely textual. There is no requirement on conversion applications to check the semantic consistency of the data during the conversion, nor to validate the output against JSON syntax rules. Downstream applications SHOULD be aware of the potential for syntax errors and take appropriate action.

    +

    Transformation definitions, as defined in [[!tabular-metadata]] MAY be used to specify how tabular data can be transformed into another format using a script or template. Such a transformation definitions MAY use the JSON output described in this specification as input.

    -

    Tabular data MUST conform to the description from [[!tabular-data-model]]. In particular note that each row MUST contain the same number of cells (although some of these cells may be empty). Given this constraint, not all CSV-encoded data can be considered to be tabular data. As such, the conversion procedure described in this specification cannot be applied to all CSV files.

    +

    Tabular data MUST conform to the description from [[!tabular-data-model]]. In particular note that each row MUST contain the same number of cells (although some of these cells may be empty).

    +

    + Not all CSV-encoded data can be parsed into a tabular data model. An algorithm for parsing CSV-based files is described in [[!tabular-model]]. +

    @@ -144,7 +145,7 @@

    Converting Tabular Data to JSON

    Algorithm terms

    aboutUrl
    -
    aboutUrl is the evaluation of the URI template property aboutUrl for the current cell.
    +
    aboutUrl is the value of about url annotation for the current cell.
    annotated table
    The annotated table is defined in [[!tabular-data-model]] as describing a particular table and its metadata.
    @@ -159,20 +160,20 @@

    Algorithm terms

    Cell errors are defined in [[!tabular-data-model]] as a (possibly empty) list of validation errors generated while parsing the literal content of a cell to generate the semantic value.
    cell value
    -
    A cell value is defined in [[!tabular-data-model]] as the semantic value of the cell; this MAY be null or, in the case that the cell specifies a separator property, a sequence of values.
    +
    A cell value is defined in [[!tabular-data-model]] as the semantic value of the cell; this MAY be null or a sequence of values.
    column
    A column is defined in [[!tabular-data-model]] as a vertical arrangement of cells within a table.
    -
    common properties
    -
    The common properties, defined in Section 3.3 Common Properties of [[!tabular-metadata]]), may be specified for tables and table groups.
    -
    identifier
    -
    The identifier is the evaluation of the @id property for the current resource. As defined in [[!tabular-data-model]], the identifier is null if the @id property is undefined. The identifier MAY be applied to either a table group or a table.
    +
    The identifier is the value of the id annotation for the current object. As defined in [[!tabular-data-model]], the identifier may be null. The identifier MAY be applied to either a table group or a table.
    name
    In the context of this specification, name is used as defined in JSON ([[!RFC7159]]); that is, that name is a string that provides a unique key within a set of name-value pairs within a JSON object.
    +
    non-core annotations
    +
    Core annotations are listed in [[!tabular-model]]; table groups and tables may also have other annotations that are not defined in that specification; these are known as non-core annotations.
    +
    notes
    A list of notes, as defined in [[!tabular-data-model]], attached to an annotated table or table group using the notes property. This may be an empty list.
    @@ -180,7 +181,7 @@

    Algorithm terms

    An object is defined in JSON ([[!RFC7159]]) as unordered collection of zero or more name-value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.
    propertyUrl
    -
    The propertyUrl is the evaluation of the URI template property propertyUrl for the current cell.
    +
    The propertyUrl is the value of property url annotation for the current cell.
    row
    The row is defined in [[!tabular-data-model]] as a horizontal arrangement of cells within a table.
    @@ -196,12 +197,9 @@

    Algorithm terms

    table group
    The table group is defined in [[!tabular-data-model]] as comprising a set of annotated tables and a set of annotations that relate to those tables.
    - -
    table group description
    -
    The table group description object as defined in [[!tabular-data-model]].
    valueUrl
    -
    The valueUrl is the evaluation of the URI template property valueUrl for the current cell.
    +
    The valueUrl is the value of value url annotation for the current cell.
    @@ -210,8 +208,6 @@

    Generating JSON

    A conformant JSON conversion application MUST produce output conforming to this algorithm according to the chosen mode of conversion: standard or minimal.

    -

    Where an annotated table is defined in isolation (e.g. in the absence of a table group description), a default table group description is provided with a single resources annotation that refers to that table.

    -

    Minimal mode

    The steps in the algorithm defined here apply to minimal mode.

    @@ -262,7 +258,7 @@

    Standard mode

  • -

    Insert any notes and common properties specified for the table group into object G according to the rules provided in .

    +

    Insert any notes and non-core annotations specified for the table group into object G according to the rules provided in .

  • Insert the following name-value pair into object G:

    @@ -300,7 +296,7 @@

    Standard mode

  • -

    Insert any notes and common properties specified for the table into object T according to the rules provided in .

    +

    Insert any notes and non-core annotations specified for the table into object T according to the rules provided in .

    All other annotations for the table are ignored during the conversion; including information about table schemas and column descriptions specified therein, dialect descriptions, foreign-key-definitions etc.

  • @@ -617,9 +613,9 @@

    Interpreting datatypes

    JSON-LD to JSON

    -

    This section defines a mechanism for transforming the [[json-ld]] dialect used for common properties and notes into JSON.

    +

    This section defines a mechanism for transforming the [[json-ld]] dialect used for non-core annotations and notes into JSON.

    -

    Name-value pairs from notes and common properties annotations are generally copied verbatim from the metadata description subject to the exceptions below:

    +

    Name-value pairs from notes and non-core annotations annotations are generally copied verbatim from the metadata description subject to the exceptions below:

    1. Name-value pairs whose value is an object using the [[json-ld]] keyword @value, for example:

      @@ -656,7 +652,7 @@

      JSON-LD to JSON

    -

    In addition to compacting values of propertyUrls, URLs which ware the value of @type used within the notes and common properties are compacted according to the rules as defined in URL Compaction in [[!tabular-metadata]].

    +

    In addition to compacting values of propertyUrls, URLs which ware the value of @type used within the notes and non-core annotations are compacted according to the rules as defined in URL Compaction in [[!tabular-metadata]].

    @@ -931,7 +927,7 @@

    Example with single table and rich annotations

    Table T ({ "url": "http://example.org/tree-ops-ext.csv"}) has been explicitly identified: { "@id": "<http://exmple.org/tree-ops-ext>"}.

    -

    Common properties and notes specified for table T ({ "url": "http://example.org/tree-ops-ext.csv"}) are included in the output.

    +

    Non-core annotations and notes specified for table T ({ "url": "http://example.org/tree-ops-ext.csv"}) are included in the output.

    diff --git a/csv2rdf/index.html b/csv2rdf/index.html index ae540c4b..abbc16cd 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -125,11 +125,11 @@

    Introduction

    -

    This document describes the processing of tabular data to create an RDF subject-predicate-object triples [[!rdf11-concepts]]. Since RDF is an abstract syntax, these triples MAY be serialized in a concrete RDF syntax such as N-Triples [[n-triples]], Turtle [[turtle]], RDFa [[rdfa-primer]], JSON-LD [[json-ld]], or TriG [[trig]]. The RDF serializations offered by a conversion application is implementation dependent.

    +

    This document describes the processing of tabular data to create an RDF subject-predicate-object triples [[!rdf11-concepts]]. Since RDF is an abstract syntax, these triples MAY be serialized in a concrete RDF syntax such as N-Triples [[n-triples]], Turtle [[turtle]], RDFa [[rdfa-primer]], JSON-LD [[json-ld]], or TriG [[trig]]. The RDF serializations offered by a conversion application is implementation defined.

    The [[!tabular-data-model]] defines an annotated tabular data model consisting of tables, columns, rows, and cells, enriched with annotations that describe the structure of the tabular data and the meaning of its content. A table group is a collection of tables published as a single atomic unit.

    -

    The conversion procedure described in this specification operates on the tabular data. This specification does not specify the processes needed to convert CSV-encoded data into tabular data form. Please refer to [[!tabular-data-model]] for details of parsing tabular data.

    +

    The conversion procedure described in this specification operates on the annotated tabular data model. This specification does not specify the processes needed to convert CSV-encoded data into tabular data form. Please refer to [[!tabular-data-model]] for details of parsing tabular data.

    Conversion applications MUST provide at least two modes of operation: standard and minimal.

    @@ -141,13 +141,17 @@

    Introduction

    Conversion applications MAY offer additional implementation specific conversion modes.

    -

    Conversion specifications, as defined in [[!tabular-metadata]] MAY be used to specify how tabular data can be transformed into another format using a script or template. Such a conversion specification MAY use the RDF output described in this specification as input.

    +

    Transformation definitions, as defined in [[!tabular-metadata]] MAY be used to specify how tabular data can be transformed into another format using a script or template. Such a transformation definitions MAY use the RDF output described in this specification as input.

    -

    The conversion procedure described in this specification is considered to be entirely textual. There is no requirement on conversion applications to check the semantic consistency of the data during the conversion, nor to validate the triples against RDF syntax rules. Downstream applications SHOULD be aware of the potential for syntax errors and take appropriate action.

    +

    There is no requirement on conversion applications to check the semantic consistency of the data during the conversion, nor to validate the triples against RDF schema. Downstream applications SHOULD be aware of the potential for inconsistencies and take appropriate action.

    -

    Tabular data MUST conform to the description from [[!tabular-data-model]]. In particular note that each row MUST contain the same number of cells (although some of these cells may be empty). Given this constraint, not all CSV-encoded data can be considered to be tabular data. As such, the conversion procedure described in this specification cannot be applied to all CSV files.

    +

    Tabular data MUST conform to the description from [[!tabular-data-model]]. In particular note that each row MUST contain the same number of cells (although some of these cells may be empty).

    + +

    + Not all CSV-encoded data can be parsed into a tabular data model. An algorithm for parsing CSV-based files is described in [[!tabular-model]]. +

    This specification makes use of the compact IRI Syntax; please refer to the Compact IRIs from [[json-ld]].

    @@ -173,7 +177,7 @@

    Converting Tabular Data to RDF

    Algorithm terms

    aboutUrl
    -
    aboutUrl is the evaluation of the URI template property aboutUrl for the current cell.
    +
    aboutUrl is the value of about url annotation for the current cell.
    annotated table
    The annotated table is defined in [[!tabular-data-model]] as describing a particular table and its metadata.
    @@ -188,16 +192,13 @@

    Algorithm terms

    Cell errors are defined in [[!tabular-data-model]] as a (possibly empty) list of validation errors generated while parsing the literal content of a cell to generate the semantic value.
    cell value
    -
    A cell value is defined in [[!tabular-data-model]] as the semantic value of the cell; this MAY be null or, in the case that the cell specifies a separator property, a sequence of values.
    +
    A cell value is defined in [[!tabular-data-model]] as the semantic value of the cell; this MAY be null or a sequence of values.
    column
    A column is defined in [[!tabular-data-model]] as a vertical arrangement of cells within a table.
    -
    common properties
    -
    The common properties of a metadata resource are defined in Section 3.3 Common Properties of [[!tabular-metadata]]). The RDF triples corresponding to these properties are the result of running the algorithm specified in or equivalalent, over the common properties defined within the metadata description.
    -
    identifier
    -
    The identifier is the evaluation of the @id property for the current resource. As defined in [[!tabular-data-model]], the identifier is null if the @id property is undefined. The identifier MAY be applied to either a table group or a table.
    +
    The identifier is the value of the id annotation for the current object. As defined in [[!tabular-data-model]], the identifier may be null. The identifier MAY be applied to either a table group or a table.
    literal node
    A literal node is defined in [[!rdf11-concepts]] as a node within an RDF graph that provides values such as strings, numbers, and dates.
    @@ -205,6 +206,9 @@

    Algorithm terms

    node
    A node is defined in [[!rdf11-concepts]] as a subject or an object of an RDF triple. When in subject position, it can be either a blank node or identified with a URL; when in object position, it can be a blank node, a literal, or identified with a URL.
    +
    non-core annotations
    +
    Core annotations are listed in [[!tabular-model]]; table groups and tables may also have other annotations that are not defined in that specification; these are known as non-core annotations.
    +
    notes
    A list of notes, as defined in [[!tabular-data-model]], attached to an annotated table or table group using the notes property. This may be an empty list.
    @@ -215,7 +219,7 @@

    Algorithm terms

    A prefixed name is an abbreviation for a URI, in the syntax prefix:name. See Names of Common Properties in [[!tabular-metadata]] for information on expansion.
    propertyUrl
    -
    The propertyUrl is the evaluation of the URI template property propertyUrl for the current cell.
    +
    The propertyUrl is the value of property url annotation for the current cell.
    row
    The row is defined in [[!tabular-data-model]] as a horizontal arrangement of cells within a table.
    @@ -231,12 +235,9 @@

    Algorithm terms

    table group
    The table group is defined in [[!tabular-data-model]] as comprising a set of annotated tables and a set of annotations that relate to those tables.
    - -
    table group description
    -
    The table group description object as defined in [[!tabular-data-model]].
    valueUrl
    -
    The valueUrl is the evaluation of the URI template property valueUrl for the current cell.
    +
    The valueUrl is the value of value url annotation for the current cell.
    @@ -247,8 +248,6 @@

    Generating RDF

    Unless specified otherwise, the steps in the algorithm defined herein apply to both standard and minimal modes.

    -

    Where an annotated table is defined in isolation (e.g. in the absence of a table group description), a default table group description is provided with a single resources annotation that refers to that table.

    -
    1. In standard mode only, establish a new node G. @@ -266,7 +265,7 @@

      Generating RDF

    2. -

      In standard mode only, emit the triples generated by running the algorithm specified in over any notes and common properties specified for the table group, with node G as an initial subject, the notes or common property as property, and the value of the notes or common property as value.

      +

      In standard mode only, emit the triples generated by running the algorithm specified in over any notes and non-core annotations specified for the table group, with node G as an initial subject, the notes or non-core annotation as property, and the value of the notes or non-core annotation as value.

    3. For each table where the value of property suppressOutput is false:

      @@ -309,7 +308,7 @@

      Generating RDF

    4. -

      In standard mode only, emit the triples generated by running the algorithm specified in over any notes and common properties specified for the table, with node T as an initial subject, the notes or common property as property, and the value of the notes or common property as value.

      +

      In standard mode only, emit the triples generated by running the algorithm specified in over any notes and non-core annotations specified for the table, with node T as an initial subject, the notes or non-core annotation as property, and the value of the notes or non-core annotation as value.

      All other annotations for the table are ignored during the conversion; including information about table schemas and column descriptions specified therein, dialect descriptions, foreign-key-definitions etc.

    5. @@ -537,7 +536,7 @@

      Inclusion of provenance information

      JSON-LD to RDF

      -

      This section defines a mechanism for transforming the [[json-ld]] dialect used for common properties and notes into RDF in a manner consistent with the Deserialize JSON-LD to RDF Algorithm defined in [[!json-ld-api]]. Converters MAY use any algorithm which results in equivalent triples.

      +

      This section defines a mechanism for transforming the [[json-ld]] dialect used for non-core annotations and notes into RDF in a manner consistent with the Deserialize JSON-LD to RDF Algorithm defined in [[!json-ld-api]]. Converters MAY use any algorithm which results in equivalent triples.

      Given a subject, property and value in normalized form:

      1. Property is a term defined in the [[csvw-context]], a prefixed name, or an absolute URL; expand to an absolute URL by replacing a term with the URI from the term definition in [[csvw-context]] or a prefixed name as described in .
      2. @@ -891,8 +890,8 @@

        Example with single table and rich annotations

        Table T ({ "url": "http://example.org/tree-ops-ext.csv"}) has been explicitly identified: { "@id": "<http://exmple.org/tree-ops-ext>"}.

        -

        Common properties and notes specified for table T ({ "url": "http://example.org/tree-ops-ext.csv"}) are included in the output.

        -

        As the metadata description file http://example.org/tree-ops-ext.csv-metadata.json defines a default language within the context ("@context": ["http://www.w3.org/ns/csvw", {"@language": "en"}]), all common properties of type string (e.g. dc:title, dcat:keyword, dc:publisher, dc:license and dc:modified) are expressed in the RDF output using the the appropriate language tag.

        +

        Non-core annotations and notes specified for table T ({ "url": "http://example.org/tree-ops-ext.csv"}) are included in the output.

        +

        As the metadata description file http://example.org/tree-ops-ext.csv-metadata.json defines a default language within the context ("@context": ["http://www.w3.org/ns/csvw", {"@language": "en"}]), all non-core annotations of type string (e.g. dc:title, dcat:keyword, dc:publisher, dc:license and dc:modified) are expressed in the RDF output using the the appropriate language tag.

      From 2581bd2ec211e78d425c47afc211cc72b4d4fddd Mon Sep 17 00:00:00 2001 From: Gregg Kellogg Date: Fri, 10 Apr 2015 10:37:19 -0700 Subject: [PATCH 07/18] Fix Cells header. --- syntax/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/index.html b/syntax/index.html index 96bdfe4f..9a701182 100644 --- a/syntax/index.html +++ b/syntax/index.html @@ -275,7 +275,7 @@

      Rows

  • - +

    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:

    From 12bd95cd4879c2dfd5c1ab7e00b8545d8eb223bc Mon Sep 17 00:00:00 2001 From: Gregg Kellogg Date: Fri, 10 Apr 2015 10:40:00 -0700 Subject: [PATCH 08/18] Fix similar ABBR markup error in metadata. --- metadata/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata/index.html b/metadata/index.html index 24236289..9220ff06 100644 --- a/metadata/index.html +++ b/metadata/index.html @@ -609,7 +609,7 @@

    Optional Properties

    An atomic property that MUST have a single string value that is one of "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.

    -
    +
    tableSchema

    An 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.

    From 572fe5fc0438eef0b5fa637b15046e193f722943 Mon Sep 17 00:00:00 2001 From: Gregg Kellogg Date: Fri, 10 Apr 2015 13:06:53 -0700 Subject: [PATCH 09/18] Update to csv2rdf to use model definitions rather than metadata properties. Depends on `cell lang` which needs to be defined, `cell value` better specifying _list_ and _datatype_. #463. --- csv2rdf/index.html | 155 +++++++++++++++++++++++---------------------- 1 file changed, 80 insertions(+), 75 deletions(-) diff --git a/csv2rdf/index.html b/csv2rdf/index.html index 0364bc4a..25f4cb87 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -127,13 +127,13 @@

    Introduction

    This document describes the processing of tabular data to create an RDF subject-predicate-object triples [[!rdf11-concepts]]. Since RDF is an abstract syntax, these triples MAY be serialized in a concrete RDF syntax such as N-Triples [[n-triples]], Turtle [[turtle]], RDFa [[rdfa-primer]], JSON-LD [[json-ld]], or TriG [[trig]]. The RDF serializations offered by a conversion application is implementation dependent.

    -

    The [[!tabular-data-model]] defines an annotated tabular data model consisting of tables, columns, rows, and cells, enriched with annotations that describe the structure of the tabular data and the meaning of its content. A table group is a collection of tables published as a single atomic unit.

    +

    The [[!tabular-data-model]] defines an annotated tabular data model consisting of tables, columns, rows, and cells, enriched with annotations that describe the structure of the tabular data and the meaning of its content. A group of tables is a collection of tables published as a single atomic unit.

    The conversion procedure described in this specification operates on the tabular data. This specification does not specify the processes needed to convert CSV-encoded data into tabular data form. Please refer to [[!tabular-data-model]] for details of parsing tabular data.

    Conversion applications MUST provide at least two modes of operation: standard and minimal.

    -

    Standard mode conversion frames the information gleaned from the cells of the tabular data with details of the rows, tables, and a table group within which that information is provided.

    +

    Standard mode conversion frames the information gleaned from the cells of the tabular data with details of the rows, tables, and a group of tables within which that information is provided.

    Minimal mode conversion includes only the information gleaned from the cells of the tabular data.

    @@ -172,11 +172,11 @@

    Converting Tabular Data to RDF

    Algorithm terms

    -
    aboutUrl
    -
    aboutUrl is the evaluation of the URI template property aboutUrl for the current cell.
    +
    about URL
    +
    The about URL annotation on the current cell.
    annotated table
    -
    The annotated table is defined in [[!tabular-data-model]] as describing a particular table and its metadata.
    +
    The annotated table is defined in [[!tabular-data-model]] as describing a particular table and its annotations.
    blank node
    A blank node is defined in [[!rdf11-concepts]] as an RDF Term disjoint from IRIs or literals.
    @@ -188,16 +188,19 @@

    Algorithm terms

    Cell errors are defined in [[!tabular-data-model]] as a (possibly empty) list of validation errors generated while parsing the literal content of a cell to generate the semantic value.
    cell value
    -
    A cell value is defined in [[!tabular-data-model]] as the semantic value of the cell; this MAY be null or, in the case that the cell specifies a separator property, a sequence of values.
    +
    A cell value is defined in [[!tabular-data-model]] as the semantic value of the cell; this MAY be null or, in the case that the cell has a separator annotation, a sequence of values.
    column
    A column is defined in [[!tabular-data-model]] as a vertical arrangement of cells within a table.
    common properties
    -
    The common properties of a metadata resource are defined in Section 3.3 Common Properties of [[!tabular-metadata]]). The RDF triples corresponding to these properties are the result of running the algorithm specified in or equivalalent, over the common properties defined within the metadata description.
    +
    The common properties of a metadata resource are defined in Section 3.3 Common Properties of [[!tabular-metadata]]), these create additional annotations on a group of tables, annotated table, column, row, or cell. The RDF triples corresponding to these annotations are the result of running the algorithm specified in or equivalalent, over the additional annotations on the annotated object as defined in [[!tabular-data-model]].
    -
    identifier
    -
    The identifier is the evaluation of the @id property for the current resource. As defined in [[!tabular-data-model]], the identifier is null if the @id property is undefined. The identifier MAY be applied to either a table group or a table.
    +
    group of tables
    +
    The group of tables is defined in [[!tabular-data-model]] as comprising a set of annotated tables and a set of annotations that relate to those tables.
    + +
    group of tables identifier
    +
    The identifier is the id annotation on a group of tables. As defined in [[!tabular-data-model]].
    literal node
    A literal node is defined in [[!rdf11-concepts]] as a node within an RDF graph that provides values such as strings, numbers, and dates.
    @@ -206,7 +209,7 @@

    Algorithm terms

    A node is defined in [[!rdf11-concepts]] as a subject or an object of an RDF triple. When in subject position, it can be either a blank node or identified with a URL; when in object position, it can be a blank node, a literal, or identified with a URL.
    notes
    -
    A list of notes, as defined in [[!tabular-data-model]], attached to an annotated table or table group using the notes property. This may be an empty list.
    +
    A list of notes, as defined in [[!tabular-data-model]], attached to an annotated table or group of tables using the notes property. This may be an empty list.
    predicate
    A predicate is defined in [[!rdf11-concepts]] as an IRI that denotes the property used to relate nodes within an RDF triple.
    @@ -214,8 +217,8 @@

    Algorithm terms

    prefixed name
    A prefixed name is an abbreviation for a URI, in the syntax prefix:name. See Names of Common Properties in [[!tabular-metadata]] for information on expansion.
    -
    propertyUrl
    -
    The propertyUrl is the evaluation of the URI template property propertyUrl for the current cell.
    +
    property URL
    +
    The property URL annotation on the current cell.
    row
    The row is defined in [[!tabular-data-model]] as a horizontal arrangement of cells within a table.
    @@ -227,16 +230,19 @@

    Algorithm terms

    A row source number is defined in [[!tabular-data-model]] as the position of the row within the source tabular data file. Provision of the row source number is dependent on parsing applications and may be reported as null.
    subject
    -
    Within this algorithm, a subject is the resource that the value of a given cell refers to. This may be specified using the aboutUrl property.
    +
    Within this algorithm, a subject is the resource that the value of a given cell refers to. This may be specified using about URL.
    + +
    table description
    +
    The table description description object as defined in [[!tabular-metadata]] is used to create an annotated table as defined in [[!tabular-data-model]].
    -
    table group
    -
    The table group is defined in [[!tabular-data-model]] as comprising a set of annotated tables and a set of annotations that relate to those tables.
    -
    table group description
    -
    The table group description object as defined in [[!tabular-data-model]].
    +
    The table group description description object as defined in [[!tabular-metadata]] is used to create a group of tables as defined in [[!tabular-data-model]].
    -
    valueUrl
    -
    The valueUrl is the evaluation of the URI template property valueUrl for the current cell.
    +
    table identifier
    +
    The identifier is the id annotation on an annotated table. As defined in [[!tabular-data-model]].
    + +
    value URL
    +
    The value URL annotation on the current cell.
    @@ -247,12 +253,12 @@

    Generating RDF

    Unless specified otherwise, the steps in the algorithm defined herein apply to both standard and minimal modes.

    -

    Where an annotated table is defined in isolation (e.g. in the absence of a table group description), a default table group description is provided with a single tables annotation that refers to that table.

    +

    Where an annotated table is defined in isolation (e.g. in the absence of a group of tables), a default group of tables is provided with a single tables annotation that refers to that table.

    1. In standard mode only, establish a new node G. - If the table group has an identifier then node G MUST be identified accordingly; else if identifier is null, then node G MUST be a new blank node. + If the group of tables has an identifier then node G MUST be identified accordingly; else if identifier is null, then node G MUST be a new blank node.
    2. In standard mode only, specify the type of node G as csvw:TableGroup; emit the following triple:

      @@ -266,17 +272,17 @@

      Generating RDF

    3. -

      In standard mode only, emit the triples generated by running the algorithm specified in over any notes and common properties specified for the table group, with node G as an initial subject, the notes or common property as property, and the value of the notes or common property as value.

      +

      In standard mode only, emit the triples generated by running the algorithm specified in over any notes and common properties specified for the group of tables, with node G as an initial subject, the notes or common property as property, and the value of the notes or common property as value.

    4. -

      For each table where the value of property suppressOutput is false:

      +

      For each table where the suppress output annotation is false:

      1. In standard mode only, establish a new node T which represents the current table.

        -

        If the table has an identifier then node T MUST be identified accordingly; else if identifier is null, then node T MUST be a new blank node.

        +

        If the table has an identifier then node T MUST be identified accordingly; else if identifier is null, then node T MUST be a new blank node.

      2. -

        In standard mode only, relate the table to the table group; emit the following triple:

        +

        In standard mode only, relate the table to the group of tables; emit the following triple:

        subject
        node G
        @@ -298,7 +304,7 @@

        Generating RDF

      3. -

        In standard mode only, specify the source tabular data file URL for the current table based on the value of property url; emit the following triple:

        +

        In standard mode only, specify the source tabular data file URL for the current table based on the annotation; emit the following triple:

        subject
        node T
        @@ -309,9 +315,9 @@

        Generating RDF

      4. -

        In standard mode only, emit the triples generated by running the algorithm specified in over any notes and common properties specified for the table, with node T as an initial subject, the notes or common property as property, and the value of the notes or common property as value.

        +

        In standard mode only, emit the triples generated by running the algorithm specified in over any notes and non-core annotations specified for the table, such as common properties, with node T as an initial subject, the notes or common property as property, and the value of the notes or common property as value.

        -

        All other annotations for the table are ignored during the conversion; including information about table schemas and column descriptions specified therein, dialect descriptions, foreign-key-definitions etc.

        +

        All other core annotations for the table are ignored during the conversion; including information about direction and foreign keys specified therein, transformations etc.

      5. For each row in the current table:

        @@ -364,12 +370,12 @@

        Generating RDF

      6. -

        Establish a new blank node Sdef to be used as the default subject for cells where aboutUrl is undefined.

        -

        A row MAY describe multiple interrelated subjects; where the valueUrl property for one cell matches the aboutUrl property for another cell in the same row.

        -

        For each cell in the current row where the value of property suppressOutput for the column associated with that cell is false:

        +

        Establish a new blank node Sdef to be used as the default subject for cells where about URL is undefined.

        +

        A row MAY describe multiple interrelated subjects; where the value URL property for one cell matches the about URL property for another cell in the same row.

        +

        For each cell in the current row where the value of property suppress output for the column associated with that cell is false:

        1. -

          Establish a node S from the aboutUrl property if set, or from Sdef otherwise as the current subject.

          +

          Establish a node S from about URL if set, or from Sdef otherwise as the current subject.

        2. In standard mode only, relate the current subject to the current row; emit the following triple:

          @@ -383,10 +389,10 @@

          Generating RDF

        3. -

          If the value of propertyUrl for the cell is not null, then predicate P takes the value of propertyUrl.

          -

          Else, predicate P is constructed by appending the value of the name property for the column associated with the cell to the the tabular data file URL as a fragment identifier.

          +

          If the value of property URL for the cell is not null, then predicate P takes the value of property URL.

          +

          Else, predicate P is constructed by appending the value of the name annotation for the column associated with the cell to the the tabular data file URL as a fragment identifier.

        4. -
        5. If the valueUrl for the current cell is not null, then valueUrl identifies a node Vurl that is related the current subject using the predicate P; emit the following triple: +
        6. If the value URL for the current cell is not null, then value URL identifies a node Vurl that is related the current subject using the predicate P; emit the following triple:
          subject
          node S
          @@ -396,7 +402,7 @@

          Generating RDF

          node Vurl
        7. -
        8. Else, if the cell specifies a separator property and the cell value is not an empty sequence and the cell specifies that boolean property ordered is true, then the cell value provides an ordered sequence of literal nodes for inclusion within the RDF output using an instance of rdf:List Vlist as defined in [[rdf-schema]]. This instance is related to the subject using the predicate P; emit the triples defining list Vlist plus the following triple: +
        9. Else, if the cell value is a list and the column ordered annotation is true, then the cell value provides an ordered sequence of literal nodes for inclusion within the RDF output using an instance of rdf:List Vlist as defined in [[rdf-schema]]. This instance is related to the subject using the predicate P; emit the triples defining list Vlist plus the following triple:
          subject
          node S
          @@ -406,7 +412,7 @@

          Generating RDF

          node Vlist
        10. -
        11. Else, if the cell specifies a separator property and the cell value is not an empty sequence, then the cell value provides an unordered sequence of literal nodes for inclusion within the RDF output, each of which is related to the subject using the predicate P. For each value provided in the sequence, add a literal node Vliteral; emit the following triple: +
        12. Else, if the cell value is a list, then the cell value provides an unordered sequence of literal nodes for inclusion within the RDF output, each of which is related to the subject using the predicate P. For each value provided in the sequence, add a literal node Vliteral; emit the following triple:
          subject
          node S
          @@ -416,7 +422,7 @@

          Generating RDF

          literal node Vliteral
        13. -
        14. Else, if the cell value is not null and the cell does not specify a separator property, then the cell value provides a single literal node Vliteral for inclusion within the RDF output that is related the current subject using the predicate P; emit the following triple: +
        15. Else, if the cell value is not null, then the cell value provides a single literal node Vliteral for inclusion within the RDF output that is related the current subject using the predicate P; emit the following triple:
          subject
          node S
          @@ -425,8 +431,8 @@

          Generating RDF

          object
          literal node Vliteral
          -

          The literal nodes derived from the cell values MUST be expressed according to the datatype property of the cell as defined below: Interpreting datatypes.

          -

          In the case when the datatype is not present, the conversion should default to string.

          +

          The literal nodes derived from the cell values MUST be expressed according to the cell value datatype of the cell as defined below: Interpreting datatypes.

          +

          In the case when the cell value does not have a datatype, the conversion should default to string.

          In the case where a sequence of values is provided, the datatype applies to all members of the sequence.

        @@ -440,10 +446,10 @@

        Generating RDF

        Interpreting datatypes

        -

        Cell values are expressed in the RDF output according to the cell's datatype property. The relationship between the value of the datatype property and the datatype IRI used in the RDF is provided in the table below.

        +

        Cell values are expressed in the RDF output according to the cell values's' datatype. The relationship between the value of the cell values's' datatype and the datatype IRI used in the RDF is provided in the table below.

        -

        A cell's format property is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format property.

        +

        A cell's format annotation is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format annotation.

        Where the contents of the cell cannot be parsed, or other validation errors occur, cell errors will be provided. It is an implementation decision to determine how conversion applications should proceed in the event that cell errors are encountered.

        @@ -504,7 +510,7 @@

        Interpreting datatypes

        -

        In the case of rdf:langString, the appropriate language tag (as defined in [[!rdf11-concepts]]) MUST be provided for the string, based on the value of lang. +

        In the case of rdf:langString, the appropriate language tag (as defined in [[!rdf11-concepts]]) MUST be provided for the string, based on the value of lang. (See section on Graph Literals in [[!rdf11-concepts]] for further details on language tagged literals.)

        According to [[rdf11-concepts]] language tags cannot be combined with any other xsd datatypes. If a cell has any other datatype than string, the value of lang MUST be ignored. Also, all literals have a datatype; however, specific serializations, like Turtle [[turtle]], MAY provide a special syntax for literals with datatype xsd:string or rdf:langString.

        @@ -549,7 +555,7 @@

        Inclusion of provenance information

        JSON-LD to RDF

        This section defines a mechanism for transforming the [[json-ld]] dialect used for common properties and notes into RDF in a manner consistent with the Deserialize JSON-LD to RDF Algorithm defined in [[!json-ld-api]]. Converters MAY use any algorithm which results in equivalent triples.

        -

        Given a subject, property and value in normalized form:

        +

        Given a subject, property and value in normalized form:

        1. Property is a term defined in the [[csvw-context]], a prefixed name, or an absolute URL; expand to an absolute URL by replacing a term with the URI from the term definition in [[csvw-context]] or a prefixed name as described in .
        2. If value is an array, generate RDF by running this algorithm using subject, property using each array member as value.
        3. @@ -631,7 +637,7 @@

          Examples

          Simple example

          - This example comprises a single annotated table containing information attributes about countries; country code, position (latitude, longitude) and name. Whilst the input tabular data file, published at http://example.org/countries.csv, includes a header line, no further metadata annotations are given. The tabular data file is provided below: + This example comprises a single table description containing information attributes about countries; country code, position (latitude, longitude) and name. Whilst the input tabular data file, published at http://example.org/countries.csv, includes a header line, no further metadata annotations are given. The tabular data file is provided below:

          Simple example
    @@ -180,8 +180,8 @@

    Table groups

    Groups of tables MAY in addition have any number of annotations which provide information about the group of tables. Annotations on a group of tables may include: @@ -191,9 +191,9 @@

    Table groups

  • information about the source or provenance of the group of tables.
  • links to other groups of tables (eg to those that provide similar data from a different time period).
  • -

    - These arise from common properties defined on table group descriptions within metadata documents, as defined in [[!tabular-metadata]]. -

    + +

    When originating from [[!tabular-metadata]], these annotations arise from common properties defined on table group descriptions within metadata documents.

    +

    - + @@ -710,7 +716,7 @@

    Simple example

    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorspropertyUrl
    tablecolumnrowstring valuevalueerrorsproperty URL
    C1.1TC1R1"AD""AD"<http://example.org/countries.csv#countryCode>
    -

    As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of propertyUrl for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

    +

    As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of property URL annotation for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

    @@ -724,7 +730,7 @@

    Simple example

    data-oninclude="updateExample"> -

    The aboutUrl property has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where aboutUrl has not been specified are assumed to refer to the same subject. This unspecified subject is treated as a blank node.

    +

    The about URL annotation has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where the about URL annotation has not been specified are assumed to refer to the same subject. This unspecified subject is treated as a blank node.

    Standard mode output for this example is provided in Turtle [[turtle]] syntax below:

    @@ -736,8 +742,8 @@

    Simple example

    -

    Even though the table was defined in isolation, the table is wrapped in a table group.

    -

    The type of both table and table group tables is explicitly stated; csvw:TableGroup and csvw:Table respectively.

    +

    Even though the table description was defined in isolation, the annotated table is wrapped in a table group description.

    +

    The type of both table and table group description objects is explicitly stated; csvw:TableGroup and csvw:Table respectively.

    The csvw:url property provides reference to the original tabular data file and to specific rows therein - noting the need to escape the Turtle-syntax reserved character = (U+003D) within the fragment identifier.

    The row number is provided for each row using csvw:rownum property.

    A subject and row are related using the csvw:describes property.

    @@ -747,7 +753,7 @@

    Simple example

    Example with single table and rich annotations

    - This example is based on Use Case #11 - City of Palo Alto Tree Data and comprises a single annotated table describing an inventory of tree maintenance operations. The input tabular data file, published at http://example.org/tree-ops-ext.csv, and the associated metadata description http://example.org/tree-ops-ext.csv-metadata.json are provided below: + This example is based on Use Case #11 - City of Palo Alto Tree Data and comprises a single table description describing an inventory of tree maintenance operations. The input tabular data file, published at http://example.org/tree-ops-ext.csv, and the associated metadata description http://example.org/tree-ops-ext.csv-metadata.json are provided below:

    Example with single table and rich annotations
                 
               
     
    -          

    In this example, output for column C1 (GID) is not required; note the suppressOutput annotation on this column.

    +

    In this example, output for column C1 (GID) is not required; note the suppress output annotation on this column.

    Row annotations:

    @@ -831,7 +837,7 @@

    Example with single table and rich annotations

    - + @@ -866,13 +872,12 @@

    Example with single table and rich annotations

    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorslangdatatypeformatdefaultaboutUrl
    tablecolumnrowstring valuevalueerrorslangdatatypeformatdefaultabout URL
    C1.1TC1R1"1""1"stringhttp://example.org/tree-ops-ext#gid-1
    -

    For brevity, the propertyUrl is not shown in the table of cell annotations. Where not explicitly set, the value of propertyUrl defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of propertyUrl for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

    +

    For brevity, the property URL annotation is not shown in the table of cell annotations. Where not explicitly set, the value of the property URL annotation defaults to the evaluation of the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation for the column associated with the cell. For example, the value of the property URL annotation for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

    -

    The lists of values from cells in column C7 ("name": "comments") are assumed to be unordered as the boolean property ordered, with default value true, has not be set within the metadata description.

    +

    The lists of values from cells in column C7 ("name": "comments") are assumed to be unordered as the ordered annotation on the column, has not be set.

    -

    Minimal mode output for this example is provided in Turtle [[turtle]] syntax below:

    Example with single table and rich annotations
             
    -

    The subject described by each row is explcitly defined using the aboutUrl property; e.g. the subject of row R1 is http://example.org/tree-ops-ext#gid-1.

    -

    Output for column C1 ({ "name": "GID" }) is not included as column property suppressOutput has value true.

    -

    A language tag is specified for values of column C4 ({ "name": "trim_cycle" }) as cell property lang is specified with value en.

    -

    The datatype property is set on columns C5, C6, C8 and C9 ({ "name": "dbh"}, { "name": "inventory_date" }, { "name": "protected" } and { "name": "kml" }); integer, date, boolean and xml respectively. The datatype property is inherited by all cells in each of those columns, therefore the RDF output for those cells includes the appropriate datatype IRI.

    +

    The subject described by each row is explcitly defined using the about URL annotation; e.g. the subject of row R1 is http://example.org/tree-ops-ext#gid-1.

    +

    Output for column C1 ({ "name": "GID" }) is not included as the column suppress output annotation is true.

    +

    A language tag is specified for values of column C4 ({ "name": "trim_cycle" }) as cell lang annotation is en.

    +

    The datatype property is set on columns C5, C6, C8 and C9 ({ "name": "dbh"}, { "name": "inventory_date" }, { "name": "protected" } and { "name": "kml" }); integer, date, boolean and xml respectively. The datatype property is inherited by all cells in each of those columns, therefore the RDF output for those cells includes the appropriate datatype IRI.

    Cells C1.7 and C2.7 (rows R1 and R2; column, { "name": "comments" }) have null values - no output is included for these cells.

    Cell C3.7 (row R3; column, { "name": "comments" }) contains an unordered sequence of values; the set of values are included as a simple set of triples as opposed to an instance of rdf:List as the ordered property has not been specified (default is unorderd).

    @@ -911,7 +916,7 @@

    Example with single table and rich annotations

    Example with single table and using virtual columns to produce multiple subjects per row

    - This example uses a single annotated table describing a listing of music events. Each row from the tabular data file corresponds to three resources; the music event itself, the location where that event occurs and the offer to sell tickets for that event. The goal is to convert the CSV content into schema.org markup that a search engine such as Googlecan use to index music events. Details of how Google expects this information to be structured can be found here. + This example uses a single table description describing a listing of music events. Each row from the tabular data file corresponds to three resources; the music event itself, the location where that event occurs and the offer to sell tickets for that event. The goal is to convert the CSV content into schema.org markup that a search engine such as Googlecan use to index music events. Details of how Google expects this information to be structured can be found here.

    The input tabular data file, published at http://example.org/events-listing.csv, and the associated metadata description http://example.org/events-listing.csv-metadata.json are provided below: @@ -931,7 +936,7 @@

    Example with single table and using virtual columns to produce mult

    - The CSV to RDF translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual property is set to true for these virtual columns. + The CSV to RDF translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual annotation is true for these virtual columns.

    Furthermore, note that no attempt is made to reconcile between locations or offers that may be associated with more than one event; every row in the table will create both a new location resource and offer resource in addition to the event resource. If considered necessary, applications such as OpenRefine may be used to identify and reconcile duplicate location resources once the RDF output has been generated. @@ -993,7 +998,7 @@

    Example with single table and using virtual columns to produce mult - + @@ -1033,7 +1038,7 @@

    Example with single table and using virtual columns to produce mult

    Three resources are defined for each row within the table; event, location, and offer.

    -

    Each column explicitly defines both aboutUrl and propertyUrl properties which are inherited by the column's cells.

    +

    Each column explicitly defines both aboutUrl and propertyUrl properties which are used to create the about URL and property URL annotations on the column's cells.

    Columns C6, C7 and C8 ({ "name": "type_event"}, { "name": "type_place"} and { "name": "type_offer"}) define the semantic types of the resources described by each row: schema:MusicEvent, schema:Place and schema:Offer respectively.

    Column C9 ({ "name": "location"}) uses the aboutUrl and valueUrl to assert the relationship between the event and location resources.

    Column C10 ({ "name": "offer"}) uses the aboutUrl and valueUrl to assert the relationship between the event and offer resources.

    @@ -1055,9 +1060,9 @@

    Example with single table and using virtual columns to produce mult
    -

    Example with table group comprising three interrelated tables

    +

    Example with table group description comprising three interrelated tables

    - This example is based on Use Case #4 - Publication of public sector roles and salaries and uses three annotated tables published within a table group. Information about senior roles and junior roles within a government department are published in CSV format by each department. These are validated against a centrally published schema to ensure that all the data published by departments is consistent. Additionally, a list of professions is also published centrally, providing a controlled vocabulary against which departmental submissions are validated. + This example is based on Use Case #4 - Publication of public sector roles and salaries and uses three table descriptions published within a table group description. Information about senior roles and junior roles within a government department are published in CSV format by each department. These are validated against a centrally published schema to ensure that all the data published by departments is consistent. Additionally, a list of professions is also published centrally, providing a controlled vocabulary against which departmental submissions are validated.

    @@ -1102,14 +1107,14 @@

    Example with table group comprising three interrelated tables

    In this example, the resource gov.uk/professions.csv is identified using a relative URL to host http://example.org. In reality this resource would be published centrally by government and served from some remote host. Similarly, the metadata description resource metadata.json would be also be centrally published. Government departments seeking to validate their role and salary data would download a copy of this metadata description and place it, without modification, in the same directory as their tabular data files whose names MUST match those specified in the metadata description; senior-roles.csv and junior-roles.csv.

    -

    The table group generated from parsing the tabular data files and associated metadata is shown below and provides the basis for the conversion to RDF.

    +

    The group of tables generated from parsing the tabular data files and associated metadata is shown below and provides the basis for the conversion to RDF.

    -

    Annotations for the table group G and the three tables Ta, Tb, and Tc are shown below.

    +

    Annotations for the group of tables G and the three tables Ta, Tb, and Tc are shown below.

    -

    Table Group annotations:

    +

    Group of Tables annotations:

    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorsdatatypeformataboutUrlpropertyUrlvalueUrl
    tablecolumnrowstring valuevalueerrorsdatatypeformatabout URLproperty URLvalue URL
    C1.1TC1R1"B.B. King""B.B. King"string<http://example.org/events-listing.csv#event-1>schema:name
    @@ -1138,7 +1143,7 @@

    Example with table group comprising three interrelated tables

    idcore annotationsannotations
    -

    In this example, output for the centrally published list of professions, table Ta (http://example.org/gov.uk/professions.csv), is not required; only information from the departmental submissions is to be translated to RDF. Note the suppressOutput annotation on this table.

    +

    In this example, output for the centrally published list of professions, table Ta (http://example.org/gov.uk/professions.csv), is not required; only information from the departmental submissions is to be translated to RDF. Note the suppress output annotation on this table.

    Annotations for the columns, rows and cells in table T are shown in the tables below.

    @@ -1192,7 +1197,7 @@

    Example with table group comprising three interrelated tables

    - + @@ -1237,7 +1242,7 @@

    Example with table group comprising three interrelated tables

    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorsdatatypeaboutUrlpropertyUrlvalueUrl
    tablecolumnrowstring valuevalueerrorsdatatypeabout URLproperty URLvalue URL
    Ca1.1TaCa1Ra1"Finance""Finance"string
    -

    Notice that valueUrl is not specified for cell Cb2.5 because the cell value is null and the virtual property of column Cb5 is not specified.

    +

    Notice that value URL is not defined for cell Cb2.5 because the cell value is null and the virtual annotation of column Cb5 is not defined.

    @@ -1251,7 +1256,7 @@

    Example with table group comprising three interrelated tables

    -

    Output for table Ta ({ "url": "http://example.org/gov.uk/professions.csv" }) is not included as property suppressOutput has value true.

    +

    Output for table Ta ({ "url": "http://example.org/gov.uk/professions.csv" }) is not included as the suppress output annotation is true.

    The propertyUrl is specified for all cells in tables Tb and Tc.

    Columns Cb5 and Cc1 ({ "name": "reportsTo" } and { "name": "reportsToSenior" }) use the aboutUrl, propertyUrl and valueUrl properties to assert the relationship between the given post and the senior post it reports to for the cells therein.

    @@ -1266,8 +1271,8 @@

    Example with table group comprising three interrelated tables

    -

    Table group G was explicitly defined, but has not been explicitly identified; the table resource is treated as a blank node.

    -

    The resources described by each row of table Tb ({ "url": "http://example.org/senior-roles.csv"}) are explcitly defined using the aboutUrl property; therefore, say, for row Rb1 we state [] csvw:describes t2:post-90115 .; whilst the aboutUrl property has not been defined for resources described by each row of table Tc ({ "url": "http://example.org/junior-roles.csv"}); therefore blank nodes are used, e.g. for row Rc1 we state [] csvw:describes _:d8b8e40c-8c74-458b-99f7-64d1cf5c65f2 ..

    +

    Table group description G was explicitly defined, but has not been explicitly identified; the table resource is treated as a blank node.

    +

    The resources described by each row of table description Tb ({ "url": "http://example.org/senior-roles.csv"}) are explcitly defined using the aboutUrl property; therefore, say, for row Rb1 we state [] csvw:describes t2:post-90115 .; whilst the aboutUrl property has not been defined for resources described by each row of table description Tc ({ "url": "http://example.org/junior-roles.csv"}); therefore blank nodes are used, e.g. for row Rc1 we state [] csvw:describes _:d8b8e40c-8c74-458b-99f7-64d1cf5c65f2 ..

    From 641be8919cc2275616961a4d424f47cdc619b440 Mon Sep 17 00:00:00 2001 From: Jeni Tennison Date: Fri, 10 Apr 2015 21:55:13 +0100 Subject: [PATCH 10/18] changed references to properties to annotations as appropriate --- csv2json/index.html | 84 ++++++++++++++++++++++----------------------- csv2rdf/index.html | 67 ++++++++++++++++++------------------ 2 files changed, 75 insertions(+), 76 deletions(-) diff --git a/csv2json/index.html b/csv2json/index.html index 01a52de2..0f0e0b5f 100644 --- a/csv2json/index.html +++ b/csv2json/index.html @@ -193,7 +193,7 @@

    Algorithm terms

    A row source number is defined in [[!tabular-data-model]] as the position of the row within the source tabular data file. Provision of the row source number is dependent on parsing applications and may be reported as null.
    subject
    -
    Within this algorithm, a subject is the resource that the value of a given cell refers to. This may be specified using the aboutUrl property.
    +
    Within this algorithm, a subject is the resource that the value of a given cell refers to. This may be specified using the aboutUrl annotation.
    table group
    The table group is defined in [[!tabular-data-model]] as comprising a set of annotated tables and a set of annotations that relate to those tables.
    @@ -216,7 +216,7 @@

    Minimal mode

    Insert an empty array A into the JSON output. The objects containing the name-value pairs associated with the cell values will be subsequently inserted into this array.

  • -

    Each table is processed sequentially in the order they are referenced in the table group description. For each table where the value of property suppressOutput is false:

    +

    Each table is processed sequentially in the order they are referenced in the table group description. For each table where the value of the annotation suppress output is false:

    1. Each row within the table is processed sequentially in order. For each row in the current table:

      @@ -224,12 +224,12 @@

      Minimal mode

    2. Generate a sequence of objects, S1 to Sn, each of which corresponds to a subject described by the current row, as described in .

      -

      The subject(s) described by each row are determined according to the aboutUrl property for each cell in the current row. Where aboutUrl is undefined, a default subject for the row is used.

      +

      The subject(s) described by each row are determined according to the aboutUrl annotation for each cell in the current row. Where aboutUrl is undefined, a default subject for the row is used.

    3. As described in , process the sequence of objects, S1 to Sn, to produce a new sequence of root objects, SR1 to SRm, that MAY include nested objects.

      -

      A row MAY describe multiple interrelated subjects; where the valueUrl property for one cell matches the aboutUrl property for another cell in the same row.

      +

      A row MAY describe multiple interrelated subjects; where the valueUrl annotation for one cell matches the aboutUrl annotation for another cell in the same row.

    4. Insert each root object, SR1 to SRm, into array A.

      @@ -272,7 +272,7 @@

      Standard mode

    5. Each table is processed sequentially in the order they are referenced in the table group description.

      -

      For each table where the value of property suppressOutput is false:

      +

      For each table where the value of the annotation suppress output is false:

      1. Insert an empty object T into the array AT to represent the table.

        @@ -287,7 +287,7 @@

        Standard mode

      2. -

        Specify the source tabular data file URL for the current table based on the value of property url; insert the following name-value pair into object T:

        +

        Specify the source tabular data file URL for the current table based on the value of the url annotation; insert the following name-value pair into object T:

        name
        url
        @@ -346,12 +346,12 @@

        Standard mode

      3. Generate a sequence of objects, S1 to Sn, each of which corresponds to a subject described by the current row, as described in .

        -

        The subject(s) described by each row are determined according to the aboutUrl property for each cell in the current row. Where aboutUrl is undefined, a default subject for the row is used.

        +

        The subject(s) described by each row are determined according to the aboutUrl annotation for each cell in the current row. Where aboutUrl is undefined, a default subject for the row is used.

      4. As described in , process the sequence of objects, S1 to Sn, to produce a new sequence of root objects, SR1 to SRm, that MAY include nested objects.

        -

        A row MAY describe multiple interrelated subjects; where the valueUrl property for one cell matches the aboutUrl property for another cell in the same row.

        +

        A row MAY describe multiple interrelated subjects; where the valueUrl annotation for one cell matches the aboutUrl annotation for another cell in the same row.

      5. Insert each root object, SR1 to SRm, into array A.

        @@ -372,15 +372,15 @@

        Generating Objects

        1. -

          Determine the unique subjects for the current row. The subject(s) described by each row are determined according to the aboutUrl property for each cell in the current row. A default subject for the row is used for any cells where aboutUrl is undefined.

          +

          Determine the unique subjects for the current row. The subject(s) described by each row are determined according to the aboutUrl annotation for each cell in the current row. A default subject for the row is used for any cells where aboutUrl is undefined.

        2. -

          For each subject that the current row describes where at least one of the cells that refers to that subject has a value or valueUrl that is not null, and is associated with a column where the value of property suppressOutput has value false:

          +

          For each subject that the current row describes where at least one of the cells that refers to that subject has a value or valueUrl that is not null, and is associated with a column where the value of the suppress output annotation has value false:

          1. Create an empty object Si to represent the subject i.

            (i is the index number with values from 1 to n, where n is the number of subjects for the row)

            -

            Subject i is identified according to the aboutUrl property of its associated cells: IS. For a default subject where aboutUrl is not specified by its cells, IS is null.

            +

            Subject i is identified according to the aboutUrl annotation of its associated cells: IS. For a default subject where aboutUrl is not specified by its cells, IS is null.

          2. If the identifier for subject i, IS, is not null, then insert the following name-value pair into object Si:

            @@ -393,11 +393,11 @@

            Generating Objects

          3. Each cell referring to subject i is then processed sequentially according to the order of the columns.

            -

            For each cell referring to subject i, where the value of property suppressOutput for the column associated with that cell is false, insert a name-value pair into object Si as described below:

            +

            For each cell referring to subject i, where the value of the suppress output annotation for the column associated with that cell is false, insert a name-value pair into object Si as described below:

            1. If the value of propertyUrl for the cell is not null, then name N takes the value of propertyUrl compacted according to the rules as defined in URL Compaction in [[!tabular-metadata]].

              -

              Else, name N takes the value of the name property for the column associated with the cell.

              +

              Else, name N takes the value of the name annotation for the column associated with the cell.

            2. If the valueUrl for the current cell is not null, then insert the following name-value pair into object Si:

              @@ -407,18 +407,18 @@

              Generating Objects

              value
              Vurl
      6. -

        where Vurl is the value of valueUrl property for the current cell expressed as a string in the JSON output. If N is @type, compact Vurl according to the rules as defined in URL Compaction in [[!tabular-metadata]].

        +

        where Vurl is the value of the valueUrl annotation for the current cell expressed as a string in the JSON output. If N is @type, compact Vurl according to the rules as defined in URL Compaction in [[!tabular-metadata]].

      7. -

        Else, if the cell specifies a separator property and the cell value is not an empty sequence, then the cell value provides a sequence of values for inclusion within the JSON output; insert an array Av containing each value V of the sequence into object Si:

        +

        Else, if the cell value is a non-empty sequence, then the cell value provides a sequence of values for inclusion within the JSON output; insert an array Av containing each value V of the sequence into object Si:

        name
        N
        value
        Av
        -

        Each of the values V derived from the sequence MUST be expressed in the JSON output according to the datatype property of the cell as defined below: .

        -

        Since arrays are implicitly ordered in JSON, the ordered property, if specified, has no effect on the JSON output.

        +

        Each of the values V derived from the sequence MUST be expressed in the JSON output according to the datatype of V as defined below in .

        +

        Since arrays are implicitly ordered in JSON, the ordered annotation has no effect on the JSON output.

      8. Else, if the cell value is not null, then the cell value provides a single value V for inclusion within the JSON output; insert the following name-value pair into object Si:

        @@ -429,7 +429,7 @@

        Generating Objects

        V
        -

        Value V derived from the cell values MUST be expressed in the JSON output according to the datatype property of the cell as defined below: .

        +

        Value V derived from the cell values MUST be expressed in the JSON output according to the datatype of the value as defined in .

    6. @@ -445,11 +445,11 @@

      Generating Objects

      Generating Nested Objects

      The steps in the algorithm defined herein apply to both standard and minimal modes.

      -

      Where the current row describes multiple subjects, it MAY be possible to organise the objects associated with those subjects such that some objects are nested within others; e.g. where the valueUrl property for one cell matches the aboutUrl property for another cell in the same row. This algorithm considers a sequence of objects generated according to , S1 to Sn, each of which corresponds to a subject described by the current row. It generates a new sequence of root objects, SR1 to SRm, that MAY include nested objects.

      +

      Where the current row describes multiple subjects, it MAY be possible to organise the objects associated with those subjects such that some objects are nested within others; e.g. where the valueUrl annotation for one cell matches the aboutUrl annotation for another cell in the same row. This algorithm considers a sequence of objects generated according to , S1 to Sn, each of which corresponds to a subject described by the current row. It generates a new sequence of root objects, SR1 to SRm, that MAY include nested objects.

      Where the current row describes only a single subject, this algorithm may be bypassed as no nesting is possible. In such a case, the root object SR1 is identical to the original object S1.

      -

      This nesting algorithm is based on the interrelationships between subjects described within a given row that are specified using the valueUrl property. Cell values expressing the identity of a subject in the current row (i.e., as a simple literal) will be ignored by this algorithm.

      +

      This nesting algorithm is based on the interrelationships between subjects described within a given row that are specified using the valueUrl annotation. Cell values expressing the identity of a subject in the current row (i.e., as a simple literal) will be ignored by this algorithm.

      The algorithm uses the following terms:

      @@ -500,10 +500,10 @@

      Generating Nested Objects

      Check whether there is a vertex N in forest F that represents object Si. If none of the existing vertices in forest F represent object Si, then insert a new tree into forest F whose root is a vertex N that represents object Si and has identity IS.

    7. -

      For all cells associated with the current object Si (e.g. whose aboutUrl property matches IS):

      +

      For all cells associated with the current object Si (e.g. whose aboutUrl annotation matches IS):

      1. -

        If the valueUrl property of the current cell is defined and its value, Vurl, appears in the URL-list, then check each of the other objects in the sequence S1 to Sn to determine if Vurl identifies one of those objects.

        +

        If the valueUrl annotation of the current cell is defined and its value, Vurl, appears in the URL-list, then check each of the other objects in the sequence S1 to Sn to determine if Vurl identifies one of those objects.

        For object Sj, if the name-value pair with name @id is present and its value matches Vurl, then:

        1. @@ -541,15 +541,15 @@

          Generating Nested Objects

          Interpreting datatypes

          -

          Cell values are expressed in the JSON output according to the cell's datatype property. The relationship between the value of the datatype property and the primitive types supported by JSON (as specified in [[!RFC7159]]) is provided in the table below.

          +

          Cell values are expressed in the JSON output according to their datatype. The relationship between the datatype of the value and the primitive types supported by JSON (as specified in [[!RFC7159]]) is provided in the table below.

          Instances of JSON reserved characters within string values MUST be escaped as defined in [[!RFC7159]].

          -

          JSON has no native support for expressing language information; therefore the lang property has no effect on the JSON output.

          +

          JSON has no native support for expressing language information; therefore the language of a value has no effect on the JSON output.

          -

          A cell's format property is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format property.

          +

          A cell's inherited format property within any metadata is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format property.

          Where the contents of the cell cannot be parsed, or other validation errors occur, cell errors will be provided. It is an implementation decision to determine how conversion applications should proceed in the event that cell errors are encountered.

          @@ -741,7 +741,7 @@

          Simple example

          -

          As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of propertyUrl for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

          +

          As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation for the column associated with the cell. For example, the value of property URL for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

          Minimal mode output for this example is provided below:

          @@ -753,8 +753,8 @@

          Simple example

          -

          The aboutUrl property has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where aboutUrl has not been specified are assumed to refer to the same subject and so the name-value pairs associated with the cell values of that row occur within the same object.

          -

          Given that the propertyUrl has not been explicitly set for cells in table T ({ "url": "http://example.org/countries.csv"}), the simplified name is used in the name-value pairs; e.g. countryCode rather than http://example.org/countries.csv#countryCode

          +

          The about URL property has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where about URL has not been specified are assumed to refer to the same subject and so the name-value pairs associated with the cell values of that row occur within the same object.

          +

          Given that the property URL has not been explicitly set for cells in table T ({ "url": "http://example.org/countries.csv"}), the simplified name is used in the name-value pairs; e.g. countryCode rather than http://example.org/countries.csv#countryCode

          Standard mode output for this example is provided below:

          @@ -843,7 +843,7 @@

          Example with single table and rich annotations

          -

          In this example, output for column C1 (GID) is not required; note the suppressOutput annotation on this column.

          +

          In this example, output for column C1 (GID) is not required; note the suppress output annotation on this column.

          Row annotations:

          @@ -897,7 +897,7 @@

          Example with single table and rich annotations

          -

          For brevity, the propertyUrl is not shown in the table of cell annotations. Where not explicitly set, the value of propertyUrl defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of propertyUrl for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

          +

          For brevity, the property URL is not shown in the table of cell annotations. Where not explicitly set, the value of propertyUrl property in the metadata defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation for the column associated with the cell. For example, the value of property URL for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

          Minimal mode output for this example is provided below:

          @@ -910,8 +910,8 @@

          Example with single table and rich annotations

          -

          The subject described by each row is explicitly defined using the aboutUrl property; e.g. the subject of row R1 is http://example.org/tree-ops-ext#gid-1.

          -

          Output for column C1 ({ "name": "GID" }) is not included as column property suppressOutput has value true.

          +

          The subject described by each row is explicitly defined using the about URL annotation; e.g. the subject of row R1 is http://example.org/tree-ops-ext#gid-1.

          +

          Output for column C1 ({ "name": "GID" }) is not included as column annotation suppress output has value true.

          Cells C1.7 and C2.7 (rows R1 and R2; column, { "name": "comments" }) have null values - no output is included for these cells.

          Cell C3.7 (row R3; column, { "name": "comments" }) contains a sequence of values; the set of values are included in an array.

          @@ -955,7 +955,7 @@

          Example with single table and using virtual columns to produce mult

          - The CSV to JSON translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual property is set to true for these virtual columns. + The CSV to JSON translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual annotation is set to true for these virtual columns.

          Furthermore, note that no attempt is made to reconcile between locations or offers that may be associated with more than one event; every row in the table will create both a new location resource and offer resource in addition to the event resource. If considered necessary, applications such as OpenRefine may be used to identify and reconcile duplicate location resources once the JSON output has been generated. @@ -1056,10 +1056,10 @@

          Example with single table and using virtual columns to produce mult

          Three resources are defined for each row within the table; event, location and offer - therefore three objects are created for each row.

          -

          Each column explicitly defines both aboutUrl and propertyUrl properties which are inherited by the column's cells.

          +

          Each column definition explicitly defines both aboutUrl and propertyUrl properties which are inherited by the column's cells.

          Columns C6, C7 and C8 ({ "name": "type_event"}, { "name": "type_place"} and { "name": "type_offer"}) define the semantic types of the resources described by each row: schema:MusicEvent, schema:Place and schema:Offer respectively—noting that the use of rdf:type is converted to the name @type (as used in [[json-ld]]) by this conversion application.

          -

          Column C9 ({ "name": "location"}) uses the aboutUrl and valueUrl to assert the relationship between the event and location resources.

          -

          Column C10 ({ "name": "offer"}) uses the aboutUrl and valueUrl to assert the relationship between the event and offer resources.

          +

          Column C9 ({ "name": "location"}) uses the about URL and value URL to assert the relationship between the event and location resources.

          +

          Column C10 ({ "name": "offer"}) uses the about URL and value URL to assert the relationship between the event and offer resources.

          Standard mode output for this example is provided below:

          @@ -1072,7 +1072,7 @@

          Example with single table and using virtual columns to produce mult
          -

          The resources described by each row are explicitly defined using the aboutUrl property—in this case three resources per row (event, location, and offer); the objects containing the name-values pairs associated with the cell values of a row are related to the object for each subject in that row using the name-value pair with name describes.

          +

          The resources described by each row are explicitly defined using the about URL annotation—in this case three resources per row (event, location, and offer); the objects containing the name-values pairs associated with the cell values of a row are related to the object for each subject in that row using the name-value pair with name describes.

          @@ -1160,7 +1160,7 @@

          Example with table group comprising three interrelated tables

          -

          In this example, output for the centrally published list of professions, table Ta (http://example.org/gov.uk/professions.csv), is not required; only information from the departmental submissions is to be translated to JSON. Note the suppressOutput annotation on this table.

          +

          In this example, output for the centrally published list of professions, table Ta (http://example.org/gov.uk/professions.csv), is not required; only information from the departmental submissions is to be translated to JSON. Note the suppress output annotation on this table.

          Annotations for the columns, rows and cells in table T are shown in the tables below.

          @@ -1259,7 +1259,7 @@

          Example with table group comprising three interrelated tables

          -

          Notice that valueUrl is not specified for cell Cb2.5 because the cell value is null and the virtual property of column Cb5 is not specified.

          +

          Notice that valueUrl is not specified for cell Cb2.5 because the cell value is null and the virtual annotation of column Cb5 is not specified.

          Minimal mode output for this example is provided below:

          @@ -1273,9 +1273,9 @@

          Example with table group comprising three interrelated tables

          Prefixes defined within the RDFa 1.1 Initial Context ([[rdfa-core]]) are not expanded; e.g. dc: for <http://purl.org/dc/terms/>.

          -

          Output for table Ta ({ "url": "http://example.org/gov.uk/professions.csv" }) is not included as property suppressOutput has value true.

          -

          The propertyUrl is specified for all cells in tables Tb and Tc.

          -

          Columns Cb5 and Cc1 ({ "name": "reportsTo" } and { "name": "reportsToSenior" }) use the aboutUrl, propertyUrl and valueUrl properties to assert the relationship between the given post and the senior post it reports to for the cells therein. However, since senior posts and junior posts are described in different tables so it is not possible to create nested objects for this particular case.

          +

          Output for table Ta ({ "url": "http://example.org/gov.uk/professions.csv" }) is not included as the suppress output annotation has the value true.

          +

          The property URL is specified for all cells in tables Tb and Tc.

          +

          Columns Cb5 and Cc1 ({ "name": "reportsTo" } and { "name": "reportsToSenior" }) use the about URL, property URL and value URL annotations to assert the relationship between the given post and the senior post it reports to for the cells therein. However, since senior posts and junior posts are described in different tables so it is not possible to create nested objects for this particular case.

          Standard mode output for this example is provided below:

          diff --git a/csv2rdf/index.html b/csv2rdf/index.html index 7057bfd1..e90f010f 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -219,7 +219,7 @@

          Algorithm terms

          A prefixed name is an abbreviation for a URI, in the syntax prefix:name. See Names of Common Properties in [[!tabular-metadata]] for information on expansion.
          propertyUrl
          -
          The propertyUrl is the value of property url annotation for the current cell.
          +
          The propertyUrl is the value of property URL annotation for the current cell.
          row
          The row is defined in [[!tabular-data-model]] as a horizontal arrangement of cells within a table.
          @@ -231,7 +231,7 @@

          Algorithm terms

          A row source number is defined in [[!tabular-data-model]] as the position of the row within the source tabular data file. Provision of the row source number is dependent on parsing applications and may be reported as null.
          subject
          -
          Within this algorithm, a subject is the resource that the value of a given cell refers to. This may be specified using the aboutUrl property.
          +
          Within this algorithm, a subject is the resource that the value of a given cell refers to. This may be specified using the aboutUrl annotation.
          table group
          The table group is defined in [[!tabular-data-model]] as comprising a set of annotated tables and a set of annotations that relate to those tables.
          @@ -268,7 +268,7 @@

          Generating RDF

          In standard mode only, emit the triples generated by running the algorithm specified in over any notes and non-core annotations specified for the table group, with node G as an initial subject, the notes or non-core annotation as property, and the value of the notes or non-core annotation as value.

        2. -

          For each table where the value of property suppressOutput is false:

          +

          For each table where the value of the annotation suppress output is false:

          1. In standard mode only, establish a new node T which represents the current table.

            @@ -297,7 +297,7 @@

            Generating RDF

    8. -

      In standard mode only, specify the source tabular data file URL for the current table based on the value of property url; emit the following triple:

      +

      In standard mode only, specify the source tabular data file URL for the current table based on the value of the url annotation; emit the following triple:

      subject
      node T
      @@ -364,11 +364,11 @@

      Generating RDF

    9. Establish a new blank node Sdef to be used as the default subject for cells where aboutUrl is undefined.

      -

      A row MAY describe multiple interrelated subjects; where the valueUrl property for one cell matches the aboutUrl property for another cell in the same row.

      -

      For each cell in the current row where the value of property suppressOutput for the column associated with that cell is false:

      +

      A row MAY describe multiple interrelated subjects; where the valueUrl for one cell matches the aboutUrl for another cell in the same row.

      +

      For each cell in the current row where the value of the suppress output annotation for the column associated with that cell is false:

      1. -

        Establish a node S from the aboutUrl property if set, or from Sdef otherwise as the current subject.

        +

        Establish a node S from the aboutUrl if set, or from Sdef otherwise as the current subject.

      2. In standard mode only, relate the current subject to the current row; emit the following triple:

        @@ -383,7 +383,7 @@

        Generating RDF

      3. If the value of propertyUrl for the cell is not null, then predicate P takes the value of propertyUrl.

        -

        Else, predicate P is constructed by appending the value of the name property for the column associated with the cell to the the tabular data file URL as a fragment identifier.

        +

        Else, predicate P is constructed by appending the value of the name annotation for the column associated with the cell to the the tabular data file URL as a fragment identifier.

      4. If the valueUrl for the current cell is not null, then valueUrl identifies a node Vurl that is related the current subject using the predicate P; emit the following triple:
        @@ -395,7 +395,7 @@

        Generating RDF

        node Vurl
      5. -
      6. Else, if the cell specifies a separator property and the cell value is not an empty sequence and the cell specifies that boolean property ordered is true, then the cell value provides an ordered sequence of literal nodes for inclusion within the RDF output using an instance of rdf:List Vlist as defined in [[rdf-schema]]. This instance is related to the subject using the predicate P; emit the triples defining list Vlist plus the following triple: +
      7. Else, if the cell value is a non-empty sequence and the cell specifies that boolean ordered annotation is true, then the cell value provides an ordered sequence of literal nodes for inclusion within the RDF output using an instance of rdf:List Vlist as defined in [[rdf-schema]]. This instance is related to the subject using the predicate P; emit the triples defining list Vlist plus the following triple:
        subject
        node S
        @@ -405,7 +405,7 @@

        Generating RDF

        node Vlist
      8. -
      9. Else, if the cell specifies a separator property and the cell value is not an empty sequence, then the cell value provides an unordered sequence of literal nodes for inclusion within the RDF output, each of which is related to the subject using the predicate P. For each value provided in the sequence, add a literal node Vliteral; emit the following triple: +
      10. Else, if the cell value is a non-empty sequence, then the cell value provides an unordered sequence of literal nodes for inclusion within the RDF output, each of which is related to the subject using the predicate P. For each value provided in the sequence, add a literal node Vliteral; emit the following triple:
        subject
        node S
        @@ -415,7 +415,7 @@

        Generating RDF

        literal node Vliteral
      11. -
      12. Else, if the cell value is not null and the cell does not specify a separator property, then the cell value provides a single literal node Vliteral for inclusion within the RDF output that is related the current subject using the predicate P; emit the following triple: +
      13. Else, if the cell value is not null and not a sequence, then the cell value provides a single literal node Vliteral for inclusion within the RDF output that is related the current subject using the predicate P; emit the following triple:
        subject
        node S
        @@ -424,9 +424,8 @@

        Generating RDF

        object
        literal node Vliteral
        -

        The literal nodes derived from the cell values MUST be expressed according to the datatype property of the cell as defined below: Interpreting datatypes.

        -

        In the case when the datatype is not present, the conversion should default to string.

        -

        In the case where a sequence of values is provided, the datatype applies to all members of the sequence.

        +

        The literal nodes derived from the cell values MUST be expressed according to the datatype of the value as defined below: Interpreting datatypes.

        +

        In the case where a sequence of values is provided, each value uses its datatype; the datatype may be different for different items in the sequence.

    10. @@ -439,10 +438,10 @@

      Generating RDF

      Interpreting datatypes

      -

      Cell values are expressed in the RDF output according to the cell's datatype property. The relationship between the value of the datatype property and the datatype IRI used in the RDF is provided in the table below.

      +

      Cell values are expressed in the RDF output according to their datatype. The relationship between the datatype of the value and the datatype IRI used in the RDF is provided in the table below.

      -

      A cell's format property is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format property.

      +

      A cell's inherited format property within any metadata is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format property.

      Where the contents of the cell cannot be parsed, or other validation errors occur, cell errors will be provided. It is an implementation decision to determine how conversion applications should proceed in the event that cell errors are encountered.

      @@ -490,7 +489,7 @@

      Interpreting datatypes

      gYearMonthxsd:gYearMonth hexBinaryxsd:hexBinary QNamexsd:QName - stringxsd:string or rdf:langString depending on whether or not the lang property is defined for the cell. + stringxsd:string or rdf:langString depending on whether or not the value has an associated language. normalizedStringxsd:normalizedString tokenxsd:token languagexsd:language @@ -709,7 +708,7 @@

      Simple example

      -

      As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of propertyUrl for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

      +

      As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation of the column associated with the cell. For example, the value of the property URL annotation for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

      @@ -723,7 +722,7 @@

      Simple example

      data-oninclude="updateExample"> -

      The aboutUrl property has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where aboutUrl has not been specified are assumed to refer to the same subject. This unspecified subject is treated as a blank node.

      +

      The about URL annotation has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where about URL has not been specified are assumed to refer to the same subject. This unspecified subject is treated as a blank node.

      Standard mode output for this example is provided in Turtle [[turtle]] syntax below:

      @@ -865,9 +864,9 @@

      Example with single table and rich annotations

      -

      For brevity, the propertyUrl is not shown in the table of cell annotations. Where not explicitly set, the value of propertyUrl defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of propertyUrl for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

      +

      For brevity, the property URL annotation is not shown in the table of cell annotations. Where not explicitly set, the value of property URL defaults to the resulting of evaluating the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation for the column associated with the cell. For example, the value of property URL for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

      -

      The lists of values from cells in column C7 ("name": "comments") are assumed to be unordered as the boolean property ordered, with default value true, has not be set within the metadata description.

      +

      The lists of values from cells in column C7 ("name": "comments") are assumed to be unordered as the boolean ordered annotation, which defaults to true, has not be set within the metadata description.

      @@ -882,12 +881,12 @@

      Example with single table and rich annotations

      -

      The subject described by each row is explcitly defined using the aboutUrl property; e.g. the subject of row R1 is http://example.org/tree-ops-ext#gid-1.

      -

      Output for column C1 ({ "name": "GID" }) is not included as column property suppressOutput has value true.

      -

      A language tag is specified for values of column C4 ({ "name": "trim_cycle" }) as cell property lang is specified with value en.

      -

      The datatype property is set on columns C5, C6, C8 and C9 ({ "name": "dbh"}, { "name": "inventory_date" }, { "name": "protected" } and { "name": "kml" }); integer, date, boolean and xml respectively. The datatype property is inherited by all cells in each of those columns, therefore the RDF output for those cells includes the appropriate datatype IRI.

      +

      The subject described by each row is explcitly defined using the about URL annotation; e.g. the subject of row R1 is http://example.org/tree-ops-ext#gid-1.

      +

      Output for column C1 ({ "name": "GID" }) is not included as column annotation suppress output has value true.

      +

      A language tag is specified for values of column C4 ({ "name": "trim_cycle" }) as the cell values have the associated language en.

      +

      The datatype property is set on columns C5, C6, C8 and C9 ({ "name": "dbh"}, { "name": "inventory_date" }, { "name": "protected" } and { "name": "kml" }); integer, date, boolean and xml respectively within the metadata. The datatype is used to generate the cell values for all cells in each of those columns, therefore the RDF output for those cells includes the appropriate datatype IRI.

      Cells C1.7 and C2.7 (rows R1 and R2; column, { "name": "comments" }) have null values - no output is included for these cells.

      -

      Cell C3.7 (row R3; column, { "name": "comments" }) contains an unordered sequence of values; the set of values are included as a simple set of triples as opposed to an instance of rdf:List as the ordered property has not been specified (default is unorderd).

      +

      Cell C3.7 (row R3; column, { "name": "comments" }) contains an unordered sequence of values; the set of values are included as a simple set of triples as opposed to an instance of rdf:List as the ordered annotation has defaulted to false.

      Standard mode output for this example is provided in Turtle [[turtle]] syntax below:

      @@ -930,7 +929,7 @@

      Example with single table and using virtual columns to produce mult

      - The CSV to RDF translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual property is set to true for these virtual columns. + The CSV to RDF translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual annotation is set to true for these virtual columns.

      Furthermore, note that no attempt is made to reconcile between locations or offers that may be associated with more than one event; every row in the table will create both a new location resource and offer resource in addition to the event resource. If considered necessary, applications such as OpenRefine may be used to identify and reconcile duplicate location resources once the RDF output has been generated. @@ -1032,7 +1031,7 @@

      Example with single table and using virtual columns to produce mult

      Three resources are defined for each row within the table; event, location, and offer.

      -

      Each column explicitly defines both aboutUrl and propertyUrl properties which are inherited by the column's cells.

      +

      Each column description in the metadata explicitly defines both aboutUrl and propertyUrl properties which are inherited by the column's cells.

      Columns C6, C7 and C8 ({ "name": "type_event"}, { "name": "type_place"} and { "name": "type_offer"}) define the semantic types of the resources described by each row: schema:MusicEvent, schema:Place and schema:Offer respectively.

      Column C9 ({ "name": "location"}) uses the aboutUrl and valueUrl to assert the relationship between the event and location resources.

      Column C10 ({ "name": "offer"}) uses the aboutUrl and valueUrl to assert the relationship between the event and offer resources.

      @@ -1048,7 +1047,7 @@

      Example with single table and using virtual columns to produce mult
      -

      The resources described by each row are explcitly defined using the aboutUrl property—in this case three resources per row (event, location, and offer); the relationship between the row and each subject resource is asserted using the csvw:describes property; e.g. for row R1 we state [] csvw:describes t1:event-1, t1:place-1, t1:offer-1 .

      +

      The resources described by each row are explcitly defined using the about URL annotation this case three resources per row (event, location, and offer); the relationship between the row and each subject resource is asserted using the csvw:describes property; e.g. for row R1 we state [] csvw:describes t1:event-1, t1:place-1, t1:offer-1 .

      @@ -1236,7 +1235,7 @@

      Example with table group comprising three interrelated tables

      -

      Notice that valueUrl is not specified for cell Cb2.5 because the cell value is null and the virtual property of column Cb5 is not specified.

      +

      Notice that valueUrl is not specified for cell Cb2.5 because the cell value is null and the virtual annotation of column Cb5 is false.

      @@ -1250,9 +1249,9 @@

      Example with table group comprising three interrelated tables

      -

      Output for table Ta ({ "url": "http://example.org/gov.uk/professions.csv" }) is not included as property suppressOutput has value true.

      -

      The propertyUrl is specified for all cells in tables Tb and Tc.

      -

      Columns Cb5 and Cc1 ({ "name": "reportsTo" } and { "name": "reportsToSenior" }) use the aboutUrl, propertyUrl and valueUrl properties to assert the relationship between the given post and the senior post it reports to for the cells therein.

      +

      Output for table Ta ({ "url": "http://example.org/gov.uk/professions.csv" }) is not included as the suppress output annotation has the value true.

      +

      The property URL is specified for all cells in tables Tb and Tc.

      +

      Columns Cb5 and Cc1 ({ "name": "reportsTo" } and { "name": "reportsToSenior" }) use the about URL, property URL and value URL annotations to assert the relationship between the given post and the senior post it reports to for the cells therein.

      Standard mode output for this example is provided in Turtle [[turtle]] syntax below:

      @@ -1266,7 +1265,7 @@

      Example with table group comprising three interrelated tables

      Table group G was explicitly defined, but has not been explicitly identified; the table resource is treated as a blank node.

      -

      The resources described by each row of table Tb ({ "url": "http://example.org/senior-roles.csv"}) are explcitly defined using the aboutUrl property; therefore, say, for row Rb1 we state [] csvw:describes t2:post-90115 .; whilst the aboutUrl property has not been defined for resources described by each row of table Tc ({ "url": "http://example.org/junior-roles.csv"}); therefore blank nodes are used, e.g. for row Rc1 we state [] csvw:describes _:d8b8e40c-8c74-458b-99f7-64d1cf5c65f2 ..

      +

      The resources described by each row of table Tb ({ "url": "http://example.org/senior-roles.csv"}) are explcitly defined using the about URL annotation; therefore, say, for row Rb1 we state [] csvw:describes t2:post-90115 .; whilst the about URL annotation has not been defined for resources described by each row of table Tc ({ "url": "http://example.org/junior-roles.csv"}); therefore blank nodes are used, e.g. for row Rc1 we state [] csvw:describes _:d8b8e40c-8c74-458b-99f7-64d1cf5c65f2 ..

  • From 447844b0253d89f62a0e4ed542e66cbe9f576695 Mon Sep 17 00:00:00 2001 From: Jeni Tennison Date: Fri, 10 Apr 2015 23:00:54 +0100 Subject: [PATCH 11/18] other editorial changes on conversion docs --- csv2json/index.html | 324 +++++++++++++++++++------------------ csv2rdf/index.html | 310 ++++++++++++++++++----------------- examples/junior-roles.json | 4 +- examples/senior-roles.json | 4 +- 4 files changed, 333 insertions(+), 309 deletions(-) diff --git a/csv2json/index.html b/csv2json/index.html index 0f0e0b5f..8aeebc63 100644 --- a/csv2json/index.html +++ b/csv2json/index.html @@ -297,7 +297,7 @@

    Standard mode

  • Insert any notes and non-core annotations specified for the table into object T according to the rules provided in .

    -

    All other annotations for the table are ignored during the conversion; including information about table schemas and column descriptions specified therein, dialect descriptions, foreign-key-definitions etc.

    +

    All other annotations for the table are ignored during the conversion; including information about table schemas and columns specified therein, foreign keys etc.

  • Insert the following name-value pair into object T:

    @@ -680,8 +680,8 @@

    Simple example

    - - + + @@ -693,8 +693,8 @@

    Simple example

    Column annotations:

    idcore annotationsannotations
    urlcolumnsrows
    idcore annotations
    urlcolumnsrows
    Thttp://example.org/countries.csvC1, C2, C3, C4R1, R2, R3
    - - + + @@ -718,30 +718,28 @@

    Simple example

    idcore annotationsannotations
    tablenumbersource numbercellsnametitles
    idcore annotations
    tablenumbersource numbercellsnametitles
    C1T11C1.1, C2.1, C3.1countryCodecountryCode

    Cell annotations:

    - - - - - - - - - - - - - - - - - - - - - -
    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorspropertyUrl
    C1.1TC1R1"AD""AD"<http://example.org/countries.csv#countryCode>
    C1.2TC2R1"42.546245""42.546245"<http://example.org/countries.csv#latitude>
    C1.3TC3R1"1.601554""1.601554"<http://example.org/countries.csv#longitude>
    C1.4TC4R1"Andorra""Andorra"<http://example.org/countries.csv#name>
    C2.1TC1R2"AE""AE"<http://example.org/countries.csv#countryCode>
    C2.2TC2R2"23.424076""23.424076"<http://example.org/countries.csv#latitude>
    C2.3TC3R2"53.847818""53.847818"<http://example.org/countries.csv#longitude>
    C2.4TC4R2"United Arab Emirates""United Arab Emirates"<http://example.org/countries.csv#name>
    C3.1TC1R3"AF""AF"<http://example.org/countries.csv#countryCode>
    C3.2TC2R3"33.93911""33.93911"<http://example.org/countries.csv#latitude>
    C3.3TC3R3"67.709953""67.709953"<http://example.org/countries.csv#longitude>
    C3.4TC4R3"Afghanistan""Afghanistan"<http://example.org/countries.csv#name>
    - -

    As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation for the column associated with the cell. For example, the value of property URL for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

    + + + + + + + + + + + + + + + + + + + + + +
    idcore annotations
    tablecolumnrowstring valuevalueproperty URL
    C1.1TC1R1"AD""AD"null
    C1.2TC2R1"42.546245""42.546245"null
    C1.3TC3R1"1.601554""1.601554"null
    C1.4TC4R1"Andorra""Andorra"null
    C2.1TC1R2"AE""AE"null
    C2.2TC2R2"23.424076""23.424076"null
    C2.3TC3R2"53.847818""53.847818"null
    C2.4TC4R2"United Arab Emirates""United Arab Emirates"null
    C3.1TC1R3"AF""AF"null
    C3.2TC2R3"33.93911""33.93911"null
    C3.3TC3R3"67.709953""67.709953"null
    C3.4TC4R3"Afghanistan""Afghanistan"null

    Minimal mode output for this example is provided below:

    @@ -754,7 +752,7 @@

    Simple example

    The about URL property has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where about URL has not been specified are assumed to refer to the same subject and so the name-value pairs associated with the cell values of that row occur within the same object.

    -

    Given that the property URL has not been explicitly set for cells in table T ({ "url": "http://example.org/countries.csv"}), the simplified name is used in the name-value pairs; e.g. countryCode rather than http://example.org/countries.csv#countryCode

    +

    Given that the property URL is null for cells in table T ({ "url": "http://example.org/countries.csv"}), the simplified name is used in the name-value pairs; e.g. countryCode rather than http://example.org/countries.csv#countryCode

    Standard mode output for this example is provided below:

    @@ -798,25 +796,32 @@

    Example with single table and rich annotations

    +

    Core annotations for the resulting table T, with 9 columns and 3 rows, are shown below:

    -

    Annotations for the resulting table T, with 9 columns and 3 rows, are shown below:

    + + + + + + + + +
    idcore annotations
    idurlcolumnsrowsnotes
    T<http://example.org/tree-ops-ext>http://example.org/tree-ops-ext.csvC1, C2, C3, C4, C5, C6, C7, C8, C9R1, R2, R3[{ "@type": "oa:Annotation", ... }]
    - - - - - - - - - - - - - - - -
    idcore annotationsannotations
    urlcolumnsrows
    Thttp://example.org/tree-ops-ext.csvC1, C2, C3, C4, C5, C6, C7, C8, C9R1, R2, R3@id<http://example.org/tree-ops-ext>
    dc:title"Tree Operations"
    dcat:keyword["tree", "street", "maintenance"]
    dc:publisher[{ "schema:name": "Example Municipality", "schema:url": { "@id": "http://example.org" } }]
    dc:license<http://opendefinition.org/licenses/cc-by/>
    dc:modified"2010-12-31"
    notes[{ "@type": "oa:Annotation", ... }]
    primaryKeyC1
    +

    Non-core annotations for the table T are:

    + +
    +
    dc:title
    +
    "Tree Operations"
    +
    dcat:keyword
    +
    ["tree", "street", "maintenance"]
    +
    dc:publisher
    +
    [{ "schema:name": "Example Municipality", "schema:url": { "@id": "http://example.org" } }]
    +
    dc:license
    +
    { "@id": "http://opendefinition.org/licenses/cc-by/" }
    +
    dc:modified
    +
    "2010-12-31"
    +

    The value of the notes annotation has been shortened for clarity in the table above. @@ -827,8 +832,8 @@

    Example with single table and rich annotations

    Column annotations:

    - - + + @@ -848,58 +853,55 @@

    Example with single table and rich annotations

    Row annotations:

    idcore annotationsannotations
    tablenumbersource numbercellsnametitlessuppressOutputdc:description
    idcore annotationsannotations
    tablenumbersource numbercellsnametitlessuppress outputdc:description
    C1T11C1.1, C2.1, C3.1GIDGID, Generic IdentifiertrueAn identifier for the operation on a tree.
    - - + + - - - + + +
    idcore annotations
    tablenumbersource numbercells
    idcore annotations
    tablenumbersource numbercellsprimary key
    R1T12C1.1, C1.2, C1.3, C1.4, C1.5, C1.6, C1.7, C1.8, C1.9
    R2T23C2.1, C2.2, C2.3, C2.4, C2.5, C2.6, C2.7, C2.8, C2.9
    R3T34C3.1, C3.2, C3.3, C3.4, C3.5, C3.6, C3.7, C3.8, C3.9
    R1T12C1.1, C1.2, C1.3, C1.4, C1.5, C1.6, C1.7, C1.8, C1.9C1.1
    R2T23C2.1, C2.2, C2.3, C2.4, C2.5, C2.6, C2.7, C2.8, C2.9C2.1
    R3T34C3.1, C3.2, C3.3, C3.4, C3.5, C3.6, C3.7, C3.8, C3.9C3.1

    Cell annotations:

    - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorslangdatatypeformatdefaultaboutUrl
    idcore annotations
    tablecolumnrowstring valuevalueabout URL
    C1.1TC1R1"1""1"stringhttp://example.org/tree-ops-ext#gid-1
    C1.2TC2R1"ADDISON AV""ADDISON AV"string<http://example.org/tree-ops-ext#gid-1>
    C1.3TC3R1"Celtis australis""Celtis australis"string<http://example.org/tree-ops-ext#gid-1>
    C1.4TC4R1"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-1>
    C1.5TC5R1"11"11integer<http://example.org/tree-ops-ext#gid-1>
    C1.6TC6R1"10/18/2010"2010-10-18dateM/d/yyyy<http://example.org/tree-ops-ext#gid-1>
    C1.7TC7R1""nullstring<http://example.org/tree-ops-ext#gid-1>
    C1.8TC8R1""falsebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-1>
    C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-1>
    C2.1TC1R2"2""2"string<http://example.org/tree-ops-ext#gid-2>
    C2.2TC2R2"EMERSON ST""EMERSON ST"string<http://example.org/tree-ops-ext#gid-2>
    C2.3TC3R2"Liquidambar styraciflua""Liquidambar styraciflua"string<http://example.org/tree-ops-ext#gid-2>
    C2.4TC4R2"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-2>
    C2.5TC5R2"11"11integer<http://example.org/tree-ops-ext#gid-2>
    C2.6TC6R2"6/2/2010"2010-06-02dateM/d/yyyy<http://example.org/tree-ops-ext#gid-2>
    C2.7TC7R2""nullstring<http://example.org/tree-ops-ext#gid-2>
    C2.8TC8R2""falsebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-2>
    C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-2>
    C3.1TC1R3"6""6"string<http://example.org/tree-ops-ext#gid-6>
    C3.2TC2R3"ADDISON AV""ADDISON AV"string<http://example.org/tree-ops-ext#gid-6>
    C3.3TC3R3"Robinia pseudoacacia""Robinia pseudoacacia"string<http://example.org/tree-ops-ext#gid-6>
    C3.4TC4R3"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-6>
    C3.5TC5R3"29"29integer<http://example.org/tree-ops-ext#gid-6>
    C3.6TC6R3"6/1/2010"2010-06-01dateM/d/yyyy<http://example.org/tree-ops-ext#gid-6>
    C3.7TC7R3"cavity or decay; trunk decay; codominant leaders; included bark; large leader or limb decay; previous failure root damage; root decay; beware of BEES""cavity or decay", "trunk decay", "codominant leaders", "included bark", "large leader or limb decay", "previous failure root damage", "root decay", "beware of BEES"string<http://example.org/tree-ops-ext#gid-6>
    C3.8TC8R3"YES"truebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-6>
    C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-6>
    C1.1TC1R1"1""1"http://example.org/tree-ops-ext#gid-1
    C1.2TC2R1"ADDISON AV""ADDISON AV"<http://example.org/tree-ops-ext#gid-1>
    C1.3TC3R1"Celtis australis""Celtis australis"<http://example.org/tree-ops-ext#gid-1>
    C1.4TC4R1"Large Tree Routine Prune""Large Tree Routine Prune" (English)<http://example.org/tree-ops-ext#gid-1>
    C1.5TC5R1"11"11<http://example.org/tree-ops-ext#gid-1>
    C1.6TC6R1"10/18/2010"2010-10-18<http://example.org/tree-ops-ext#gid-1>
    C1.7TC7R1""null<http://example.org/tree-ops-ext#gid-1>
    C1.8TC8R1""false<http://example.org/tree-ops-ext#gid-1>
    C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>"<http://example.org/tree-ops-ext#gid-1> (XML)
    C2.1TC1R2"2""2"<http://example.org/tree-ops-ext#gid-2>
    C2.2TC2R2"EMERSON ST""EMERSON ST"<http://example.org/tree-ops-ext#gid-2>
    C2.3TC3R2"Liquidambar styraciflua""Liquidambar styraciflua"<http://example.org/tree-ops-ext#gid-2>
    C2.4TC4R2"Large Tree Routine Prune""Large Tree Routine Prune" (English)<http://example.org/tree-ops-ext#gid-2>
    C2.5TC5R2"11"11<http://example.org/tree-ops-ext#gid-2>
    C2.6TC6R2"6/2/2010"2010-06-02<http://example.org/tree-ops-ext#gid-2>
    C2.7TC7R2""null<http://example.org/tree-ops-ext#gid-2>
    C2.8TC8R2""false<http://example.org/tree-ops-ext#gid-2>
    C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>"<http://example.org/tree-ops-ext#gid-2> (XML)
    C3.1TC1R3"6""6"<http://example.org/tree-ops-ext#gid-6>
    C3.2TC2R3"ADDISON AV""ADDISON AV"<http://example.org/tree-ops-ext#gid-6>
    C3.3TC3R3"Robinia pseudoacacia""Robinia pseudoacacia"<http://example.org/tree-ops-ext#gid-6>
    C3.4TC4R3"Large Tree Routine Prune""Large Tree Routine Prune" (English)<http://example.org/tree-ops-ext#gid-6>
    C3.5TC5R3"29"29<http://example.org/tree-ops-ext#gid-6>
    C3.6TC6R3"6/1/2010"2010-06-01<http://example.org/tree-ops-ext#gid-6>
    C3.7TC7R3"cavity or decay; trunk decay; codominant leaders; included bark; large leader or limb decay; previous failure root damage; root decay; beware of BEES""cavity or decay", "trunk decay", "codominant leaders", "included bark", "large leader or limb decay", "previous failure root damage", "root decay", "beware of BEES"<http://example.org/tree-ops-ext#gid-6>
    C3.8TC8R3"YES"true<http://example.org/tree-ops-ext#gid-6>
    C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>"<http://example.org/tree-ops-ext#gid-6> (XML)
    -

    For brevity, the property URL is not shown in the table of cell annotations. Where not explicitly set, the value of propertyUrl property in the metadata defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation for the column associated with the cell. For example, the value of property URL for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

    -
    -

    Minimal mode output for this example is provided below:

    Example with single table and using virtual columns to produce mult
               

    Column annotations:

    - - + + @@ -1016,30 +1018,30 @@

    Example with single table and using virtual columns to produce mult

    idcore annotationsannotations
    tablenumbersource numbercellsnametitlesvirtual
    idcore annotations
    tablenumbersource numbercellsnametitlesvirtual
    C1T11C1.1, C2.1nameName
    - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +
    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorsdatatypeformataboutUrlpropertyUrlvalueUrl
    tablecolumnrowstring valuevalueabout URLproperty URLvalue URL
    C1.1TC1R1"B.B. King""B.B. King"string<http://example.org/events-listing.csv#event-1>schema:name
    C1.2TC2R1"2014-04-12T19:30"2014-04-12T19:30:00datetimeyyyy-MM-ddTHH:mm:ss<http://example.org/events-listing.csv#event-1>schema:startDate
    C1.3TC3R1"Lupo’s Heartbreak Hotel""Lupo’s Heartbreak Hotel"string<http://example.org/events-listing.csv#place-1>schema:name
    C1.4TC4R1"79 Washington St., Providence, RI""79 Washington St., Providence, RI"string<http://example.org/events-listing.csv#place-1>schema:address
    C1.5TC5R1"https://www.etix.com/ticket/1771656"<https://www.etix.com/ticket/1771656>anyURI<http://example.org/events-listing.csv#offer-1>schema:url
    C1.6TC6R1""nullstring<http://example.org/events-listing.csv#event-1>rdf:typeschema:MusicEvent
    C1.7TC7R1""nullstring<http://example.org/events-listing.csv#place-1>rdf:typeschema:Place
    C1.8TC8R1""nullstring<http://example.org/events-listing.csv#offer-1>rdf:typeschema:Offer
    C1.9TC9R1""nullstring<http://example.org/events-listing.csv#event-1>schema:location<http://example.org/events-listing.csv#place-1>
    C1.10TC10R1""nullstring<http://example.org/events-listing.csv#event-1>schema:offers<http://example.org/events-listing.csv#offer-1>
    C2.1TC1R2"B.B. King""B.B. King"string<http://example.org/events-listing.csv#event-2>schema:name
    C2.2TC2R2"2014-04-13T20:00"2014-04-13T20:00:00datetimeyyyy-MM-ddTHH:mm:ss<http://example.org/events-listing.csv#event-2>schema:startDate
    C2.3TC3R2"Lynn Auditorium""Lynn Auditorium"string<http://example.org/events-listing.csv#place-2>schema:name
    C2.4TC4R2"Lynn, MA, 01901""Lynn, MA, 01901"string<http://example.org/events-listing.csv#place-2>schema:address
    C2.5TC5R2"http://frontgatetickets.com/venue.php?id=11766"<http://frontgatetickets.com/venue.php?id=11766>anyURI<http://example.org/events-listing.csv#offer-2>schema:url
    C2.6TC6R2""nullstring<http://example.org/events-listing.csv#event-2>rdf:typeschema:MusicEvent
    C2.7TC7R2""nullstring<http://example.org/events-listing.csv#place-2>rdf:typeschema:Place
    C2.8TC8R2""nullstring<http://example.org/events-listing.csv#offer-2>rdf:typeschema:Offer
    C2.9TC9R2""nullstring<http://example.org/events-listing.csv#event-2>schema:location<http://example.org/events-listing.csv#place-2>
    C2.10TC10R2""nullstring<http://example.org/events-listing.csv#event-2>schema:offers<http://example.org/events-listing.csv#offer-2>
    C1.1TC1R1"B.B. King""B.B. King"<http://example.org/events-listing.csv#event-1>schema:name
    C1.2TC2R1"2014-04-12T19:30"2014-04-12T19:30:00<http://example.org/events-listing.csv#event-1>schema:startDate
    C1.3TC3R1"Lupo’s Heartbreak Hotel""Lupo’s Heartbreak Hotel"<http://example.org/events-listing.csv#place-1>schema:name
    C1.4TC4R1"79 Washington St., Providence, RI""79 Washington St., Providence, RI"<http://example.org/events-listing.csv#place-1>schema:address
    C1.5TC5R1"https://www.etix.com/ticket/1771656"<https://www.etix.com/ticket/1771656><http://example.org/events-listing.csv#offer-1>schema:url
    C1.6TC6R1""null<http://example.org/events-listing.csv#event-1>rdf:typeschema:MusicEvent
    C1.7TC7R1""null<http://example.org/events-listing.csv#place-1>rdf:typeschema:Place
    C1.8TC8R1""null<http://example.org/events-listing.csv#offer-1>rdf:typeschema:Offer
    C1.9TC9R1""null<http://example.org/events-listing.csv#event-1>schema:location<http://example.org/events-listing.csv#place-1>
    C1.10TC10R1""null<http://example.org/events-listing.csv#event-1>schema:offers<http://example.org/events-listing.csv#offer-1>
    C2.1TC1R2"B.B. King""B.B. King"<http://example.org/events-listing.csv#event-2>schema:name
    C2.2TC2R2"2014-04-13T20:00"2014-04-13T20:00:00<http://example.org/events-listing.csv#event-2>schema:startDate
    C2.3TC3R2"Lynn Auditorium""Lynn Auditorium"<http://example.org/events-listing.csv#place-2>schema:name
    C2.4TC4R2"Lynn, MA, 01901""Lynn, MA, 01901"<http://example.org/events-listing.csv#place-2>schema:address
    C2.5TC5R2"http://frontgatetickets.com/venue.php?id=11766"<http://frontgatetickets.com/venue.php?id=11766><http://example.org/events-listing.csv#offer-2>schema:url
    C2.6TC6R2""null<http://example.org/events-listing.csv#event-2>rdf:typeschema:MusicEvent
    C2.7TC7R2""null<http://example.org/events-listing.csv#place-2>rdf:typeschema:Place
    C2.8TC8R2""null<http://example.org/events-listing.csv#offer-2>rdf:typeschema:Offer
    C2.9TC9R2""null<http://example.org/events-listing.csv#event-2>schema:location<http://example.org/events-listing.csv#place-2>
    C2.10TC10R2""null<http://example.org/events-listing.csv#event-2>schema:offers<http://example.org/events-listing.csv#offer-2>
    @@ -1134,8 +1136,8 @@

    Example with table group comprising three interrelated tables

    Table Group annotations:

    - - + + @@ -1145,30 +1147,40 @@

    Example with table group comprising three interrelated tables

    Table annotations:

    idcore annotationsannotations
    tables
    idcore annotations
    tables
    GTa, Tb, Tc@typeTableGroup
    - - - + + - + - - + - - +
    idcore annotationsannotations
    urlcolumnsrowsprimaryKeysuppressOutputforeignKeys
    columnsreference
    idcore annotations
    urlcolumnsrowssuppress outputforeign keys
    Tahttp://example.org/gov.uk/professions.csvCa1Ra1, Ra2, Ra3, Ra4Ca1true
    Tahttp://example.org/gov.uk/professions.csvCa1Ra1, Ra2, Ra3, Ra4true
    Tbhttp://example.org/senior-roles.csvCb1, Cb2, Cb3, Cb4, Cb5, Cb6Rb1, Rb2Cb1Cb5Cb1
    Cb6Ca1
    Tbhttp://example.org/senior-roles.csvCb1, Cb2, Cb3, Cb4, Cb5, Cb6Rb1, Rb2falseFb1, Fb2
    Tchttp://example.org/junior-roles.csvCc1, Cc2, Cc3, Cc4, Cc5, Cc6, Cc7Rc1, Rc2Cc1Cb1
    Cc7Ca1
    Tchttp://example.org/junior-roles.csvCc1, Cc2, Cc3, Cc4, Cc5, Cc6, Cc7Rc1, Rc2falseFc1, Fc2

    In this example, output for the centrally published list of professions, table Ta (http://example.org/gov.uk/professions.csv), is not required; only information from the departmental submissions is to be translated to JSON. Note the suppress output annotation on this table.

    +

    The following foreign keys are defined:

    + + + + + + + + + + +
    idcolumns in tablecolumns in referenced table
    Fb1Cb5Cb1
    Fb2Cb6Ca1
    Fc1Cc1Cb1
    Fc2CcyCa1
    +

    Annotations for the columns, rows and cells in table T are shown in the tables below.

    Column annotations:

    - - + + @@ -1213,49 +1225,49 @@

    Example with table group comprising three interrelated tables

    Cell annotations:

    idcore annotationsannotations
    tablenumbersource numbercellsnametitles
    idcore annotations
    tablenumbersource numbercellsnametitles
    Ca1Ta11Ca1.1, Ca2.1, Ca3.1, Ca4.1nameProfession
    - - + + - + - + - + - + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + +
    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorsdatatypeaboutUrlpropertyUrlvalueUrl
    idcore annotations
    tablecolumnrowstring valuevalueabout URLproperty URLvalue URL
    Ca1.1TaCa1Ra1"Finance""Finance"string
    Ca1.1TaCa1Ra1"Finance""Finance"
    Ca2.1TaCa1Ra2"Information Technology""Information Techology"string
    Ca2.1TaCa1Ra2"Information Technology""Information Techology"
    Ca3.1TaCa1Ra3"Operational Delivery""Operational Delivery"string
    Ca3.1TaCa1Ra3"Operational Delivery""Operational Delivery"
    Ca4.1TaCa1Ra4"Policy""Policy"string
    Ca4.1TaCa1Ra4"Policy""Policy"
    Cb1.1TbCb1Rb1"90115""90115"string<http://example.org/senior-roles.csv#post-90115>dc:identifier
    Cb1.2TbCb2Rb1"Steve Egan""Steve Egan"string<http://example.org/senior-roles.csv#post-90115>foaf:name
    Cb1.3TbCb3Rb1"SCS1A""SCS1A"string<http://example.org/senior-roles.csv#post-90115><http://example.org/def/grade>
    Cb1.4TbCb4Rb1"Deputy Chief Executive""Deputy Chief Executive"string<http://example.org/senior-roles.csv#post-90115><http://example.org/def/job>
    Cb1.5TbCb5Rb1"90334""90334"string<http://example.org/senior-roles.csv#post-90115><http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90334>
    Cb1.6TbCb6Rb1"Finance""Finance"string<http://example.org/senior-roles.csv#post-90115><http://example.org/def/profession>
    Cb1.1TbCb1Rb1"90115""90115"<http://example.org/senior-roles.csv#post-90115>dc:identifier
    Cb1.2TbCb2Rb1"Steve Egan""Steve Egan"<http://example.org/senior-roles.csv#post-90115>foaf:name
    Cb1.3TbCb3Rb1"SCS1A""SCS1A"<http://example.org/senior-roles.csv#post-90115><http://example.org/def/grade>
    Cb1.4TbCb4Rb1"Deputy Chief Executive""Deputy Chief Executive"<http://example.org/senior-roles.csv#post-90115><http://example.org/def/job>
    Cb1.5TbCb5Rb1"90334""90334"<http://example.org/senior-roles.csv#post-90115><http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90334>
    Cb1.6TbCb6Rb1"Finance""Finance"<http://example.org/senior-roles.csv#post-90115><http://example.org/def/profession>
    Cb2.1TbCb1Rb2"90334""90334"string<http://example.org/senior-roles.csv#post-90334>dc:identifier
    Cb2.2TbCb2Rb2"Sir Alan Langlands""Sir Alan Langlands"string<http://example.org/senior-roles.csv#post-90334>foaf:name
    Cb2.3TbCb3Rb2"SCS4""SCS4"string<http://example.org/senior-roles.csv#post-90334><http://example.org/def/grade>
    Cb2.4TbCb4Rb2"Chief Executive""Chief Executive"string<http://example.org/senior-roles.csv#post-90334><http://example.org/def/job>
    Cb2.5TbCb5Rb2"xx"nullstring<http://example.org/senior-roles.csv#post-90334><http://example.org/def/reportsTo>
    Cb2.6TbCb6Rb2"Policy""Policy"string<http://example.org/senior-roles.csv#post-90334><http://example.org/def/profession>
    Cb2.1TbCb1Rb2"90334""90334"<http://example.org/senior-roles.csv#post-90334>dc:identifier
    Cb2.2TbCb2Rb2"Sir Alan Langlands""Sir Alan Langlands"<http://example.org/senior-roles.csv#post-90334>foaf:name
    Cb2.3TbCb3Rb2"SCS4""SCS4"<http://example.org/senior-roles.csv#post-90334><http://example.org/def/grade>
    Cb2.4TbCb4Rb2"Chief Executive""Chief Executive"<http://example.org/senior-roles.csv#post-90334><http://example.org/def/job>
    Cb2.5TbCb5Rb2"xx"null<http://example.org/senior-roles.csv#post-90334><http://example.org/def/reportsTo>
    Cb2.6TbCb6Rb2"Policy""Policy"<http://example.org/senior-roles.csv#post-90334><http://example.org/def/profession>
    Cc1.1TcCc1Rc1"90115""90115"string<http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90115>
    Cc1.2TcCc2Rc1"4""4"string<http://example.org/def/grade>
    Cc1.3TcCc3Rc1"17426"17426integer<http://example.org/def/min_pay>
    Cc1.4TcCc4Rc1"20002"20002integer<http://example.org/def/max_pay>
    Cc1.5TcCc5Rc1"Administrator""Administrator"string<http://example.org/def/job>
    Cc1.6TcCc6Rc1"8.67"8.67number<http://example.org/def/number-of-posts>
    Cc1.7TcCc7Rc1"Operational Delivery""Operational Delivery"string<http://example.org/def/profession>
    Cc1.1TcCc1Rc1"90115""90115"<http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90115>
    Cc1.2TcCc2Rc1"4""4"<http://example.org/def/grade>
    Cc1.3TcCc3Rc1"17426"17426<http://example.org/def/min_pay>
    Cc1.4TcCc4Rc1"20002"20002<http://example.org/def/max_pay>
    Cc1.5TcCc5Rc1"Administrator""Administrator"<http://example.org/def/job>
    Cc1.6TcCc6Rc1"8.67"8.67<http://example.org/def/number-of-posts>
    Cc1.7TcCc7Rc1"Operational Delivery""Operational Delivery"<http://example.org/def/profession>
    Cc2.1TcCc1Rc2"90115""90115"string<http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90115>
    Cc2.2TcCc2Rc2"5""5"string<http://example.org/def/grade>
    Cc2.3TcCc3Rc2"19546"19546integer<http://example.org/def/min_pay>
    Cc2.4TcCc4Rc2"22478"22478integer<http://example.org/def/max_pay>
    Cc2.5TcCc5Rc2"Administrator""Administrator"string<http://example.org/def/job>
    Cc2.6TcCc6Rc2"0.5"0.5number<http://example.org/def/number-of-posts>
    Cc2.7TcCc7Rc2"Operational Delivery""Operational Delivery"string<http://example.org/def/profession>
    Cc2.1TcCc1Rc2"90115""90115"<http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90115>
    Cc2.2TcCc2Rc2"5""5"<http://example.org/def/grade>
    Cc2.3TcCc3Rc2"19546"19546<http://example.org/def/min_pay>
    Cc2.4TcCc4Rc2"22478"22478<http://example.org/def/max_pay>
    Cc2.5TcCc5Rc2"Administrator""Administrator"<http://example.org/def/job>
    Cc2.6TcCc6Rc2"0.5"0.5<http://example.org/def/number-of-posts>
    Cc2.7TcCc7Rc2"Operational Delivery""Operational Delivery"<http://example.org/def/profession>
    diff --git a/csv2rdf/index.html b/csv2rdf/index.html index e90f010f..2a7bf779 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -310,7 +310,7 @@

    Generating RDF

  • In standard mode only, emit the triples generated by running the algorithm specified in over any notes and non-core annotations specified for the table, with node T as an initial subject, the notes or non-core annotation as property, and the value of the notes or non-core annotation as value.

    -

    All other annotations for the table are ignored during the conversion; including information about table schemas and column descriptions specified therein, dialect descriptions, foreign-key-definitions etc.

    +

    All other annotations for the table are ignored during the conversion; including information about table schemas and columns specified therein, foreign keys etc.

  • For each row in the current table:

    @@ -647,8 +647,8 @@

    Simple example

    - - + + @@ -660,8 +660,8 @@

    Simple example

    Column annotations:

    idcore annotationsannotations
    urlcolumnsrows
    idcore annotations
    urlcolumnsrows
    Thttp://example.org/countries.csvC1, C2, C3, C4R1, R2, R3
    - - + + @@ -687,29 +687,26 @@

    Simple example

    Cell annotations:

    idcore annotationsannotations
    tablenumbersource numbercellsnametitles
    idcore annotations
    tablenumbersource numbercellsnametitles
    C1T11C1.1, C2.1, C3.1countryCodecountryCode
    - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + +
    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorspropertyUrl
    idcore annotations
    tablecolumnrowstring valuevalueproperty URL
    C1.1TC1R1"AD""AD"<http://example.org/countries.csv#countryCode>
    C1.2TC2R1"42.546245""42.546245"<http://example.org/countries.csv#latitude>
    C1.3TC3R1"1.601554""1.601554"<http://example.org/countries.csv#longitude>
    C1.4TC4R1"Andorra""Andorra"<http://example.org/countries.csv#name>
    C2.1TC1R2"AE""AE"<http://example.org/countries.csv#countryCode>
    C2.2TC2R2"23.424076""23.424076"<http://example.org/countries.csv#latitude>
    C2.3TC3R2"53.847818""53.847818"<http://example.org/countries.csv#longitude>
    C2.4TC4R2"United Arab Emirates""United Arab Emirates"<http://example.org/countries.csv#name>
    C3.1TC1R3"AF""AF"<http://example.org/countries.csv#countryCode>
    C3.2TC2R3"33.93911""33.93911"<http://example.org/countries.csv#latitude>
    C3.3TC3R3"67.709953""67.709953"<http://example.org/countries.csv#longitude>
    C3.4TC4R3"Afghanistan""Afghanistan"<http://example.org/countries.csv#name>
    C1.1TC1R1"AD""AD"null
    C1.2TC2R1"42.546245""42.546245"null
    C1.3TC3R1"1.601554""1.601554"null
    C1.4TC4R1"Andorra""Andorra"null
    C2.1TC1R2"AE""AE"null
    C2.2TC2R2"23.424076""23.424076"null
    C2.3TC3R2"53.847818""53.847818"null
    C2.4TC4R2"United Arab Emirates""United Arab Emirates"null
    C3.1TC1R3"AF""AF"null
    C3.2TC2R3"33.93911""33.93911"null
    C3.3TC3R3"67.709953""67.709953"null
    C3.4TC4R3"Afghanistan""Afghanistan"null
    - -

    As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation of the column associated with the cell. For example, the value of the property URL annotation for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

    -
  • @@ -722,7 +719,10 @@

    Simple example

    data-oninclude="updateExample"> -

    The about URL annotation has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where about URL has not been specified are assumed to refer to the same subject. This unspecified subject is treated as a blank node.

    +
    +

    The about URL annotation has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where about URL has not been specified are assumed to refer to the same subject. This unspecified subject is treated as a blank node.

    +

    Given that the property URL is null for cells in table T ({ "url": "http://example.org/countries.csv"}), the property URL defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation of the column associated with the cell. For example, the value of the property URL annotation for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

    +

    Standard mode output for this example is provided in Turtle [[turtle]] syntax below:

    @@ -766,25 +766,33 @@

    Example with single table and rich annotations

    -

    Annotations for the resulting table T, with 9 columns and 3 rows, are shown below:

    +

    Core annotations for the resulting table T, with 9 columns and 3 rows, are shown below:

    - - + + - - - - - - - - +
    idcore annotationsannotations
    urlcolumnsrows
    idcore annotations
    idurlcolumnsrowsnotes
    Thttp://example.org/tree-ops-ext.csvC1, C2, C3, C4, C5, C6, C7, C8, C9R1, R2, R3@id<http://example.org/tree-ops-ext>
    dc:title"Tree Operations"
    dcat:keyword["tree", "street", "maintenance"]
    dc:publisher[{ "schema:name": "Example Municipality", "schema:url": { "@id": "http://example.org" } }]
    dc:license<http://opendefinition.org/licenses/cc-by/>
    dc:modified"2010-12-31"
    notes[{ "@type": "oa:Annotation", ... }]
    primaryKeyC1
    T<http://example.org/tree-ops-ext>http://example.org/tree-ops-ext.csvC1, C2, C3, C4, C5, C6, C7, C8, C9R1, R2, R3[{ "@type": "oa:Annotation", ... }]
    +

    Non-core annotations for the table T are:

    + +
    +
    dc:title
    +
    "Tree Operations"
    +
    dcat:keyword
    +
    ["tree", "street", "maintenance"]
    +
    dc:publisher
    +
    [{ "schema:name": "Example Municipality", "schema:url": { "@id": "http://example.org" } }]
    +
    dc:license
    +
    { "@id": "http://opendefinition.org/licenses/cc-by/" }
    +
    dc:modified
    +
    "2010-12-31"
    +
    +

    The value of the notes annotation has been shortened for clarity in the table above.

    @@ -794,8 +802,8 @@

    Example with single table and rich annotations

    Column annotations:

    - - + + @@ -815,57 +823,55 @@

    Example with single table and rich annotations

    Row annotations:

    idcore annotationsannotations
    tablenumbersource numbercellsnametitlessuppressOutputdc:description
    idcore annotationsannotations
    tablenumbersource numbercellsnametitlessuppress outputdc:description
    C1T11C1.1, C2.1, C3.1GIDGID, Generic IdentifiertrueAn identifier for the operation on a tree.
    - - + + - - - + + +
    idcore annotations
    tablenumbersource numbercells
    idcore annotations
    tablenumbersource numbercellsprimary key
    R1T12C1.1, C1.2, C1.3, C1.4, C1.5, C1.6, C1.7, C1.8, C1.9
    R2T23C2.1, C2.2, C2.3, C2.4, C2.5, C2.6, C2.7, C2.8, C2.9
    R3T34C3.1, C3.2, C3.3, C3.4, C3.5, C3.6, C3.7, C3.8, C3.9
    R1T12C1.1, C1.2, C1.3, C1.4, C1.5, C1.6, C1.7, C1.8, C1.9C1.1
    R2T23C2.1, C2.2, C2.3, C2.4, C2.5, C2.6, C2.7, C2.8, C2.9C2.1
    R3T34C3.1, C3.2, C3.3, C3.4, C3.5, C3.6, C3.7, C3.8, C3.9C3.1

    Cell annotations:

    - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorslangdatatypeformatdefaultaboutUrl
    idcore annotations
    tablecolumnrowstring valuevalueabout URL
    C1.1TC1R1"1""1"stringhttp://example.org/tree-ops-ext#gid-1
    C1.2TC2R1"ADDISON AV""ADDISON AV"string<http://example.org/tree-ops-ext#gid-1>
    C1.3TC3R1"Celtis australis""Celtis australis"string<http://example.org/tree-ops-ext#gid-1>
    C1.4TC4R1"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-1>
    C1.5TC5R1"11"11integer<http://example.org/tree-ops-ext#gid-1>
    C1.6TC6R1"10/18/2010"2010-10-18dateM/d/yyyy<http://example.org/tree-ops-ext#gid-1>
    C1.7TC7R1""nullstring<http://example.org/tree-ops-ext#gid-1>
    C1.8TC8R1""falsebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-1>
    C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-1>
    C2.1TC1R2"2""2"string<http://example.org/tree-ops-ext#gid-2>
    C2.2TC2R2"EMERSON ST""EMERSON ST"string<http://example.org/tree-ops-ext#gid-2>
    C2.3TC3R2"Liquidambar styraciflua""Liquidambar styraciflua"string<http://example.org/tree-ops-ext#gid-2>
    C2.4TC4R2"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-2>
    C2.5TC5R2"11"11integer<http://example.org/tree-ops-ext#gid-2>
    C2.6TC6R2"6/2/2010"2010-06-02dateM/d/yyyy<http://example.org/tree-ops-ext#gid-2>
    C2.7TC7R2""nullstring<http://example.org/tree-ops-ext#gid-2>
    C2.8TC8R2""falsebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-2>
    C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-2>
    C3.1TC1R3"6""6"string<http://example.org/tree-ops-ext#gid-6>
    C3.2TC2R3"ADDISON AV""ADDISON AV"string<http://example.org/tree-ops-ext#gid-6>
    C3.3TC3R3"Robinia pseudoacacia""Robinia pseudoacacia"string<http://example.org/tree-ops-ext#gid-6>
    C3.4TC4R3"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-6>
    C3.5TC5R3"29"29integer<http://example.org/tree-ops-ext#gid-6>
    C3.6TC6R3"6/1/2010"2010-06-01dateM/d/yyyy<http://example.org/tree-ops-ext#gid-6>
    C3.7TC7R3"cavity or decay; trunk decay; codominant leaders; included bark; large leader or limb decay; previous failure root damage; root decay; beware of BEES""cavity or decay", "trunk decay", "codominant leaders", "included bark", "large leader or limb decay", "previous failure root damage", "root decay", "beware of BEES"string<http://example.org/tree-ops-ext#gid-6>
    C3.8TC8R3"YES"truebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-6>
    C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-6>
    C1.1TC1R1"1""1"http://example.org/tree-ops-ext#gid-1
    C1.2TC2R1"ADDISON AV""ADDISON AV"<http://example.org/tree-ops-ext#gid-1>
    C1.3TC3R1"Celtis australis""Celtis australis"<http://example.org/tree-ops-ext#gid-1>
    C1.4TC4R1"Large Tree Routine Prune""Large Tree Routine Prune" (English)<http://example.org/tree-ops-ext#gid-1>
    C1.5TC5R1"11"11<http://example.org/tree-ops-ext#gid-1>
    C1.6TC6R1"10/18/2010"2010-10-18<http://example.org/tree-ops-ext#gid-1>
    C1.7TC7R1""null<http://example.org/tree-ops-ext#gid-1>
    C1.8TC8R1""false<http://example.org/tree-ops-ext#gid-1>
    C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>"<http://example.org/tree-ops-ext#gid-1> (XML)
    C2.1TC1R2"2""2"<http://example.org/tree-ops-ext#gid-2>
    C2.2TC2R2"EMERSON ST""EMERSON ST"<http://example.org/tree-ops-ext#gid-2>
    C2.3TC3R2"Liquidambar styraciflua""Liquidambar styraciflua"<http://example.org/tree-ops-ext#gid-2>
    C2.4TC4R2"Large Tree Routine Prune""Large Tree Routine Prune" (English)<http://example.org/tree-ops-ext#gid-2>
    C2.5TC5R2"11"11<http://example.org/tree-ops-ext#gid-2>
    C2.6TC6R2"6/2/2010"2010-06-02<http://example.org/tree-ops-ext#gid-2>
    C2.7TC7R2""null<http://example.org/tree-ops-ext#gid-2>
    C2.8TC8R2""false<http://example.org/tree-ops-ext#gid-2>
    C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>"<http://example.org/tree-ops-ext#gid-2> (XML)
    C3.1TC1R3"6""6"<http://example.org/tree-ops-ext#gid-6>
    C3.2TC2R3"ADDISON AV""ADDISON AV"<http://example.org/tree-ops-ext#gid-6>
    C3.3TC3R3"Robinia pseudoacacia""Robinia pseudoacacia"<http://example.org/tree-ops-ext#gid-6>
    C3.4TC4R3"Large Tree Routine Prune""Large Tree Routine Prune" (English)<http://example.org/tree-ops-ext#gid-6>
    C3.5TC5R3"29"29<http://example.org/tree-ops-ext#gid-6>
    C3.6TC6R3"6/1/2010"2010-06-01<http://example.org/tree-ops-ext#gid-6>
    C3.7TC7R3"cavity or decay; trunk decay; codominant leaders; included bark; large leader or limb decay; previous failure root damage; root decay; beware of BEES""cavity or decay", "trunk decay", "codominant leaders", "included bark", "large leader or limb decay", "previous failure root damage", "root decay", "beware of BEES"<http://example.org/tree-ops-ext#gid-6>
    C3.8TC8R3"YES"true<http://example.org/tree-ops-ext#gid-6>
    C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>"<http://example.org/tree-ops-ext#gid-6> (XML)
    -

    For brevity, the property URL annotation is not shown in the table of cell annotations. Where not explicitly set, the value of property URL defaults to the resulting of evaluating the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation for the column associated with the cell. For example, the value of property URL for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

    -

    The lists of values from cells in column C7 ("name": "comments") are assumed to be unordered as the boolean ordered annotation, which defaults to true, has not be set within the metadata description.

    @@ -929,7 +935,7 @@

    Example with single table and using virtual columns to produce mult

    - The CSV to RDF translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual annotation is set to true for these virtual columns. + The CSV to RDF translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual annotation is set to true for these virtual columns.

    Furthermore, note that no attempt is made to reconcile between locations or offers that may be associated with more than one event; every row in the table will create both a new location resource and offer resource in addition to the event resource. If considered necessary, applications such as OpenRefine may be used to identify and reconcile duplicate location resources once the RDF output has been generated. @@ -957,10 +963,6 @@

    Example with single table and using virtual columns to produce mult

    Column annotations:

    - - - - @@ -991,30 +993,30 @@

    Example with single table and using virtual columns to produce mult

    idcore annotationsannotations
    tablenumbersource numbercellsnametitlesvirtual
    C1T11C1.1, C2.1nameName
    C2T22C1.2, C2.2start_dateStart Date
    - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +
    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorsdatatypeformataboutUrlpropertyUrlvalueUrl
    tablecolumnrowstring valuevalueabout URLproperty URLvalue URL
    C1.1TC1R1"B.B. King""B.B. King"string<http://example.org/events-listing.csv#event-1>schema:name
    C1.2TC2R1"2014-04-12T19:30"2014-04-12T19:30:00datetimeyyyy-MM-ddTHH:mm:ss<http://example.org/events-listing.csv#event-1>schema:startDate
    C1.3TC3R1"Lupo’s Heartbreak Hotel""Lupo’s Heartbreak Hotel"string<http://example.org/events-listing.csv#place-1>schema:name
    C1.4TC4R1"79 Washington St., Providence, RI""79 Washington St., Providence, RI"string<http://example.org/events-listing.csv#place-1>schema:address
    C1.5TC5R1"https://www.etix.com/ticket/1771656"<https://www.etix.com/ticket/1771656>anyURI<http://example.org/events-listing.csv#offer-1>schema:url
    C1.6TC6R1""nullstring<http://example.org/events-listing.csv#event-1>rdf:typeschema:MusicEvent
    C1.7TC7R1""nullstring<http://example.org/events-listing.csv#place-1>rdf:typeschema:Place
    C1.8TC8R1""nullstring<http://example.org/events-listing.csv#offer-1>rdf:typeschema:Offer
    C1.9TC9R1""nullstring<http://example.org/events-listing.csv#event-1>schema:location<http://example.org/events-listing.csv#place-1>
    C1.10TC10R1""nullstring<http://example.org/events-listing.csv#event-1>schema:offers<http://example.org/events-listing.csv#offer-1>
    C2.1TC1R2"B.B. King""B.B. King"string<http://example.org/events-listing.csv#event-2>schema:name
    C2.2TC2R2"2014-04-13T20:00"2014-04-13T20:00:00datetimeyyyy-MM-ddTHH:mm:ss<http://example.org/events-listing.csv#event-2>schema:startDate
    C2.3TC3R2"Lynn Auditorium""Lynn Auditorium"string<http://example.org/events-listing.csv#place-2>schema:name
    C2.4TC4R2"Lynn, MA, 01901""Lynn, MA, 01901"string<http://example.org/events-listing.csv#place-2>schema:address
    C2.5TC5R2"http://frontgatetickets.com/venue.php?id=11766"<http://frontgatetickets.com/venue.php?id=11766>anyURI<http://example.org/events-listing.csv#offer-2>schema:url
    C2.6TC6R2""nullstring<http://example.org/events-listing.csv#event-2>rdf:typeschema:MusicEvent
    C2.7TC7R2""nullstring<http://example.org/events-listing.csv#place-2>rdf:typeschema:Place
    C2.8TC8R2""nullstring<http://example.org/events-listing.csv#offer-2>rdf:typeschema:Offer
    C2.9TC9R2""nullstring<http://example.org/events-listing.csv#event-2>schema:location<http://example.org/events-listing.csv#place-2>
    C2.10TC10R2""nullstring<http://example.org/events-listing.csv#event-2>schema:offers<http://example.org/events-listing.csv#offer-2>
    C1.1TC1R1"B.B. King""B.B. King"<http://example.org/events-listing.csv#event-1>schema:name
    C1.2TC2R1"2014-04-12T19:30"2014-04-12T19:30:00<http://example.org/events-listing.csv#event-1>schema:startDate
    C1.3TC3R1"Lupo’s Heartbreak Hotel""Lupo’s Heartbreak Hotel"<http://example.org/events-listing.csv#place-1>schema:name
    C1.4TC4R1"79 Washington St., Providence, RI""79 Washington St., Providence, RI"<http://example.org/events-listing.csv#place-1>schema:address
    C1.5TC5R1"https://www.etix.com/ticket/1771656"<https://www.etix.com/ticket/1771656><http://example.org/events-listing.csv#offer-1>schema:url
    C1.6TC6R1""null<http://example.org/events-listing.csv#event-1>rdf:typeschema:MusicEvent
    C1.7TC7R1""null<http://example.org/events-listing.csv#place-1>rdf:typeschema:Place
    C1.8TC8R1""null<http://example.org/events-listing.csv#offer-1>rdf:typeschema:Offer
    C1.9TC9R1""null<http://example.org/events-listing.csv#event-1>schema:location<http://example.org/events-listing.csv#place-1>
    C1.10TC10R1""null<http://example.org/events-listing.csv#event-1>schema:offers<http://example.org/events-listing.csv#offer-1>
    C2.1TC1R2"B.B. King""B.B. King"<http://example.org/events-listing.csv#event-2>schema:name
    C2.2TC2R2"2014-04-13T20:00"2014-04-13T20:00:00<http://example.org/events-listing.csv#event-2>schema:startDate
    C2.3TC3R2"Lynn Auditorium""Lynn Auditorium"<http://example.org/events-listing.csv#place-2>schema:name
    C2.4TC4R2"Lynn, MA, 01901""Lynn, MA, 01901"<http://example.org/events-listing.csv#place-2>schema:address
    C2.5TC5R2"http://frontgatetickets.com/venue.php?id=11766"<http://frontgatetickets.com/venue.php?id=11766><http://example.org/events-listing.csv#offer-2>schema:url
    C2.6TC6R2""null<http://example.org/events-listing.csv#event-2>rdf:typeschema:MusicEvent
    C2.7TC7R2""null<http://example.org/events-listing.csv#place-2>rdf:typeschema:Place
    C2.8TC8R2""null<http://example.org/events-listing.csv#offer-2>rdf:typeschema:Offer
    C2.9TC9R2""null<http://example.org/events-listing.csv#event-2>schema:location<http://example.org/events-listing.csv#place-2>
    C2.10TC10R2""null<http://example.org/events-listing.csv#event-2>schema:offers<http://example.org/events-listing.csv#offer-2>
    @@ -1110,8 +1112,8 @@

    Example with table group comprising three interrelated tables

    Table Group annotations:

    - - + + @@ -1121,30 +1123,40 @@

    Example with table group comprising three interrelated tables

    Table annotations:

    idcore annotationsannotations
    tables
    idcore annotations
    tables
    GTa, Tb, Tc@typeTableGroup
    - - - + + - + - - + - - +
    idcore annotationsannotations
    urlcolumnsrowsprimaryKeysuppressOutputforeignKeys
    columnsreference
    idcore annotations
    urlcolumnsrowssuppress outputforeign keys
    Tahttp://example.org/gov.uk/professions.csvCa1Ra1, Ra2, Ra3, Ra4Ca1true
    Tahttp://example.org/gov.uk/professions.csvCa1Ra1, Ra2, Ra3, Ra4true
    Tbhttp://example.org/senior-roles.csvCb1, Cb2, Cb3, Cb4, Cb5, Cb6Rb1, Rb2Cb1Cb5Cb1
    Cb6Ca1
    Tbhttp://example.org/senior-roles.csvCb1, Cb2, Cb3, Cb4, Cb5, Cb6Rb1, Rb2falseFb1, Fb2
    Tchttp://example.org/junior-roles.csvCc1, Cc2, Cc3, Cc4, Cc5, Cc6, Cc7Rc1, Rc2Cc1Cb1
    Cc7Ca1
    Tchttp://example.org/junior-roles.csvCc1, Cc2, Cc3, Cc4, Cc5, Cc6, Cc7Rc1, Rc2falseFc1, Fc2
    -

    In this example, output for the centrally published list of professions, table Ta (http://example.org/gov.uk/professions.csv), is not required; only information from the departmental submissions is to be translated to RDF. Note the suppressOutput annotation on this table.

    +

    In this example, output for the centrally published list of professions, table Ta (http://example.org/gov.uk/professions.csv), is not required; only information from the departmental submissions is to be translated to RDF. Note the suppress output annotation on this table.

    + +

    The following foreign keys are defined:

    + + + + + + + + + + +
    idcolumns in tablecolumns in referenced table
    Fb1Cb5Cb1
    Fb2Cb6Ca1
    Fc1Cc1Cb1
    Fc2CcyCa1

    Annotations for the columns, rows and cells in table T are shown in the tables below.

    Column annotations:

    - - + + @@ -1189,49 +1201,49 @@

    Example with table group comprising three interrelated tables

    Cell annotations:

    idcore annotationsannotations
    tablenumbersource numbercellsnametitles
    idcore annotations
    tablenumbersource numbercellsnametitles
    Ca1Ta11Ca1.1, Ca2.1, Ca3.1, Ca4.1nameProfession
    - - + + - + - + - + - + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + +
    idcore annotationsannotations
    tablecolumnrowstring valuevalueerrorsdatatypeaboutUrlpropertyUrlvalueUrl
    idcore annotations
    tablecolumnrowstring valuevalueabout URLproperty URLvalue URL
    Ca1.1TaCa1Ra1"Finance""Finance"string
    Ca1.1TaCa1Ra1"Finance""Finance"
    Ca2.1TaCa1Ra2"Information Technology""Information Techology"string
    Ca2.1TaCa1Ra2"Information Technology""Information Techology"
    Ca3.1TaCa1Ra3"Operational Delivery""Operational Delivery"string
    Ca3.1TaCa1Ra3"Operational Delivery""Operational Delivery"
    Ca4.1TaCa1Ra4"Policy""Policy"string
    Ca4.1TaCa1Ra4"Policy""Policy"
    Cb1.1TbCb1Rb1"90115""90115"string<http://example.org/senior-roles.csv#post-90115>dc:identifier
    Cb1.2TbCb2Rb1"Steve Egan""Steve Egan"string<http://example.org/senior-roles.csv#post-90115>foaf:name
    Cb1.3TbCb3Rb1"SCS1A""SCS1A"string<http://example.org/senior-roles.csv#post-90115><http://example.org/def/grade>
    Cb1.4TbCb4Rb1"Deputy Chief Executive""Deputy Chief Executive"string<http://example.org/senior-roles.csv#post-90115><http://example.org/def/job>
    Cb1.5TbCb5Rb1"90334""90334"string<http://example.org/senior-roles.csv#post-90115><http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90334>
    Cb1.6TbCb6Rb1"Finance""Finance"string<http://example.org/senior-roles.csv#post-90115><http://example.org/def/profession>
    Cb1.1TbCb1Rb1"90115""90115"<http://example.org/senior-roles.csv#post-90115>dc:identifier
    Cb1.2TbCb2Rb1"Steve Egan""Steve Egan"<http://example.org/senior-roles.csv#post-90115>foaf:name
    Cb1.3TbCb3Rb1"SCS1A""SCS1A"<http://example.org/senior-roles.csv#post-90115><http://example.org/def/grade>
    Cb1.4TbCb4Rb1"Deputy Chief Executive""Deputy Chief Executive"<http://example.org/senior-roles.csv#post-90115><http://example.org/def/job>
    Cb1.5TbCb5Rb1"90334""90334"<http://example.org/senior-roles.csv#post-90115><http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90334>
    Cb1.6TbCb6Rb1"Finance""Finance"<http://example.org/senior-roles.csv#post-90115><http://example.org/def/profession>
    Cb2.1TbCb1Rb2"90334""90334"string<http://example.org/senior-roles.csv#post-90334>dc:identifier
    Cb2.2TbCb2Rb2"Sir Alan Langlands""Sir Alan Langlands"string<http://example.org/senior-roles.csv#post-90334>foaf:name
    Cb2.3TbCb3Rb2"SCS4""SCS4"string<http://example.org/senior-roles.csv#post-90334><http://example.org/def/grade>
    Cb2.4TbCb4Rb2"Chief Executive""Chief Executive"string<http://example.org/senior-roles.csv#post-90334><http://example.org/def/job>
    Cb2.5TbCb5Rb2"xx"nullstring<http://example.org/senior-roles.csv#post-90334><http://example.org/def/reportsTo>
    Cb2.6TbCb6Rb2"Policy""Policy"string<http://example.org/senior-roles.csv#post-90334><http://example.org/def/profession>
    Cb2.1TbCb1Rb2"90334""90334"<http://example.org/senior-roles.csv#post-90334>dc:identifier
    Cb2.2TbCb2Rb2"Sir Alan Langlands""Sir Alan Langlands"<http://example.org/senior-roles.csv#post-90334>foaf:name
    Cb2.3TbCb3Rb2"SCS4""SCS4"<http://example.org/senior-roles.csv#post-90334><http://example.org/def/grade>
    Cb2.4TbCb4Rb2"Chief Executive""Chief Executive"<http://example.org/senior-roles.csv#post-90334><http://example.org/def/job>
    Cb2.5TbCb5Rb2"xx"null<http://example.org/senior-roles.csv#post-90334><http://example.org/def/reportsTo>
    Cb2.6TbCb6Rb2"Policy""Policy"<http://example.org/senior-roles.csv#post-90334><http://example.org/def/profession>
    Cc1.1TcCc1Rc1"90115""90115"string<http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90115>
    Cc1.2TcCc2Rc1"4""4"string<http://example.org/def/grade>
    Cc1.3TcCc3Rc1"17426"17426integer<http://example.org/def/min_pay>
    Cc1.4TcCc4Rc1"20002"20002integer<http://example.org/def/max_pay>
    Cc1.5TcCc5Rc1"Administrator""Administrator"string<http://example.org/def/job>
    Cc1.6TcCc6Rc1"8.67"8.67number<http://example.org/def/number-of-posts>
    Cc1.7TcCc7Rc1"Operational Delivery""Operational Delivery"string<http://example.org/def/profession>
    Cc1.1TcCc1Rc1"90115""90115"<http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90115>
    Cc1.2TcCc2Rc1"4""4"<http://example.org/def/grade>
    Cc1.3TcCc3Rc1"17426"17426<http://example.org/def/min_pay>
    Cc1.4TcCc4Rc1"20002"20002<http://example.org/def/max_pay>
    Cc1.5TcCc5Rc1"Administrator""Administrator"<http://example.org/def/job>
    Cc1.6TcCc6Rc1"8.67"8.67<http://example.org/def/number-of-posts>
    Cc1.7TcCc7Rc1"Operational Delivery""Operational Delivery"<http://example.org/def/profession>
    Cc2.1TcCc1Rc2"90115""90115"string<http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90115>
    Cc2.2TcCc2Rc2"5""5"string<http://example.org/def/grade>
    Cc2.3TcCc3Rc2"19546"19546integer<http://example.org/def/min_pay>
    Cc2.4TcCc4Rc2"22478"22478integer<http://example.org/def/max_pay>
    Cc2.5TcCc5Rc2"Administrator""Administrator"string<http://example.org/def/job>
    Cc2.6TcCc6Rc2"0.5"0.5number<http://example.org/def/number-of-posts>
    Cc2.7TcCc7Rc2"Operational Delivery""Operational Delivery"string<http://example.org/def/profession>
    Cc2.1TcCc1Rc2"90115""90115"<http://example.org/def/reportsTo><http://example.org/senior-roles.csv#post-90115>
    Cc2.2TcCc2Rc2"5""5"<http://example.org/def/grade>
    Cc2.3TcCc3Rc2"19546"19546<http://example.org/def/min_pay>
    Cc2.4TcCc4Rc2"22478"22478<http://example.org/def/max_pay>
    Cc2.5TcCc5Rc2"Administrator""Administrator"<http://example.org/def/job>
    Cc2.6TcCc6Rc2"0.5"0.5<http://example.org/def/number-of-posts>
    Cc2.7TcCc7Rc2"Operational Delivery""Operational Delivery"<http://example.org/def/profession>
    @@ -1264,7 +1276,7 @@

    Example with table group comprising three interrelated tables

    -

    Table group G was explicitly defined, but has not been explicitly identified; the table resource is treated as a blank node.

    +

    Table group G was explicitly defined, but has not been explicitly identified; the table group and table resources are treated as blank nodes.

    The resources described by each row of table Tb ({ "url": "http://example.org/senior-roles.csv"}) are explcitly defined using the about URL annotation; therefore, say, for row Rb1 we state [] csvw:describes t2:post-90115 .; whilst the about URL annotation has not been defined for resources described by each row of table Tc ({ "url": "http://example.org/junior-roles.csv"}); therefore blank nodes are used, e.g. for row Rc1 we state [] csvw:describes _:d8b8e40c-8c74-458b-99f7-64d1cf5c65f2 ..

  • diff --git a/examples/junior-roles.json b/examples/junior-roles.json index a1d98bf7..eade2b13 100644 --- a/examples/junior-roles.json +++ b/examples/junior-roles.json @@ -41,14 +41,14 @@ "foreignKeys": [{ "columnReference": "reportsToSenior", "reference": { - "resource": "senior-roles.csv", + "schemaReference": "senior-roles.json", "columnReference": "ref" } }, { "columns": "profession", "reference": { "resource": "gov.uk/professions.csv", - "columns": "name" + "columnReference": "name" } }] } diff --git a/examples/senior-roles.json b/examples/senior-roles.json index c08ef49e..8387a807 100644 --- a/examples/senior-roles.json +++ b/examples/senior-roles.json @@ -39,14 +39,14 @@ "foreignKeys": [{ "columnReference": "reportsTo", "reference": { - "resource": "senior-roles.csv", + "schemaReference": "senior-roles.json", "columnReference": "ref" } }, { "columns": "profession", "reference": { "resource": "gov.uk/professions.csv", - "columns": "name" + "columnReference": "name" } }] } From f67c1b6db95ac4b623d54c99e1a3e030239bd925 Mon Sep 17 00:00:00 2001 From: Jeni Tennison Date: Fri, 10 Apr 2015 23:10:34 +0100 Subject: [PATCH 12/18] removed datatype aliases from model document the aliases can be used in the metadata, but they should map to the standard datatypes in the model --- metadata/index.html | 8 ++++---- syntax/index.html | 12 ++++-------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/metadata/index.html b/metadata/index.html index 24236289..81b0eb53 100644 --- a/metadata/index.html +++ b/metadata/index.html @@ -1521,10 +1521,10 @@

    Built-in Datatypes

    • the datatypes defined in [[!xmlschema11-2]] as derived from and including anyAtomicType
    • -
    • the datatype number which is exactly equivalent to double
    • -
    • the datatype binary which is exactly equivalent to base64Binary
    • -
    • the datatype datetime which is exactly equivalent to dateTime
    • -
    • the datatype any which is exactly equivalent to anyAtomicType
    • +
    • the datatype number which is mapped to double in the data model
    • +
    • the datatype binary which is mapped to base64Binary in the data model
    • +
    • the datatype datetime which is mapped to dateTime in the data model
    • +
    • the datatype any which is mapped to anyAtomicType in the data model
    • the datatype xml, a sub-type of string, which indicates the value is an XML fragment
    • the datatype html, a sub-type of string, which indicates the value is an HTML fragment
    • the datatype json, a sub-type of string, which indicates the value is serialized JSON
    • diff --git a/syntax/index.html b/syntax/index.html index 96bdfe4f..90056313 100644 --- a/syntax/index.html +++ b/syntax/index.html @@ -316,10 +316,6 @@

      Datatypes

      • the datatypes defined in [[!xmlschema11-2]] as derived from and including anyAtomicType
      • -
      • the datatype number which is exactly equivalent to double
      • -
      • the datatype binary which is exactly equivalent to base64Binary
      • -
      • the datatype datetime which is exactly equivalent to dateTime
      • -
      • the datatype any which is exactly equivalent to anyAtomicType
      • the datatype xml, a sub-type of string, which indicates the value is an XML fragment
      • the datatype html, a sub-type of string, which indicates the value is an HTML fragment
      • the datatype json, a sub-type of string, which indicates the value is serialized JSON
      • @@ -629,8 +625,8 @@

        Parsing Cells

        The process of parsing the string value into a single value or a list of values is as follows:

          -
        1. unless the datatype base is string, json, xml, html, anyAtomicType, or any, replace all carriage return (#xD), line feed (#xA), and tab (#x9) characters with space characters.
        2. -
        3. unless the datatype base 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.
        4. +
        5. unless the datatype base is string, json, xml, html or anyAtomicType, replace all carriage return (#xD), line feed (#xA), and tab (#x9) characters with space characters.
        6. +
        7. unless the datatype base is string, json, xml, html, anyAtomicType, 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.
        8. if the resulting string is an empty string, apply the remaining steps to the string given by the column default annotation.
        9. if the column separator annotation is not null and the resulting string is an empty string, the cell value is an empty list. If the column required annotation is true, add an error to the list of errors for the cell.
        10. if the column separator annotation is not null, the cell value is a list of values created by: @@ -638,7 +634,7 @@

          Parsing Cells

        11. if the normalized string is an empty string, apply the remaining steps to the string given by the column default annotation.
        12. if the normalized string is the same as any one of the values of the column null annotation, then the resulting value is null.
        13. split the normalized string at the character specified by the column separator annotation.
        14. -
        15. unless the datatype base is string, anyAtomicType, or any, strip leading and trailing whitespace from these strings.
        16. +
        17. unless the datatype base is string or anyAtomicType, strip leading and trailing whitespace from these strings.
        18. applying the remaining steps to each of the strings in turn.
        @@ -691,7 +687,7 @@

        Parsing examples

        "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. + 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 or anyAtomicType, 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: From 1d2919beb826fbffbd14a5f38b85bc7ffcd880c9 Mon Sep 17 00:00:00 2001 From: Jeni Tennison Date: Fri, 10 Apr 2015 23:14:18 +0100 Subject: [PATCH 13/18] fixed refs to table group description --- csv2json/index.html | 6 +++--- csv2rdf/index.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/csv2json/index.html b/csv2json/index.html index 8aeebc63..308d91d3 100644 --- a/csv2json/index.html +++ b/csv2json/index.html @@ -207,7 +207,7 @@

        Algorithm terms

        Generating JSON

        A conformant JSON conversion application MUST produce output conforming to this algorithm according to the chosen mode of conversion: standard or minimal.

        -

        Where an annotated table is defined in isolation (e.g. in the absence of a table group description), a default table group description is provided with a single tables annotation that refers to that table.

        +

        Where an annotated table is defined in isolation (e.g. in the absence of a table group), a default table group is provided with a tables annotation that refers to that table.

        Minimal mode

        The steps in the algorithm defined here apply to minimal mode.

        @@ -216,7 +216,7 @@

        Minimal mode

        Insert an empty array A into the JSON output. The objects containing the name-value pairs associated with the cell values will be subsequently inserted into this array.

      • -

        Each table is processed sequentially in the order they are referenced in the table group description. For each table where the value of the annotation suppress output is false:

        +

        Each table is processed sequentially in the order they are referenced in the table group. For each table where the value of the annotation suppress output is false:

        1. Each row within the table is processed sequentially in order. For each row in the current table:

          @@ -271,7 +271,7 @@

          Standard mode

          where AT is an array into which the objects describing the annotated tables will be subsequently inserted.

        2. -

          Each table is processed sequentially in the order they are referenced in the table group description.

          +

          Each table is processed sequentially in the order they are referenced in the table group.

          For each table where the value of the annotation suppress output is false:

          1. diff --git a/csv2rdf/index.html b/csv2rdf/index.html index 2a7bf779..98faef97 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -247,7 +247,7 @@

            Generating RDF

            A conformant RDF conversion application MUST emit triples conforming to those described in this algorithm according to the chosen mode of conversion: standard or minimal.

            Unless specified otherwise, the steps in the algorithm defined herein apply to both standard and minimal modes.

            -

            Where an annotated table is defined in isolation (e.g. in the absence of a table group description), a default table group description is provided with a single tables annotation that refers to that table.

            +

            Where an annotated table is defined in isolation (e.g. in the absence of a table group), a default table group is provided with a tables annotation that refers to that table.

            1. In standard mode only, establish a new node G. From 6fc9aa69ef33efafdd6a9aa451a22296bf87cb98 Mon Sep 17 00:00:00 2001 From: Gregg Kellogg Date: Fri, 10 Apr 2015 15:25:39 -0700 Subject: [PATCH 14/18] Define `cell value list`, `cell value datatype`, and `cell value language` and use in csv2rdf. --- csv2rdf/index.html | 18 +++++++++--------- syntax/index.html | 10 +++++----- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/csv2rdf/index.html b/csv2rdf/index.html index b90a43a8..6bf96253 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -402,7 +402,7 @@

              Generating RDF

              node Vurl
            2. -
            3. Else, if the cell value is a list and the column ordered annotation is true, then the cell value provides an ordered sequence of literal nodes for inclusion within the RDF output using an instance of rdf:List Vlist as defined in [[rdf-schema]]. This instance is related to the subject using the predicate P; emit the triples defining list Vlist plus the following triple: +
            4. Else, if the cell value is a list and the column ordered annotation is true, then the cell value provides an ordered sequence of literal nodes for inclusion within the RDF output using an instance of rdf:List Vlist as defined in [[rdf-schema]]. This instance is related to the subject using the predicate P; emit the triples defining list Vlist plus the following triple:
              subject
              node S
              @@ -412,7 +412,7 @@

              Generating RDF

              node Vlist
            5. -
            6. Else, if the cell value is a list, then the cell value provides an unordered sequence of literal nodes for inclusion within the RDF output, each of which is related to the subject using the predicate P. For each value provided in the sequence, add a literal node Vliteral; emit the following triple: +
            7. Else, if the cell value is a list, then the cell value provides an unordered sequence of literal nodes for inclusion within the RDF output, each of which is related to the subject using the predicate P. For each value provided in the sequence, add a literal node Vliteral; emit the following triple:
              subject
              node S
              @@ -431,9 +431,9 @@

              Generating RDF

              object
              literal node Vliteral
              -

              The literal nodes derived from the cell values MUST be expressed according to the cell value datatype of the cell as defined below: Interpreting datatypes.

              -

              In the case when the cell value does not have a datatype, the conversion should default to string.

              -

              In the case where a sequence of values is provided, the datatype applies to all members of the sequence.

              +

              The literal nodes derived from the cell values MUST be expressed according to the cell value's datatype as defined below: Interpreting datatypes.

              +

              In the case when the cell value does not have a datatype annotation, the conversion should default to string.

              +

              In the case where a sequence of values is provided, the cell value's datatype applies to all members of the sequence.

          2. @@ -446,7 +446,7 @@

            Generating RDF

            Interpreting datatypes

            -

            Cell values are expressed in the RDF output according to the cell values's' datatype. The relationship between the value of the cell values's' datatype and the datatype IRI used in the RDF is provided in the table below.

            +

            Cell values are expressed in the RDF output according to the cell value's datatype. The relationship between the value of the cell value's datatype and the datatype IRI used in the RDF is provided in the table below.

            A cell's format annotation is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format annotation.

            @@ -497,7 +497,7 @@

            Interpreting datatypes

            gYearMonthxsd:gYearMonth hexBinaryxsd:hexBinary QNamexsd:QName - stringxsd:string or rdf:langStringdepending on whether or not the lang property is defined for the cell. + stringxsd:string or rdf:langStringdepending on whether or not the cell has a language annotation. normalizedStringxsd:normalizedString tokenxsd:token languagexsd:language @@ -510,7 +510,7 @@

            Interpreting datatypes

            -

            In the case of rdf:langString, the appropriate language tag (as defined in [[!rdf11-concepts]]) MUST be provided for the string, based on the value of lang. +

            In the case of rdf:langString, the appropriate language tag (as defined in [[!rdf11-concepts]]) MUST be provided for the string, based on the value of cell value's language. (See section on Graph Literals in [[!rdf11-concepts]] for further details on language tagged literals.)

            According to [[rdf11-concepts]] language tags cannot be combined with any other xsd datatypes. If a cell has any other datatype than string, the value of lang MUST be ignored. Also, all literals have a datatype; however, specific serializations, like Turtle [[turtle]], MAY provide a special syntax for literals with datatype xsd:string or rdf:langString.

            @@ -1064,7 +1064,7 @@

            Example with single table and using virtual columns to produce mult

            Example with table group description comprising four interrelated tables

            - This example is based on Use Case #4 - Publication of public sector roles and salaries and uses four annotated tables published within a table group. Information about senior roles and junior roles within a government department or organization are published in CSV format by each department. These are validated against a centrally published schema to ensure that all the data published by departments is consistent. Additionally, lists of organizations and professions are also published centrally, providing controlled vocabularies against which departmental submissions are validated. + This example is based on Use Case #4 - Publication of public sector roles and salaries and uses four table descriptions published within a table group description. Information about senior roles and junior roles within a government department or organization are published in CSV format by each department. These are validated against a centrally published schema to ensure that all the data published by departments is consistent. Additionally, lists of organizations and professions are also published centrally, providing controlled vocabularies against which departmental submissions are validated.

            diff --git a/syntax/index.html b/syntax/index.html index 9a701182..a95d3324 100644 --- a/syntax/index.html +++ b/syntax/index.html @@ -289,7 +289,7 @@

            Cells

          3. 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.
          4. table — the table in which the cell appears.
          5. text direction — which direction the text within the cell should be displayed, as described in .
          6. -
          7. 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.
          8. +
          9. value — the semantic value of the cell; this MAY have a datatype other than a string, MAY have a language, 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.
          10. value URL — an absolute URL for this cell's value, or null.

      @@ -309,7 +309,7 @@

      Cells

      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. + Columns and 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.

      Datatypes are based on a subset of those defined in [[!xmlschema11-2]] with aliases. The annotated tabular data model limits cell values to have datatypes as shown on the diagram: @@ -633,7 +633,7 @@

      Parsing Cells

    • unless the datatype base 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 column default annotation.
    • if the column separator annotation is not null and the resulting string is an empty string, the cell value is an empty list. If the column required annotation is true, add an error to the list of errors for the cell.
    • -
    • if the column separator annotation is not null, the cell value is a list of values created by: +
    • if the column separator annotation is not null, the cell value is a list of values; set the list annotation on the cell to true, and create the cell value created by:
      1. if the normalized string is an empty string, apply the remaining steps to the string given by the column default annotation.
      2. if the normalized string is the same as any one of the values of the column null annotation, then the resulting value is null.
      3. @@ -644,8 +644,8 @@

        Parsing Cells

      4. if the string is an empty string, apply the remaining steps to the string given by the column default annotation.
      5. if the string is the same as any one of the values of the column null annotation, then the resulting value is null. If the column separator annotation is null and the column required annotation is true, add an error to the list of errors for the cell.
      6. -
      7. validate the string based on the datatype, using the datatype format annotation 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 column lang annotation.
      8. -
      9. otherwise, if there are no errors, parse the string using the datatype format if one is specified, as described below; the resulting value is typed according to the datatype base and if the datatype base is string, or there is no datatype, it has the language provided by the column lang annotation.
      10. +
      11. validate the string based on the datatype, using the datatype format annotation 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 has a datatype annotation of string with the language annotation provided by the column lang annotation.
      12. +
      13. otherwise, if there are no errors, parse the string using the datatype format if one is specified, as described below; the resulting value sets a datatype annotation according to the datatype base and if the datatype base is string, or there is no datatype, it sets the language annotation from the column lang annotation.

      The final value (or values) become the value annotation on the cell.

      If there is a about URL annotation on the column, it becomes the about URL annotation on the cell, after being transformed into an absolute URL as described in URI Template Properties of [[!tabular-metadata]].

      From fc9acffa48a22fbf39170f0dfa36ad4cf2262191 Mon Sep 17 00:00:00 2001 From: Gregg Kellogg Date: Fri, 10 Apr 2015 16:44:56 -0700 Subject: [PATCH 15/18] Updates to csv2json for issue #463. --- csv2json/index.html | 469 ++++++++++++++++++++++---------------------- csv2rdf/index.html | 6 +- 2 files changed, 240 insertions(+), 235 deletions(-) diff --git a/csv2json/index.html b/csv2json/index.html index b526292a..74379007 100644 --- a/csv2json/index.html +++ b/csv2json/index.html @@ -112,13 +112,13 @@

      Introduction

      The conversion of CSV content to JSON is intended for web developers who need not care about the complexities of RDF [[!rdf11-concepts]]. Where the formality of RDF is required, [[!csv2rdf]] provides the procedures for mapping from CSV content to RDF which may be serialized to [[json-ld]].

      -

      The [[!tabular-data-model]] defines an annotated tabular data model consisting of tables, columns, rows, and cells, enriched with annotations that describe the structure of the tabular data and the meaning of its content. A table group is a collection of tables published as a single atomic unit.

      +

      The [[!tabular-data-model]] defines an annotated tabular data model consisting of tables, columns, rows, and cells, enriched with annotations that describe the structure of the tabular data and the meaning of its content. A group of tables is a collection of tables published as a single atomic unit.

      The conversion procedure described in this specification operates on the tabular data. This specification does not specify the processes needed to convert CSV-encoded data into tabular data form. Please refer to [[!tabular-data-model]] for details of parsing tabular data.

      Conversion applications MUST provide at least two modes of operation: standard and minimal.

      -

      Standard mode conversion frames the information gleaned from the cells of the tabular data with details of the rows, tables, and a table group within which that information is provided.

      +

      Standard mode conversion frames the information gleaned from the cells of the tabular data with details of the rows, tables, and a group of tables within which that information is provided.

      Minimal mode conversion includes only the information gleaned from the cells of the tabular data within the output.

      @@ -143,11 +143,11 @@

      Converting Tabular Data to JSON

      Algorithm terms

      -
      aboutUrl
      -
      aboutUrl is the evaluation of the URI template property aboutUrl for the current cell.
      +
      about URL
      +
      The about URL annotation on the current cell.
      annotated table
      -
      The annotated table is defined in [[!tabular-data-model]] as describing a particular table and its metadata.
      +
      The annotated table is defined in [[!tabular-data-model]] as describing a particular table and its annotations.
      array
      An array is defined in JSON ([[!RFC7159]]) as an ordered sequence of zero or more values, where a value is a string, number, boolean, null, object, or array.
      @@ -159,28 +159,31 @@

      Algorithm terms

      Cell errors are defined in [[!tabular-data-model]] as a (possibly empty) list of validation errors generated while parsing the literal content of a cell to generate the semantic value.
      cell value
      -
      A cell value is defined in [[!tabular-data-model]] as the semantic value of the cell; this MAY be null or, in the case that the cell specifies a separator property, a sequence of values.
      +
      A cell value is defined in [[!tabular-data-model]] as the semantic value of the cell; this MAY be null or, in the case that the cell has a separator annotation, a sequence of values.
      column
      A column is defined in [[!tabular-data-model]] as a vertical arrangement of cells within a table.
      common properties
      -
      The common properties, defined in Section 3.3 Common Properties of [[!tabular-metadata]]), may be specified for tables and table groups.
      +
      The common properties of a metadata resource are defined in Section 3.3 Common Properties of [[!tabular-metadata]]), these create additional annotations on a group of tables, annotated table, column, row, or cell. The RDF triples corresponding to these annotations are the result of running the algorithm specified in or equivalalent, over the additional annotations on the annotated object as defined in [[!tabular-data-model]].
      -
      identifier
      -
      The identifier is the evaluation of the @id property for the current resource. As defined in [[!tabular-data-model]], the identifier is null if the @id property is undefined. The identifier MAY be applied to either a table group or a table.
      +
      group of tables
      +
      The group of tables is defined in [[!tabular-data-model]] as comprising a set of annotated tables and a set of annotations that relate to those tables.
      + +
      group of tables identifier
      +
      The identifier is the id annotation on a group of tables. As defined in [[!tabular-data-model]].
      name
      In the context of this specification, name is used as defined in JSON ([[!RFC7159]]); that is, that name is a string that provides a unique key within a set of name-value pairs within a JSON object.
      notes
      -
      A list of notes, as defined in [[!tabular-data-model]], attached to an annotated table or table group using the notes property. This may be an empty list.
      +
      A list of notes, as defined in [[!tabular-data-model]], attached to an annotated table or group of tables using the notes property. This may be an empty list.
      object
      An object is defined in JSON ([[!RFC7159]]) as unordered collection of zero or more name-value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.
      -
      propertyUrl
      -
      The propertyUrl is the evaluation of the URI template property propertyUrl for the current cell.
      +
      property URL
      +
      The property URL annotation on the current cell.
      row
      The row is defined in [[!tabular-data-model]] as a horizontal arrangement of cells within a table.
      @@ -191,17 +194,20 @@

      Algorithm terms

      row source number
      A row source number is defined in [[!tabular-data-model]] as the position of the row within the source tabular data file. Provision of the row source number is dependent on parsing applications and may be reported as null.
      -
      subject
      -
      Within this algorithm, a subject is the resource that the value of a given cell refers to. This may be specified using the aboutUrl property.
      +
      subject
      +
      Within this algorithm, a subject is the resource that the value of a given cell refers to. This may be specified using about URL.
      + +
      table description
      +
      The table description description object as defined in [[!tabular-metadata]] is used to create an annotated table as defined in [[!tabular-data-model]].
      -
      table group
      -
      The table group is defined in [[!tabular-data-model]] as comprising a set of annotated tables and a set of annotations that relate to those tables.
      -
      table group description
      -
      The table group description object as defined in [[!tabular-data-model]].
      +
      The table group description description object as defined in [[!tabular-metadata]] is used to create a group of tables as defined in [[!tabular-data-model]].
      -
      valueUrl
      -
      The valueUrl is the evaluation of the URI template property valueUrl for the current cell.
      +
      table identifier
      +
      The identifier is the id annotation on an annotated table. As defined in [[!tabular-data-model]].
      + +
      value URL
      +
      The value URL annotation on the current cell.
      @@ -210,7 +216,7 @@

      Generating JSON

      A conformant JSON conversion application MUST produce output conforming to this algorithm according to the chosen mode of conversion: standard or minimal.

      -

      Where an annotated table is defined in isolation (e.g. in the absence of a table group description), a default table group description is provided with a single tables annotation that refers to that table.

      +

      Where an annotated table is defined in isolation (e.g. in the absence of a group of tables), a default group of tables is provided with a single tables annotation that refers to that table.

      Minimal mode

      @@ -220,7 +226,7 @@

      Minimal mode

      Insert an empty array A into the JSON output. The objects containing the name-value pairs associated with the cell values will be subsequently inserted into this array.

    • -

      Each table is processed sequentially in the order they are referenced in the table group description. For each table where the value of property suppressOutput is false:

      +

      Each table is processed sequentially in the order they are referenced in the group of tables. For each table where the suppress output annotation is false:

      1. Each row within the table is processed sequentially in order. For each row in the current table:

        @@ -228,12 +234,12 @@

        Minimal mode

      2. Generate a sequence of objects, S1 to Sn, each of which corresponds to a subject described by the current row, as described in .

        -

        The subject(s) described by each row are determined according to the aboutUrl property for each cell in the current row. Where aboutUrl is undefined, a default subject for the row is used.

        +

        The subject(s) described by each row are determined according to the about URL annotation for each cell in the current row. Where about URL is undefined, a default subject for the row is used.

      3. As described in , process the sequence of objects, S1 to Sn, to produce a new sequence of root objects, SR1 to SRm, that MAY include nested objects.

        -

        A row MAY describe multiple interrelated subjects; where the valueUrl property for one cell matches the aboutUrl property for another cell in the same row.

        +

        A row MAY describe multiple interrelated subjects; where the value URL annotation on one cell matches the about URL annotation on another cell in the same row.

      4. Insert each root object, SR1 to SRm, into array A.

        @@ -250,10 +256,10 @@

        Standard mode

        The steps in the algorithm defined here apply to standard mode.

        1. -

          Insert an empty object G into the JSON output which is associated with the table group.

          +

          Insert an empty object G into the JSON output which is associated with the group of tables.

        2. -

          If the table group has an identifier IG; insert the following name-value pair into object G:

          +

          If the group of tables has an identifier IG; insert the following name-value pair into object G:

          name
          @id
          @@ -262,7 +268,7 @@

          Standard mode

        3. -

          Insert any notes and common properties specified for the table group into object G according to the rules provided in .

          +

          Insert any notes and non-core annotations specified for the specified for the group of tables, such as common properties into object G according to the rules provided in .

        4. Insert the following name-value pair into object G:

          @@ -275,14 +281,14 @@

          Standard mode

          where AT is an array into which the objects describing the annotated tables will be subsequently inserted.

        5. -

          Each table is processed sequentially in the order they are referenced in the table group description.

          -

          For each table where the value of property suppressOutput is false:

          +

          Each table is processed sequentially in the order they are referenced in the group of tables.

          +

          For each table where the suppress output annotation is false:

          1. Insert an empty object T into the array AT to represent the table.

          2. -

            If the table has an identifier IT; insert the following name-value pair into object T:

            +

            If the table has an identifier IT; insert the following name-value pair into object T:

            name
            @id
            @@ -291,7 +297,7 @@

            Standard mode

          3. -

            Specify the source tabular data file URL for the current table based on the value of property url; insert the following name-value pair into object T:

            +

            Specify the source tabular data file URL for the current table based on the url annotation; insert the following name-value pair into object T:

            name
            url
            @@ -300,8 +306,8 @@

            Standard mode

          4. -

            Insert any notes and common properties specified for the table into object T according to the rules provided in .

            -

            All other annotations for the table are ignored during the conversion; including information about table schemas and column descriptions specified therein, dialect descriptions, foreign-key-definitions etc.

            +

            Insert any notes and non-core annotations specified for the table, such as common properties into object T according to the rules provided in .

            +

            All other core annotations for the table are ignored during the conversion; including information about direction and foreign keys specified therein, transformations etc.

          5. Insert the following name-value pair into object T:

            @@ -350,12 +356,12 @@

            Standard mode

          6. Generate a sequence of objects, S1 to Sn, each of which corresponds to a subject described by the current row, as described in .

            -

            The subject(s) described by each row are determined according to the aboutUrl property for each cell in the current row. Where aboutUrl is undefined, a default subject for the row is used.

            +

            The subject(s) described by each row are determined according to the about URL annotation for each cell in the current row. Where about URL is undefined, a default subject for the row is used.

          7. As described in , process the sequence of objects, S1 to Sn, to produce a new sequence of root objects, SR1 to SRm, that MAY include nested objects.

            -

            A row MAY describe multiple interrelated subjects; where the valueUrl property for one cell matches the aboutUrl property for another cell in the same row.

            +

            A row MAY describe multiple interrelated subjects; where the value URL annotation on one cell matches the about URL annotation on another cell in the same row.

          8. Insert each root object, SR1 to SRm, into array A.

            @@ -376,15 +382,15 @@

            Generating Objects

            1. -

              Determine the unique subjects for the current row. The subject(s) described by each row are determined according to the aboutUrl property for each cell in the current row. A default subject for the row is used for any cells where aboutUrl is undefined.

              +

              Determine the unique subjects for the current row. The subject(s) described by each row are determined according to the about URL annotation for each cell in the current row. A default subject for the row is used for any cells where about URL is undefined.

            2. -

              For each subject that the current row describes where at least one of the cells that refers to that subject has a value or valueUrl that is not null, and is associated with a column where the value of property suppressOutput has value false:

              +

              For each subject that the current row describes where at least one of the cells that refers to that subject has a value or value URL that is not null, and is associated with a column where suppress output annotation is false:

              1. Create an empty object Si to represent the subject i.

                (i is the index number with values from 1 to n, where n is the number of subjects for the row)

                -

                Subject i is identified according to the aboutUrl property of its associated cells: IS. For a default subject where aboutUrl is not specified by its cells, IS is null.

                +

                Subject i is identified according to the about URL annotation of its associated cells: IS. For a default subject where about URL is not specified by its cells, IS is null.

              2. If the identifier for subject i, IS, is not null, then insert the following name-value pair into object Si:

                @@ -397,31 +403,31 @@

                Generating Objects

              3. Each cell referring to subject i is then processed sequentially according to the order of the columns.

                -

                For each cell referring to subject i, where the value of property suppressOutput for the column associated with that cell is false, insert a name-value pair into object Si as described below:

                +

                For each cell referring to subject i, where the suppress output annotation for the column associated with that cell is false, insert a name-value pair into object Si as described below:

                1. -

                  If the value of propertyUrl for the cell is not null, then name N takes the value of propertyUrl compacted according to the rules as defined in URL Compaction in [[!tabular-metadata]].

                  -

                  Else, name N takes the value of the name property for the column associated with the cell.

                  +

                  If the value of property URL for the cell is not null, then name N takes the value of property URL compacted according to the rules as defined in URL Compaction in [[!tabular-metadata]].

                  +

                  Else, name N takes the value of the name annotation for the column associated with the cell.

                2. -

                  If the valueUrl for the current cell is not null, then insert the following name-value pair into object Si:

                  +

                  If the value URL for the current cell is not null, then insert the following name-value pair into object Si:

                  name
                  N
                  value
                  Vurl
                  -

                  where Vurl is the value of valueUrl property for the current cell expressed as a string in the JSON output. If N is @type, compact Vurl according to the rules as defined in URL Compaction in [[!tabular-metadata]].

                  +

                  where Vurl is the value of value URL annotation for the current cell expressed as a string in the JSON output. If N is @type, compact Vurl according to the rules as defined in URL Compaction in [[!tabular-metadata]].

                3. -

                  Else, if the cell specifies a separator property and the cell value is not an empty sequence, then the cell value provides a sequence of values for inclusion within the JSON output; insert an array Av containing each value V of the sequence into object Si:

                  +

                  Else, if the cell value is a list that is not empty, then the cell value provides a sequence of values for inclusion within the JSON output; insert an array Av containing each value V of the sequence into object Si:

                  name
                  N
                  value
                  Av
                  -

                  Each of the values V derived from the sequence MUST be expressed in the JSON output according to the datatype property of the cell as defined below: .

                  +

                  Each of the values V derived from the sequence MUST be expressed in the JSON output according to the cell value's datatype as defined below: .

                  Since arrays are implicitly ordered in JSON, the ordered property, if specified, has no effect on the JSON output.

                4. @@ -433,7 +439,7 @@

                  Generating Objects

                  V
                  -

                  Value V derived from the cell values MUST be expressed in the JSON output according to the datatype property of the cell as defined below: .

                  +

                  Value V derived from the cell values MUST be expressed in the JSON output according to the cell value's datatype as defined below: .

              4. @@ -449,11 +455,11 @@

                Generating Objects

                Generating Nested Objects

                The steps in the algorithm defined herein apply to both standard and minimal modes.

                -

                Where the current row describes multiple subjects, it MAY be possible to organise the objects associated with those subjects such that some objects are nested within others; e.g. where the valueUrl property for one cell matches the aboutUrl property for another cell in the same row. This algorithm considers a sequence of objects generated according to , S1 to Sn, each of which corresponds to a subject described by the current row. It generates a new sequence of root objects, SR1 to SRm, that MAY include nested objects.

                +

                Where the current row describes multiple subjects, it MAY be possible to organise the objects associated with those subjects such that some objects are nested within others; e.g. where the value URL annotation for one cell matches the about URL annotation for another cell in the same row. This algorithm considers a sequence of objects generated according to , S1 to Sn, each of which corresponds to a subject described by the current row. It generates a new sequence of root objects, SR1 to SRm, that MAY include nested objects.

                Where the current row describes only a single subject, this algorithm may be bypassed as no nesting is possible. In such a case, the root object SR1 is identical to the original object S1.

                -

                This nesting algorithm is based on the interrelationships between subjects described within a given row that are specified using the valueUrl property. Cell values expressing the identity of a subject in the current row (i.e., as a simple literal) will be ignored by this algorithm.

                +

                This nesting algorithm is based on the interrelationships between subjects described within a given row that are specified using the value URL annotation. Cell values expressing the identity of a subject in the current row (i.e., as a simple literal) will be ignored by this algorithm.

                The algorithm uses the following terms:

                @@ -489,7 +495,7 @@

                Generating Nested Objects

                1. -

                  For all cells in the current row, determine the valueUrls, Vurl, that occur only once. The list of these uniquely occurring valueUrls is referred to as the URL-list.

                  +

                  For all cells in the current row, determine the value URLs, Vurl, that occur only once. The list of these uniquely occurring value URLs is referred to as the URL-list.

                2. Create an empty forest F. Vertices in the trees of this forest represent the subjects described by the current row.

                  @@ -504,17 +510,17 @@

                  Generating Nested Objects

                  Check whether there is a vertex N in forest F that represents object Si. If none of the existing vertices in forest F represent object Si, then insert a new tree into forest F whose root is a vertex N that represents object Si and has identity IS.

                3. -

                  For all cells associated with the current object Si (e.g. whose aboutUrl property matches IS):

                  +

                  For all cells associated with the current object Si (e.g. whose about URL property matches IS):

                  1. -

                    If the valueUrl property of the current cell is defined and its value, Vurl, appears in the URL-list, then check each of the other objects in the sequence S1 to Sn to determine if Vurl identifies one of those objects.

                    +

                    If the value URL annotation of the current cell is defined and its value, Vurl, appears in the URL-list, then check each of the other objects in the sequence S1 to Sn to determine if Vurl identifies one of those objects.

                    For object Sj, if the name-value pair with name @id is present and its value matches Vurl, then:

                    1. If the root of the tree containing vertex N is a vertex that represents object Sj, then object Si is already a descendant of object Sj; no further action should be taken for this instance of Vurl.

                      This clause in the algorithm prevents circular loops being created.

                      -

                      Furthermore, because the URL-list contains valueUrls that occur only once for the current row, object Si cannot be a descendant of an intermediate vertices in the tree.

                      +

                      Furthermore, because the URL-list contains value URLs that occur only once for the current row, object Si cannot be a descendant of an intermediate vertices in the tree.

                    2. @@ -545,15 +551,15 @@

                      Generating Nested Objects

                      Interpreting datatypes

                      -

                      Cell values are expressed in the JSON output according to the cell's datatype property. The relationship between the value of the datatype property and the primitive types supported by JSON (as specified in [[!RFC7159]]) is provided in the table below.

                      +

                      Cell values are expressed in the JSON output according to the cell value's datatype. The relationship between the value of the cell value's datatype and the primitive types supported by JSON (as specified in [[!RFC7159]]) is provided in the table below.

                      Instances of JSON reserved characters within string values MUST be escaped as defined in [[!RFC7159]].

                      -

                      JSON has no native support for expressing language information; therefore the lang property has no effect on the JSON output.

                      +

                      JSON has no native support for expressing language information; therefore the cell value's language has no effect on the JSON output.

                      -

                      A cell's format property is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format property.

                      +

                      A cell's format annotation is irrelevant to the conversion procedure defined in this specification; the cell value has already been parsed from the contents the cell according to the format annotation.

                      Where the contents of the cell cannot be parsed, or other validation errors occur, cell errors will be provided. It is an implementation decision to determine how conversion applications should proceed in the event that cell errors are encountered.

                      @@ -656,7 +662,7 @@

                      JSON-LD to JSON

                    -

                    In addition to compacting values of propertyUrls, URLs which ware the value of @type used within the notes and common properties are compacted according to the rules as defined in URL Compaction in [[!tabular-metadata]].

                    +

                    In addition to compacting values of property URLs, URLs which ware the value of @type used within the notes and common properties are compacted according to the rules as defined in URL Compaction in [[!tabular-metadata]].

    • @@ -667,7 +673,7 @@

      Examples

      Simple example

      - This example comprises a single annotated table containing information attributes about countries; country code, position (latitude, longitude) and name. Whilst the input tabular data file, published at http://example.org/countries.csv, includes a header line, no further metadata annotations are given. The tabular data file is provided below: + This example comprises a single table description containing information attributes about countries; country code, position (latitude, longitude) and name. Whilst the input tabular data file, published at http://example.org/countries.csv, includes a header line, no further metadata annotations are given. The tabular data file is provided below:

      Simple example
       
               
               
      -

      Annotations for the resulting table T, with 4 columns and 3 rows, are shown below:

      - - - - - - - - - -
      idcore annotationsannotations
      urlcolumnsrows
      Thttp://example.org/countries.csvC1, C2, C3, C4R1, R2, R3
      - -

      Annotations for the columns, rows and cells in table T are shown in the tables below.

      - -

      Column annotations:

      - - - - - - - - - - - -
      idcore annotationsannotations
      tablenumbersource numbercellsnametitles
      C1T11C1.1, C2.1, C3.1countryCodecountryCode
      C2T22C1.2, C2.2, C3.2latitudelatitude
      C3T33C1.3, C2.3, C3.3longitudelongitude
      C4T44C1.4, C2.4, C3.4namename
      - -

      Row annotations:

      - - - - - - - - - - -
      idcore annotations
      tablenumbersource numbercells
      R1T12C1.1, C1.2, C1.3, C1.4
      R2T23C2.1, C2.2, C2.3, C2.4
      R3T34C3.1, C3.2, C3.3, C3.4
      - -

      Cell annotations:

      - - - - - - - - - - - - - - - - - - - - - -
      idcore annotationsannotations
      tablecolumnrowstring valuevalueerrorspropertyUrl
      C1.1TC1R1"AD""AD"<http://example.org/countries.csv#countryCode>
      C1.2TC2R1"42.546245""42.546245"<http://example.org/countries.csv#latitude>
      C1.3TC3R1"1.601554""1.601554"<http://example.org/countries.csv#longitude>
      C1.4TC4R1"Andorra""Andorra"<http://example.org/countries.csv#name>
      C2.1TC1R2"AE""AE"<http://example.org/countries.csv#countryCode>
      C2.2TC2R2"23.424076""23.424076"<http://example.org/countries.csv#latitude>
      C2.3TC3R2"53.847818""53.847818"<http://example.org/countries.csv#longitude>
      C2.4TC4R2"United Arab Emirates""United Arab Emirates"<http://example.org/countries.csv#name>
      C3.1TC1R3"AF""AF"<http://example.org/countries.csv#countryCode>
      C3.2TC2R3"33.93911""33.93911"<http://example.org/countries.csv#latitude>
      C3.3TC3R3"67.709953""67.709953"<http://example.org/countries.csv#longitude>
      C3.4TC4R3"Afghanistan""Afghanistan"<http://example.org/countries.csv#name>
      - -

      As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of propertyUrl for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

      + +

      Annotations for the resulting table T, with 4 columns and 3 rows, are shown below:

      + + + + + + + + + +
      idcore annotationsannotations
      urlcolumnsrows
      Thttp://example.org/countries.csvC1, C2, C3, C4R1, R2, R3
      + +

      Annotations for the columns, rows and cells in table T are shown in the tables below.

      + +

      Column annotations:

      + + + + + + + + + + + +
      idcore annotationsannotations
      tablenumbersource numbercellsnametitles
      C1T11C1.1, C2.1, C3.1countryCodecountryCode
      C2T22C1.2, C2.2, C3.2latitudelatitude
      C3T33C1.3, C2.3, C3.3longitudelongitude
      C4T44C1.4, C2.4, C3.4namename
      + +

      Row annotations:

      + + + + + + + + + + +
      idcore annotations
      tablenumbersource numbercells
      R1T12C1.1, C1.2, C1.3, C1.4
      R2T23C2.1, C2.2, C2.3, C2.4
      R3T34C3.1, C3.2, C3.3, C3.4
      + +

      Cell annotations:

      + + + + + + + + + + + + + + + + + + + + + +
      idcore annotationsannotations
      tablecolumnrowstring valuevalueerrorsproperty URL
      C1.1TC1R1"AD""AD"<http://example.org/countries.csv#countryCode>
      C1.2TC2R1"42.546245""42.546245"<http://example.org/countries.csv#latitude>
      C1.3TC3R1"1.601554""1.601554"<http://example.org/countries.csv#longitude>
      C1.4TC4R1"Andorra""Andorra"<http://example.org/countries.csv#name>
      C2.1TC1R2"AE""AE"<http://example.org/countries.csv#countryCode>
      C2.2TC2R2"23.424076""23.424076"<http://example.org/countries.csv#latitude>
      C2.3TC3R2"53.847818""53.847818"<http://example.org/countries.csv#longitude>
      C2.4TC4R2"United Arab Emirates""United Arab Emirates"<http://example.org/countries.csv#name>
      C3.1TC1R3"AF""AF"<http://example.org/countries.csv#countryCode>
      C3.2TC2R3"33.93911""33.93911"<http://example.org/countries.csv#latitude>
      C3.3TC3R3"67.709953""67.709953"<http://example.org/countries.csv#longitude>
      C3.4TC4R3"Afghanistan""Afghanistan"<http://example.org/countries.csv#name>
      + +

      As the value of propertyUrl has not been set within the metadata description it defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of property URL annotation for all cells in column C1 ("name": "countryCode") is http://example.org/countries.csv#countryCode.

      Minimal mode output for this example is provided below:

      @@ -757,8 +764,8 @@

      Simple example

      -

      The aboutUrl property has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where aboutUrl has not been specified are assumed to refer to the same subject and so the name-value pairs associated with the cell values of that row occur within the same object.

      -

      Given that the propertyUrl has not been explicitly set for cells in table T ({ "url": "http://example.org/countries.csv"}), the simplified name is used in the name-value pairs; e.g. countryCode rather than http://example.org/countries.csv#countryCode

      +

      The about URL annotation has not been set for cells in table T ({ "url": "http://example.org/countries.csv"}) - cells in a given row where the about URL annotation has not been specified are assumed to refer to the same subject and so the name-value pairs associated with the cell values of that row occur within the same object.

      +

      Given that there is no property URL annotation on the cells in table T ({ "url": "http://example.org/countries.csv"}), the simplified name is used in the name-value pairs; e.g. countryCode rather than http://example.org/countries.csv#countryCode

      Standard mode output for this example is provided below:

      @@ -771,7 +778,7 @@

      Simple example

      -

      Even though the table was defined in isolation, the table is wrapped in a table group.

      +

      Even though the table description was defined in isolation, the annotated table is wrapped in a table group description.

      The name-value pair with name url provides reference to the original tabular data file and to specific rows therein.

      The row number is provided for each row using name-value pair with name rownum.

      The object containing the name-values pairs associated with the cell values of a row are related to the object for that row using the name-value pair with name describes.

      @@ -802,106 +809,105 @@

      Example with single table and rich annotations

      +

      Annotations for the resulting table T, with 9 columns and 3 rows, are shown below:

      -

      Annotations for the resulting table T, with 9 columns and 3 rows, are shown below:

      - - - - - - - - - - - - - - - - -
      idcore annotationsannotations
      urlcolumnsrows
      Thttp://example.org/tree-ops-ext.csvC1, C2, C3, C4, C5, C6, C7, C8, C9R1, R2, R3@id<http://example.org/tree-ops-ext>
      dc:title"Tree Operations"
      dcat:keyword["tree", "street", "maintenance"]
      dc:publisher[{ "schema:name": "Example Municipality", "schema:url": { "@id": "http://example.org" } }]
      dc:license<http://opendefinition.org/licenses/cc-by/>
      dc:modified"2010-12-31"
      notes[{ "@type": "oa:Annotation", ... }]
      primaryKeyC1
      + + + + + + + + + + + + + + + +
      idcore annotationsannotations
      urlcolumnsrows
      Thttp://example.org/tree-ops-ext.csvC1, C2, C3, C4, C5, C6, C7, C8, C9R1, R2, R3@id<http://example.org/tree-ops-ext>
      dc:title"Tree Operations"
      dcat:keyword["tree", "street", "maintenance"]
      dc:publisher[{ "schema:name": "Example Municipality", "schema:url": { "@id": "http://example.org" } }]
      dc:license<http://opendefinition.org/licenses/cc-by/>
      dc:modified"2010-12-31"
      notes[{ "@type": "oa:Annotation", ... }]
      primaryKeyC1
      -
      -

      The value of the notes annotation has been shortened for clarity in the table above. -

      +
      +

      The value of the notes annotation has been shortened for clarity in the table above. +

      -

      Annotations for the columns, rows and cells in table T are shown in the tables below.

      +

      Annotations for the columns, rows and cells in table T are shown in the tables below.

      -

      Column annotations:

      - - - - - - - - - - - - - - - - -
      idcore annotationsannotations
      tablenumbersource numbercellsnametitlessuppressOutputdc:description
      C1T11C1.1, C2.1, C3.1GIDGID, Generic IdentifiertrueAn identifier for the operation on a tree.
      C2T22C1.2, C2.2, C3.2on_streetOn StreetThe street that the tree is on.
      C3T33C1.3, C2.3, C3.3speciesSpeciesThe species of the tree.
      C4T44C1.4, C2.4, C3.4trim_cycleTrim CycleThe operation performed on the tree.
      C5T55C1.5, C2.5, C3.5dbhDiameter at Breast HtDiameter at Breast Height (DBH) of the tree (in feet), measured 4.5ft above ground.
      C6T66C1.6, C2.6, C3.6inventory_dateInventory DateThe date of the operation that was performed.
      C7T77C1.7, C2.7, C3.7commentsCommentsSupplementary comments relating to the operation or tree.
      C8T88C1.8, C2.8, C3.8protectedProtectedIndication (YES / NO) whether the tree is subject to a protection order.
      C9T99C1.9, C2.9, C3.9kmlKMLKML-encoded description of tree location.
      +

      Column annotations:

      + + + + + + + + + + + + + + + + +
      idcore annotationsannotations
      tablenumbersource numbercellsnametitlessuppressOutputdc:description
      C1T11C1.1, C2.1, C3.1GIDGID, Generic IdentifiertrueAn identifier for the operation on a tree.
      C2T22C1.2, C2.2, C3.2on_streetOn StreetThe street that the tree is on.
      C3T33C1.3, C2.3, C3.3speciesSpeciesThe species of the tree.
      C4T44C1.4, C2.4, C3.4trim_cycleTrim CycleThe operation performed on the tree.
      C5T55C1.5, C2.5, C3.5dbhDiameter at Breast HtDiameter at Breast Height (DBH) of the tree (in feet), measured 4.5ft above ground.
      C6T66C1.6, C2.6, C3.6inventory_dateInventory DateThe date of the operation that was performed.
      C7T77C1.7, C2.7, C3.7commentsCommentsSupplementary comments relating to the operation or tree.
      C8T88C1.8, C2.8, C3.8protectedProtectedIndication (YES / NO) whether the tree is subject to a protection order.
      C9T99C1.9, C2.9, C3.9kmlKMLKML-encoded description of tree location.
      -

      In this example, output for column C1 (GID) is not required; note the suppressOutput annotation on this column.

      +

      In this example, output for column C1 (GID) is not required; note the suppress output annotation on this column.

      -

      Row annotations:

      - - - - - - - - - - -
      idcore annotations
      tablenumbersource numbercells
      R1T12C1.1, C1.2, C1.3, C1.4, C1.5, C1.6, C1.7, C1.8, C1.9
      R2T23C2.1, C2.2, C2.3, C2.4, C2.5, C2.6, C2.7, C2.8, C2.9
      R3T34C3.1, C3.2, C3.3, C3.4, C3.5, C3.6, C3.7, C3.8, C3.9
      +

      Row annotations:

      + + + + + + + + + + +
      idcore annotations
      tablenumbersource numbercells
      R1T12C1.1, C1.2, C1.3, C1.4, C1.5, C1.6, C1.7, C1.8, C1.9
      R2T23C2.1, C2.2, C2.3, C2.4, C2.5, C2.6, C2.7, C2.8, C2.9
      R3T34C3.1, C3.2, C3.3, C3.4, C3.5, C3.6, C3.7, C3.8, C3.9
      -

      Cell annotations:

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      idcore annotationsannotations
      tablecolumnrowstring valuevalueerrorslangdatatypeformatdefaultaboutUrl
      C1.1TC1R1"1""1"stringhttp://example.org/tree-ops-ext#gid-1
      C1.2TC2R1"ADDISON AV""ADDISON AV"string<http://example.org/tree-ops-ext#gid-1>
      C1.3TC3R1"Celtis australis""Celtis australis"string<http://example.org/tree-ops-ext#gid-1>
      C1.4TC4R1"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-1>
      C1.5TC5R1"11"11integer<http://example.org/tree-ops-ext#gid-1>
      C1.6TC6R1"10/18/2010"2010-10-18dateM/d/yyyy<http://example.org/tree-ops-ext#gid-1>
      C1.7TC7R1""nullstring<http://example.org/tree-ops-ext#gid-1>
      C1.8TC8R1""falsebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-1>
      C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-1>
      C2.1TC1R2"2""2"string<http://example.org/tree-ops-ext#gid-2>
      C2.2TC2R2"EMERSON ST""EMERSON ST"string<http://example.org/tree-ops-ext#gid-2>
      C2.3TC3R2"Liquidambar styraciflua""Liquidambar styraciflua"string<http://example.org/tree-ops-ext#gid-2>
      C2.4TC4R2"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-2>
      C2.5TC5R2"11"11integer<http://example.org/tree-ops-ext#gid-2>
      C2.6TC6R2"6/2/2010"2010-06-02dateM/d/yyyy<http://example.org/tree-ops-ext#gid-2>
      C2.7TC7R2""nullstring<http://example.org/tree-ops-ext#gid-2>
      C2.8TC8R2""falsebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-2>
      C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-2>
      C3.1TC1R3"6""6"string<http://example.org/tree-ops-ext#gid-6>
      C3.2TC2R3"ADDISON AV""ADDISON AV"string<http://example.org/tree-ops-ext#gid-6>
      C3.3TC3R3"Robinia pseudoacacia""Robinia pseudoacacia"string<http://example.org/tree-ops-ext#gid-6>
      C3.4TC4R3"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-6>
      C3.5TC5R3"29"29integer<http://example.org/tree-ops-ext#gid-6>
      C3.6TC6R3"6/1/2010"2010-06-01dateM/d/yyyy<http://example.org/tree-ops-ext#gid-6>
      C3.7TC7R3"cavity or decay; trunk decay; codominant leaders; included bark; large leader or limb decay; previous failure root damage; root decay; beware of BEES""cavity or decay", "trunk decay", "codominant leaders", "included bark", "large leader or limb decay", "previous failure root damage", "root decay", "beware of BEES"string<http://example.org/tree-ops-ext#gid-6>
      C3.8TC8R3"YES"truebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-6>
      C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-6>
      +

      Cell annotations:

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      idcore annotationsannotations
      tablecolumnrowstring valuevalueerrorslangdatatypeformatdefaultabout URL
      C1.1TC1R1"1""1"stringhttp://example.org/tree-ops-ext#gid-1
      C1.2TC2R1"ADDISON AV""ADDISON AV"string<http://example.org/tree-ops-ext#gid-1>
      C1.3TC3R1"Celtis australis""Celtis australis"string<http://example.org/tree-ops-ext#gid-1>
      C1.4TC4R1"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-1>
      C1.5TC5R1"11"11integer<http://example.org/tree-ops-ext#gid-1>
      C1.6TC6R1"10/18/2010"2010-10-18dateM/d/yyyy<http://example.org/tree-ops-ext#gid-1>
      C1.7TC7R1""nullstring<http://example.org/tree-ops-ext#gid-1>
      C1.8TC8R1""falsebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-1>
      C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-1>
      C2.1TC1R2"2""2"string<http://example.org/tree-ops-ext#gid-2>
      C2.2TC2R2"EMERSON ST""EMERSON ST"string<http://example.org/tree-ops-ext#gid-2>
      C2.3TC3R2"Liquidambar styraciflua""Liquidambar styraciflua"string<http://example.org/tree-ops-ext#gid-2>
      C2.4TC4R2"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-2>
      C2.5TC5R2"11"11integer<http://example.org/tree-ops-ext#gid-2>
      C2.6TC6R2"6/2/2010"2010-06-02dateM/d/yyyy<http://example.org/tree-ops-ext#gid-2>
      C2.7TC7R2""nullstring<http://example.org/tree-ops-ext#gid-2>
      C2.8TC8R2""falsebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-2>
      C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-2>
      C3.1TC1R3"6""6"string<http://example.org/tree-ops-ext#gid-6>
      C3.2TC2R3"ADDISON AV""ADDISON AV"string<http://example.org/tree-ops-ext#gid-6>
      C3.3TC3R3"Robinia pseudoacacia""Robinia pseudoacacia"string<http://example.org/tree-ops-ext#gid-6>
      C3.4TC4R3"Large Tree Routine Prune""Large Tree Routine Prune"enstring<http://example.org/tree-ops-ext#gid-6>
      C3.5TC5R3"29"29integer<http://example.org/tree-ops-ext#gid-6>
      C3.6TC6R3"6/1/2010"2010-06-01dateM/d/yyyy<http://example.org/tree-ops-ext#gid-6>
      C3.7TC7R3"cavity or decay; trunk decay; codominant leaders; included bark; large leader or limb decay; previous failure root damage; root decay; beware of BEES""cavity or decay", "trunk decay", "codominant leaders", "included bark", "large leader or limb decay", "previous failure root damage", "root decay", "beware of BEES"string<http://example.org/tree-ops-ext#gid-6>
      C3.8TC8R3"YES"truebooleanYES|NO"NO"<http://example.org/tree-ops-ext#gid-6>
      C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>"xml<http://example.org/tree-ops-ext#gid-6>
      -

      For brevity, the propertyUrl is not shown in the table of cell annotations. Where not explicitly set, the value of propertyUrl defaults to the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name property for the column associated with the cell. For example, the value of propertyUrl for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

      +

      For brevity, the property URL annotation is not shown in the table of cell annotations. Where not explicitly set, the value of the property URL annotation defaults to the evaluation of the URI Template (see [[RFC6570]]) #{[column-name]}, where [column-name] is the value of the name annotation for the column associated with the cell. For example, the value of the property URL annotation for all cells in column C2 ("name": "on_street") is http://example.org/tree-ops-ext.csv#on_street.

      Minimal mode output for this example is provided below:

      @@ -914,8 +920,8 @@

      Example with single table and rich annotations

      -

      The subject described by each row is explicitly defined using the aboutUrl property; e.g. the subject of row R1 is http://example.org/tree-ops-ext#gid-1.

      -

      Output for column C1 ({ "name": "GID" }) is not included as column property suppressOutput has value true.

      +

      The subject described by each row is explicitly defined using the about URL annotation; e.g. the subject of row R1 is http://example.org/tree-ops-ext#gid-1.

      +

      Output for column C1 ({ "name": "GID" }) is not included as column suppress output annotation is true.

      Cells C1.7 and C2.7 (rows R1 and R2; column, { "name": "comments" }) have null values - no output is included for these cells.

      Cell C3.7 (row R3; column, { "name": "comments" }) contains a sequence of values; the set of values are included in an array.

      @@ -959,7 +965,7 @@

      Example with single table and using virtual columns to produce mult

      - The CSV to JSON translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual property is set to true for these virtual columns. + The CSV to JSON translation is limited to providing one statement, or triple, per column in the table. The target schema.org markup requires 10 statements to describe each event. As the base tabular data file contains 5 columns, an additional 5 virtual columns have been added in order to provide for the full complement of statements—including the relationships between the 3 resources (event, location, and offer) described by each row of the table. Note that the virtual annotation is true for these virtual columns.

      Furthermore, note that no attempt is made to reconcile between locations or offers that may be associated with more than one event; every row in the table will create both a new location resource and offer resource in addition to the event resource. If considered necessary, applications such as OpenRefine may be used to identify and reconcile duplicate location resources once the JSON output has been generated. @@ -970,6 +976,7 @@

      Example with single table and using virtual columns to produce mult
      +

      Annotations for the resulting table T, with 10 columns and 2 rows, are shown below:

      @@ -1020,7 +1027,7 @@

      Example with single table and using virtual columns to produce mult

      - + @@ -1060,7 +1067,7 @@

      Example with single table and using virtual columns to produce mult

      Three resources are defined for each row within the table; event, location and offer - therefore three objects are created for each row.

      -

      Each column explicitly defines both aboutUrl and propertyUrl properties which are inherited by the column's cells.

      +

      Each column explicitly defines both aboutUrl and propertyUrl properties which are used to create the about URL and property URL annotations on the column's cells.

      Columns C6, C7 and C8 ({ "name": "type_event"}, { "name": "type_place"} and { "name": "type_offer"}) define the semantic types of the resources described by each row: schema:MusicEvent, schema:Place and schema:Offer respectively—noting that the use of rdf:type is converted to the name @type (as used in [[json-ld]]) by this conversion application.

      Column C9 ({ "name": "location"}) uses the aboutUrl and valueUrl to assert the relationship between the event and location resources.

      Column C10 ({ "name": "offer"}) uses the aboutUrl and valueUrl to assert the relationship between the event and offer resources.

      @@ -1084,7 +1091,7 @@

      Example with single table and using virtual columns to produce mult

      Example with table group comprising four interrelated tables

      - This example is based on Use Case #4 - Publication of public sector roles and salaries and uses four annotated tables published within a table group. Information about senior roles and junior roles within a government department or organization are published in CSV format by each department. These are validated against a centrally published schema to ensure that all the data published by departments is consistent. Additionally, lists of organizations and professions are also published centrally, providing controlled vocabularies against which departmental submissions are validated. + This example is based on Use Case #4 - Publication of public sector roles and salaries and uses four annotated tables published within a group of tables. Information about senior roles and junior roles within a government department or organization are published in CSV format by each department. These are validated against a centrally published schema to ensure that all the data published by departments is consistent. Additionally, lists of organizations and professions are also published centrally, providing controlled vocabularies against which departmental submissions are validated.

      @@ -1159,13 +1166,11 @@

      Example with table group comprising four interrelated tables

      Finally, note that because the centrally published metadata descriptions are intended to be reused across many government departments and organizations, extra consideration has been given to defining URIs for the person and post resources defined in each row of the senior roles tabular data and subsequently referenced from the junior roles tabular data. To ensure that naming clashes are avoided, the unique reference for the organization to which the person or post belongs has been included in a path segment of the identifier. For example, the URI template property aboutUrl used to identify the senior post is specified as http://example.org/organization/{organizationRef}/post/{ref}, thus yielding the URI http://example.org/organization/hefce.ac.uk/post/90115 for the post described in the first row of the senior roles tabular data.

      -

      The table group generated from parsing the tabular data files and associated metadata is shown below and provides the basis for the conversion to JSON.

      +

      The group of tables generated from parsing the tabular data files and associated metadata is shown below and provides the basis for the conversion to JSON.

      - -
      -

      Annotations for the table group G and the four tables Ta, Tb, Tc, and Td are shown below.

      +

      Annotations for the group of tables G and the four tables Ta, Tb, Tc, and Td are shown below.

      -

      Table Group annotations:

      +

      Group of Tables annotations:

      idcore annotationsannotations
      tablecolumnrowstring valuevalueerrorsdatatypeformataboutUrlpropertyUrlvalueUrl
      tablecolumnrowstring valuevalueerrorsdatatypeformatabout URLproperty URLvalue URL
      C1.1TC1R1"B.B. King""B.B. King"string<http://example.org/events-listing.csv#event-1>schema:name
      @@ -1198,7 +1203,7 @@

      Example with table group comprising four interrelated tables

      idcore annotationsannotations
      -

      In this example, output for the centrally published lists of organizations and professions, tables Ta and Tb (http://example.org/gov.uk/data/organizations.csv and http://example.org/gov.uk/data/professions.csv respectively), are not required; only information from the departmental submissions is to be translated to JSON. Note the suppressOutput annotation on this table.

      +

      In this example, output for the centrally published lists of organizations and professions, tables Ta and Tb (http://example.org/gov.uk/data/organizations.csv and http://example.org/gov.uk/data/professions.csv respectively), are not required; only information from the departmental submissions is to be translated to RDF. Note the suppress output annotation on this table.

      Annotations for the columns, rows and cells in table T are shown in the tables below.

      @@ -1264,7 +1269,7 @@

      Example with table group comprising four interrelated tables

      - + @@ -1323,7 +1328,7 @@

      Example with table group comprising four interrelated tables

      idcore annotationsannotations
      tablecolumnrowstring valuevalueerrorsdatatypeaboutUrlpropertyUrlvalueUrl
      tablecolumnrowstring valuevalueerrorsdatatypeabout URLproperty URLvalue URL
      Ca1.1TaCa1Ra1"hefce.ac.uk""hefce.ac.uk"string<http://example.org/organization/hefce.ac.uk>dc:identifier
      -

      Notice that valueUrl is not specified for cells Ca2.3 and Cc2.5 because in each case the cell value is null and the virtual property of column Cb5 is not specified.

      +

      Notice that value URL is not specified for cells Ca2.3 and Cc2.5 because in each case the cell value is null and the virtual annotation of column Cb5 is not defined.

      Minimal mode output for this example is provided below:

      diff --git a/csv2rdf/index.html b/csv2rdf/index.html index 6bf96253..3c392f91 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -304,7 +304,7 @@

      Generating RDF

    • -

      In standard mode only, specify the source tabular data file URL for the current table based on the annotation; emit the following triple:

      +

      In standard mode only, specify the source tabular data file URL for the current table based on the url annotation; emit the following triple:

      subject
      node T
      @@ -371,8 +371,8 @@

      Generating RDF

    • Establish a new blank node Sdef to be used as the default subject for cells where about URL is undefined.

      -

      A row MAY describe multiple interrelated subjects; where the value URL property for one cell matches the about URL property for another cell in the same row.

      -

      For each cell in the current row where the value of property suppress output for the column associated with that cell is false:

      +

      A row MAY describe multiple interrelated subjects; where the value URL annotation on one cell matches the about URL annotation on another cell in the same row.

      +

      For each cell in the current row where the suppress output annotation for the column associated with that cell is false:

      1. Establish a node S from about URL if set, or from Sdef otherwise as the current subject.

        From 9d7b57f9197a0cd60473eadb2511a6ecef91053a Mon Sep 17 00:00:00 2001 From: Gregg Kellogg Date: Fri, 10 Apr 2015 16:50:19 -0700 Subject: [PATCH 16/18] Fix table column count issues in ex-groups-annotation (again). Header column cound must be the same as the column count of each row. --- csv2json/index.html | 5 ++++- csv2rdf/index.html | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/csv2json/index.html b/csv2json/index.html index 74379007..5e09474a 100644 --- a/csv2json/index.html +++ b/csv2json/index.html @@ -837,7 +837,7 @@

        Example with single table and rich annotations

        Column annotations:

        - + @@ -1168,6 +1168,9 @@

        Example with table group comprising four interrelated tables

        The group of tables generated from parsing the tabular data files and associated metadata is shown below and provides the basis for the conversion to JSON.

        + +
        +

        Annotations for the group of tables G and the four tables Ta, Tb, Tc, and Td are shown below.

        Group of Tables annotations:

        diff --git a/csv2rdf/index.html b/csv2rdf/index.html index 3c392f91..da90444a 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -272,7 +272,7 @@

        Generating RDF

      2. -

        In standard mode only, emit the triples generated by running the algorithm specified in over any notes and common properties specified for the group of tables, with node G as an initial subject, the notes or common property as property, and the value of the notes or common property as value.

        +

        In standard mode only, emit the triples generated by running the algorithm specified in over any notes and non-core annotations specified for the specified for the group of tables, such as common properties, with node G as an initial subject, the notes or common property as property, and the value of the notes or common property as value.

      3. For each table where the suppress output annotation is false:

        @@ -804,7 +804,7 @@

        Example with single table and rich annotations

        Column annotations:

      4. idcore annotationsannotations
        idcore annotationsannotations
        tablenumbersource numbercellsnametitlessuppressOutputdc:description
        - + From fd1d72180ee7e7e7b44e1157f12c2a5b3c64378a Mon Sep 17 00:00:00 2001 From: Jeni Tennison Date: Sun, 12 Apr 2015 10:03:53 -0400 Subject: [PATCH 17/18] fixed tabular data model references --- csv2json/index.html | 4 ++-- csv2rdf/index.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/csv2json/index.html b/csv2json/index.html index 57d8400a..6662bde0 100644 --- a/csv2json/index.html +++ b/csv2json/index.html @@ -132,7 +132,7 @@

        Introduction

        Tabular data MUST conform to the description from [[!tabular-data-model]]. In particular note that each row MUST contain the same number of cells (although some of these cells may be empty).

        - Not all CSV-encoded data can be parsed into a tabular data model. An algorithm for parsing CSV-based files is described in [[!tabular-model]]. + Not all CSV-encoded data can be parsed into a tabular data model. An algorithm for parsing CSV-based files is described in [[!tabular-data-model]].

        @@ -175,7 +175,7 @@

        Algorithm terms

        In the context of this specification, name is used as defined in JSON ([[!RFC7159]]); that is, that name is a string that provides a unique key within a set of name-value pairs within a JSON object.
        non-core annotations
        -
        Core annotations are listed in [[!tabular-model]]; groups of tables and tables may also have other annotations that are not defined in that specification; these are known as non-core annotations.
        +
        Core annotations are listed in [[!tabular-data-model]]; groups of tables and tables may also have other annotations that are not defined in that specification; these are known as non-core annotations.
        notes
        A list of notes, as defined in [[!tabular-data-model]], attached to an annotated table or group of tables using the notes property. This may be an empty list.
        diff --git a/csv2rdf/index.html b/csv2rdf/index.html index ec216ee9..7de07be0 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -150,7 +150,7 @@

        Introduction

        Tabular data MUST conform to the description from [[!tabular-data-model]]. In particular note that each row MUST contain the same number of cells (although some of these cells may be empty).

        - Not all CSV-encoded data can be parsed into a tabular data model. An algorithm for parsing CSV-based files is described in [[!tabular-model]]. + Not all CSV-encoded data can be parsed into a tabular data model. An algorithm for parsing CSV-based files is described in [[!tabular-data-model]].

        This specification makes use of the compact IRI Syntax; please refer to the Compact IRIs from [[json-ld]].

        @@ -210,7 +210,7 @@

        Algorithm terms

        A node is defined in [[!rdf11-concepts]] as a subject or an object of an RDF triple. When in subject position, it can be either a blank node or identified with a URL; when in object position, it can be a blank node, a literal, or identified with a URL.
        non-core annotations
        -
        Core annotations are listed in [[!tabular-model]]; groups of tables and tables may also have other annotations that are not defined in that specification; these are known as non-core annotations.
        +
        Core annotations are listed in [[!tabular-data-model]]; groups of tables and tables may also have other annotations that are not defined in that specification; these are known as non-core annotations.
        notes
        A list of notes, as defined in [[!tabular-data-model]], attached to an annotated table or group of tables using the notes property. This may be an empty list.
        From 7a49800d1fab09f2b16c898bdfda8f33de2cdb1c Mon Sep 17 00:00:00 2001 From: Jeni Tennison Date: Sun, 12 Apr 2015 10:06:30 -0400 Subject: [PATCH 18/18] fixed misplaced (XML) --- csv2json/index.html | 6 +++--- csv2rdf/index.html | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/csv2json/index.html b/csv2json/index.html index 6662bde0..cdb7e4b3 100644 --- a/csv2json/index.html +++ b/csv2json/index.html @@ -881,7 +881,7 @@

        Example with single table and rich annotations

        - + @@ -891,7 +891,7 @@

        Example with single table and rich annotations

        - + @@ -901,7 +901,7 @@

        Example with single table and rich annotations

        - +
        idcore annotationsannotations
        idcore annotationsannotations
        tablenumbersource numbercellsnametitlessuppressOutputdc:description
        C1.6TC6R1"10/18/2010"2010-10-18<http://example.org/tree-ops-ext#gid-1>
        C1.7TC7R1""null<http://example.org/tree-ops-ext#gid-1>
        C1.8TC8R1""false<http://example.org/tree-ops-ext#gid-1>
        C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>"<http://example.org/tree-ops-ext#gid-1> (XML)
        C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>" (XML)<http://example.org/tree-ops-ext#gid-1>
        C2.1TC1R2"2""2"<http://example.org/tree-ops-ext#gid-2>
        C2.2TC2R2"EMERSON ST""EMERSON ST"<http://example.org/tree-ops-ext#gid-2>
        C2.6TC6R2"6/2/2010"2010-06-02<http://example.org/tree-ops-ext#gid-2>
        C2.7TC7R2""null<http://example.org/tree-ops-ext#gid-2>
        C2.8TC8R2""false<http://example.org/tree-ops-ext#gid-2>
        C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>"<http://example.org/tree-ops-ext#gid-2> (XML)
        C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>" (XML)<http://example.org/tree-ops-ext#gid-2>
        C3.1TC1R3"6""6"<http://example.org/tree-ops-ext#gid-6>
        C3.2TC2R3"ADDISON AV""ADDISON AV"<http://example.org/tree-ops-ext#gid-6>
        C3.6TC6R3"6/1/2010"2010-06-01<http://example.org/tree-ops-ext#gid-6>
        C3.7TC7R3"cavity or decay; trunk decay; codominant leaders; included bark; large leader or limb decay; previous failure root damage; root decay; beware of BEES""cavity or decay", "trunk decay", "codominant leaders", "included bark", "large leader or limb decay", "previous failure root damage", "root decay", "beware of BEES"<http://example.org/tree-ops-ext#gid-6>
        C3.8TC8R3"YES"true<http://example.org/tree-ops-ext#gid-6>
        C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>"<http://example.org/tree-ops-ext#gid-6> (XML)
        C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>" (XML)<http://example.org/tree-ops-ext#gid-6>
        diff --git a/csv2rdf/index.html b/csv2rdf/index.html index 7de07be0..f766f73d 100644 --- a/csv2rdf/index.html +++ b/csv2rdf/index.html @@ -851,7 +851,7 @@

        Example with single table and rich annotations

        C1.6TC6R1"10/18/2010"2010-10-18<http://example.org/tree-ops-ext#gid-1> C1.7TC7R1""null<http://example.org/tree-ops-ext#gid-1> C1.8TC8R1""false<http://example.org/tree-ops-ext#gid-1> - C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>"<http://example.org/tree-ops-ext#gid-1> (XML) + C1.9TC9R1"<Point><coordinates>-122.156485,37.440963</coordinates></Point>""<Point><coordinates>-122.156485,37.440963</coordinates></Point>" (XML)<http://example.org/tree-ops-ext#gid-1> C2.1TC1R2"2""2"<http://example.org/tree-ops-ext#gid-2> C2.2TC2R2"EMERSON ST""EMERSON ST"<http://example.org/tree-ops-ext#gid-2> @@ -861,7 +861,7 @@

        Example with single table and rich annotations

        C2.6TC6R2"6/2/2010"2010-06-02<http://example.org/tree-ops-ext#gid-2> C2.7TC7R2""null<http://example.org/tree-ops-ext#gid-2> C2.8TC8R2""false<http://example.org/tree-ops-ext#gid-2> - C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>"<http://example.org/tree-ops-ext#gid-2> (XML) + C2.9TC9R2"<Point><coordinates>-122.156749,37.440958</coordinates></Point>""<Point><coordinates>-122.156749,37.440958</coordinates></Point>" (XML)<http://example.org/tree-ops-ext#gid-2> C3.1TC1R3"6""6"<http://example.org/tree-ops-ext#gid-6> C3.2TC2R3"ADDISON AV""ADDISON AV"<http://example.org/tree-ops-ext#gid-6> @@ -871,7 +871,7 @@

        Example with single table and rich annotations

        C3.6TC6R3"6/1/2010"2010-06-01<http://example.org/tree-ops-ext#gid-6> C3.7TC7R3"cavity or decay; trunk decay; codominant leaders; included bark; large leader or limb decay; previous failure root damage; root decay; beware of BEES""cavity or decay", "trunk decay", "codominant leaders", "included bark", "large leader or limb decay", "previous failure root damage", "root decay", "beware of BEES"<http://example.org/tree-ops-ext#gid-6> C3.8TC8R3"YES"true<http://example.org/tree-ops-ext#gid-6> - C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>"<http://example.org/tree-ops-ext#gid-6> (XML) + C3.9TC9R3"<Point><coordinates>-122.156299,37.441151</coordinates></Point>""<Point><coordinates>-122.156299,37.441151</coordinates></Point>" (XML)<http://example.org/tree-ops-ext#gid-6>