-
Type: Improvement
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: V4.0_CS01
-
Fix Version/s: V4.0_CSD03
-
Component/s: CSDL XML, Vocabularies
-
Labels:None
-
Environment:
[Proposed][Applied for Review]
-
Proposal:
-
Resolution:
When merging type terms and value terms we lost the possibility to define terms that are a specialization of other terms, e.g. "a developer is a person with programming skills".
Given:
- term Person using complex PersonType
What we can currently do:
- define a complex DeveloperType that inherits from PersonType
- annotate something with term Person and use a record of type DeveloperType
<Annotation Term="X.Person">
<Record Type="Y.DeveloperType">
<PropertyValue Property="Name" Path="Fullname" /> <!-- defined on PersonType -->
<PropertyValue Property="ProgrammingSkills" Path="ListOfSkills" /> <!-- defined on DeveloperType -->
</Record>
</Annotation>
So someone knowing the term Person will find this term with additional properties defined on the DeveloperType.
Drawback: no term "Developer"; semantic "is a developer" is expressed indirectly.
Drawback: supports only one level. If an Architect is a special Developer, then the "is a developer" semantics is lost because the record's type is "Z.ArchitectType" and Y.DeveloperType is no longer mentioned in the annotation.
Goals:
- define a term Developer and indicate in the term definition that it specializes term Person
- annotate something with term Developer in a way that someone knowing only Person and with no access to the definition of term Developer can recognize a Developer as a Person. This should also work with longer specialization chains
Other use cases:
- a Team is a collection of Person instances
- a DevelopmentTeam is a Team, and also a collection of Developer instances
- a ScrumTeam is a DevelopmentTeam with a ScrumMaster
- a ScrumMaster is a Developer which is a Person