OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

odata message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: [OASIS Issue Tracker] Updated: (ODATA-535) Define specialization for terms


     [ http://tools.oasis-open.org/issues/browse/ODATA-535?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ralf Handl updated ODATA-535:
-----------------------------

    Description: 
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. 
(If we don't accept ODATA-513 that someone may only find the additional properties and none of the PersonType properties, here: only the ProgrammingSkills and no Name).

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.

What we'd like to do:
- 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 examples:
- 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

  was:
When merging type terms and value terms we lost the possibility to define terms that are a specialization of other terms, e.g. "developers are also people".

What we can currently do:
- define a term Person using complex PersonType
- define a complex DeveloperType that inherits from PersonType
- annotate something with term Person and use a record of type DeveloperType

So someone knowing the term Person will find this term with additional properties defined on the DeveloperType. 
(If we don't accept ODATA-513 that someone may only find the additional properties and none of the PersonType properties.)





       Proposal: 
Add two terms to Core that express term specialization:

<Term Name="CanBeCastTo" Type="Edm.String" AppliesTo="Term Annotation">
  <Annotation Term="Core.Description"><String>
    Space-separated list of qualified term names. 
    Repeat this annotation when applying the annotated term.
    Annotated term can be morphed into any of the listed terms using the same rules as the cast function in URLs:
      - for structured terms: identify identically-named properties
      - for collection-valued terms: identify identically-named properties for each record
    Types of listed terms may or may not be in an inheritance relation
  </String></Annotation>
</Term>

<Term Name="RequiresTerm" Type="Edm.String" AppliesTo="Term">
  <Annotation Term="Core.Description"><String>
    Space-separated list of qualified term names.  
    Annotation target MUST also be annotated with each of the listed terms, using the same qualifier
  </String></Annotation>
</Term>

  was:
Add an "Extends" or "BaseTerm" attribute to the Term element. This means that anything annotated with the extended term MUST also be annotated with the original term and the same qualifier.

Example:
- term Person with type PersonType
- term Developer extending Person with type DeveloperType (no inheritance between DeveloperType and PersonType!)
- annotate something with Developer and also with Person





> Define specialization for terms
> -------------------------------
>
>                 Key: ODATA-535
>                 URL: http://tools.oasis-open.org/issues/browse/ODATA-535
>             Project: OASIS Open Data Protocol (OData) TC
>          Issue Type: Improvement
>          Components: OData CSDL
>    Affects Versions: V4.0_CS01
>         Environment: [Proposed]
>            Reporter: Ralf Handl
>             Fix For: V4.0_CSD03
>
>
> 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. 
> (If we don't accept ODATA-513 that someone may only find the additional properties and none of the PersonType properties, here: only the ProgrammingSkills and no Name).
> 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.
> What we'd like to do:
> - 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 examples:
> - 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

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://tools.oasis-open.org/issues/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]