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] (ODATA-1034) Support the notion of a collection of name/value pairs where the type of the value is known


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

Hubert Heijkers updated ODATA-1034:
-----------------------------------

    Description: 
There is currently no easy way (read: without specifying an additional wrapper entity type) of specifying a, what most people would likely refer to as a, dictionary, or a collection of name/value pair, in which I can specify the type of the values!

So where we would need to do something today like:

      <EntityType Name="ValueType">
        <Key>
          <PropertyRef Name="Key"/>
        </Key>
        <Property Name="Key" Type="Edm.String" Nullable="false"/>
        <Property Name="PropA" ... />
        ...
      </EntityType>

      <EntityType Name="ValueTypeDictionaryWrapper">
        <Key>
          <PropertyRef Name="Name"/>
        </Key>
        <Property Name="Name" Type="Edm.String" Nullable="false"/>
        <NavigationProperty Name="Value" Type="ns.ValueType" Nullable="false"/>
      </EntityType>

      <AnyStructuredType Name="ValueTypeDictionaryContainer">
        ...
        <NavigationProperty Name="Values" Type="Collection(ns.ValueTypeDictionaryWrapper)" Nullable="false"/>
        ...
      </AnyStructuredType>

Note that the wrapper has to be an entity type to be able to use the name (key) to index into the 'dictionary'. This is even a bit weirder if what we are putting in the dictionary is actually complex types that one would want to treat just like a collection of that complex type.

The payload would look something like this:

    {
      "@odata.context": "$metadata#AnyStructuredType(Values(Value))/$entity",
      ...,
      "Values": [{
        "Name": "foo",
        "Value": {
          "Key": "38hfgs8",
          "PropA": "APropA_value",
          ...
        },
        "Name": "bar",
        "Value": {
          "Key": "f93d8r3",
          "PropA": "APropA_value",
          ...
        },
        ...
      }],
      ...
    }

Needless to say that this JSON representation of an, expanded, payload doesn't look like what a typical JSON consumer would expect and it requiring the wrapped value to be expanded as well..

So what I'm looking at being able to do is, using the same example, do something like:

      <EntityType Name="ValueType">
        <Key>
          <PropertyRef Name="Key"/>
        </Key>
        <Property Name="Key" Type="Edm.String" Nullable="false"/>
        <Property Name="PropA" ... />
        ...
      </EntityType>

      <AnyStructuredType Name="ValueTypeDictionaryContainer">
        ...
        <NavigationProperty Name="Values" Type="Dictionary(ns.ValueTypeDictionaryWrapper)" Nullable="false"/>
        ...
      </AnyStructuredType>

And the resulting JSON payload for requests would look something like:

    {
      "@odata.context": "$metadata#AnyStructuredType(Values)/$entity",
      ...,
      "Values": {
        "foo": {
          "Key": "38hfgs8",
          "PropA": "APropA_value",
          ...
        },
        "bar": {
          "Key": "f93d8r3",
          "PropA": "APropA_value",
          ...
        },
        ...
      },
      ...
    }

Note the more intuitive typical JSON response and that we don't need to expand the value in the wrapper any longer. 

  was:
There is currently no easy way (read: without specifying an additional wrapper entity type) of specifying a, what most people would likely refer to as a, dictionary, or a collection of name/value pair, in which I can specify the type of the values!

So where we would need to do something today like:

      <EntityType Name="ValueType">
        <Key>
          <PropertyRef Name="Key"/>
        </Key>
        <Property Name="Key" Type="Edm.String" Nullable="false"/>
        <Property Name="PropA" ... />
        ...
      </EntityType>

      <EntityType Name="ValueTypeDictionaryWrapper">
        <Key>
          <PropertyRef Name="Name"/>
        </Key>
        <Property Name="Name" Type="Edm.String" Nullable="false"/>
        <NavigationProperty Name="Value" Type="ns.ValueType" Nullable="false"/>
      </EntityType>

      <AnyStructuredType Name="ValueTypeDictionaryContainer">
        ...
        <NavigationProperty Name="Values" Type="Collection(ns.ValueTypeDictionaryWrapper)" Nullable="false"/>
        ...
      </AnyStructuredType>

Note that the wrapper has to be an entity type to be able to use the name (key) to index into the 'dictionary'. This is even a bit weirder if what we are putting in the dictionary is actually complex types that one would want to treat just like a collection of that complex type.

The payload would look something like this:

{
	"@odata.context": "$metadata#AnyStructuredType(Values(Value))/$entity",
	...,
	"Values": [{
		"Name": "foo",
		"Value": {
			"Key": "38hfgs8",
			"PropA": "APropA_value",
			...
		},
		"Name": "bar",
		"Value": {
			"Key": "f93d8r3",
			"PropA": "APropA_value",
			...
		},
		...
	}],
	...
}

Needless to say that this JSON representation of an, expanded, payload doesn't look like what a typical JSON consumer would expect and it requiring the wrapped value to be expanded as well..

So what I'm looking at being able to do is, using the same example, do something like:

      <EntityType Name="ValueType">
        <Key>
          <PropertyRef Name="Key"/>
        </Key>
        <Property Name="Key" Type="Edm.String" Nullable="false"/>
        <Property Name="PropA" ... />
        ...
      </EntityType>

      <AnyStructuredType Name="ValueTypeDictionaryContainer">
        ...
        <NavigationProperty Name="Values" Type="Dictionary(ns.ValueTypeDictionaryWrapper)" Nullable="false"/>
        ...
      </AnyStructuredType>

And the resulting JSON payload for requests would look something like:

{
	"@odata.context": "$metadata#AnyStructuredType(Values)/$entity",
	...,
	"Values": {
		"foo": {
			"Key": "38hfgs8",
			"PropA": "APropA_value",
			...
		},
		"bar": {
			"Key": "f93d8r3",
			"PropA": "APropA_value",
			...
		},
		...
	},
	...
}

Note the more intuitive typical JSON response and that we don't need to expand the value in the wrapper any longer. 


> Support the notion of a collection of name/value pairs where the type of the value is known
> -------------------------------------------------------------------------------------------
>
>                 Key: ODATA-1034
>                 URL: https://issues.oasis-open.org/browse/ODATA-1034
>             Project: OASIS Open Data Protocol (OData) TC
>          Issue Type: Improvement
>          Components: OData CSDL, OData CSDL JSON , OData JSON Format, OData Protocol, OData URL Conventions
>    Affects Versions: V4.01_CSD02
>            Reporter: Hubert Heijkers
>
> There is currently no easy way (read: without specifying an additional wrapper entity type) of specifying a, what most people would likely refer to as a, dictionary, or a collection of name/value pair, in which I can specify the type of the values!
> So where we would need to do something today like:
>       <EntityType Name="ValueType">
>         <Key>
>           <PropertyRef Name="Key"/>
>         </Key>
>         <Property Name="Key" Type="Edm.String" Nullable="false"/>
>         <Property Name="PropA" ... />
>         ...
>       </EntityType>
>       <EntityType Name="ValueTypeDictionaryWrapper">
>         <Key>
>           <PropertyRef Name="Name"/>
>         </Key>
>         <Property Name="Name" Type="Edm.String" Nullable="false"/>
>         <NavigationProperty Name="Value" Type="ns.ValueType" Nullable="false"/>
>       </EntityType>
>       <AnyStructuredType Name="ValueTypeDictionaryContainer">
>         ...
>         <NavigationProperty Name="Values" Type="Collection(ns.ValueTypeDictionaryWrapper)" Nullable="false"/>
>         ...
>       </AnyStructuredType>
> Note that the wrapper has to be an entity type to be able to use the name (key) to index into the 'dictionary'. This is even a bit weirder if what we are putting in the dictionary is actually complex types that one would want to treat just like a collection of that complex type.
> The payload would look something like this:
>     {
>       "@odata.context": "$metadata#AnyStructuredType(Values(Value))/$entity",
>       ...,
>       "Values": [{
>         "Name": "foo",
>         "Value": {
>           "Key": "38hfgs8",
>           "PropA": "APropA_value",
>           ...
>         },
>         "Name": "bar",
>         "Value": {
>           "Key": "f93d8r3",
>           "PropA": "APropA_value",
>           ...
>         },
>         ...
>       }],
>       ...
>     }
> Needless to say that this JSON representation of an, expanded, payload doesn't look like what a typical JSON consumer would expect and it requiring the wrapped value to be expanded as well..
> So what I'm looking at being able to do is, using the same example, do something like:
>       <EntityType Name="ValueType">
>         <Key>
>           <PropertyRef Name="Key"/>
>         </Key>
>         <Property Name="Key" Type="Edm.String" Nullable="false"/>
>         <Property Name="PropA" ... />
>         ...
>       </EntityType>
>       <AnyStructuredType Name="ValueTypeDictionaryContainer">
>         ...
>         <NavigationProperty Name="Values" Type="Dictionary(ns.ValueTypeDictionaryWrapper)" Nullable="false"/>
>         ...
>       </AnyStructuredType>
> And the resulting JSON payload for requests would look something like:
>     {
>       "@odata.context": "$metadata#AnyStructuredType(Values)/$entity",
>       ...,
>       "Values": {
>         "foo": {
>           "Key": "38hfgs8",
>           "PropA": "APropA_value",
>           ...
>         },
>         "bar": {
>           "Key": "f93d8r3",
>           "PropA": "APropA_value",
>           ...
>         },
>         ...
>       },
>       ...
>     }
> Note the more intuitive typical JSON response and that we don't need to expand the value in the wrapper any longer. 



--
This message was sent by Atlassian JIRA
(v6.2.2#6258)


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