Open Data License/What is clean?
In order to remap before the final changeover date, it is important to understand what objects can be considered clean and which ones must be remapped. Up until now, only a small number of criteria have been considered (the "safe" approach):
The Safe Approach
- An object is dirty if any mapper in its history is anonymous
- An object is dirty if any mapper in its history has explicitly declined the licence change
- An object is dirty if any mapper in its history has neither accepted nor declined the licence change
- An object is clean if all mappers in its history have either accepted the licence change or joined the project after acceptance was required at signup
For the purpose of this document, let us define a non-agreeing mapper as the umbrella term for: anonymous, declining or non-responding mappers.
But many objects, despite having a non-agreeing mapper in the history, no longer contain any elements derived from the work of that mapper, to the extent that they need no longer be considered derived works. It is the intention of this page to identify the edge cases under which an object may be capable of being considered ODbL-clean. Please use this page as follows:
Do: Add your own examples of edge cases for discussion - whether you do or don't agree that they represent cases where the object can be deemed clean.
Do: Discuss (on the Discussion Page) the rights and wrongs of considering such objects clean.
Don't: comment inline in the page
Don't: Remove items just because you disapprove of the opinions of others
Edge Cases
Situation | Applies to | Why it could leave the object ODbL clean |
---|---|---|
Non-agreeing mapper added a tag, subsequent mapper removed it | all | None of the work done by the non-agreeing mapper lives on, nor did it influence the current version |
Non-agreeing mapper added a tag, subsequent mapper changed it | all | None of the work done by the non-agreeing mapper lives on, if it can be seen not to influence the current version |
Non-agreeing mapper added a node, subsequent mapper removed the node | way | None of the geometry from the non-agreeing mapper lives on, way tags were always clean. |
Non-agreeing mapper touched a geometry-only node (no significant tags), a later agreeing mapper changed its position | node | None of the facts provided by the non-agreeing mapper live on, we invest our usual trust in the remapper to cleanly derive his facts from other sources. |
Non-agreeing mapper moved a POI node (no changes to tags), a later agreeing mapper moved it to somewhere else | node | None of the facts provided by the non-agreeing mapper live on, we invest our usual trust in the remapper to cleanly derive his facts from other sources. |
Non-agreeing mapper adds or changes a "non-significant" tag (created_by, source, etc.) | all | This category of tags is about explaining edits, does not feed into the actual map. At worst, reverting or deleting the tag should remove any tainting. |
Non-agreeing mapper removes a tag | all | Can you copyright the state of something not being there? |
Non-agreeing mapper fixes a tagging typo or transforms from one tagging norm to another | all | Rule-based edit that any mapper could reasonably apply to the previous, clean data |
A Pragmatic Approach
Removing tainted data is the goal. This is not the same as undoing everything ever done by a non-agreeing mapper.
Deletions are not tainted
If a non-agreeing mapper deletes an object from the OSM data base, that object is not tainted. That deletion is clean by definition. No action is required to further clean the results of that edit.
The Deletion Paradox
If we were trying to undo everything done by a non-agreeing mapper, un-deleting an object might seem reasonable, but it is not. That deletion does not leave an identifiable object in the OSM database.
If a deletion were an act earning protection based on ownership, then the Deletion Paradox would prevent cleaning the OSM data base. Watch this.
User A creates a node. User B deletes that node. Both user A and user B are non-agreeing. To clean the node created by User A the node must be deleted. To clean the deletion of the node by User B the node must be un-deleted. Thus the data base can never be clean.
That is irrational. Deletions are not tainted.
What taints data?
A node created by non-agreeing mapper is tainted.
- Clean that node by removing it. Map again from good source(s).
A node moved by a non-agreeing mapper is tainted.
- Clean that node by moving it.
A node deleted by a non-agreeing mapper is not tainted.
- No action required.
A tag added by a non-agreeing mapper is tainted.
- Clean that tag by removing the tag and value. Save this clean intermediate version to the data base. Then remap from good source(s) and include tag and value if supported by good source(s).
A tag modified by a non-agreeing mapper is tainted.
- Clean that tag by removing the tag and value. Save this clean intermediate version to the to data base. Then remap from good source(s) and include tag and value if supported by good source(s).
A tag deleted by a non-agreeing mapper is not tainted.
- No action required.
A way created by a non-agreeing mapper is tainted.
- Clean that way by removing it. Map again from good source(s).
A way modified by a non-agreeing mapper is possibly tainted.
- Nodes added or moved are tainted.
- Nodes deleted are not tainted.
- Tags added or modified are tainted.
- Tags deleted are not tainted.
- See nodes and tags above for further evaluation and for cleaning instructions of individual nodes and tags within the way.
A way deleted by a non-agreeing mapper is not tainted.
- No action required.
A relation created by a non-agreeing mapper is tainted.
- Clean that relation by removing it. Map again from good source(s) if warranted.
A relation modified by a non-agreeing mapper is possibly tainted.
- Tags added or modified are tainted.
- Tags deleted are not tainted.
- See tags above for cleaning instructions.
- Members added to a relation by a non-agreeing mapper are tainted.
- Members deleted from a relation by a non-agreeing mapper are not tainted.
- Roles added by a non-agreeing mapper are tainted. Clean as with tags above.
- Roles modified by a non-agreeing mapper are possibly tainted. Clean as with tags above.
- Roles deleted by a non-agreeing mapper are not-tainted
Object | Edit[1] | Tainted? | Cleaning |
---|---|---|---|
Node | Created | Yes | Delete node. Remap from good source(s). |
Moved | Yes | Move node. Remap from good source(s). | |
Deleted | No | Already clean. | |
Tag | Created | Yes | Delete tag. Remap from good source(s).[2] |
Modified | Yes | Delete tag. Remap from good source(s).[3] | |
Deleted | No | Already clean. | |
Way | Created | Yes | Delete way. Remap from good source(s). |
Modified | Yes | See modified nodes and tags above. Apply cleaning for nodes and tags. | |
Deleted | No | Already clean. | |
Relation | Created | Yes | Delete relation. Remap from good source(s). |
Tag Created | Yes | Delete tag. Remap from good source(s).[4] | |
Tag Modified | Yes | Delete tag. Remap from good source(s).[5] | |
Tag Deleted | No | Already clean. | |
Add member | Yes | Remove member. Remap from good source(s).[6] | |
Remove member | No | Already clean. | |
Add role | Yes | Remove role. Remap from good source(s).[7] | |
Modify role | Yes | Remove role. Remap from good source(s).[8] | |
Remove role | Yes | Already clean. | |
Deleted | No | Already clean. |
Intermediate versions
Saving an intermediate version is a bit of a hack. It saves to the database, a version of the data without the tainted aspects left by a non-agreeing mapper. Then data can be added from good sources. Once cleaned, then modified only by a accepting mappers, the object stays clean.
References
- ↑ by non-agreeing mapper
- ↑ Save intermediate version without tainted tag to clean if replacing same value from good source(s).
- ↑ Save intermediate version without tainted tag to clean if replacing same value from good source(s).
- ↑ Save intermediate version without tainted tag to clean if replacing same value from good source(s).
- ↑ Save intermediate version without tainted tag to clean if replacing same value from good source(s).
- ↑ Save intermediate version without tainted member to clean if replacing same member from good source(s).
- ↑ Save intermediate version without tainted role to clean if replacing same role from good source(s).
- ↑ Save intermediate version without tainted role to clean if replacing same role from good source(s).