{"id":863,"date":"2011-10-13T17:42:30","date_gmt":"2011-10-13T17:42:30","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/odatateam\/2011\/10\/13\/vocabularies-in-wcf-data-services\/"},"modified":"2011-10-13T17:42:30","modified_gmt":"2011-10-13T17:42:30","slug":"vocabularies-in-wcf-data-services","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/odata\/vocabularies-in-wcf-data-services\/","title":{"rendered":"Vocabularies in WCF Data Services"},"content":{"rendered":"<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><strong>Update (6\/4\/2012): <\/strong><em>This post is updated to reflect the few changes that were made to the vocabularies in OData v3 and the vocabularies feature in WCF Data Services 5.0. Please download the WCF Data Services 5.0 from the <\/em><a href=\"https:\/\/www.microsoft.com\/en-us\/download\/details.aspx?id=29306\"><em>download center<\/em><\/a><em> to follow along the code samples below.<\/em><\/p>\n<p>  <\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">One new feature in WCF Data Services&#160; is Vocabularies. You can learn more about vocabularies and how they are supported in OData <a href=\"https:\/\/www.odata.org\/blog\/2011\/10\/14\/vocabularies-in-odata\">here<\/a>. In a nutshell, a vocabulary is a namespace containing terms where each term is a named metadata extension for an OData service. In this post, I\u2019ll explain how to use this feature to produce an OData service extended with vocabularies, give an example of how to consume annotated metadata on the client side, and finally give some examples of annotations supported in the CTP.<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">&#160;<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\" align=\"justify\">Following are a few example uses which might leverage vocabularies:<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\" align=\"justify\">&#160;<\/p>\n<ul>\n<li>\n<div style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\" align=\"justify\">Validation metadata may be invented, such that a service may describe valid ranges, value lists, expressions, etc. for properties of entity types.<\/div>\n<\/li>\n<li>\n<div style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\" align=\"justify\">Visualization metadata may be defined to support generic browsing and visualization of data published via OData.<\/div>\n<\/li>\n<li>\n<div style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\" align=\"justify\">Adaptations of micro formats or RDF vocabularies may be defined in terms of vocabularies to enable bridging and integration between OData Services and other linked data and semantic web technologies<\/div>\n<\/li>\n<\/ul>\n<h1 style=\"line-height: 16pt;margin: 24pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 14pt\" color=\"#365f91\"><font style=\"font-weight: bold\">Applying Annotations to Data Service<\/font><\/font><\/font><\/h2>\n<p style=\"line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt\" class=\"MsoListParagraphCxSpFirst\">In the WCF Data Services October CTP it\u2019s possible to apply annotations to a data service and produce a $metadata endpoint which is extended by vocabularies. Let\u2019s look at how to achieve this in this new version of the WCF Data Services.<\/p>\n<p style=\"line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt\" class=\"MsoListParagraphCxSpMiddle\">&#160;<\/p>\n<p style=\"line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt\" class=\"MsoListParagraphCxSpLast\">Applying annotations to a data service is a two-step process:<\/p>\n<p style=\"line-height: 13pt;text-indent: -0.25in;margin: 0in 0in 6pt 51.85pt\" class=\"ppBulletList\"><span style=\"font-family:\"><span><font face=\"Symbol\">\u00b7<\/font><span style=\"line-height: normal;font-family:\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/font><\/span><\/span><\/span>Author an annotations file<\/p>\n<p style=\"line-height: 13pt;text-indent: -0.25in;margin: 0in 0in 6pt 51.85pt\" class=\"ppBulletList\"><span style=\"font-family:\"><span><font face=\"Symbol\">\u00b7<\/font><span style=\"line-height: normal;font-family:\"><font face=\"Times New Roman\"><font style=\"font-size: 7pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/font><\/span><\/span><\/span>Configure the data service to use produce an annotated $metadata endpoint<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">Let\u2019s take a closer look at these steps through a simple scenario. Imagine the following simple model of a Person entity shown in CSDL:<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">&#160;<\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpFirst\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Schema <\/font><\/span><span><font color=\"#ff0000\">xmlns<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">http:\/\/schemas.microsoft.com\/ado\/2009\/11\/edm<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Namespace<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">VocabSample<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntityType <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Person<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Key<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">PropertyRef <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">ID<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Key<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Property <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">ID<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Nullable<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">false<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Type<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Edm.Int32<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Property <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">FirstName<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Type<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Edm.String<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Property <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">LastName<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Type<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Edm.String<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Property <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Age<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Nullable<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">false<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Type<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Edm.Int32<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntityType<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntityContainer <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">SampleService<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">m:IsDefaultEntityContainer<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">true<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntitySet <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">People<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">EntityType<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">VocabSample.Person<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntityContainer<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;text-indent: 0in;margin: 7.5pt 3.75pt 7.5pt 0in\" class=\"MsoListParagraphCxSpMiddle\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Schema<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><span><\/span><\/p>\n<p style=\"line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt\" class=\"MsoListParagraphCxSpMiddle\">&#160;<\/p>\n<p style=\"line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt\" class=\"MsoListParagraphCxSpLast\">Suppose, as the service owner, you want to extend the service metadata using a term which describes a valid range of values for certain properties(the Age property in this case). The first thing you\u2019d need to do is to author an annotation file targeting your EDM. <\/p>\n<h2 style=\"line-height: 15pt;margin: 10pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 13pt\" color=\"#4f81bd\"><font style=\"font-weight: bold\">Authoring an annotations file<\/font><\/font><\/font><\/h2>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">To support vocabularies in EDM, we specified a new CSDL syntax used to apply terms. This makes it possible to apply vocabularies using familiar EDM constructs and existing reference mechanisms. An annotations file is an XML document that specifies how terms from one or more vocabularies are applied to a target model.<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">The following is an example of how to apply a \u201cValidation\u201d vocabulary\u2019s \u201cRange\u201d term to a \u201cPerson.Age\u201d property:<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">&#160;<\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Schema <\/font><\/span><span><font color=\"#ff0000\">Namespace<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">VocabSample<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Alias<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">VocabSample<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">xmlns<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">http:\/\/schemas.microsoft.com\/ado\/2009\/11\/edm<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\">&#160; &lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Using <\/font><\/span><span><font color=\"#ff0000\">Namespace<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Org.OData.Validation.V1<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Alias<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Validation<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Annotations <\/font><\/span><span><font color=\"#ff0000\">Target<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">VocabSample.Person\/Age<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">TypeAnnotation <\/font><\/span><span><font color=\"#ff0000\">Term<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Validation.Range<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">PropertyValue <\/font><\/span><span><font color=\"#ff0000\">Property<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Min<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Decimal<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">16<\/font><\/span>&quot; <\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">PropertyValue <\/font><\/span><span><font color=\"#ff0000\">Property<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Max<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Decimal<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">90<\/font><\/span>&quot; <\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">TypeAnnotation<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Annotations<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 7.5pt 0in\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Schema<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt;background: white\" class=\"MsoNormal\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160;<\/font><\/font><\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">The annotations file is a CSDL which uses the new annotation syntax. The Target attribute of &lt;Annotations&gt; specifies that the annotation is being applied to the Person entity\u2019s Age property.. The Term attribute of the &lt;TypeAnnotation&gt; specifies that the term being applied is called \u201cRange\u201d. <span>&lt;PropertyValue&gt; elements set the values for the two properties of the Range term. The <\/span>\u201cValidation\u201d identifier used to qualify the term name in the annotations is an alias for the globally unique namespace, specified by NamespaceUri=&quot;<span>http:\/\/vocabularies.odata.org\/Validation<\/span>&quot;. <\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">The next step is to configure the data service to use the annotations and to produce an extended $metadata endpoint.<\/p>\n<h2 style=\"line-height: 15pt;margin: 10pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 13pt\" color=\"#4f81bd\"><font style=\"font-weight: bold\">Configuring the data service<\/font><\/font><\/font><\/h2>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">In the October 2011 CTP of WCF Data Services, we added the following property to the DataServiceConfiguration class:<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">&#160;<\/p>\n<div style=\"border-bottom: #d5d5d3 1pt solid;border-left: medium none;padding-bottom: 1pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;border-top: white 1pt solid;border-right: medium none;padding-top: 1pt\">\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCode\"><font face=\"Consolas\"><span style=\"color:\"><font color=\"#0000ff\"><font style=\"font-size: 10pt\">public<\/font><\/font><\/span><span><font style=\"font-size: 10pt\">&#160;<span style=\"color:\"><font color=\"#2b91af\">Func<\/font><\/span>&lt;Microsoft.Data.Edm.IEdmModel, <span style=\"color:\"><font color=\"#2b91af\">IEnumerable<\/font><\/span>&lt;Microsoft.Data.Edm.IEdmModel&gt;&gt; AnnotationsBuilder<\/font><\/span><\/font><\/p>\n<\/p><\/div>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><span><\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><span><\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><span>Following is an example of the InitializeServer method that shows how to use the AnnotationsBuilder to configure the service to use the annotations:<\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><span><\/span><\/p>\n<pre class=\"code\"><font size=\"2\" face=\"Consolas\">    <span style=\"color: blue\">public static void <\/span>InitializeService(<span style=\"color: #2b91af\">DataServiceConfiguration <\/span>config)\n    {\n        <\/font><font face=\"Consolas\"><font size=\"2\"><span style=\"color: green\">\/\/const string annotationsFile = @&quot;D:\\Code\\BlogPostDemo\\BlogPostDemo\\Annotations.xml&quot;;\n        <\/span><span style=\"color: blue\">const string <\/span>annotationsFile = <span style=\"color: #a31515\">@&quot;D:\\Vocabularies\\Annotations\\Annotations.xml&quot;<\/span>;\n        config.SetEntitySetAccessRule(<span style=\"color: #a31515\">&quot;People&quot;<\/span>, <span style=\"color: #2b91af\">EntitySetRights<\/span>.AllRead);\n        config.DataServiceBehavior.MaxProtocolVersion = <span style=\"color: #2b91af\">DataServiceProtocolVersion<\/span>.V3;\n        config.DisableValidationOnMetadataWrite = <span style=\"color: blue\">true<\/span>;\n        config.AnnotationsBuilder = (model) =&gt;\n        {\n            <span style=\"color: #2b91af\">IEdmModel <\/span>annotationsmodel;\n            <span style=\"color: #2b91af\">IEnumerable<\/span>&lt;<span style=\"color: #2b91af\">EdmError<\/span>&gt; errors;\n            <span style=\"color: blue\">var <\/span>xmlreaders = <span style=\"color: blue\">new <\/span><span style=\"color: #2b91af\">XmlReader<\/span>[] { <span style=\"color: #2b91af\">XmlReader<\/span>.Create(annotationsFile) };\n            <span style=\"color: blue\">bool <\/span>parsed = <span style=\"color: #2b91af\">CsdlReader<\/span>.TryParse(xmlreaders, model, <span style=\"color: blue\">out <\/span>annotationsmodel, <span style=\"color: blue\">out <\/span>errors);\n            <span style=\"color: blue\">return <\/span>parsed ? <span style=\"color: blue\">new <\/span><span style=\"color: #2b91af\">IEdmModel<\/span>[] { annotationsmodel } : <span style=\"color: blue\">null<\/span>;\n        };<\/font><\/font><\/pre>\n<pre class=\"code\"><font size=\"2\" face=\"Consolas\">    }<\/font><\/pre>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><span>That\u2019s it! Running the service and navigating to the $metadata endpoint will result in the following payload:<\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><span><\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><span><\/span><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\"><\/font><\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\">&lt;?<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">xml <\/font><\/span><span><font color=\"#ff0000\">version<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">1.0<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">encoding<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">UTF-8<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">?&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">edmx:Edmx <\/font><\/span><span><font color=\"#ff0000\">xmlns:edmx<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">http:\/\/schemas.microsoft.com\/ado\/2007\/06\/edmx<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Version<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">1.0<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">edmx:DataServices <\/font><\/span><span><font color=\"#ff0000\">xmlns:m<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">http:\/\/schemas.microsoft.com\/ado\/2007\/08\/dataservices\/metadata<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">m:MaxDataServiceVersion<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">3.0<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">m:DataServiceVersion<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">1.0<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Schema <\/font><\/span><span><font color=\"#ff0000\">xmlns<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">http:\/\/schemas.microsoft.com\/ado\/2009\/11\/edm<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Namespace<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">VocabSample<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntityType <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Person<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Key<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">PropertyRef <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">ID<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Key<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Property <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">ID<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Nullable<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">false<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Type<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Edm.Int32<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Property <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">FirstName<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Type<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Edm.String<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Property <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">LastName<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Type<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Edm.String<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Property <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Age<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Nullable<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">false<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Type<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Edm.Int32<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntityType<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntityContainer <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">SampleService<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">m:IsDefaultEntityContainer<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">true<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntitySet <\/font><\/span><span><font color=\"#ff0000\">Name<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">People<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">EntityType<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">VocabSample.Person<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">EntityContainer<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Annotations <\/font><\/span><span><font color=\"#ff0000\">Target<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">VocabSample.Person\/Age<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">TypeAnnotation <\/font><\/span><span><font color=\"#ff0000\">Term<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">Org.OData.Validation.V1.Range<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">PropertyValue <\/font><\/span><span><font color=\"#ff0000\">Decimal<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">16<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Property<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Min<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">PropertyValue <\/font><\/span><span><font color=\"#ff0000\">Decimal<\/font><\/span><span><font color=\"#0000ff\">=<\/font><\/span><\/font><span><font style=\"font-size: 10pt\">&quot;<span style=\"color:\"><font color=\"#0000ff\">90<\/font><\/span>&quot; <span style=\"color:\"><font color=\"#ff0000\">Property<\/font><\/span><span style=\"color:\"><font color=\"#0000ff\">=<\/font><\/span>&quot;<span style=\"color:\"><font color=\"#0000ff\">Max<\/font><\/span>&quot;<\/font><span style=\"color:\"><font style=\"font-size: 10pt\" color=\"#0000ff\">\/&gt;<\/font><\/span><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">TypeAnnotation<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Annotations<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160;&#160;&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">Schema<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><span><font style=\"font-size: 10pt\">&#160; <\/font><\/span><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">edmx:DataServices<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: normal;margin: 0in 0in 0pt\" class=\"MsoNormal\"><font face=\"Consolas\"><span><font color=\"#0000ff\"><font style=\"font-size: 10pt\">&lt;\/<\/font><\/font><\/span><font style=\"font-size: 10pt\"><span><font color=\"#a31515\">edmx:Edmx<\/font><\/span><\/font><span><font style=\"font-size: 10pt\" color=\"#0000ff\">&gt;<\/font><\/span><\/font><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><span>&#160;<\/span><\/p>\n<h1 style=\"line-height: 16pt;margin: 24pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 14pt\" color=\"#365f91\"><font style=\"font-weight: bold\">Client Side<\/font><\/font><\/font><\/h2>\n<p style=\"line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt\" class=\"ppBodyText\">On the client side, you can use System.Data.Edm to parse the metadata and extract the annotations. <span>&#160;<\/span>The example below illustrates how to get the vocabulary annotations applied to Person.Age:<\/p>\n<pre class=\"code\"><font face=\"Consolas\"><font size=\"2\"><span style=\"color: green\">\/\/GET service metadata\n<\/span><span style=\"color: blue\">const string <\/span>metadataUri = <span style=\"color: #a31515\">&quot;http:\/\/localhost:51672\/vocabsample.svc\/$metadata&quot;<\/span>;\n<span style=\"color: blue\">string <\/span>metadata = GetMetadata(metadataUri);\n\n<\/font><\/font><font face=\"Consolas\"><font size=\"2\"><span style=\"color: green\">\/\/Parse the metadata\n<\/span><span style=\"color: #2b91af\">IEdmModel <\/span>annotatedModel;\n<span style=\"color: #2b91af\">IEnumerable<\/span>&lt;<span style=\"color: #2b91af\">EdmError<\/span>&gt; errors;\n<span style=\"color: #2b91af\">XmlReader <\/span>xmlReader = <span style=\"color: #2b91af\">XmlReader<\/span>.Create(<span style=\"color: blue\">new <\/span><span style=\"color: #2b91af\">StringReader<\/span>(metadata));\n<span style=\"color: blue\">bool <\/span>parsed = <span style=\"color: #2b91af\">EdmxReader<\/span>.TryParse(xmlReader, <span style=\"color: blue\">out <\/span>annotatedModel, <span style=\"color: blue\">out <\/span>errors);\n\n<\/font><\/font><font face=\"Consolas\"><font size=\"2\"><span style=\"color: green\">\/\/Find the Age property of Person EntityType\n<\/span><span style=\"color: #2b91af\">IEdmProperty <\/span>age = <span style=\"color: blue\">null<\/span>;\n<span style=\"color: blue\">if <\/span>(<span style=\"color: #2b91af\">EdmTypeKind<\/span>.Entity == annotatedModel.FindType(<span style=\"color: #a31515\">&quot;VocabSample.Person&quot;<\/span>).TypeKind)\n{\n    <span style=\"color: #2b91af\">IEdmEntityType <\/span>person = (<span style=\"color: #2b91af\">IEdmEntityType<\/span>)annotatedModel.FindType(<span style=\"color: #a31515\">&quot;VocabSample.Person&quot;<\/span>);\n    age = person.FindProperty(<span style=\"color: #a31515\">&quot;Age&quot;<\/span>);\n}\n<\/font><\/font><\/pre>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">&#160;<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">You can get the name of the terms applied to the Age property as follows:<\/p>\n<div style=\"border-bottom: #d5d5d3 1pt solid;border-left: medium none;padding-bottom: 1pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;border-top: white 1pt solid;border-right: medium none;padding-top: 1pt\">\n<pre class=\"code\"><font face=\"Consolas\"><font size=\"2\"><span style=\"color: blue\">foreach <\/span>(<span style=\"color: #2b91af\">IEdmVocabularyAnnotation <\/span>annotation <span style=\"color: blue\">in <\/span>annotations)\n{\n    <span style=\"color: blue\">if <\/span>(annotation.Term.TermKind == <span style=\"color: #2b91af\">EdmTermKind<\/span>.Type )\n    {\n        <span style=\"color: #2b91af\">IEdmTypeAnnotation <\/span>typeAnnotation = (<span style=\"color: #2b91af\">IEdmTypeAnnotation<\/span>)annotation;\n        <span style=\"color: #2b91af\">Console<\/span>.WriteLine(typeAnnotation.Term.Name);\n    }\n}<\/font><\/font><\/pre>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpLast\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\"><\/font><\/font><\/span><\/p>\n<\/div>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">&#160;<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">You can access the properties of a term as follows:<\/p>\n<pre class=\"code\"><font face=\"Consolas\"><font size=\"2\"><span style=\"color: blue\">foreach <\/span>(<span style=\"color: #2b91af\">IEdmVocabularyAnnotation <\/span>annotation <span style=\"color: blue\">in <\/span>annotations)\n{\n    <span style=\"color: blue\">if <\/span>(annotation.Term.TermKind == <span style=\"color: #2b91af\">EdmTermKind<\/span>.Type)\n    {\n        <span style=\"color: #2b91af\">IEdmTypeAnnotation <\/span>typeAnnotation = (<span style=\"color: #2b91af\">IEdmTypeAnnotation<\/span>)annotation;\n        <span style=\"color: blue\">if <\/span>(typeAnnotation.Term.Name == <span style=\"color: #a31515\">&quot;Range&quot;<\/span>)\n        {\n            <span style=\"color: #2b91af\">IEdmPropertyValueBinding <\/span>min = <span style=\"color: blue\">null<\/span>;\n            <span style=\"color: #2b91af\">IEdmPropertyValueBinding <\/span>max = <span style=\"color: blue\">null<\/span>;\n            <span style=\"color: blue\">foreach <\/span>(<span style=\"color: blue\">var <\/span>prop <span style=\"color: blue\">in <\/span>typeAnnotation.PropertyValueBindings)\n            {\n            <span style=\"color: blue\">if <\/span>(prop.BoundProperty.Name == <span style=\"color: #a31515\">&quot;Min&quot;<\/span>)\n            {\n                min = prop;\n            }\n            <span style=\"color: blue\">else if <\/span>(prop.BoundProperty.Name == <span style=\"color: #a31515\">&quot;Max&quot;<\/span>)\n            {\n                max = prop;\n                }\n            }\n            <span style=\"color: #2b91af\">IEdmDecimalValue <\/span>minVal = (<span style=\"color: #2b91af\">IEdmDecimalValue<\/span>)min.Value;\n            <span style=\"color: #2b91af\">Console<\/span>.WriteLine(minVal.Value);\n            <span style=\"color: #2b91af\">IEdmDecimalValue <\/span>maxValue = (<span style=\"color: #2b91af\">IEdmDecimalValue<\/span>)max.Value;\n            <span style=\"color: #2b91af\">Console<\/span>.WriteLine(maxValue.Value);\n        }\n    }\n}<\/font><\/font><\/pre>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">&#160;<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\"><font face=\"Cambria\"><font style=\"font-size: 14pt\" color=\"#365f91\"><font style=\"font-weight: bold\">Example Annotations<\/font><\/font><\/font><\/p>\n<p style=\"line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt\" class=\"ppBodyText\">In the example above, we looked at annotating a Property of an entity. In OData annotations are supported on several CSDL elements. It\u2019s possible to annotate the following CSDL elements in the following way assuming the service that is being annotated is the sample <a href=\"http:\/\/services.odata.org\/Northwind\/Northwind.svc\/$metadata\"><font color=\"#0000ff\">Northwind service<\/font><\/a>.<\/p>\n<p style=\"line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt\" class=\"ppBodyText\"><font face=\"Cambria\"><font style=\"font-size: 11pt\" color=\"#4f81bd\"><font style=\"font-weight: bold\">EntityContainer<\/font><\/font><\/font><\/p>\n<div style=\"border-bottom: #d5d5d3 1pt solid;border-left: medium none;padding-bottom: 1pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;border-top: white 1pt solid;border-right: medium none;padding-top: 1pt\">\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpFirst\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160; &lt;<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Target<\/font><\/span>=<span style=\"color:\">&quot;<\/span>NorthwindEntities<span style=\"color:\">&quot;<\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpMiddle\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160;&#160;&#160; &lt;<span style=\"color:\"><font color=\"#a31515\">ValueAnnotation<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Term<\/font><\/span>=<span style=\"color:\">&quot;<\/span>Display.Title<span style=\"color:\">&quot;<\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">String<\/font><\/span>=<span style=\"color:\">&quot;All Entities&quot;<\/span> \/&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpLast\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160; &lt;\/<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<\/div>\n<h3 style=\"line-height: 13pt;margin: 10pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 11pt\" color=\"#4f81bd\"><font style=\"font-weight: bold\">EntitySet<\/font><\/font><\/font><\/h3>\n<div style=\"border-bottom: #d5d5d3 1pt solid;border-left: medium none;padding-bottom: 1pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;border-top: white 1pt solid;border-right: medium none;padding-top: 1pt\">\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpFirst\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&lt;<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Target<\/font><\/span>=<span style=\"color:\">&quot;NorthwindEntitites\/<\/span>Invoices<span style=\"color:\">&quot;<\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpMiddle\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160;&#160;&#160; &lt;<span style=\"color:\"><font color=\"#a31515\">ValueAnnotation<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Term<\/font><\/span>=<span style=\"color:\">&quot;<\/span>Display.Title<span style=\"color:\">&quot;<\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">String<\/font><\/span>=<span style=\"color:\">&quot;Order Invoices&quot;<\/span> \/&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpLast\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&lt;\/<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span> &gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<\/div>\n<h3 style=\"line-height: 13pt;margin: 10pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 11pt\" color=\"#4f81bd\"><font style=\"font-weight: bold\">EntityType<\/font><\/font><\/font><\/h3>\n<div style=\"border-bottom: #d5d5d3 1pt solid;border-left: medium none;padding-bottom: 1pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;border-top: white 1pt solid;border-right: medium none;padding-top: 1pt\">\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpFirst\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&lt;<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Target<\/font><\/span>=<span style=\"color:\">&quot;<\/span>NorthwindModel.Employee<span style=\"color:\">&quot;<\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpMiddle\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160; &lt;<span style=\"color:\"><font color=\"#a31515\">TypeAnnotation<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Term<\/font><\/span>=<span style=\"color:\">&quot;<\/span>Contact.Person<span style=\"color:\">&quot;<\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpMiddle\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160;&#160;&#160; &lt;<span style=\"color:\"><font color=\"#a31515\">PropertyValue<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Property<\/font><\/span>=<span style=\"color:\">&quot;<\/span>FirstName<span style=\"color:\">&quot;<\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Path<\/font><\/span>=<span style=\"color:\">&quot;<\/span>FirstName<span style=\"color:\">&quot;<\/span> \/&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpMiddle\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160;&#160;&#160; &lt;<span style=\"color:\"><font color=\"#a31515\">PropertyValue<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Property<\/font><\/span>=<span style=\"color:\">&quot;<\/span>LastName<span style=\"color:\">&quot;<\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Path<\/font><\/span>=<span style=\"color:\">&quot;<\/span>LastName<span style=\"color:\">&quot;<\/span> \/&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpMiddle\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160; &lt;\/<span style=\"color:\"><font color=\"#a31515\">TypeAnnotation<\/font><\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpLast\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&lt;\/<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<\/div>\n<h3 style=\"line-height: 13pt;margin: 10pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 11pt\" color=\"#4f81bd\"><font style=\"font-weight: bold\">Property<\/font><\/font><\/font><\/h3>\n<div style=\"border-bottom: #d5d5d3 1pt solid;border-left: medium none;padding-bottom: 1pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;border-top: white 1pt solid;border-right: medium none;padding-top: 1pt\">\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpFirst\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&lt;<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Target<\/font><\/span>=<span style=\"color:\">&quot;<\/span>NorthwindModel.Employee\/EmployeeID<span style=\"color:\">&quot;<\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpMiddle\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160; &lt;<span style=\"color:\"><font color=\"#a31515\">TypeAnnotation<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Term<\/font><\/span>=<span style=\"color:\">&quot;<\/span>Display.Hide<span style=\"color:\">&quot;<\/span> \/&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpLast\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&lt;\/<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<\/div>\n<h3 style=\"line-height: 13pt;margin: 10pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 11pt\" color=\"#4f81bd\"><font style=\"font-weight: bold\">NavigationProperty<\/font><\/font><\/font><\/h3>\n<div style=\"border-bottom: #d5d5d3 1pt solid;border-left: medium none;padding-bottom: 1pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;border-top: white 1pt solid;border-right: medium none;padding-top: 1pt\">\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpFirst\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&lt;<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Target<\/font><\/span>=<span style=\"color:\">&quot;<\/span>NorthwindModel.Customer\/Orders<span style=\"color:\">&quot;<\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 0pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpMiddle\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&#160; &lt;<span style=\"color:\"><font color=\"#a31515\">ValueAnnotation<\/font><\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">Term<\/font><\/span>=<span style=\"color:\">&quot;<\/span>Display.Title<span style=\"color:\">&quot;<\/span>&#160;<span style=\"color:\"><font color=\"#ff0000\">String<\/font><\/span>=<span style=\"color:\">&quot;<\/span>Customer Orders<span style=\"color:\">&quot;<\/span>\/&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<p style=\"padding-bottom: 0in;line-height: 13pt;text-indent: 0in;margin: 0in 0in 6pt;padding-left: 0in;padding-right: 0in;background: #f7f7ff;padding-top: 0in\" class=\"ppCodeCxSpLast\"><span><font face=\"Consolas\"><font style=\"font-size: 10pt\">&lt;\/<span style=\"color:\"><font color=\"#a31515\">Annotations<\/font><\/span>&gt;<\/font><span style=\"color:\"><\/span><\/font><\/span><\/p>\n<\/div>\n<h3 style=\"line-height: 13pt;margin: 10pt 0in 6pt\"><font face=\"Cambria\"><font style=\"font-size: 11pt\" color=\"#4f81bd\"><font style=\"font-weight: bold\">FunctionImport<\/font><\/font><\/font><\/h3>\n<p style=\"line-height: 13pt;margin: 10pt 0in 6pt\">An imaginary FunctionImport and annotation:<\/p>\n<p style=\"line-height: 13pt;margin: 10pt 0in 6pt\">&#160;<\/p>\n<pre class=\"code\"><font size=\"2\" face=\"Consolas\">  <span style=\"color: blue\">&lt;<\/span><span style=\"color: #a31515\">FunctionImport <\/span><span style=\"color: red\">Name<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">MyFunctionImport<\/span>&quot; <span style=\"color: red\">EntitySet<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">MyEntitySet<\/span>&quot; <span style=\"color: red\">ReturnType<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">Collection(Namespace.MyType)<\/span>&quot;<\/font><font face=\"Consolas\"><font size=\"2\"><span style=\"color: blue\">&gt;\n    &lt;<\/span><span style=\"color: #a31515\">Parameter <\/span><span style=\"color: red\">Name<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">Param2<\/span>&quot; <span style=\"color: red\">Nullable<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">true<\/span>&quot; <span style=\"color: red\">Mode<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">In<\/span>&quot; <span style=\"color: red\">Type<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">Edm.String<\/span>&quot; <\/font><\/font><font face=\"Consolas\"><font size=\"2\"><span style=\"color: blue\">\/&gt;\n    &lt;<\/span><span style=\"color: #a31515\">Parameter <\/span><span style=\"color: red\">Name<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">Param3<\/span>&quot; <span style=\"color: red\">Nullable<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">true<\/span>&quot; <span style=\"color: red\">Mode<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">In<\/span>&quot; <span style=\"color: red\">Type<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">Edm.String<\/span>&quot; <\/font><\/font><font face=\"Consolas\"><font size=\"2\"><span style=\"color: blue\">\/&gt;\n  &lt;\/<\/span><span style=\"color: #a31515\">FunctionImport<\/span><\/font><\/font><span style=\"color: blue\"><font size=\"2\" face=\"Consolas\">&gt;<\/font><\/span><\/pre>\n<pre class=\"code\"><span style=\"color: blue\"><font size=\"2\" face=\"Consolas\"><\/font><\/span><\/pre>\n<pre class=\"code\"><font size=\"2\" face=\"Consolas\">  <span style=\"color: blue\">&lt;<\/span><span style=\"color: #a31515\">Annotations <\/span><span style=\"color: red\">Target<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">MyContainer\/MyFunctionImport(Edm.String, Edm.String)<\/span>&quot;<\/font><font face=\"Consolas\"><font size=\"2\"><span style=\"color: blue\">&gt;\n    &lt;<\/span><span style=\"color: #a31515\">ValueAnnotation <\/span><span style=\"color: red\">Term<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">Org.OData.Display.Title<\/span>&quot; <span style=\"color: red\">String<\/span><span style=\"color: blue\">=<\/span>&quot;<span style=\"color: blue\">My FunctionImport<\/span>&quot; <\/font><\/font><font face=\"Consolas\"><font size=\"2\"><span style=\"color: blue\">\/&gt;\n  &lt;\/<\/span><span style=\"color: #a31515\">Annotations<\/span><\/font><\/font><span style=\"color: blue\"><font size=\"2\"><font face=\"Consolas\">&gt;<\/font>\n<\/font><\/span><\/pre>\n<pre class=\"code\"><font face=\"Cambria\"><font style=\"font-size: 14pt\" color=\"#365f91\"><font style=\"font-weight: bold\">Summary<\/font><\/font><\/font><\/pre>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">Vocabularies feature is a significant new feature that we added to Data Services. Vocabularies increase the expressiveness of OData metadata document to enable a broader spectrum of experiences. Clients and data providers can cooperate to enable richer experiences by enhancing OData metadata with vocabularies.<\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 6pt\" class=\"MsoNormal\">Let us know what you think and make sure to visit the <a href=\"http:\/\/social.msdn.microsoft.com\/Forums\/en-US\/adodotnetdataservices\/threads\">WCF Data Services forum<\/a> if you have any questions or issues.<\/p>\n<p><span>\n  <br \/><\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 10pt\" class=\"MsoNormal\"><span>Turker Keskinpala<\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 10pt\" class=\"MsoNormal\"><span>Program Manager<\/span><\/p>\n<p style=\"line-height: 13pt;margin: 0in 0in 10pt\" class=\"MsoNormal\"><span>WCF Data Services\/OData Team<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Update (6\/4\/2012): This post is updated to reflect the few changes that were made to the vocabularies in OData v3 and the vocabularies feature in WCF Data Services 5.0. Please download the WCF Data Services 5.0 from the download center to follow along the code samples below. One new feature in WCF Data Services&#160; is [&hellip;]<\/p>\n","protected":false},"author":512,"featured_media":3253,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-863","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-odata"],"acf":[],"blog_post_summary":"<p>Update (6\/4\/2012): This post is updated to reflect the few changes that were made to the vocabularies in OData v3 and the vocabularies feature in WCF Data Services 5.0. Please download the WCF Data Services 5.0 from the download center to follow along the code samples below. One new feature in WCF Data Services&#160; is [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/posts\/863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/users\/512"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/comments?post=863"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/posts\/863\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/media\/3253"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/media?parent=863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/categories?post=863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/odata\/wp-json\/wp\/v2\/tags?post=863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}