{"id":3195,"date":"2016-11-29T14:25:57","date_gmt":"2016-11-29T14:25:57","guid":{"rendered":"http:\/\/www.blopig.com\/blog\/?p=3195"},"modified":"2016-12-11T20:11:20","modified_gmt":"2016-12-11T20:11:20","slug":"how-to-calculate-plifs-using-rdkit-and-plip","status":"publish","type":"post","link":"https:\/\/www.blopig.com\/blog\/2016\/11\/how-to-calculate-plifs-using-rdkit-and-plip\/","title":{"rendered":"How to Calculate PLIFs Using RDKit and PLIP"},"content":{"rendered":"<p>Protein-Ligand interaction fingerprints (PLIFs) are becoming more widely used to compare small molecules in the context of a protein target. A fingerprint is a bit vector that is used to represent a small molecule. Fingerprints of molecules can then be compared to determine the similarity between two molecules. Rather than using the features of the ligand to build the fingerprint, a PLIF is based on the interactions between the protein and the small molecule. The conventional method of building a PLIF is that each bit of the bit vector represents a residue in the binding pocket of the protein. The bit is set to 1 if the molecule forms an interaction with the residue, whereas it is set to 0 if it does not.<\/p>\n<p>Constructing a PLIF therefore consists of two parts:<\/p>\n<ol>\n<li>Calculating the interactions formed by a small molecule from the target<\/li>\n<li>Collating this information into a bit vector.<\/li>\n<\/ol>\n<p>Step 1 can be achieved by using the<a href=\"http:\/\/nar.oxfordjournals.org\/content\/early\/2015\/04\/14\/nar.gkv315\"> Protein-Ligand Interaction Profiler (PLIP)<\/a>. PLIP is an easy-to-use tool, that given a pdb file will calculate the interactions between the ligand and protein. This can be done using the <a href=\"https:\/\/projects.biotec.tu-dresden.de\/plip-web\/plip\/\">online web-tool<\/a> or alternatively using the command-line tool. Six different interaction types are calculated: hydrophobic, hydrogen-bonds, water-mediated hydrogen bonds, salt bridges, pi-pi and pi-cation. The command-line version outputs an xml report file containing all the information required to construct a PLIF.<\/p>\n<p>Step 2 involves manipulating the output of the report file into a bit vector. <a href=\"http:\/\/www.rdkit.org\/\">RDKit<\/a> is an amazingly useful Cheminformatics toolkit with great documentation. By reading the PLIF into an RDKit bit vector this allows the vector to be manipulated as an RDKit fingerprint. The fingerprints can then be compared using RDKit functionality very easily, for example, using Tanimoto Similarity.<\/p>\n<p><strong>EXAMPLE:<\/strong><\/p>\n<p>Let&#8217;s take 3 pdb files as an example. Fragment screening data from the SGC is a great sort of data for this analysis, as it contains lots of pdb structures of small hits bound to the same target. The data can be found <a href=\"http:\/\/www.thesgc.org\/fragment-screening\">here<\/a>. For this example I will use 3 protein-ligand complexes from the BRD1 dataset: BRD1A-m004.pdb, BRD1A-m006.pdb and BRD1A-m009.pdb.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2016\/11\/BRD1_SGC-e1480429128687.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-3197\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2016\/11\/BRD1_SGC-e1480429128687-300x296.png?resize=300%2C296&#038;ssl=1\" alt=\"brd1_sgc\" width=\"300\" height=\"296\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2016\/11\/BRD1_SGC-e1480429128687.png?resize=300%2C296&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2016\/11\/BRD1_SGC-e1480429128687.png?resize=768%2C758&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2016\/11\/BRD1_SGC-e1480429128687.png?resize=624%2C616&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2016\/11\/BRD1_SGC-e1480429128687.png?w=773&amp;ssl=1 773w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><strong>1.PLIP<\/strong> First we need to run plip to generate a report file for each protein-ligand complex. This is done using:<\/p>\n<hr \/>\n<p><code><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center\">plipcmd -f BRD1A-m004.pdb -o m004 -x<\/p>\n<p style=\"text-align: center\">plipcmd -f BRD1A-m006.pdb -o m006 -x<\/p>\n<p style=\"text-align: center\">plipcmd -f BRD1A-m009.pdb -o m009 -x<\/p>\n<p>&nbsp;<\/p>\n<p><\/code><\/p>\n<hr \/>\n<p>A report file (&#8216;report.xml&#8217;) is created for each pdb file within the directory m004, m006 and m009.<\/p>\n<p><strong>2. Get Interactions:<\/strong> Using a python script the results of the report can be collated using the function &#8220;generate_plif_lists&#8221; (shown below) on each report file. The function takes in the report file name, and the residues already found to be in the binding site (residue_list). &#8220;residue_list&#8221; must be updated for each molecule to be compared as the residues used to define the binding site can vary betwen each report file. The function then returns the updated &#8220;residue_list&#8221;, as well as a list of residues found to interact with the ligand: &#8220;plif_list_all&#8221;.<\/p>\n<p>&nbsp;<\/p>\n<p><code><\/p>\n<hr \/>\n<p class=\"p1\"><span class=\"s1\">import<\/span><span class=\"s2\"> xml.etree.ElementTree <\/span><span class=\"s1\">as<\/span><span class=\"s2\"> ET<\/span><\/p>\n<h6 class=\"p1\">################################################################################<\/h6>\n<p class=\"p1\"><span class=\"s1\">def<\/span><span class=\"s2\"> generate_plif_lists(report_file, residue_list, lig_ident):<\/span><\/p>\n<p class=\"p3\"><span class=\"s3\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span><\/span><span class=\"s2\">#uses report.xml from PLIP to return list of interacting residues and update list of residues in binding site<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>plif_list_all = []<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>tree = ET.parse(report_file)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span>root = tree.getroot()<\/span><\/p>\n<p class=\"p3\"><span class=\"s3\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s2\">#list of residue keys that form an interaction<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">for<\/span><span class=\"s2\"> binding_site <\/span><span class=\"s1\">in<\/span><span class=\"s2\"> root.findall(<\/span><span class=\"s4\">'bindingsite'<\/span><span class=\"s2\">):<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>nest = binding_site.find(<\/span><span class=\"s4\">'identifiers'<\/span><span class=\"s2\">)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>lig_code = nest.find(<\/span><span class=\"s4\">'hetid'<\/span><span class=\"s2\">)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">if<\/span><span class=\"s2\"> str(lig_code.text) == str(lig_ident):<\/span><\/p>\n<p class=\"p3\"><span class=\"s3\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s2\">#get the plifs stuff here<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>nest_residue = binding_site.find(<\/span><span class=\"s4\">'bs_residues'<\/span><span class=\"s2\">)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>residue_list_tree = nest_residue.findall(<\/span><span class=\"s4\">'bs_residue'<\/span><span class=\"s2\">)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">for<\/span><span class=\"s2\"> residue <\/span><span class=\"s1\">in<\/span><span class=\"s2\"> residue_list_tree:<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>res_id = residue.text<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>dict_res_temp = residue.attrib<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">if<\/span><span class=\"s2\"> res_id <\/span><span class=\"s1\">not<\/span> <span class=\"s1\">in<\/span><span class=\"s2\"> residue_list:<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>residue_list.append(res_id)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">if<\/span><span class=\"s2\"> dict_res_temp[<\/span><span class=\"s4\">'contact'<\/span><span class=\"s2\">] == <\/span><span class=\"s4\">'True'<\/span><span class=\"s2\">:<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">if<\/span><span class=\"s2\"> res_id <\/span><span class=\"s1\">not<\/span> <span class=\"s1\">in<\/span><span class=\"s2\"> plif_list_all:<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>plif_list_all.append(res_id)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">return<\/span><span class=\"s2\"> plif_list_all, residue_list<\/span><\/p>\n<h6 class=\"p1\">###############################################################################<\/h6>\n<p class=\"p1\"><span class=\"s1\">plif_list_m006, residue_list = generate_plif_lists(<\/span><span class=\"s2\">'m006\/report.xml'<\/span><span class=\"s1\">,residue_list, <\/span><span class=\"s2\">'LIG'<\/span><span class=\"s1\">)<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">plif_list_m009, residue_list = generate_plif_lists(<\/span><span class=\"s2\">'m009\/report.xml'<\/span><span class=\"s1\">, residue_list, <\/span><span class=\"s2\">'LIG'<\/span><span class=\"s1\">)<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">plif_list_m004, residue_list = generate_plif_lists(<\/span><span class=\"s2\">'m004\/report.xml'<\/span><span class=\"s1\">, residue_list, <\/span><span class=\"s2\">'LIG'<\/span><span class=\"s1\">)<\/span><\/p>\n<p><\/code><\/p>\n<hr \/>\n<p><strong>3. Read Into RDKit:<\/strong> Now we have the list of binding site residues and which residues are interacting with the ligand a PLIF can be generated. This is done using the function shown below (&#8220;generate_rdkit_plif&#8221;):<\/p>\n<hr \/>\n<p><code><\/p>\n<p class=\"p1\"><span class=\"s1\">from<\/span><span class=\"s2\"> rdkit <\/span><span class=\"s1\">import<\/span><span class=\"s2\"> Chem,<span class=\"Apple-converted-space\">\u00a0 <\/span>DataStructs<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">from<\/span><span class=\"s2\"> rdkit.DataStructs <\/span><span class=\"s1\">import<\/span><span class=\"s2\"> cDataStructs<\/span><\/p>\n<h6 class=\"p1\">################################################################################<\/h6>\n<p class=\"p1\"><span class=\"s1\">def<\/span><span class=\"s2\"> generate_rdkit_plif(residue_list, plif_list_all):<\/span><\/p>\n<p class=\"p3\"><span class=\"s3\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span><\/span><span class=\"s2\">#generates RDKit plif given list of residues in binding site and list of interacting residues<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>plif_rdkit = DataStructs.ExplicitBitVect(len(residue_list), False)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span><\/span><span class=\"s1\">for<\/span><span class=\"s2\"> index, res <\/span><span class=\"s1\">in<\/span><span class=\"s2\"> enumerate(residue_list):<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">if<\/span><span class=\"s2\"> res <\/span><span class=\"s1\">in<\/span><span class=\"s2\"> plif_list_all:<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">print<\/span> <span class=\"s4\">'here'<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span>plif_rdkit.SetBit(index)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">else<\/span><span class=\"s2\">:<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><\/span><span class=\"s1\">continue<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span><\/span><span class=\"s1\">return<\/span><span class=\"s2\"> plif_rdkit<\/span><\/p>\n<h6 class=\"p1\">#########################################################################<\/h6>\n<p class=\"p1\"><span class=\"s1\">plif_m006 = generate_rdkit_plif(residue_list, plif_list_m006)<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">plif_m009 = generate_rdkit_plif(residue_list, plif_list_m009)<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">plif_m004 = generate_rdkit_plif(residue_list, plif_list_m004)<\/span><\/p>\n<p><\/code><\/p>\n<hr \/>\n<p><strong>4. Play!<\/strong> These PLIFs can now be compared using RDKit functionality. For example the Tanimoto similarity between the ligands can be computed:<\/p>\n<hr \/>\n<p><code><\/p>\n<p class=\"p1\"><span class=\"s1\">def<\/span><span class=\"s2\"> similarity_plifs(plif_1, plif_2):<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>sim = DataStructs.TanimotoSimilarity(plif_1, plif_2)<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span><\/span><span class=\"s1\">print<\/span><span class=\"s2\"> sim<\/span><\/p>\n<p class=\"p1\"><span class=\"s2\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span><\/span><span class=\"s1\">return<\/span><span class=\"s2\"> sim <\/span><\/p>\n<h6 class=\"p1\">###################################################################<\/h6>\n<p class=\"p1\"><span class=\"s1\">print<\/span><span class=\"s2\"> similarity_plifs(plif_m006, plif_m009)<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">print<\/span><span class=\"s2\"> similarity_plifs(plif_m006, plif_m004)<\/span><\/p>\n<p class=\"p1\"><span class=\"s1\">print<\/span><span class=\"s2\"> similarity_plifs(plif_m009, plif_m004)<\/span><\/p>\n<p><\/code><\/p>\n<hr \/>\n<p>The output is: 0.2, 0.5, 0.0.<\/p>\n<p>All files used to generate the PLIFs cound be found <a href=\"https:\/\/drive.google.com\/drive\/folders\/0ByH_C7wy5NuPMFVTbmxsU0doTXc?usp=sharing\">here.<\/a> Happy PLIF-making!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Protein-Ligand interaction fingerprints (PLIFs) are becoming more widely used to compare small molecules in the context of a protein target. A fingerprint is a bit vector that is used to represent a small molecule. Fingerprints of molecules can then be compared to determine the similarity between two molecules. Rather than using the features of the [&hellip;]<\/p>\n","protected":false},"author":33,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","wikipediapreview_detectlinks":true,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[29,10,14],"tags":[],"ppma_author":[521],"class_list":["post-3195","post","type-post","status-publish","format-standard","hentry","category-code","category-groupmeetings","category-howto"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"authors":[{"term_id":521,"user_id":33,"is_guest":0,"slug":"hannahpatel","display_name":"Hannah Patel","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/475fce49714d9af7623be7dafe4a36b34bbcc765845293c995c7def372b15846?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/3195","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/comments?post=3195"}],"version-history":[{"count":14,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/3195\/revisions"}],"predecessor-version":[{"id":3232,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/3195\/revisions\/3232"}],"wp:attachment":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/media?parent=3195"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/categories?post=3195"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/tags?post=3195"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=3195"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}