English
Milestone draft
A planned target that groups tasks within a project: a version in Redmine, a milestone in GitHub or GitLab, a fix version in Jira. It has a name, a due date and a state.
| Kind | entity |
| Type IRI | https://datamodels.jp/ns/task/Milestone |
| @context | https://datamodels.jp/context/task/v1.jsonld |
| JSON Schema | /schema/task/Milestone/v1.json |
| Licence | CC0 1.0: the files (@context, JSON Schema, examples) can be used without conditions |
These @context and JSON Schema URLs always point to the latest compatible version.
For URLs that never change, see Versions. More in URLs and versions.
Types and relationships
Relationship (attribute name)N more links: continued on that type's page
Attributes
| Attribute | Description | Value |
|---|---|---|
name* | Namehttps://uri.etsi.org/ngsi-ld/name | Property, string |
description | Descriptionhttp://purl.org/dc/terms/description | Property, string |
project | The project this belongs tohttps://datamodels.jp/ns/task/project | Relationship → Project |
start | Planned start: a date, or a date and timehttps://datamodels.jp/ns/task/start | Property, string (date or date-time) |
due | Due: the planned release or completion, a date or a date and timehttps://datamodels.jp/ns/task/due | Property, string (date or date-time) |
milestoneStatus | State: open = accepting tasks, locked = no new tasks may be added, closed = done; status is protected in the core context, hence milestoneStatushttps://datamodels.jp/ns/task/milestoneStatus | Property, string: open | locked | closed |
source | URL of this object in the system of recordhttps://smart-data-models.github.io/data-models/terms.jsonld#/definitions/source | Property, string (uri) |
externalId | Identifier in the system of recordhttps://datamodels.jp/ns/task/externalId | Property, string |
dateCreated | Creation time in the system of record (distinct from the broker attribute createdAt)https://smart-data-models.github.io/data-models/terms.jsonld#/definitions/dateCreated | Property, string (date-time) |
dateModified | Last modification time in the system of recordhttps://smart-data-models.github.io/data-models/terms.jsonld#/definitions/dateModified | Property, string (date-time) |
* required
Using this model
How to validate data and send it to a broker: Using the models.
To add attributes of your own to this model, the extension builder writes the @context and JSON Schema.
Extended this model? List your extension so others can reuse your names (how to fill in the form).
Files that particular brokers and tools can load as they are, made from this model: Adapters
The Link header, for sending data without @context in the body:
httpLink: <https://datamodels.jp/context/task/v1.jsonld>; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"
Example
The examples are a fictional scenario (heavy rain in Chiyoda, Tokyo). Place names and codes are real; the events, people and teams are invented. See writing examples.
json
{
"id": "urn:ngsi-ld:Milestone:heavy-rain-2026-07-initial",
"type": "Milestone",
"name": "初動対応(発災から 72 時間)",
"description": "被害状況の確認と通行規制の設定を終えるまでの段階",
"project": "urn:ngsi-ld:Project:heavy-rain-2026-07",
"start": "2026-07-08T07:00:00+09:00",
"due": "2026-07-11",
"milestoneStatus": "open",
"source": "https://tracker.example.jp/versions/7",
"externalId": "7",
"dateCreated": "2026-07-08T06:30:00+09:00",
"dateModified": "2026-07-08T09:15:00+09:00"
}Files: example.json · example-normalized.jsonld · Open in the JSON-LD Playground: see the full IRI behind every attribute (expanded form).
Something missing or wrong?
Open an issue, or propose new attributes or models with the proposal form. How it works: Contributing. The source files (notes, mapping tables) are on GitHub.
Referenced standards
The standards this model corresponds to, field by field. Open one to see its table.
GitHub milestone
| This model | Maps to | Note |
|---|---|---|
name | title | |
description | description | |
project | url | the repository is the repos/owner/repo part of url; Project.identifier = owner/repo |
start | no counterpart | |
due | due_on | the API gives a date-time, but the GitHub UI sets only a date, so the time of day carries no meaning |
milestoneStatus | state | open → open, closed → closed; there is no locked |
source | html_url | |
externalId | number | |
dateCreated | created_at | |
dateModified | updated_at |
Mapping file (YAML) for converting data from this standard: github.yaml (how: Converting data)
Redmine version
| This model | Maps to | Note |
|---|---|---|
name | name | |
description | description | |
project | project.id | |
start | no counterpart | Redmine stores no start date for a version; it computes one from the issues' start dates |
due | due_date | a date (YYYY-MM-DD), kept as it is |
milestoneStatus | status | open, locked and closed unchanged |
source | <base_url>/versions/<id> | |
externalId | id | |
dateCreated | created_on | |
dateModified | updated_on |
Mapping file (YAML) for converting data from this standard: redmine.yaml (how: Converting data)
Notes
- The core is deliberately small. System-specific data (time spent, watchers, custom fields, map rotation) belongs in extensions.
- status is a protected core-context term, hence milestoneStatus. locked means what it means in Redmine, no new tasks may be added; GitHub and GitLab have only open and closed.
- A task points at its milestone through Task.milestone, one milestone per task as in Redmine, GitHub and GitLab (Jira allows several fix versions; further ones are left to extensions).
- Changed on 2026-10-09 (team decision; a pre-release correction of 1.0.0 in place): Comment and Attachment were removed from this subject and Milestone was added. Notes and files are not task concepts: they attach to any entity. The two came from Redmine journals and attachments and from the former Takamatsu disaster models, removed on 2026-09-24; GTT itself never emits journals or attachments. If an application needs them, they belong in the common subject, reusing schema.org (Comment, MediaObject) and linkable to any entity. Milestone is what Redmine (versions), GitHub and GitLab (milestones) and Jira (fix versions) share: a name, a description, a due date, open or closed, a project. The original design is in issue #22.
- Changed on 2026-10-09 (team decision; a pre-release correction of 1.0.0 in place): start and due accept a date (YYYY-MM-DD) or a date-time. Redmine (start date, due date, version due date), GitHub milestones (a date in the UI), GitLab and many municipal work orders have only dates; turning a date into a date-time would invent a time of day that is not in the data. The first implementation, the GTT Redmine plugin, emits plain dates. This differs from RFC 8984, whose start and due are LocalDateTime values (a date and time without offset). In the normalized form a date is an NGSI-LD Date value and a date-time a DateTime value.