[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Usage Scenarios for Versioning and Extensibility




Mark Nottingham wrote:


> I'd like to make this a bit more concrete.


I think some, maybe all, of these could be handled using OWL constructs.


>
> 1) And it was good... except for that nasty atom:title element; after wide deployment experience, it's agreed we need a new version of it. So, a new version of Atom is introduced. The new one isn't backwards-compatible with the old one.



Create a new namespace with copies of all elements. Write an OWL schema that declares all elements except atom:title to be owl:equivalentClass or owl:equivilentProperty to the relevant element in the in Atom 1.0 namespace.


Consumers use the schema to define rules in their applications, either dynamically or just by hard coding them after readint the schema. When the application looks for particular elements it must also look for those that have been declared equivilent to the element they need.

Use owl:DeprecatedClass or owl:DeprecatedProperty to declare that previous atom:title has been retired.

Use owl:incompatibleWith on the schema to declare that new version of Atom is not backwards compatible. Consumers now should be aware that semantics of Atom may have changed.

>
> 2) Then, we decide we want to add a new metadata element, let's call it "fog." So, a new version of Atom is introduced.



An addition of an optional element is a non-breaking change so add it to current namespace. Use owl:backwardCompatibleWith to declare that new version of Atom is in every respect backwards compatible.


If element is non-optional, it's a breaking change so use owl:incompatibleWith instead.

> 3) After a while, someone comes up with a souped-up version of atom:title that is backwards-compatible, just *better*. It gets really popular, and yet another version of Atom is born.


Create a new namespace. Declare all equivilent elements in the same way as scenario 1. Declare oldatom:title to be a subClassOf newatom:title, i.e. every oldatom:title is a newatom:title but not every newatom:title is an oldatom:title since the new one is *better*.


Use owl:backwardCompatibleWith on the schema to declare that new version of Atom is in every respect backwards compatible.

> 4) At the same time, a group of rogue Open Source Software programmers descends upon this idyllic scene and introduces its own extensions. Up until now, all of our extensions have been approved and incorporated by the WG, but these are destined to remain separate.


They create a new namespace and their own OWL schema. They're free to subclass or equate any elements they want.


> 5) Finally, in 2010, we realise that the Atom feed and entry containers aren't really doing the job, and we need to change their model. Yet Another Version of Atom (YAVA) comes into being.


New namespace, new OWL schema. Use owl:incompatibleWith.


Just one way to do it I'm sure.

Ian