Comparison of life cycle concepts
This page provides an overview of various methods used to tag the life-cycle of features from proposal and construction, through operation, disuse, abandonment and eventual destruction. Some methods are common, others are less widely used or discouraged. Some methods are strongly discouraged for the main OSM project but accepted and in widespread use in the separate Open Historical Map project.
Note that page welcoming to OSM contains "What it doesn't include is opinionated data like ratings, historical or hypothetical features, and data from copyrighted sources."
- 1 <key> = <status> + <status> = <value>
- 2 Lifecycle prefix (<status>:<key> = <value>)
- 3 Railways
- 4 Date namespace suffix as "keyname:DATESPEC=.."
- 5 start_date and opening_date
- 6 life_cycle relation
- 7 life_cycle = <status> (REJECTED)
- 8 <status> = yes
- 9 See also
<key> = <status> + <status> = <value>
This scheme is established for highways and some people apply it to buildings as well. It is not easily extended to other domains and should not be used in places other than defined in the wiki as it may confuse data consumers when applied to tags or tag combinations where it is not expected.
- Well established for highway=*
- Cannot handle features with more than one “major” key (e.g. building=church + amenity=place_of_worship)
- Potential name conflicts: new <status> keys must not have the same name as any other existing key or value to be universally applicable
- Tag namespace is poluted by many keys (such as "construction")
- Differing and inconsistent conventions for highways and railroads.
- Applications will be confused when they do not expect the use of this tagging concept for a particular tag. For example a map displaying a generic all purpose icon for any shop=<whatever> would display this icon even for shop=abandoned.
Lifecycle prefix (<status>:<key> = <value>)
The lifecycle/status namespace prefix can be used to tag objects with a status such as proposed, planned, construction, disused, abandoned, demolished, historic
- For example: disused:amenity=pub
- Also: construction:amenity=parking, proposed:lanes=2, abandoned:railway=narrow_gauge
By using this key prefix it is ensured that current or legacy applications are not confused by objects which do not exist or are not fully functional and only software aware of this tagging concept will evaluate those.
See also date namespace for a related proposal to include dates for historic tags, for example name:-1965=Kings Place. The two possibilities can be combined.
See lifecycle prefix for more details.
- A1 (Leeming Bar and Barton)
- A30 Temple to High Carblake
- A11 Fiveways to Thetford Improvement
- SEMMMs in Manchester
- name=Blar road
- proposed:name=<null> (a secondary decision is to agree how to tag a key which no longer has a value)
- historic:name=Blar to blar railway
- All currently applicable tags can be added as usual.
- Will not confuse existing applications.
- Easy for software to strip of these prefix to create a OSM model with the historic or proposed feature included.
- Lifecycle information can be added to any key in a consistent fashion.
- Retains full information about the former use (unlike railway=abandoned for instance, where the former tagging for railway is lost).
- Offers the possibility to rationalise other historic-related tags, for example old_name=*, railway=station_site etc.
- Mappers will need to update many keys (although this does result in more detail in the model).
- Mappers will need to decide whether each individual tag is still applicable or not (although this may be an advantage).
Rail tracks are traditionally marked disused etc with
This method has been established for the rail tracks only, not for other railway related infrastructure such as railway=station. For railway stations use a lifecycle prefix such as abandoned:railway=station
Another problem of this method is that it is not possible to map more detailed information about the disused tracks. Although the same solution like for highways can be used (eg railway=disused+disused=narrow_gauge) this isn't universally accepted. Another possible solution is to use a combination with a lifecycle prefix such as railway=disused + disused:railway=narrow_gauge.
Date namespace suffix as "keyname:DATESPEC=.."
The date namespace can be added to any tag to indicate a period of validity for the tag.
key:date-date = value
key:date--date = value
key:date- = value
key:-date = value
This tagging is most useful to describe the history of a feature rather than its current status. Can be also combined with "status:key..." lifecycle prefix style mapping mentioned above.
The ISO 8601 standard suggests using a slash ("/") for separating dates in simple date ranges (and backwards compatibility), but a single hyphen ("-") should be used in OSM, as there's no risk of confusion if both dates are in the recommended ISO 8601 format (always starting with a year and with every date components left-padded with zeroes to a fixed number of digits, i.e. in forms: YYYY-MM-DD or YYYY-MM or YYYY).
An older version of ISO 8601 used the double hyphen ("--") to replace omitted years in partial dates; some users have used "--" instead as an alternate separator for date ranges (but it is only useful for yearly or monthly recurrent date ranges that specify dates omitting years, i.e. in non-ISO 8601 formats: MM-DD or DD).
- To map a school that became disused and was then converted into a house with the complete history
building = house</code> building:1971-12-18- = house (or alternatively, building:1971-12-18-- = house) amenity:1835-1965 = school amenity:1965-1971-12-18 = school (or alternatively, amenity:1965--1971-12-18 = school) name = The Old School name:1835-1965 = St Cakes Primary School name:1971-12-18- = The Old School (or alternatively, name:1971-12-18-- = The Old School)
- A highway with a long history, changes in name, classification, reference and surface etc
highway = pedestrian highway:1974- = pedestrian highway:1932-1974 = primary maxspeed = 30 maxspeed:1957-1992 = 50 name:1871-1933 = Kaiserstraße name:1933-1945 = Adolf-Hitler-Straße name:1945-1953 = Stalinstraße name:1953-1990 = Ernst-Thälmann-Straße name:1990- = Konrad-Adenauer-Straße ref:1932-1960 = R 96 ref:1960-1990 = F 96 ref:1990- = B 96 surface = paved surface:1890-1927 = cobblestone surface:1927- = paved
- A highway that's planned to change the oneway direction in two months (say the current date is 2015-03-01)
highway = residential oneway = yes oneway:2015-03-01- = -1
- A highway that's planned to be under construction between 2015-06-01 and 2015-10-01, but which will be restored (more or less) to its original state (Note that two schemas are combined here)
highway = residential highway:2015-06-01--2015-10-01 = construction construction = residential
- Will not confuse existing applications.
- Allows complete history record with per-tag distinctions.
- Can be combined with other tags.
- Can be combined with "status:tag" style life cycle tagging.
- Supports adding historical/future information to currently used features if desired.
- Can be used to tag roadworks or planned features without using the complicated access conditionals and without harming slightly outdated maps.
- Difficult to search for objects by year (range) or objects using this tagging scheme.
- Duplication when current and past use overlap (eg building:1930-=house + building=house ought to be used).
- Datespec needs to be added to most tags separately where it applies to several tags. This does increase flexibility but also means some data duplication and more work when editing.
- For a single object with various tags affixed with dateranges it is difficult to ascertain whether equal dateranges refer to exactly identical periods of time or just happen to be identical strings which might have been slightly differing time periods in reality but resulted in identical daterange strings because of lack of precision or missing exact dates.
- This type of mapping might result into mapping historical data that's not locally verifiable anymore, this shouldn't be in OSM.
- Date suffix (calling it "a namespace" is incorrect) doesn't have a qualifier (common string, usable for simple pattern matching), so there is no way to select all tags with date suffix using a simple query. Complex regular expressions must me used.
- Storing a date range together with a key (not with a value of tag) could likely require applications, based on OSM data, to be redesigned, because date range is a value itself and it doesn't match the common way of parsing tags.
- It is impossible to directly query date ranges (for example, to select all names effective for a specific year or a specific period of time.
start_date and opening_date
start_date=* is intended to be used to indicate when an existing and functional feature was completed. Dates in future must be avoided. Originally end_date was also envisioned but is discouraged as it is likely to cause backward compatibility problems.
opening_date=* is intended on features which will open in future, those must be additionally tagged so that confusion with real-existing features can not happen - for example with the "construction:" namespace prefix.
- simple tagging of complex objects
- easy to interpret data
- very easy to break existing applications if not done very carefully
- no way to apply to different tags of an object separately
- no way to specify more complex history of objects
Main article: Proposed_Features/Life_cycle_relation
Proposal status: The proposal is still in 'Draft' phase, but has not had input since mid-2009 and should practically be considered 'Abandoned'.
- Will not confuse applications if used correctly
- All other tags can be added to the relation as they would have been added to a feature in use
- Occupies only life_cycle as a relation type and some key names prefixed with life_cycle, new <status> values can be added without the risk of name conflicts
- Supports adding historical/future information to currently used features if desired
- Requires use of relations
- Might cause mappers to erroneously ad tags to the apparently “untagged” way
life_cycle = <status> (REJECTED)
Main article: Proposed_Features/Status
- All other tags can be added as usual
- Once an application knows life_cycle=*, new values invented in the future will not cause trouble
- Occupies only life_cycle as a key name, new <status> values can be added without the risk of name conflicts
- If an application does not know the tag, it will assume that the feature is useable and might display it as such or use it for routing
<status> = yes
It should be considered that this would be most likely be rejected if ever voted because of same concerns as life_cycle=status.
- Established... badly, and to varying degrees of usefulness.
- All other tags can be added as usual to describe the current properties of the object.
- If an application does not interpret the tagging then the feature will be treated as being in operation. This flaw can be addressed my making the no-longer-relevant tags unavailable to applications which use them through a simple rename of their keys: the aforementioned namespace-based renaming approach is described below in more detail.
- Potential name conflicts: new <status> keys must not have the same name as any other existing key to be universally applicable (fairly minor problem, surely?)