-
Proposal:
Hide
Make use of existing specification text in section 14.2.2 Target.
For vocabulary terms Aggregation.CustomAggregate and Aggregation.ApplySupported, add AppliesTo="Collection" and tag these terms with a new annotation in the Core vocabulary:
<Term Name="AppliesViaContainer" Type="Core.Tag" DefaultValue="true" Nullable="false" AppliesTo="Term">
<Annotation Term="Core.Description" String="The target path of an annotation with this term must start with an entity container or the annotation must be embedded within an entity container, entity set or singleton"/>
</Term>
Deprecate terms Groupable, Aggregatable, complex type NavigationPropertyAggregationCapabilities.
For compatibility reasons, do not use this technique for annotations in the Capabilities vocabulary.
Show
Make use of existing specification text in section 14.2.2 Target .
For vocabulary terms Aggregation.CustomAggregate and Aggregation.ApplySupported , add AppliesTo="Collection" and tag these terms with a new annotation in the Core vocabulary:
<Term Name= "AppliesViaContainer" Type= "Core.Tag" DefaultValue= "true" Nullable= "false" AppliesTo= "Term" >
<Annotation Term= "Core.Description" String= "The target path of an annotation with this term must start with an entity container or the annotation must be embedded within an entity container, entity set or singleton" />
</Term>
Deprecate terms Groupable , Aggregatable , complex type NavigationPropertyAggregationCapabilities .
For compatibility reasons, do not use this technique for annotations in the Capabilities vocabulary.
-
NavigationPropertyBindings are used to assign an entity set to a Path ending in a non-containment navigation property. The assigned entity set can then be the target for annotations like Aggregation.CustomAggregate (see https://issues.oasis-open.org/browse/ODATA-1382).
Paths ending in a containment navigation property, which implicitly define an entity set, are treated totally different, however. In order to define a custom aggregate on this implicit entity set, the annotation Capabilities.NavigationRestrictions with type Aggregation.NavigationPropertyAggregationCapabilities/CustomAggregates must be used.
An easier alternative would be to use external targeting with a path that ends in a containment navigation property:
<Annotations Target="namespace.ContainerName/me/Mails">
<Annotation Term="Aggregation.CustomAggregate" Qualifier="JunkRating" String="Edm.Int32"/>
</Annotations>
{"report":{"apdex":1,"isInitial":true,"journeyId":"9381597c-3b16-421f-a757-0a969907ef91","key":"jira.project.issue.view-issue","navigationType":0,"readyForUser":809.0999999046326,"redirectCount":0,"resourceLoadedEnd":541.7999997138977,"resourceLoadedStart":162,"resourceTiming":[{"duration":122.2999997138977,"initiatorType":"link","name":"https://issues.oasis-open.org/s/3edeca31ab9ba77980aae0809fbe7121-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/css/_super/batch.css","startTime":162,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":162,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":284.2999997138977,"responseStart":0,"secureConnectionStart":0},{"duration":122.30000019073486,"initiatorType":"link","name":"https://issues.oasis-open.org/s/7d2823769c2e7b66e860863fe879b7f8-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/css/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&richediton=true","startTime":162.2999997138977,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":162.2999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":284.59999990463257,"responseStart":0,"secureConnectionStart":0},{"duration":122.19999980926514,"initiatorType":"link","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.css","startTime":162.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":162.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":284.69999980926514,"responseStart":0,"secureConnectionStart":0},{"duration":122.19999980926514,"initiatorType":"link","name":"https://issues.oasis-open.org/s/645acc233eb869f48a571293b8358a7d-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static-adgs/jira.webresources:global-static-adgs.css","startTime":162.59999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":162.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":284.7999997138977,"responseStart":0,"secureConnectionStart":0},{"duration":122.10000038146973,"initiatorType":"link","name":"https://issues.oasis-open.org/s/a0dd6509771c1de0667aae5429c04cda-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static/jira.webresources:global-static.css","startTime":162.7999997138977,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":162.7999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":284.90000009536743,"responseStart":0,"secureConnectionStart":0},{"duration":131.5,"initiatorType":"script","name":"https://issues.oasis-open.org/s/e5479157e7a0c08b005e6522f2f04104-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/js/_super/batch.js?locale=en-US","startTime":163.09999990463257,"connectEnd":163.09999990463257,"connectStart":163.09999990463257,"domainLookupEnd":163.09999990463257,"domainLookupStart":163.09999990463257,"fetchStart":163.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":163.09999990463257,"responseEnd":294.59999990463257,"responseStart":294.59999990463257,"secureConnectionStart":163.09999990463257},{"duration":148.30000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/83514d5d4e8543747b02042eafcdc99c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/js/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":163.19999980926514,"connectEnd":163.19999980926514,"connectStart":163.19999980926514,"domainLookupEnd":163.19999980926514,"domainLookupStart":163.19999980926514,"fetchStart":163.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":163.19999980926514,"responseEnd":311.5,"responseStart":311.5,"secureConnectionStart":163.19999980926514},{"duration":156.30000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/70bb2263e59e7e1f04fbd137c80b895b-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/aae1242f5fc81cc6a5bb8bc963ccda29/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en-US","startTime":163.2999997138977,"connectEnd":163.2999997138977,"connectStart":163.2999997138977,"domainLookupEnd":163.2999997138977,"domainLookupStart":163.2999997138977,"fetchStart":163.2999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":163.2999997138977,"responseEnd":319.59999990463257,"responseStart":319.59999990463257,"secureConnectionStart":163.2999997138977},{"duration":157.90000009536743,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":163.59999990463257,"connectEnd":163.59999990463257,"connectStart":163.59999990463257,"domainLookupEnd":163.59999990463257,"domainLookupStart":163.59999990463257,"fetchStart":163.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":163.59999990463257,"responseEnd":321.5,"responseStart":321.5,"secureConnectionStart":163.59999990463257},{"duration":158.2000002861023,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":163.69999980926514,"connectEnd":163.69999980926514,"connectStart":163.69999980926514,"domainLookupEnd":163.69999980926514,"domainLookupStart":163.69999980926514,"fetchStart":163.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":163.69999980926514,"responseEnd":321.90000009536743,"responseStart":321.90000009536743,"secureConnectionStart":163.69999980926514},{"duration":158.40000009536743,"initiatorType":"script","name":"https://issues.oasis-open.org/s/cda37faab827dbdf305de8efe8282062-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.js?locale=en-US","startTime":164,"connectEnd":164,"connectStart":164,"domainLookupEnd":164,"domainLookupStart":164,"fetchStart":164,"redirectEnd":0,"redirectStart":0,"requestStart":164,"responseEnd":322.40000009536743,"responseStart":322.40000009536743,"secureConnectionStart":164},{"duration":171.80000019073486,"initiatorType":"link","name":"https://issues.oasis-open.org/s/07245784f53abc49bad9d9d4d36c577a-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/cadc4f20cc5c138dee060d42cf85f220/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":164.19999980926514,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":164.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":336,"responseStart":0,"secureConnectionStart":0},{"duration":159,"initiatorType":"script","name":"https://issues.oasis-open.org/rest/api/1.0/shortcuts/803004/a29179d70fa8562374ee16707692af77/shortcuts.js?context=issuenavigation&context=issueaction","startTime":164.40000009536743,"connectEnd":164.40000009536743,"connectStart":164.40000009536743,"domainLookupEnd":164.40000009536743,"domainLookupStart":164.40000009536743,"fetchStart":164.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":164.40000009536743,"responseEnd":323.40000009536743,"responseStart":323.40000009536743,"secureConnectionStart":164.40000009536743},{"duration":148.09999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/f77fd89aa211a76b20e9b0e63564383c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.css?jira.create.linked.issue=true&richediton=true","startTime":188.19999980926514,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":188.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":336.2999997138977,"responseStart":0,"secureConnectionStart":0},{"duration":136.40000009536743,"initiatorType":"script","name":"https://issues.oasis-open.org/s/41525c48ddceeb9b11e54085268fc285-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.js?jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":188.5,"connectEnd":188.5,"connectStart":188.5,"domainLookupEnd":188.5,"domainLookupStart":188.5,"fetchStart":188.5,"redirectEnd":0,"redirectStart":0,"requestStart":188.5,"responseEnd":324.90000009536743,"responseStart":324.90000009536743,"secureConnectionStart":188.5},{"duration":333,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":204.2999997138977,"connectEnd":204.2999997138977,"connectStart":204.2999997138977,"domainLookupEnd":204.2999997138977,"domainLookupStart":204.2999997138977,"fetchStart":204.2999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":204.2999997138977,"responseEnd":537.2999997138977,"responseStart":537.2999997138977,"secureConnectionStart":204.2999997138977},{"duration":322.69999980926514,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":219.09999990463257,"connectEnd":219.09999990463257,"connectStart":219.09999990463257,"domainLookupEnd":219.09999990463257,"domainLookupStart":219.09999990463257,"fetchStart":219.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":219.09999990463257,"responseEnd":541.7999997138977,"responseStart":541.7999997138977,"secureConnectionStart":219.09999990463257},{"duration":126.69999980926514,"initiatorType":"xmlhttprequest","name":"https://issues.oasis-open.org/rest/webResources/1.0/resources","startTime":587,"connectEnd":587,"connectStart":587,"domainLookupEnd":587,"domainLookupStart":587,"fetchStart":587,"redirectEnd":0,"redirectStart":0,"requestStart":587,"responseEnd":713.6999998092651,"responseStart":713.6999998092651,"secureConnectionStart":587}],"threshold":1000,"fetchStart":0,"domainLookupStart":41,"domainLookupEnd":41,"connectStart":41,"connectEnd":91,"secureConnectionStart":65,"requestStart":91,"responseStart":143,"responseEnd":219,"domLoading":156,"domInteractive":887,"domContentLoadedEventStart":887,"domContentLoadedEventEnd":935,"domComplete":1021,"loadEventStart":1021,"loadEventEnd":1408,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[],"measures":[],"correlationId":"42ebc4fb33d452","effectiveType":"4g","downlink":9.4,"rtt":0,"serverDuration":100,"dbReadsTimeInMs":13,"dbConnsTimeInMs":15,"applicationHash":"4d4040e0714d65b7fffa4801569d014c0b16eaa9","experiments":[]}}
"Core" navigation property restrictions could be represented by the Capabilities.NavigationPropertyRestriction type, but all non-core ones (whether from the Aggregation vocabulary or some other, perhaps future, vocabulary) cannot: Because if every vocabulary introduced its own sub-type (like Aggregation.NavigationPropertyAggregationCapabilities has done), a given Capabilities.NavigationRestrictions/RestrictedProperties annotation could choose only one of these subtypes, so it could not express both a custom aggregate and a restriction from a future vocabulary on the same NavigationProperty. (No multiple inheritance.)
On the other hand, it is infeasible if every vocabulary had to insert its restrictions into the Capabilities.NavigationPropertyRestriction type.