{"id":206,"date":"2009-09-04T12:15:28","date_gmt":"2009-09-04T16:15:28","guid":{"rendered":"https:\/\/clarionsharp.com\/blog\/?p=206"},"modified":"2019-04-04T13:54:59","modified_gmt":"2019-04-04T13:54:59","slug":"linq-to-file-provider","status":"publish","type":"post","link":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/","title":{"rendered":"LINQ to FILE Provider"},"content":{"rendered":"<p>Language Integrated Query (or LINQ, pronounced \u201clink\u201d for short), is a set of .NET technologies that provide built-in language querying functionality similar to SQL, not only for database access, but for accessing data from just about any source.\u00a0 Simply put LINQ is a set of language changes and API&#8217;s that allow you to write SQL-like queries natively in your chosen .NET programming language. LINQ provides the same query model and operators for different data sources, such as LINQ to Objects, LINQ to XML, LINQ to SQL and now our new LINQ to FILE provider.\u00a0 And LINQ isn&#8217;t limited to traditional data sources, there are many more LINQ to &#8220;xyz&#8221;\u00a0 providers, for example here is a list of some non-typical LINQ providers;<\/p>\n<ul>\n<li>LINQ to WebQueries by Hartmut Maennel handles searches in the SiteSeer and MSDN Web sites.<\/li>\n<li><a href=\"http:\/\/weblogs.asp.net\/fmarguerie\/archive\/2006\/06\/26\/Introducing-Linq-to-Amazon.aspx\">LINQ to Amazon<\/a> by Fabrice Marguerie, a co-author of the <em><a href=\"http:\/\/linqinaction.net\/\">LINQ in Action<\/a><\/em> book. LINQ to Amazon returns lists of books meeting specific criteria.<\/li>\n<li>LINQ to Flickr by Mohammed Hossam El-Din (Bashmohandes) uses the open-source <a href=\"http:\/\/www.codeplex.com\/FlickrNet\/\">FlickrNet<\/a> C# library as its infrastructure.<\/li>\n<li><a href=\"http:\/\/langexplr.blogspot.com\/2007\/05\/linq-to-google-desktop.html\">LINQ to Google Desktop<\/a> supports queries to the Google desktop search engine<\/li>\n<\/ul>\n<p>and the full list of available providers is much longer, if you&#8217;re interested in seeing more LINQ providers follow this link<\/p>\n<p>Part of the beauty of\u00a0 LINQ is that the exact same syntax is used to query (and potentially update) any data source that implements IEnumerable.\u00a0 LINQ defines a set of general purpose standard query operators that allow for traversal, filtering, and projection operations to be expressed in a direct, yet declarative way in any .NET-based programming language.\u00a0 Let&#8217;s take a look at it in some Clarion# code using the new LINQ to FILE provider:<\/p>\n<p>In the data declaration section you declare IFileQuery instances of a file&#8217;s record type:<br \/>\n!\u00a0 &#8212;&#8212;Data declaration section&#8212;&#8212;<br \/>\nClassesQuery\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 IFileQuery&lt;Classes.Record&gt;<br \/>\nCoursesQuery\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 IfileQuery&lt;Courses.Record&gt;<\/p>\n<p style=\"padding-left: 30px;\">CODE<br \/>\n<span style=\"color: #993300;\"><code>myQuery? = from class in ClassesQuery |<br \/>\nwhere class.RoomNumber &lt; 10 |<br \/>\nselect class<\/code><\/span><\/p>\n<p class=\"BodyText\">The local variable myQuery? is initialized with a query expression. A query expression operates on one (or more) information sources by applying one or more query operators from either the standard query operators or any domain-specific operators.\u00a0 This expression uses two of the standard query operators: Where, and Select, and its very obvious this query will return all records where the the RoomNumber column has a value &lt; 10.<\/p>\n<p>The arguments to the Where and Select operators are called lambda expressions, which are essentially fragments of code. They allow the standard query operators to be defined individually as methods and strung together, and these methods form the basis for an extensible query language.<\/p>\n<p class=\"BodyText\">Lambda expressions are one important piece of the LINQ query architecture. Extension methods are the other. Extension methods combine the flexibility of dynamic languages with the performance and compile-time validation of statically-typed languages. We&#8217;ll delve into extension methods in another post.<\/p>\n<p class=\"BodyText\">Let&#8217;s look at another example:<\/p>\n<p class=\"BodyText\" style=\"padding-left: 30px;\"><span style=\"color: #993300;\">myQuery? = From class in ClassesQuery |<br \/>\n<code>Where class.RoomNumber &lt; 10 |<br \/>\nOrderBy class.ClassNumber, class.CourseNumber Descending |<br \/>\nSelect New {class.ClassNumber, class.CourseNumber, |<br \/>\nclass.RoomNumber}<\/code><\/span><\/p>\n<p class=\"BodyText\">This query introduces the OrderBy and Select New operators. If you&#8217;ve had any exposure to SQL then this is very easy to understand, and even if you have no SQL experience its still easy to see what this query will return; a sequence of data objects where roomNumber is &lt; 10, ordered by Class\/Course numbers descending. What isn&#8217;t obvious is that &#8220;Select New&#8221; is only returning the class.ClassNumber, class.CourseNumber, and\u00a0 class.RoomNumber columns.<\/p>\n<p class=\"BodyText\">There are many more features provided for in the new LINQ to FILE provider, here is a complete list of operators that the LINQ to File provider implements:<\/p>\n<ul>\n<li> Where<\/li>\n<li> Select<\/li>\n<li> SelectMany<\/li>\n<li> OrderBy\/OrderByDescending<\/li>\n<li> ThenBy\/ThenByDescending<\/li>\n<li> GroupBy<\/li>\n<li> Join (inner)<\/li>\n<li> GroupJoin (left)<\/li>\n<li> Sum<\/li>\n<li> Average<\/li>\n<li> Min\/Max<\/li>\n<li> Count\/LongCount<\/li>\n<li> DefaultIfEmpty (usually used to provide &#8220;flat&#8221; left join)<\/li>\n<li> Skip<\/li>\n<li> Take<\/li>\n<li> First\/FirstOrDefault<\/li>\n<li> Last\/LastOrDefault<\/li>\n<li> ElementAt\/ElementAtOrDefault<\/li>\n<li> Single\/SingleOrDefault<\/li>\n<li> TakeWhile<\/li>\n<li> SkipWhile<\/li>\n<\/ul>\n<p class=\"BodyText\">\n<p class=\"BodyText\">Certainly you can already write your own code and define your own Views to provide the same\u00a0 functionality, but with LINQ you don&#8217;t have to.\u00a0 Besides a very simple and elegant syntax, the LINQ To FILE Provider is fast.\u00a0 In our testing comparing the LINQ to FILE Provider to our plain LINQ to FILE, and to a standard VIEW structure, the tests showed the LINQ to FILE Provider was often more then twice as fast as a standard VIEW, and it always provided at least equivalent performance..<\/p>\n<p class=\"BodyText\">If all the LINQ to FILE Provider did was implement great query functionality it would be very powerful and very useful.\u00a0 But it does much more, under the covers it implements equivalent functionality to the ABC library, except in this case its a managed code equivalent to the ABC library functionality. In a future article we&#8217;ll take a look at how we work with auto-incrementing, Insert\/Update and Delete(s), and maintaining RI relations using the new LINQ to FILE Provider.<\/p>\n<p>LINQ-style data access is available for all 3 .Net platforms (Winform, WebForm and Mobile). LINQ in general, and the new LINQ to FILE provider are key parts to the new templates for .Net code generation. And while you won&#8217;t need to write LINQ queries,<span style=\"color: #993300;\"> (you&#8217;ll construct them visually and the templates will generate Dictionary related RI\/AutoInc\/CRUD statements for you)<\/span> its still nice to know how easy it will be to create your own queries.<\/p>\n<p>I&#8217;ll be doing a couple sessions on LINQ-style data access and the new LINQ to FILE provider at the upcoming Aussie DevCon, and I&#8217;ll be demonstrating how this technology fits into our code generation architecture using the new .Net templates.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Language Integrated Query (or LINQ, pronounced \u201clink\u201d for short), is a set of .NET technologies that provide built-in language querying functionality similar to SQL, not only for database access, but for accessing data from just about any source.\u00a0 Simply put LINQ is a set of language changes and API&#8217;s that allow you to write SQL-like &hellip; <a href=\"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">LINQ to FILE Provider<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,7],"tags":[],"class_list":["post-206","post","type-post","status-publish","format-standard","hentry","category-clarionnews","category-clarionsharp"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>LINQ to FILE Provider - Clarion<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"LINQ to FILE Provider - Clarion\" \/>\n<meta property=\"og:description\" content=\"Language Integrated Query (or LINQ, pronounced \u201clink\u201d for short), is a set of .NET technologies that provide built-in language querying functionality similar to SQL, not only for database access, but for accessing data from just about any source.\u00a0 Simply put LINQ is a set of language changes and API&#8217;s that allow you to write SQL-like &hellip; Continue reading LINQ to FILE Provider &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/\" \/>\n<meta property=\"og:site_name\" content=\"Clarion\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/softvelocity\/\" \/>\n<meta property=\"article:published_time\" content=\"2009-09-04T16:15:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-04-04T13:54:59+00:00\" \/>\n<meta name=\"author\" content=\"rzaunere\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"rzaunere\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/\"},\"author\":{\"name\":\"rzaunere\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/person\\\/b90e860529aea05ad064cf2687697ce3\"},\"headline\":\"LINQ to FILE Provider\",\"datePublished\":\"2009-09-04T16:15:28+00:00\",\"dateModified\":\"2019-04-04T13:54:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/\"},\"wordCount\":905,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\"},\"articleSection\":[\"Clarion News\",\"Clarion.Net\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/\",\"name\":\"LINQ to FILE Provider - Clarion\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#website\"},\"datePublished\":\"2009-09-04T16:15:28+00:00\",\"dateModified\":\"2019-04-04T13:54:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/linq-to-file-provider\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"LINQ to FILE Provider\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\",\"name\":\"Clarion\",\"description\":\"Deliver your software on time, every time\",\"publisher\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\",\"name\":\"SoftVelocity\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/svlogonew57.png\",\"contentUrl\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/svlogonew57.png\",\"width\":221,\"height\":57,\"caption\":\"SoftVelocity\"},\"image\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/softvelocity\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/SoftVelocity\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/person\\\/b90e860529aea05ad064cf2687697ce3\",\"name\":\"rzaunere\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g\",\"caption\":\"rzaunere\"},\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/author\\\/rzaunere\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"LINQ to FILE Provider - Clarion","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/","og_locale":"en_US","og_type":"article","og_title":"LINQ to FILE Provider - Clarion","og_description":"Language Integrated Query (or LINQ, pronounced \u201clink\u201d for short), is a set of .NET technologies that provide built-in language querying functionality similar to SQL, not only for database access, but for accessing data from just about any source.\u00a0 Simply put LINQ is a set of language changes and API&#8217;s that allow you to write SQL-like &hellip; Continue reading LINQ to FILE Provider &rarr;","og_url":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/","og_site_name":"Clarion","article_publisher":"https:\/\/www.facebook.com\/softvelocity\/","article_published_time":"2009-09-04T16:15:28+00:00","article_modified_time":"2019-04-04T13:54:59+00:00","author":"rzaunere","twitter_card":"summary_large_image","twitter_misc":{"Written by":"rzaunere","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/#article","isPartOf":{"@id":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/"},"author":{"name":"rzaunere","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/person\/b90e860529aea05ad064cf2687697ce3"},"headline":"LINQ to FILE Provider","datePublished":"2009-09-04T16:15:28+00:00","dateModified":"2019-04-04T13:54:59+00:00","mainEntityOfPage":{"@id":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/"},"wordCount":905,"commentCount":4,"publisher":{"@id":"https:\/\/clarionsharp.com\/blog\/#organization"},"articleSection":["Clarion News","Clarion.Net"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/","url":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/","name":"LINQ to FILE Provider - Clarion","isPartOf":{"@id":"https:\/\/clarionsharp.com\/blog\/#website"},"datePublished":"2009-09-04T16:15:28+00:00","dateModified":"2019-04-04T13:54:59+00:00","breadcrumb":{"@id":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/clarionsharp.com\/blog\/linq-to-file-provider\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/clarionsharp.com\/blog\/"},{"@type":"ListItem","position":2,"name":"LINQ to FILE Provider"}]},{"@type":"WebSite","@id":"https:\/\/clarionsharp.com\/blog\/#website","url":"https:\/\/clarionsharp.com\/blog\/","name":"Clarion","description":"Deliver your software on time, every time","publisher":{"@id":"https:\/\/clarionsharp.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/clarionsharp.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/clarionsharp.com\/blog\/#organization","name":"SoftVelocity","url":"https:\/\/clarionsharp.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2019\/03\/svlogonew57.png","contentUrl":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2019\/03\/svlogonew57.png","width":221,"height":57,"caption":"SoftVelocity"},"image":{"@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/softvelocity\/","https:\/\/www.youtube.com\/user\/SoftVelocity"]},{"@type":"Person","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/person\/b90e860529aea05ad064cf2687697ce3","name":"rzaunere","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g","caption":"rzaunere"},"url":"https:\/\/clarionsharp.com\/blog\/author\/rzaunere\/"}]}},"_links":{"self":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/comments?post=206"}],"version-history":[{"count":3,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/206\/revisions"}],"predecessor-version":[{"id":1713,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/206\/revisions\/1713"}],"wp:attachment":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/media?parent=206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/categories?post=206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/tags?post=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}