{"id":71308,"date":"2020-01-09T17:41:01","date_gmt":"2020-01-09T12:11:01","guid":{"rendered":"https:\/\/www.vskills.in\/certification\/tutorial\/?p=71308"},"modified":"2024-04-12T14:13:23","modified_gmt":"2024-04-12T08:43:23","slug":"bdd","status":"publish","type":"page","link":"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/","title":{"rendered":"BDD"},"content":{"rendered":"<h1><strong>Learning BDD<\/strong><\/h1>\n<p>In software engineering, behavior-driven development (BDD) is a software development process that emerged from test-driven development (TDD). Behavior-driven development combines the general techniques and principles of TDD with ideas from domain-driven design and object-oriented analysis and design to provide software development and management teams with shared tools and a shared process to collaborate on software development.<\/p>\n<p>BDD is largely facilitated through the use of a simple domain-specific language (DSL) using natural language constructs (e.g., English like sentences) that can express the behavior and expects outcomes. Test scripts have long been a popular application of DSLs with varying degrees of sophistication.<\/p>\n<p>Cucumber is a behavior-driven development (BDD) acceptance test framework<\/p>\n<ul>\n<li>First of all, Capybara, Acceptance test framework for Ruby web applications<\/li>\n<li>Secondly, Behat, BDD acceptance framework for PHP<\/li>\n<li>Subsequently, Lettuce, BDD acceptance framework for Python<\/li>\n<\/ul>\n<h2><strong>History<\/strong><\/h2>\n<p>Behavior-driven development is an extension of test-driven development: development that leverages a simple, domain-specific scripting language. These DSLs convert structured natural language statements into executable tests. The result is a closer relationship to acceptance criteria for a given function and the tests used to validate that functionality. As such it is a natural extension of TDD testing in general.<\/p>\n<p>BDD focused on:<\/p>\n<ul>\n<li>Firstly, Where to start in the process<\/li>\n<li>Secondly, What to test and what not to test<\/li>\n<li>Subsequently, How much to test in one go<\/li>\n<li>In addition, What to call the tests<\/li>\n<li>Lastly, How to understand why a test fails<\/li>\n<\/ul>\n<h2><strong>Principles of BDD<\/strong><\/h2>\n<p>At its core, behavior-driven development is a specialized form of Hoare logic applied to test-driven development which focuses on behavioral specification of software units using the Domain Language of the situation.<\/p>\n<p>Test-driven development is a software development methodology which essentially states that for each unit of software, a software developer must:<\/p>\n<ul>\n<li>First of all, define a test set for the unit first;<\/li>\n<li>Secondly, implement the unit;<\/li>\n<li>Finally, verify that the implementation of the unit makes the tests succeed.<\/li>\n<\/ul>\n<p>This definition is rather non-specific in that it allows tests in terms of high-level software requirements, low-level technical details or anything in between. One way of looking at BDD therefore, is that it is a continued development of TDD which makes more specific choices than TDD.<\/p>\n<h2><strong>Behavioural specifications<\/strong><\/h2>\n<p>Following this fundamental choice, a second choice made by BDD relates to how the desired behavior should be specified. In this area BDD chooses to use a semi-formal format for behavioral specification which is borrowed from user story specifications from the field of object-oriented analysis and design.\u00a0 Each user story should, in some way, follow the following structure:<\/p>\n<p>Title: The story should have a clear, explicit title.<\/p>\n<h3><strong>Narrative<\/strong><\/h3>\n<p>A short, introductory section that specifies<\/p>\n<ul>\n<li>Firstly, who (which business or project role) is the driver or primary stakeholder of the story (the actor who derives business benefit from the story)<\/li>\n<li>Secondly, what effect the stakeholder wants the story to have<\/li>\n<li>Subsequently, what business value the stakeholder will derive from this effect<\/li>\n<\/ul>\n<h3><strong>Acceptance criteria or scenarios<\/strong><\/h3>\n<p>a description of each specific case of the narrative. Such a scenario has the following structure:<\/p>\n<ul>\n<li>First of all, It starts by specifying the initial condition that is assumed to be true at the beginning of the scenario. This may consist of a single clause, or several.<\/li>\n<li>Subsequently, It then states which event triggers the start of the scenario.<\/li>\n<li>Lastly, it states the expected outcome, in one or more clauses.<\/li>\n<\/ul>\n<p>A very brief example of this format might look like this:<\/p>\n<p>Story: Returns go to stock<\/p>\n<p>In order to keep track of stock<\/p>\n<p>As a store owner<\/p>\n<p>I want to add items back to stock when they&#8217;re returned<\/p>\n<p>Scenario 1: Refunded items should be returned to stock<\/p>\n<p>Given a customer previously bought a black sweater from me<\/p>\n<p>And I currently have three black sweaters left in stock<\/p>\n<p>When he returns the sweater for a refund<\/p>\n<p>Then I should have four black sweaters in stock<\/p>\n<p>Scenario 2: Replaced items should be returned to stock<\/p>\n<p>Given that a customer buys a blue garment<\/p>\n<p>And I have two blue garments in stock<\/p>\n<p>And three black garments in stock.<\/p>\n<p>When he returns the garment for a replacement in black,<\/p>\n<p>Then I should have three blue garments in stock<\/p>\n<p>And two black garments in stock<\/p>\n<p>This format is referred to as the Gherkin language, which has a syntax similar to the above example. The term Gherkin, however, is specific to the Cucumber, JBehave and Behat software tools.<\/p>\n<h3><strong>Specification as a ubiquitous language<\/strong><\/h3>\n<p>Behavior-driven development borrows the concept of the ubiquitous language from domain driven design. A ubiquitous language is a (semi-)formal language that is shared by all members of a software development team \u2014 both software developers and non-technical personnel.\u00a0 In this way BDD becomes a vehicle for communication between all the different roles in a software project.<\/p>\n<p>The example given above establishes a user story for a software system under development. This user story identifies a stakeholder, a business effect and a business value. It also describes several scenarios, each with a precondition, trigger and expected outcome.<\/p>\n<h2><strong>Specialized Tooling Support<\/strong><\/h2>\n<p>Much like test-driven design practise, behavior-driven development assumes the use of specialized support tooling in a project. Inasmuch as BDD is, in many respects, a more specific version of TDD, the tooling for BDD is similar to that for TDD, but makes more demands on the developer than basic TDD tooling.<\/p>\n<h3><strong>Tooling principles<\/strong><\/h3>\n<p>In principle, a BDD support tool is a testing framework for software, much like the tools that support TDD. However, where TDD tools tend to be quite free-format in what is allowed for specifying tests, BDD tools are linked to the definition of the ubiquitous language discussed earlier.\u00a0The exact implementation of this varies per tool, but agile practice has come up with the following general process:<\/p>\n<ul>\n<li>To begin with, the tooling reads a specification document.<\/li>\n<li>Secondly, the tooling directly understands completely formal parts of the ubiquitous language (such as the Given keyword in the example above). Based on this, the tool breaks each scenario up into meaningful clauses.<\/li>\n<li>Subsequently, each individual clause in a scenario is transformed into some sort of parameter for a test for the user story. This part requires project-specific work by the software developers.<\/li>\n<li>Lastly, the framework then executes the test for each scenario, with the parameters from that scenario.<\/li>\n<\/ul>\n<h3><strong>Tooling examples<\/strong><\/h3>\n<p>There are several different examples of BDD software tools in use in projects today, for different platforms and programming languages.<\/p>\n<p>Possibly the most well-known is JBehave, which was developed by Dan North. The following is an example taken from that project:<\/p>\n<p>Consider an implementation of the Game of Life. A domain expert (or business analyst) might want to specify what should happen when someone is setting up a starting configuration of the game grid. To do this, he might want to give an example of a number of steps taken by a person who is toggling cells. Skipping over the narrative part, he might do this by writing up the following scenario into a plain text document (which is the type of input document that JBehave reads)<\/p>\n<p>Given a 5 by 5 game<\/p>\n<p>When I toggle the cell at (3, 2)<\/p>\n<p>Then the grid should look like<\/p>\n<p>&#8230;..<\/p>\n<p>&#8230;..<\/p>\n<p>&#8230;..<\/p>\n<p>..X..<\/p>\n<p>&#8230;..<\/p>\n<p>When I toggle the cell at (3, 1)<\/p>\n<p>Then the grid should look like<\/p>\n<p>&#8230;..<\/p>\n<p>&#8230;..<\/p>\n<p>&#8230;..<\/p>\n<p>..X..<\/p>\n<p>..X..<\/p>\n<p>When I toggle the cell at (3, 2)<\/p>\n<p>Then the grid should look like<\/p>\n<p>&#8230;..<\/p>\n<p>&#8230;..<\/p>\n<p>&#8230;..<\/p>\n<p>&#8230;..<\/p>\n<p>..X..<\/p>\n<p>The bold print is not actually part of the input; it is included here to show which words are recognized as formal language.This code must be written by the developers in the project team (in Java, because that is the platform JBehave is based on). In this case, the code might look like this<\/p>\n<p>private Game game;<\/p>\n<p>private StringRenderer renderer;<\/p>\n<p>@Given(&#8220;a $width by $height game&#8221;)<\/p>\n<p>public void theGameIsRunning(int width, int height) {<\/p>\n<p>game = new Game(width, height);<\/p>\n<p>renderer = new StringRenderer();<\/p>\n<p>game.setObserver(renderer);<\/p>\n<p>}<\/p>\n<p>@When(&#8220;I toggle the cell at ($column, $row)&#8221;)<\/p>\n<p>public void iToggleTheCellAt(int column, int row) {<\/p>\n<p>game.toggleCellAt(column, row);<\/p>\n<p>}<\/p>\n<p>@Then(&#8220;the grid should look like $grid&#8221;)<\/p>\n<p>public void theGridShouldLookLike(String grid) {<\/p>\n<p>assertThat(renderer.asString(), equalTo(grid));<\/p>\n<p>}<\/p>\n<p>The code has a method for every type of clause in a scenario. JBehave will identify which method goes with which clause through the use of annotations and will call each method in order while running through the scenario. The test code provides an implementation for each clause type in a scenario which interacts with the code that tests and performs an actual test based on the scenario. In this case<\/p>\n<ul>\n<li>Firstly, the theGameIsRunning method reacts to a Given clause by setting up the initial game grid.<\/li>\n<li>Subsequently, the iToggleTheCellAt method reacts to a When clause by firing off the toggle event described in the clause.<\/li>\n<li>Lastly, the theGridShouldLookLike method reacts to a Then clause by comparing the actual state of the game grid to the expected state from the scenario.<\/li>\n<\/ul>\n<h4><strong>Story versus specification<\/strong><\/h4>\n<p>A separate subcategory of behavior-driven development forms tools that use specifications as an input language rather than user stories. Specification tools don&#8217;t use user stories as an input format for test scenarios but rather use functional specifications for units that are being tested. These specifications often have a more technical nature than user stories and are usually less convenient for communication with business personnel than are user stories. An example of a specification for a stack might look like this<\/p>\n<p>Specification: Stack<\/p>\n<p>When a new stack is created<\/p>\n<p>Then it is empty<\/p>\n<p>When an element is added to the stack<\/p>\n<p>Then that element is at the top of the stack<\/p>\n<p>When a stack has N elements<\/p>\n<p>And element E is on top of the stack<\/p>\n<p>Then a pop operation returns E<\/p>\n<p>And the new size of the stack is N-1<\/p>\n<p>Since they are seen as alternatives to basic unit testing tools like JUnit, these tools tend to favor forgoing the separation of story and testing code and prefer embedding the specification directly in the test code instead. For example, an RSpec test for a hashtable might look like this<\/p>\n<p>describe Hash do<\/p>\n<p>let(:hash) { Hash[:hello, &#8216;world&#8217;] }<\/p>\n<p>it { expect(Hash.new).to eq({}) }<\/p>\n<p>it &#8220;hashes the correct information in a key&#8221; do<\/p>\n<p>expect(hash[:hello]).to eq(&#8216;world&#8217;)<\/p>\n<p>end<\/p>\n<p>it &#8216;includes key&#8217; do<\/p>\n<p>hash.keys.include?(:hello).should be true<\/p>\n<p>end<\/p>\n<p>end<\/p>\n<p>This example shows a specification in readable language embedded in executable code. In this case a choice of the tool is to formalize the specification language into the language of the test code by adding methods named it and should.<\/p>\n<p>The result of test will be:<\/p>\n<p>Hash<\/p>\n<p>should eq {}<\/p>\n<p>includes key<\/p>\n<p>hashes the correct information in a key<\/p>\n<p><strong>Make your resume stand out and become a Certified Capybara Testing Professional. <a href=\"https:\/\/www.vskills.in\/practice\/index.php?route=test\/search&amp;search=capybara\">Try free practice tests here!<\/a><\/strong><\/p>\n<p><strong>A great career is just a certification away. So, practice and validate your skills to become <a href=\"https:\/\/www.vskills.in\/certification\/testing\/capybara-testing-certification\">Certified Capybara Testing Professional<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learning BDD In software engineering, behavior-driven development (BDD) is a software development process that emerged from test-driven development (TDD). Behavior-driven development combines the general techniques and principles of TDD with ideas from domain-driven design and object-oriented analysis and design to provide software development and management teams with shared tools and a shared process to collaborate&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[8248],"tags":[8256],"class_list":["post-71308","page","type-page","status-publish","hentry","category-capybara","tag-bdd"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>BDD - Vskills Tutorial<\/title>\n<meta name=\"description\" content=\"Enrich your profile with advanced learning skills and expert tutorials on BDD. Prepare and become Certified Capybara Testing Professional Now!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"BDD - Vskills Tutorial\" \/>\n<meta property=\"og:description\" content=\"Enrich your profile with advanced learning skills and expert tutorials on BDD. Prepare and become Certified Capybara Testing Professional Now!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/\" \/>\n<meta property=\"og:site_name\" content=\"Tutorial\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/vskills.in\/\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-12T08:43:23+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/\",\"name\":\"BDD - Vskills Tutorial\",\"isPartOf\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#website\"},\"datePublished\":\"2020-01-09T12:11:01+00:00\",\"dateModified\":\"2024-04-12T08:43:23+00:00\",\"description\":\"Enrich your profile with advanced learning skills and expert tutorials on BDD. Prepare and become Certified Capybara Testing Professional Now!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.vskills.in\/certification\/tutorial\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"BDD\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#website\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/\",\"name\":\"Tutorial\",\"description\":\"Vskills - A initiative in elearning and certification\",\"publisher\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.vskills.in\/certification\/tutorial\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#organization\",\"name\":\"Vskills\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.vskills.in\/certification\/tutorial\/wp-content\/uploads\/2017\/07\/vskills-min-logo.jpg\",\"contentUrl\":\"https:\/\/www.vskills.in\/certification\/tutorial\/wp-content\/uploads\/2017\/07\/vskills-min-logo.jpg\",\"width\":73,\"height\":55,\"caption\":\"Vskills\"},\"image\":{\"@id\":\"https:\/\/www.vskills.in\/certification\/tutorial\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/vskills.in\/\",\"https:\/\/x.com\/vskills_in\",\"https:\/\/www.linkedin.com\/company-beta\/1371554\/\",\"https:\/\/www.youtube.com\/channel\/UCMWnscxPwRF_PqXo9B7q_Tw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"BDD - Vskills Tutorial","description":"Enrich your profile with advanced learning skills and expert tutorials on BDD. Prepare and become Certified Capybara Testing Professional Now!","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:\/\/www.vskills.in\/certification\/tutorial\/bdd\/","og_locale":"en_US","og_type":"article","og_title":"BDD - Vskills Tutorial","og_description":"Enrich your profile with advanced learning skills and expert tutorials on BDD. Prepare and become Certified Capybara Testing Professional Now!","og_url":"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/","og_site_name":"Tutorial","article_publisher":"https:\/\/www.facebook.com\/vskills.in\/","article_modified_time":"2024-04-12T08:43:23+00:00","twitter_misc":{"Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/","url":"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/","name":"BDD - Vskills Tutorial","isPartOf":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#website"},"datePublished":"2020-01-09T12:11:01+00:00","dateModified":"2024-04-12T08:43:23+00:00","description":"Enrich your profile with advanced learning skills and expert tutorials on BDD. Prepare and become Certified Capybara Testing Professional Now!","breadcrumb":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/bdd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.vskills.in\/certification\/tutorial\/"},{"@type":"ListItem","position":2,"name":"BDD"}]},{"@type":"WebSite","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#website","url":"https:\/\/www.vskills.in\/certification\/tutorial\/","name":"Tutorial","description":"Vskills - A initiative in elearning and certification","publisher":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.vskills.in\/certification\/tutorial\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#organization","name":"Vskills","url":"https:\/\/www.vskills.in\/certification\/tutorial\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#\/schema\/logo\/image\/","url":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-content\/uploads\/2017\/07\/vskills-min-logo.jpg","contentUrl":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-content\/uploads\/2017\/07\/vskills-min-logo.jpg","width":73,"height":55,"caption":"Vskills"},"image":{"@id":"https:\/\/www.vskills.in\/certification\/tutorial\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/vskills.in\/","https:\/\/x.com\/vskills_in","https:\/\/www.linkedin.com\/company-beta\/1371554\/","https:\/\/www.youtube.com\/channel\/UCMWnscxPwRF_PqXo9B7q_Tw"]}]}},"_links":{"self":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages\/71308","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/comments?post=71308"}],"version-history":[{"count":6,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages\/71308\/revisions"}],"predecessor-version":[{"id":122818,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/pages\/71308\/revisions\/122818"}],"wp:attachment":[{"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/media?parent=71308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/categories?post=71308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vskills.in\/certification\/tutorial\/wp-json\/wp\/v2\/tags?post=71308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}