From 5d65ee455e94b7a4be93db54454581c25dda6217 Mon Sep 17 00:00:00 2001 From: Skander Chouchene Date: Thu, 29 Jan 2026 13:57:03 -0500 Subject: [PATCH 1/8] first comment: add license info --- gtfs/spec/en/reference.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index b4569a54..1dba1fe2 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -43,6 +43,7 @@ This document defines the format and structure of the files that comprise a GTFS - [translations.txt](#translationstxt) - [feed\_info.txt](#feed_infotxt) - [attributions.txt](#attributionstxt) + - [licenses.txt](#licensestxt) ## Document Conventions The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", “SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://tools.ietf.org/html/rfc2119). @@ -94,6 +95,7 @@ Presence conditions applicable to fields and files: - **Text** - A string of UTF-8 characters, which is aimed to be displayed and which must therefore be human readable. - **Timezone** - TZ timezone from the [https://www.iana.org/time-zones](https://www.iana.org/time-zones). Timezone names never contain the space character but may contain an underscore. Refer to [http://en.wikipedia.org/wiki/List\_of\_tz\_zones](http://en.wikipedia.org/wiki/List\_of\_tz\_zones) for a list of valid values.
*Example: `Asia/Tokyo`, `America/Los_Angeles` or `Africa/Cairo`.* - **URL** - A fully qualified URL that includes http:// or https://, and any special characters in the URL must be correctly escaped. See the following [http://www.w3.org/Addressing/URL/4\_URI\_Recommentations.html](http://www.w3.org/Addressing/URL/4\_URI\_Recommentations.html) for a description of how to create fully qualified URL values. +- **SPDX ID**: [SPDX license identifier](https://spdx.dev/learn/handling-license-info/#:~:text=SEE%20LICENSE%20LIST-,SPDX%20License%20IDs,-//%20SPDX%2DLicense%2DIdentifier) which communicates license information in a simple and machine-readable manner. Valid SPDX ID values can be found in the [SPDX License list](https://spdx.org/licenses/#:~:text=Foundation%20Collaborative%20Projects-,SPDX%20License%20List,-The%20SPDX%20License). ### Field Signs Signs applicable to Float or Integer field types: @@ -147,6 +149,7 @@ This specification defines the following files: | [translations.txt](#translationstxt) | Optional | Translations of customer-facing dataset values. | | [feed_info.txt](#feed_infotxt) | **Conditionally Required** | Dataset metadata, including publisher, version, and expiration information.

Conditionally Required:
- **Required** if [translations.txt](#translationstxt) is provided.
- Recommended otherwise.| | [attributions.txt](#attributionstxt) | Optional | Dataset attributions. | +| [licenses.txt](#licensestxt) | Optional | The licenses that apply to the feed or to specific files. | ## File Requirements @@ -901,3 +904,18 @@ The file defines the attributions applied to the dataset. | `attribution_url` | URL | Optional | URL of the organization. | | `attribution_email` | Email | Optional | Email of the organization. | | `attribution_phone` | Phone number | Optional | Phone number of the organization. | + +### licenses.txt + +File: **Optional** + +Primary key (`license_for_whole_feed`, `licensed_table_name`) + +This file defines the licenses that apply to the feed or to specific files. + +| Field Name | Type | Presence | Description | +| :---- | :---- | :---- | :---- | +| `license_for_whole_feed` | Enum | Conditionally Required | Whether the license applies for the whole feed.
Valid options are:
`0` or empty: The license does not apply for the whole feed. In this case, the license applies for the file specified in `licensed_table_name`.
`1`: The license applies for the whole feed except any files specified in other rows.

**Conditionally Required:
- Required** if the license applies for the whole feed.
- **Optional** otherwise. | +| `licensed_table_name` | Text | Conditionally Forbidden | The table which the license applies to.

**Conditionally Required:**
- **Required** if `license_for_whole_feed = 0`.
- **Forbidden** if `license_for_whole_feed = 1`. | +| `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license. **Conditionally Required**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | +| `custom_license_url` | URL | Conditionally Forbidden | The URL that contains the terms of the custom license.

**Conditionally Required:**
- **Required** if `license_spdx_id` is empty.
- **Forbidden** otherwise. | From b8a055bf4e6bb0ff3bcd09f0dbf7ea79104e036a Mon Sep 17 00:00:00 2001 From: Skander Chouchene Date: Thu, 29 Jan 2026 13:58:09 -0500 Subject: [PATCH 2/8] fix url --- gtfs/spec/en/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index 1dba1fe2..257f15e8 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -95,7 +95,7 @@ Presence conditions applicable to fields and files: - **Text** - A string of UTF-8 characters, which is aimed to be displayed and which must therefore be human readable. - **Timezone** - TZ timezone from the [https://www.iana.org/time-zones](https://www.iana.org/time-zones). Timezone names never contain the space character but may contain an underscore. Refer to [http://en.wikipedia.org/wiki/List\_of\_tz\_zones](http://en.wikipedia.org/wiki/List\_of\_tz\_zones) for a list of valid values.
*Example: `Asia/Tokyo`, `America/Los_Angeles` or `Africa/Cairo`.* - **URL** - A fully qualified URL that includes http:// or https://, and any special characters in the URL must be correctly escaped. See the following [http://www.w3.org/Addressing/URL/4\_URI\_Recommentations.html](http://www.w3.org/Addressing/URL/4\_URI\_Recommentations.html) for a description of how to create fully qualified URL values. -- **SPDX ID**: [SPDX license identifier](https://spdx.dev/learn/handling-license-info/#:~:text=SEE%20LICENSE%20LIST-,SPDX%20License%20IDs,-//%20SPDX%2DLicense%2DIdentifier) which communicates license information in a simple and machine-readable manner. Valid SPDX ID values can be found in the [SPDX License list](https://spdx.org/licenses/#:~:text=Foundation%20Collaborative%20Projects-,SPDX%20License%20List,-The%20SPDX%20License). +- **SPDX ID**: [SPDX license identifier](https://spdx.dev/learn/handling-license-info/#:~:text=SEE%20LICENSE%20LIST-,SPDX%20License%20IDs,-//%20SPDX%2DLicense%2DIdentifier) which communicates license information in a simple and machine-readable manner. Valid SPDX ID values can be found in the [SPDX License list](https://spdx.org/licenses/). ### Field Signs Signs applicable to Float or Integer field types: From f91a4c9c8ea14bc11ce1c391d2ab2b9a7ea408b0 Mon Sep 17 00:00:00 2001 From: Skander Chouchene Date: Thu, 29 Jan 2026 14:00:47 -0500 Subject: [PATCH 3/8] change for to to --- gtfs/spec/en/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index 257f15e8..7a18567d 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -915,7 +915,7 @@ This file defines the licenses that apply to the feed or to specific files. | Field Name | Type | Presence | Description | | :---- | :---- | :---- | :---- | -| `license_for_whole_feed` | Enum | Conditionally Required | Whether the license applies for the whole feed.
Valid options are:
`0` or empty: The license does not apply for the whole feed. In this case, the license applies for the file specified in `licensed_table_name`.
`1`: The license applies for the whole feed except any files specified in other rows.

**Conditionally Required:
- Required** if the license applies for the whole feed.
- **Optional** otherwise. | +| `license_for_whole_feed` | Enum | Conditionally Required | Whether the license applies to the whole feed.
Valid options are:
`0` or empty: The license does not apply to the whole feed. In this case, the license applies to the file specified in `licensed_table_name`.
`1`: The license applies to the whole feed except any files specified in other rows.

**Conditionally Required:
- Required** if the license applies to the whole feed.
- **Optional** otherwise. | | `licensed_table_name` | Text | Conditionally Forbidden | The table which the license applies to.

**Conditionally Required:**
- **Required** if `license_for_whole_feed = 0`.
- **Forbidden** if `license_for_whole_feed = 1`. | | `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license. **Conditionally Required**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | | `custom_license_url` | URL | Conditionally Forbidden | The URL that contains the terms of the custom license.

**Conditionally Required:**
- **Required** if `license_spdx_id` is empty.
- **Forbidden** otherwise. | From c618a4099cacf7230207cacce4fa3fb0cf2fe41b Mon Sep 17 00:00:00 2001 From: Skander Chouchene Date: Thu, 29 Jan 2026 14:02:17 -0500 Subject: [PATCH 4/8] correct condition --- gtfs/spec/en/reference.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index 7a18567d..83a42736 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -916,6 +916,6 @@ This file defines the licenses that apply to the feed or to specific files. | Field Name | Type | Presence | Description | | :---- | :---- | :---- | :---- | | `license_for_whole_feed` | Enum | Conditionally Required | Whether the license applies to the whole feed.
Valid options are:
`0` or empty: The license does not apply to the whole feed. In this case, the license applies to the file specified in `licensed_table_name`.
`1`: The license applies to the whole feed except any files specified in other rows.

**Conditionally Required:
- Required** if the license applies to the whole feed.
- **Optional** otherwise. | -| `licensed_table_name` | Text | Conditionally Forbidden | The table which the license applies to.

**Conditionally Required:**
- **Required** if `license_for_whole_feed = 0`.
- **Forbidden** if `license_for_whole_feed = 1`. | -| `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license. **Conditionally Required**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | -| `custom_license_url` | URL | Conditionally Forbidden | The URL that contains the terms of the custom license.

**Conditionally Required:**
- **Required** if `license_spdx_id` is empty.
- **Forbidden** otherwise. | +| `licensed_table_name` | Text | Conditionally Forbidden | The table which the license applies to.

**Conditionally Forbidden:**
- **Required** if `license_for_whole_feed = 0`.
- **Forbidden** if `license_for_whole_feed = 1`. | +| `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license. **Conditionally Forbidden**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | +| `custom_license_url` | URL | Conditionally Forbidden | The URL that contains the terms of the custom license.

**Conditionally Forbidden:**
- **Required** if `license_spdx_id` is empty.
- **Forbidden** otherwise. | From 55e4cd79fef108ab3da9450892cdbccf9457984e Mon Sep 17 00:00:00 2001 From: Skander Chouchene Date: Thu, 29 Jan 2026 14:03:49 -0500 Subject: [PATCH 5/8] add linbreak --- gtfs/spec/en/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index 83a42736..c237c78c 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -917,5 +917,5 @@ This file defines the licenses that apply to the feed or to specific files. | :---- | :---- | :---- | :---- | | `license_for_whole_feed` | Enum | Conditionally Required | Whether the license applies to the whole feed.
Valid options are:
`0` or empty: The license does not apply to the whole feed. In this case, the license applies to the file specified in `licensed_table_name`.
`1`: The license applies to the whole feed except any files specified in other rows.

**Conditionally Required:
- Required** if the license applies to the whole feed.
- **Optional** otherwise. | | `licensed_table_name` | Text | Conditionally Forbidden | The table which the license applies to.

**Conditionally Forbidden:**
- **Required** if `license_for_whole_feed = 0`.
- **Forbidden** if `license_for_whole_feed = 1`. | -| `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license. **Conditionally Forbidden**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | +| `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license.

**Conditionally Forbidden**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | | `custom_license_url` | URL | Conditionally Forbidden | The URL that contains the terms of the custom license.

**Conditionally Forbidden:**
- **Required** if `license_spdx_id` is empty.
- **Forbidden** otherwise. | From 5efaa54ba05661f0ee7798b2beef1798e640f0d1 Mon Sep 17 00:00:00 2001 From: Skander Chouchene Date: Fri, 30 Jan 2026 10:14:10 -0500 Subject: [PATCH 6/8] add the format of licensed_table_name --- gtfs/spec/en/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index c237c78c..afbb1223 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -916,6 +916,6 @@ This file defines the licenses that apply to the feed or to specific files. | Field Name | Type | Presence | Description | | :---- | :---- | :---- | :---- | | `license_for_whole_feed` | Enum | Conditionally Required | Whether the license applies to the whole feed.
Valid options are:
`0` or empty: The license does not apply to the whole feed. In this case, the license applies to the file specified in `licensed_table_name`.
`1`: The license applies to the whole feed except any files specified in other rows.

**Conditionally Required:
- Required** if the license applies to the whole feed.
- **Optional** otherwise. | -| `licensed_table_name` | Text | Conditionally Forbidden | The table which the license applies to.

**Conditionally Forbidden:**
- **Required** if `license_for_whole_feed = 0`.
- **Forbidden** if `license_for_whole_feed = 1`. | +| `licensed_table_name` | Text | Conditionally Forbidden | Defines the table which the license applies to.

Allowed values include any file added to GTFS. In that case, it will have a `licensed_table_name` value equivalent to the file name, not including the `.txt` file extension.

_Example: The value `shapes` stands for `shapes.txt`_

**Conditionally Forbidden:**
- **Required** if `license_for_whole_feed = 0`.
- **Forbidden** if `license_for_whole_feed = 1`. | | `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license.

**Conditionally Forbidden**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | | `custom_license_url` | URL | Conditionally Forbidden | The URL that contains the terms of the custom license.

**Conditionally Forbidden:**
- **Required** if `license_spdx_id` is empty.
- **Forbidden** otherwise. | From 0de12f036aca98766e8ed7da9538151de2d316a1 Mon Sep 17 00:00:00 2001 From: Skander Chouchene Date: Tue, 3 Feb 2026 13:05:55 -0500 Subject: [PATCH 7/8] address comments --- gtfs/spec/en/reference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index afbb1223..a8421bf3 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -915,7 +915,7 @@ This file defines the licenses that apply to the feed or to specific files. | Field Name | Type | Presence | Description | | :---- | :---- | :---- | :---- | -| `license_for_whole_feed` | Enum | Conditionally Required | Whether the license applies to the whole feed.
Valid options are:
`0` or empty: The license does not apply to the whole feed. In this case, the license applies to the file specified in `licensed_table_name`.
`1`: The license applies to the whole feed except any files specified in other rows.

**Conditionally Required:
- Required** if the license applies to the whole feed.
- **Optional** otherwise. | -| `licensed_table_name` | Text | Conditionally Forbidden | Defines the table which the license applies to.

Allowed values include any file added to GTFS. In that case, it will have a `licensed_table_name` value equivalent to the file name, not including the `.txt` file extension.

_Example: The value `shapes` stands for `shapes.txt`_

**Conditionally Forbidden:**
- **Required** if `license_for_whole_feed = 0`.
- **Forbidden** if `license_for_whole_feed = 1`. | +| `license_for_whole_feed` | Enum | Required | Indicates whether the license applies to the entire GTFS feed or only to individual files.

Valid options are:
`0` or empty: The license does not apply to the whole feed. In this case, the license applies to the file specified in `licensed_table_name`.
`1`: The license applies to the whole GTFS feed, except for any files explicitly listed in other rows. | +| `licensed_table_name` | Text | Conditionally Forbidden | Defines the table which the license applies to.

Allowed values include any file added to GTFS. In that case, it will have a `licensed_table_name` value equivalent to the file name, not including the `.txt` file extension.

_Example: The value `shapes` stands for `shapes.txt`_

**Conditionally Forbidden:**
- **Required** if `license_for_whole_feed = 0` or empty.
- **Forbidden** if `license_for_whole_feed = 1`. | | `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license.

**Conditionally Forbidden**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | | `custom_license_url` | URL | Conditionally Forbidden | The URL that contains the terms of the custom license.

**Conditionally Forbidden:**
- **Required** if `license_spdx_id` is empty.
- **Forbidden** otherwise. | From a1e97a157e880167c3edf09db4e90ddb0dbf5339 Mon Sep 17 00:00:00 2001 From: Skander Chouchene Date: Fri, 5 Jun 2026 10:23:13 -0400 Subject: [PATCH 8/8] Remove 'license_for_whole_feed' from licenses.txt --- gtfs/spec/en/reference.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gtfs/spec/en/reference.md b/gtfs/spec/en/reference.md index a8421bf3..f203bc4e 100644 --- a/gtfs/spec/en/reference.md +++ b/gtfs/spec/en/reference.md @@ -909,13 +909,12 @@ The file defines the attributions applied to the dataset. File: **Optional** -Primary key (`license_for_whole_feed`, `licensed_table_name`) +Primary key (`licensed_table_name`) This file defines the licenses that apply to the feed or to specific files. | Field Name | Type | Presence | Description | | :---- | :---- | :---- | :---- | -| `license_for_whole_feed` | Enum | Required | Indicates whether the license applies to the entire GTFS feed or only to individual files.

Valid options are:
`0` or empty: The license does not apply to the whole feed. In this case, the license applies to the file specified in `licensed_table_name`.
`1`: The license applies to the whole GTFS feed, except for any files explicitly listed in other rows. | -| `licensed_table_name` | Text | Conditionally Forbidden | Defines the table which the license applies to.

Allowed values include any file added to GTFS. In that case, it will have a `licensed_table_name` value equivalent to the file name, not including the `.txt` file extension.

_Example: The value `shapes` stands for `shapes.txt`_

**Conditionally Forbidden:**
- **Required** if `license_for_whole_feed = 0` or empty.
- **Forbidden** if `license_for_whole_feed = 1`. | +| `licensed_table_name` | Text | Optional | Defines the table which the license applies to.

If empty, the license applies to all tables in the feed not explicitly listed in other records of this file. Otherwise, any GTFS file name may be used as a value, omitting the `.txt` extension.

_Example: shapes refers to `shapes.txt`_ | | `license_spdx_id` | SPDX ID | Conditionally Forbidden | The SPDX identifier of the license.

**Conditionally Forbidden**:
- **Required** if `custom_license_url` is empty.
- **Forbidden** otherwise. | | `custom_license_url` | URL | Conditionally Forbidden | The URL that contains the terms of the custom license.

**Conditionally Forbidden:**
- **Required** if `license_spdx_id` is empty.
- **Forbidden** otherwise. |