@@ -112,25 +112,25 @@ <h2>Approach</h2>
112112< h2 > Capturing control information as patterns</ h2 >
113113< p > I mentioned patterns several times already. Let me make this more concrete. As we discussed before in the OData mailing list, we’re adding support for annotations to metadata using vocabularies. In order to support this JSON-based “light” format we introduce a vocabulary that captures how to derive all bits of control information from the regular object data. We’ll have the details of every pattern documented in the official spec, but here are a few to show what they look like.</ p >
114114< p > This one shows the base URL for the service, and is used for all relative URLs in other patterns:</ p >
115- < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation</ span > < span style ="color: #ff0000 "> Term</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> odata.urls.baseurlexpression</ span > "< span style ="color: #ff0000 " > Target</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> ODataDemo.DemoService</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
115+ < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation </ span > < span style ="color: #e50000 "> Term</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> odata.urls.baseurlexpression</ span > "< span style ="color: #e50000 " > Target</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> ODataDemo.DemoService</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
116116< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> String</ span > < span style ="color: #0000ff "> >https://services.odata.org/OData/OData.svc/</< span > < span style ="color: #a31515 "> String</ span > </ span > </ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
117117< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > </</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
118118< p > These two show two URL construction rules, one to obtain the URL of a collection (a set) and one to obtain the URL of an individual element within that collection:</ p >
119- < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation</ span > < span style ="color: #ff0000 "> Term</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> odata.urls.setexpression</ span > "< span style ="color: #ff0000 " > Target</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> ODataDemo.DemoService.Products</ span > </ span > < span > "</ span > </ span > </ p >
120- < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > </ span > </ span > < span > < span style ="color: #ff0000 "> String</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> Products/</ span > "</ span > < span style ="color: #0000ff "> /></ span > </ span > </ p >
119+ < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation </ span > < span style ="color: #e50000 "> Term</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> odata.urls.setexpression</ span > "< span style ="color: #e50000 " > Target</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> ODataDemo.DemoService.Products</ span > </ span > < span > "</ span > </ span > </ p >
120+ < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > </ span > </ span > < span > < span style ="color: #e50000 "> String</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> Products/</ span > "</ span > < span style ="color: #0000ff "> /></ span > </ span > </ p >
121121< p > < span style ="font-family: Lucida Console "> < span > </ span > </ span > </ p >
122- < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation</ span > < span style ="color: #ff0000 "> Term</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> odata.urls.keylookupexpression</ span > "< span style ="color: #ff0000 " > Target</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> ODataDemo.DemoService.Products</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
123- < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> Apply</ span > < span style ="color: #ff0000 "> Function</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> KeyConcat</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
122+ < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation </ span > < span style ="color: #e50000 "> Term</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> odata.urls.keylookupexpression</ span > "< span style ="color: #e50000 " > Target</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> ODataDemo.DemoService.Products</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
123+ < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> Apply </ span > < span style ="color: #e50000 "> Function</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> KeyConcat</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
124124< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> String</ span > < span style ="color: #0000ff "> ></ span > (< span style ="color: #0000ff "> </</ span > < span style ="color: #a31515 "> String</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
125125< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> Path</ span > < span style ="color: #0000ff "> ></ span > ID< span style ="color: #0000ff "> </</ span > < span style ="color: #a31515 "> Path</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
126126< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> String</ span > < span style ="color: #0000ff "> ></ span > )/< span style ="color: #0000ff "> </</ span > < span style ="color: #a31515 "> String</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
127127< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > </</ span > </ span > < span > < span style ="color: #a31515 "> Apply</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
128128< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > </</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > < span style ="font-family: Lucida Console "> < span > </ span > </ span > </ p >
129129< p > Finally, here’s one that’s not a URL but a plain value, in this case the ETag for each element (doesn’t apply to the “Product” type, but included here as an example):</ p >
130- < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation</ span > < span style ="color: #ff0000 "> Term</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> odata.json.etagexpression</ span > "< span style ="color: #ff0000 " > Target</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> ODataDemo.DemoService.Products</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
131- < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> Apply</ span > < span style ="color: #ff0000 "> Function</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> Concat</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
130+ < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> ValueAnnotation </ span > < span style ="color: #e50000 "> Term</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> odata.json.etagexpression</ span > "< span style ="color: #e50000 " > Target</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> ODataDemo.DemoService.Products</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
131+ < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> Apply </ span > < span style ="color: #e50000 "> Function</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> Concat</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
132132< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> String</ span > < span style ="color: #0000ff "> ></ span > W/"< span style ="color: #0000ff "> </</ span > < span style ="color: #a31515 "> String</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
133- < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> Apply</ span > < span style ="color: #ff0000 "> Function</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> RawValue</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
133+ < p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> Apply </ span > < span style ="color: #e50000 "> Function</ span > < span style ="color: #0000ff "> =</ span > "< span style ="color: #0000ff "> RawValue</ span > "</ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
134134< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> Path</ span > < span style ="color: #0000ff "> ></ span > Version< span style ="color: #0000ff "> </</ span > < span style ="color: #a31515 "> Path</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
135135< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > </</ span > </ span > < span > < span style ="color: #a31515 "> Apply</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
136136< p > < span style ="font-family: Lucida Console "> < span style ="color: #0000ff "> < span > <</ span > </ span > < span > < span style ="color: #a31515 "> String</ span > < span style ="color: #0000ff "> ></ span > "< span style ="color: #0000ff "> </</ span > < span style ="color: #a31515 "> String</ span > </ span > < span style ="color: #0000ff "> ></ span > </ span > </ p >
0 commit comments