Chaperone/usher (CU) assembly pathway is used by a wide range of Enterobacteriaceae to assemble adhesive surface structures called pili or fimbriae that play a role in bacteria-host cell interactions. In silico analysis revealed that the genome of Klebsiella pneumoniae LM21 harbors eight chromosomal CU loci belonging to γκп and ϭ clusters. Of these, only two correspond to previously described operons, namely type 1 and type 3-encoding operons. Isogenic usher deletion mutants of K. pneumoniae LM21 were constructed for each locus and their role in adhesion to animal (Intestine 407) and plant ( Arabidopsis thaliana) cells, biofilm formation and murine intestinal colonization was investigated. Type 3 pili usher deleted mutant was impaired in all assays, whereas type 1 pili usher deleted mutant only showed attenuation in adhesion to plant cells and in intestinal colonization. The LM21Δ kpjC mutant was impaired in its capacity to adhere to Arabidopsis cells and to colonize the murine intestine, either alone or in co-inoculation experiments. Deletion of LM21 kpgC induced a significant decrease in biofilm formation, in adhesion to animal cells and in colonization of the mice intestine. The LM21∆ kpaC and LM21∆ kpeC mutants were only attenuated in biofilm formation and the adhesion abilities to Arabidopsis cells, respectively. No clear in vitro or in vivo effect was observed for LM21∆ kpbC and LM21∆ kpdC mutants. The multiplicity of CU loci in K. pneumoniae genome and their specific adhesion pattern probably reflect the ability of the bacteria to adhere to different substrates in its diverse ecological niches.
Bacterial adhesion to epithelial cells and abiotic surfaces is frequently mediated by diverse surface proteinaceous appendages referred to as adhesins. Gram-negative bacteria develop several fimbrial adhesins that are proteinaceous non-flagellar filaments with thin hair-like extension on the bacterial cell surface [ 1]. They are assembled by dedicated secretion systems and are composed primarily of the major repeating subunit protein with minor-subunit proteins including the adhesion subunits that enable the bacteria to specifically target a cell component or a surface [ 2]. Studies on the biochemistry and genetics of fimbrial biosynthesis have given rise to a nomenclature that distinguishes between fimbriae on the basis of their assembly mechanism [ 3]. The chaperone/usher (CU)-dependent pathway represents the most abundant secretory pathway among Gram-negative bacteria [ 3]. It is composed of a chaperone periplasmic protein and an outer membrane protein named the usher. The chaperone prevents self-aggregation of the fimbriae subunits and directs them to the usher, which in turn is involved in the secretion and correct assembly of the external fimbrial subunits [ 3]. Genes encoding the CU pathway are located on both chromosomal and plasmid molecules and are clustered with similar organization among different bacteria: an upstream region containing regulatory genes and a single downstream operon containing the required structural and assembly components. In addition, multiple CU pathways may be present in a single bacterial genome, which presumably confers the ability to adhere to a variety of different receptors and surfaces [ 4– 6]. Expression of the CU gene clusters is typically highly regulated, subject to phase variation and responsive to environmental cues [ 7]. This cross-talk probably ensures that each bacterium does not express all pilus types at a given time, enabling the control of adhesive specificity.
The CU family has been described among members of the beta-proteobacteria and in cyanobacteria [ 3, 8], but is mostly prevalent among enteric members of the γ-proteobacteria, including Escherichia coli, Salmonella and Yersinia. Klebsiella pneumoniae is a pathogenic Enterobacteriaceae that commonly causes nosocomial, increasingly multidrug resistant infections and is also emerging as a community pathogen [ 2, 9, 10]. Two classical CU fimbriae have been described in Klebsiella, type 1 and type 3-pili. By binding to mannosylated glycoproteins, type 1 pili allow bacterial adhesion to uroepithelial cells and the development of cystitis [ 11– 13]. Type 3 fimbriae mediate adhesion to several cell types in vitro such as tracheal epithelial cells, renal tubular cells, extracellular matrix proteins and the membrane of human lung tissue [ 14– 16]. In addition, both fimbriae have been associated with biofilm formation in K. pneumoniae [ 2, 17]. Recently Wu et al. [ 18] described nine fimbrial loci found in K. pneumoniae NTUH- K2044: fim, mrk, and seven other fimbrial loci called kpa to kpg. Apart from the NTUH-K2044 kpc locus, no studies have investigated the in vitro and/or in vivo role of the other K. pneumoniae accessory fimbrial potential operons [ 18].
Given the recent increase in K. pneumoniae clinical importance and its well recognized diversity of niches, we assessed the presence of CU-like genes in this pathogen by searching for genes encoding putative fimbrial usher proteins. We analyzed their distribution, genetic conservation and genetic location. We used a reverse genetics approach to further investigate adhesion and colonization phenotype associated with eight LM21 usher operon candidates and in vitro and in vivo models.
K. pneumoniae LM21 was isolated from a cutaneous wound of a patient hospitalized in a intensive care unit of the teaching hospital of Clermont-Ferrand. Its sequencing was performed by GATC Biotech (Konstanz, Germany) using Illumina technology and a 2×100 nucleotide (nt) paired-end strategy. All reads were pre-processed to remove low quality or artefactual nucleotides. First, all nucleotides occurring at 5' and 3' ends and supported by a Phred quality score < 30 were trimmed off using Sickle (
The NCBI Blast 2.28+ program was used to look for the presence of usher-like sequences in K. pneumoniae strain LM21. Usher amino acid sequences annotated in NCBI were used as initial BLASTp queries to look for the presence of CU in K. pneumoniae LM21. BLASTp searches were performed using the BLOSUM62 matrix and an E-value cut-off score of 0.1. Newly identified proteins with a reported E-value of 0 were retained, whereas hits with an E-value >0 were screened for the presence of an usher protein family domain (PFAM00577) and/or flanking chaperone (PF00345, PF02753 or COG3121) for encoding genes before they were added to the usher query list. The NCBI Conserved Domain Database (CDD) component of the NCBI Entrez query retrieval system was used to examine amino-acid sequences for conserved domain [ 24].
After each BLASTp run, the updated usher query database was used to re-probe the genome sequences until no new sequences were found. All putative usher amino-acid sequences encoded by LM21 K. pneumoniae genome were downloaded from MaGe database. They are listed in S1 Table. The presence of the eight usher encoded genes predicted by in silico analysis was verified by PCRs using primers listed in Table 1 (P1 to P16).
| P1 | LM21_ kpaC-Fw | CCGGGCACCTATCACCTG | 607 pb | Primers used to check the presence of usher LM21 kpaC |
| P2 | LM21_ kpaC-Rv | GCTTAACCGGCACGCTGG | ||
| P3 | LM21_ kpbC-Fw | GTCCTGGCGAGTTCGTTACGG | 658 pb | Primers used to check the presence of usher LM21 kpbC |
| P4 | LM21_ kpbC-Rv | CGTTGGCGCCGTAGTCGATACG | ||
| P5 | LM21_ kpdC-Fw | GAGATCGCCTGCAGCGGCAG | 568 pb | Primers used to check the presence of usher LM21 kpdC |
| P6 | LM21_ kpdC-Rv | CAGCGCTGTCCACCGTCGC | ||
| P7 | LM21_ kpeC-Fw | CCGCCAACAGCGATGATAAGCC | 509 pb | Primers used to check the presence of usher LM21 kpeC |
| P8 | LM21_ kpeC-Rv | GAACCCGCGCATCAGCGAC | ||
| P9 | LM21_ kpgC-Fw | GGTATTGACCGGCAGCGTG | 574 pb | Primers used to check the presence of usher LM21 kpgC |
| P10 | LM21_ kpgC-Rv | GCGGGCAAAGCATCGACG | ||
| P11 | LM21_ kpjC-Fw | TCTCTTTGCGAAGCCAAC | 582 pb | Primers used to check the presence of usher LM21 kpjC |
| P12 | LM21_ kpjC-Rv | CATGGATCGGGAATGGAT | ||
| P13 | LM21_ mrkC-Fw | GCCGCAAAGCGGTTGGTG | 592 pb | Primers used to check the presence of usher LM21 mrkC |
| P14 | LM21_ mrkC-Rv | CGACGCCGTTCTACATTACC | ||
| P15 | LM21_ fimC-Fw | GCTGACCCCGTAATAGAG | 475 pb | Primers used to check the presence of usher LM21 fimC |
| P16 | LM21_ fimC-Rv | CGCGCCACCCTCTATCTC | ||
| P17 | LM21_ kpa-Kana-Fw | AGCCATGACGCAGGCGCGACTGCTTCTCCCTGCCTGTCCGCGGAGTATCTGAATTCATGGGTAGGCTGGAGCTGCTTCG | 1595 pb | LM21Δ kpa isogenic mutant construction |
| P18 | LM21_ kpa-Kana-Rv | CATATCAGCCCCTCTTCCATGTTGAAAACCTGCATCCATTACCGACATTCGGCCTGATAGCATATGAATATCCTCCTTAGTTC | ||
| P19 | LM21_ kpb-Kana-Fw | AGCATAGTAGGGATAAAAAAAGAAGTATTTTTCTCATTCTTTATTGTTCCTTGGTCAATAGTAGGCTGGAGCTGCTTCG | 1595 pb | LM21Δ kpb isogenic mutant construction |
| P20 | LM21_ kpb-Kana-Rv | GATGTGTCTATGCCAAATAAGAATAATGGATTATTCAAACTATCCACCATCTTCTTTGCACATATGAATATCCTCCTTAGTTC | ||
| P21 | LM21_ kpd-Kana-Fw | TCAGGGGTACCTCTTCTGCTGGCCGGCGGGTACTGCGCTTCGCTGTCGGCAGCGTGCCAGGTAGGCTGGAGCTGCTTCG | 1595 pb | LM21Δ kpd isogenic mutant construction |
| P22 | LM21_ kpd-Kana-Rv | ACAGGAAGTTGATGTTTCCTTTACTGGCGCATGCCTGACGGCGCTGTGCCGCCAGGCAGACATATGAATATCCTCCTTAGTTC | ||
| P23 | LM21_ kpe-Kana-Fw | GCGTCAGGGCGACCCGACGCAGGAGAGTTAAAAAGGACATGATAACGTCTGCTGTAAGATGTAGGCTGGAGCTGCTTCG | 1595 pb | LM21Δ kpe isogenic mutant construction |
| P24 | LM21_ kpe-Kana-Rv | TTTGGCGCTGTGCAGACGTTTAGCGCCCCCGTTTCGGCGCACTAAGCGTCTGATGTCGCGCATATGAATATCCTCCTTAGTTC | ||
| P25 | LM21_ kpg-Kana-Fw | GCGCTCAGCCCCAGCAGAAAGAGGAAAGGAAGTAGACGAAAAACAGATTTCATAGCCGCCGTAGGCTGGAGCTGCTTCG | 1595 pb | LM21Δ kpg isogenic mutant construction |
| P26 | LM21_ kpg-Kana-Rv | AGAATAACAACAGCCAGGGTGCGGGAGTATGCCTTGTTGCCCGTTACCGCCGGGCGGGCGCATATGAATATCCTCCTTAGTTC | ||
| P27 | LM21_ kpj-Kana-Fw | ATTAATGGGTATGGAATTTTGGGTCAGTTCAATTTCAATATGAAATATGCATGCCTCTTGGTAGGCTGGAGCTGCTTCG | 1595 pb | LM21Δ kpj isogenic mutant construction |
| P28 | LM21_ kpj-Kana-Rv | ACCACTTCATTTTATTCTTCCTCGTAAGGACGGCTATTTACTTTGCTCAAGGGCGCAGAGCATATGAATATCCTCCTTAGTTC | ||
| P29 | LM21_ mrk-Kana-Fw | ATTAAGACGATAAAAAGCGTTAGTAATTTCCTCAGCGACATACGCTATCCTTTGTTGTTTGTAGGCTGGAGCTGCTTCG | 1595 pb | LM21Δ mrk isogenic mutant construction |
| P30 | LM21_ mrk-Kana-Rv | CATTAATGACTATGGCGCCGATGTCGCAGTGAAAGTGGCCGTTAAATAAGGGAAAAGCTACATATGAATATCCTCCTTAGTTC | ||
| P31 | LM21_ fim-Kana-Fw | GGGACACGCTGCGCATGACCAGAAGCAATGACAGCCGGGCAACGTCGGACCGGAGGGATAGTAGGCTGGAGCTGCTTCG | 1595 pb | LM21Δ fim isogenic mutant construction |
| P32 | LM21_ fim-Kana-Rv | GGTGCGCCCAGGGTGAACAGGGCGCCCAGCAGATACTGCAGTGTTCTCATCATGATCTCC CATATGAATATCCTCCTTAGTTC | ||
| P33 | kana-Fw | GTAGGCTGGAGCTGCTTCG | 1475 pb | Primers used to check the presence of kanamycin cassette |
| P34 | kana-Rv | CATATGAATATCCTCCTTAGTTC | ||
| P35 | LM21_ kpa-Fw | GTACGCCAACGTCTTCCGC | 2451 pb | Two-step PCR amplification to generate fragment containing kpa operon promoter fused to LM21 kpaC |
| P36 | LM21_P_ kpa-Rv | TTCCCTGACATACCATAATCATCCTGGCCGCGTTCGATAC | ||
| P37 | LM21_P_ kpa-Fw | GTATCGAACGCGGCCAGGATGATTATGGTATGTCAGGGAA | ||
| P38 | LM21_ kpa-Rv | TTACCGACATTCGGCCTG | ||
| P39 | LM21_ kpb-Fw | GGTGAAAAAGCATCTGAGC | 2661 bp | Two-step PCR amplification to generate fragment containing kpb operon promoter fused to LM21 kpbC |
| P40 | LM21_P_ kpb-Rv | CCATTATTCTTATTTGGCATCTACCGGTTTAGCACGACC | ||
| P41 | LM21_P_ kpb-Fw | GGTCGTGCTAAACCGGTAGATGCCAAATAAGAATAATGG | ||
| P42 | LM21_ kpb-Rv | TTAGCGACAAACCGTTTCG | ||
| P43 | LM21_ kpd-Fw | GAAAGCGCAGGGAGTATG | 2454 bp | Two-step PCR amplification to generate fragment containing kpd operon promoter fused to LM21 kpdC |
| P44 | LM21_P_ kpd-Rv | CTTGATCTCCCTGAGTTTCATTCAACATAATGACCTCCTGGC | ||
| P45 | LM21_P_ kpd-Fw | GCCAGGAGGTCATTATGTTGAATGAAACTCAGGGAGATCAAG | ||
| P46 | LM21_ kpd-Rv | TTACTTCTCCTTTATTCCCGG | ||
| P47 | LM21_ kpe-Fw | CTATGATGAATCCTATGCCG | 2762 bp | Two-step PCR amplification to generate fragment containing kpe operon promoter fused to LM21 kpeC |
| P48 | LM21_P_ kpe-Rv | CCGGGCCGTGGCGCATGATCGAGCTGCTTTTTCAGC | ||
| P49 | LM21_P_ kpe-Fw | GCTGAAAAAGCAGCTCGATCATGCGCCACGGCCCGG | ||
| P50 | LM21_ kpe-Rv | TTAAAAAGGACATGATAACGTC | ||
| P51 | LM21_ kpg-Fw | CTAATATCCTGCGGAAGG | 2802 pb | Two-step PCR amplification to generate fragment containing kpg operon promoter fused to LM21 kpgC |
| P52 | LM21_P_ kpg-Rv | CGCCGTCCGGTAAGCTCATTCAGGATTGATAGTGTTGGC | ||
| P53 | LM21_P_ kpg-Fw | GCCAACACTATCAATCCTGAATGAGCTTACCGGACGGCG | ||
| P54 | LM21_ kpg-Rv | TCAGCGTGTCTGGCACAG | ||
| P55 | LM21_ kpj-Fw | GCTTTAACTCGCAGAAAGG | 2927pb | Two-step PCR amplification to generate fragment containing kpj operon promoter fused to LM21 kpjC |
| P56 | LM21_P_ kpj-Rv | AATCCATCGTTGAGGCATTCAGCTGGTCCAGGTGG | ||
| P57 | LM21_P_ kpj-Fw | CCACCTGGACCAGCTGAATGCCTCAACGATGGATT | ||
| P58 | LM21_ kpj-Rv | TTAACTTTCATTCTCTTCTCCTGAC | ||
| P59 | LM21_ mrk-Fw | GCTGACCAACAAAATCATCC | 2794 pb | Two-step PCR amplification to generate fragment containing mrk operon promoter fused to LM21 mrkC |
| P60 | LM21_P_ mrk-Rv | CAGAATGACCTCTGCTTCATGCTGACCTCAGAATAAAAATACA | ||
| P61 | LM21_P_ mrk-Fw | TGTATTTTTATTCTGAGGTCAGCATGAAGCAGAGGTCATTCTG | ||
| P62 | LM21_ mrk-Rv | GCCATTAAGACGATAAAAAGC | ||
| P63 | LM21_ fim-Fw | CAAATTTTATGTTAACGACGC | 2893 pb | Two-step PCR amplification to generate fragment containing fim operon promoter fused to LM21 fimC |
| P64 | LM21_P_ fim-Rv | CCATATTTCCGATGTGACATTCATGCGCGAATATCGTC | ||
| P65 | LM21_P_ fim-Fw | GACGATATTCGCGCATGAATGTCACATCGGAAATATGG | ||
| P66 | LM21_ fim-Rv | GACGTTATCATGTCCTTTTTAA | ||
| P67 | LM21- kpa-RT-qPCR-Fw | GCTCCGACGATAAAGAATATAAC | 113 pb | Primers used for qPCR to verify the expression of kpaC |
| P68 | LM21_ kpa-RT-qPCR-Rv | CAGGTTGGTGTATTTATCTTCC | ||
| P69 | LM21_ kpb-RT-qPCR-Fw | GGTAATTATACCTCTCGCTCAC | 114 pb | Primers used for qPCR to verify the expression of kpbC |
| P70 | LM21_ kpb-RT-qPCR-Rv | GTCCCAGTAATCTTCAATCAAC | ||
| P71 | LM21_ kpd-RT-qPCR-Fw | CTGTCATTTAACGGAATCTGG | 112 pb | Primers used for qPCR to verify the expression of kpdC |
| P72 | LM21_ kpd-RT-qPCR-Rv | GCTGGGCATACAGATAATAATTG | ||
| P73 | LM21_ kpe-RT-qPCR-Fw | CAATACCATAACCTCTCGGTC | 149 pb | Primers used for qPCR to verify the expression of kpeC |
| P74 | LM21_ kpe-RT-qPCR-Rv | CGATCAAAACCTTTGCTGTAC | ||
| P75 | LM21_ kpg-RT-qPCR-Fw | GATGTCTGACGATGAAATGC | 125 pb | Primers used for qPCR to verify the expression of kpgC |
| P76 | LM21_ kpg-RT-qPCR-Rv | CAAAGGTCTCGTAGATCACATAC | ||
| P77 | LM21_ kpj-RT-qPCR-Fw | CTGATATCACGTTTGTTGACG | 121 pb | Primers used for qPCR to verify the expression of kpjC |
| P78 | LM21_ kpj-RT-qPCR-Rv | CGGGAATAAACTTCTCGATC | ||
| P79 | LM21_ mrk-RT-qPCR-Fw | CTGTGGTTTGGCGATAAC | 125 pb | Primers used for qPCR to verify the expression of mrkC |
| P80 | LM21_ mrk-RT-qPCR-Rv | CCGTAGTTAAGGTTGTTTTCAC | ||
| P81 | LM21_ fim-RT-qPCR-Fw | GAAAAACATGGGCTATTTCG | 115 pb | Primers used for qPCR to verify the expression of fimC |
| P82 | LM21_ fim-RT-qPCR-Rv | GGATTTGTTATAGAGAAAACGC | ||
| P83 | RT- gyrA-Fw | ATTGGGCAATGACTGGAACAA | 149 pb | Primers used for qPCR to verify the expression of gyrA in LM21 wild type |
| P84 | RT- gyrA-Rv | CCACCAGCATGTAACGCAG |
To define potential operon genetic organization, we visualized flanking regions of usher nucleotide sequences in xBase2 [ 25]. Fimbrial encoding genes were identified using conserved protein domain searches [ 24] and sequence homology to annotated genes. Intergenic regions >200pb were investigated for the presence of protein encoding sequences with conserved fimbrial domains or significant sequence identity to fimbrial subunits.
Publicly available K. pneumoniae genomes used for this study were those from strains HS11286, MGH 78578, NTUH-K2044, 342 (reassigned to K. variicola since genome sequencing), KCTC 2242, 1084, JM45, CG43, Kp13, 30684/NJST258_2 and 30660/NJST258_1.
Full-length usher amino acid sequences from intact fimbrial operons were used to infer evolutionary relationships. Sequences were aligned in MAFFT v6.617b [ 26, 27], using iterative global-pair refinement method with default gap penalties. The alignment was cleaned with trimal [ 28] so that every site with more than 30% of gaps or with an average similarity inferior to 0.0001 was removed.
Phylogenetic analyses were performed with PhyML 3.1 [ 29], using LG+gamma model with a 4 categories gamma law. To estimate the confidence in the tree topology, statistical aLRT-SH-like supports were computed [ 30]. Alignments and phylogenetic tree were repeated with usher sequences of previous usher phylograms [ 3] to check tree validity (data not shown).
The bacterial strains and plasmids used in the study are shown in Table 2. All bacterial strains were stored at −80°C in Lysogeny Broth (LB) medium containing 20% glycerol. When appropriate, antibiotics were added to the media at the following concentrations: ampicillin (50μg/ml), kanamycin (50μg/ml), tetracycline (20μg/ml), streptomycin (50μg/ml) and spectinomycin (50μg/ml). LB media, 0.4% glucose M63B1 minimal medium (M63B1–0.4% Glu) and Dulbecco’s modified Eagle’s medium (DMEM) were used for experiments. Bacterial growth was monitored by measuring the optical density at 620 nm (OD
| S1 | LM21 gfp | LM21 strain SHV-1:: aadA7- gfpmut3; serogroup O25, K35, Sp r | [ 64] |
| S2 | LM21 gfp/pSTAB | LM21 gfp/pSTAB; Sp r, Ap r | This study |
| S3 | LM21 gfp- Strepto/pSTAB | LM21 gfp/pSTAB; Sp r, Ap r, St r | This study |
| S4 | LM21Δ kpaC- kana | LM21 gfp Δ kpaC::KmFRT; Sp r, Km r | This study |
| S5 | LM21Δ kpbC- kana | LM21 gfp Δ kpbC::KmFRT; Sp r, Km r | This study |
| S6 | LM21Δ kpdC- kana | LM21 gfp Δ kpdC::KmFRT; Sp r, Km r | This study |
| S7 | LM21Δ kpeC-kana | LM21 gfp Δ kpeC::KmFRT; Sp r, Km r | This study |
| S8 | LM21Δk pgC- kana | LM21 gfp Δ kpgC::KmFRT; Sp r, Km r | This study |
| S9 | LM21Δ kpjC- kana | LM21 gfp Δ kpjC::KmFRT; Sp r, Km r | This study |
| S10 | LM21Δ mrkC- kana | LM21 gfp Δ mrkC::KmFRT; Sp r, Km r | This study |
| S11 | LM21Δ fimC- kana | LM21 gfp Δ fimC::KmFRT; Sp r, Km r | This study |
| S12 | LM21Δ kpaC-kana/pSTAB- kpaC | LM21 gfp Δ kpaC::KmFRT/pSTAB_ kpaC; Sp r, Ap r, Km r | This study |
| S13 | LM21Δ kpbC-kana/pSTAB- kpbC | LM21 gfp Δ kpbC::KmFRT/pSTAB_ kpbC; Sp r, Ap r, Km r | This study |
| S14 | LM21Δ kpdC-kana/pSTAB- kpdC | LM21 gfp Δ kpdC::KmFRT/pSTAB_ kpdC; Sp r, Ap r, Km r | This study |
| S15 | LM21Δ kpeC-kana/pSTAB- kpeC | LM21 gfp Δ kpeC::KmFRT/pSTAB_ kpeC; Sp r, Ap r, Km r | This study |
| S16 | LM21Δ kpgC-kana/pSTAB- kpgC | LM21 gfp Δ kpgC::KmFRT/pSTAB_ kpgC; Sp r, Ap r, Km r | This study |
| S17 | LM21Δ kpjC-kana/pSTAB- kpjC | LM21 gfp Δ kpjC::KmFRT/pSTAB_ kpjC; Sp r, Ap r, Km r | This study |
| S18 | LM21Δ mrkC-kana/pSTAB- mrkC | LM21 gfp Δ mrkC::KmFRT/pSTAB_ mrkC; Sp r, Ap r, Km r | This study |
| S19 | LM21Δ fimC-kana/pSTAB- fim | LM21 gfp Δ fimC::KmFRT/ pSTAB_ fimC, Sp r, Ap r, Km r | This study |
| S20 | LM21Δ kpaC-kana/pSTAB | LM21 gfp Δ kpaC::KmFRT/pSTAB; Sp r, Km r, Ap r, Km r | This study |
| S21 | LM21Δ kpbC-kana/pSTAB | LM21 gfp Δ kpbC::KmFRT/pSTAB; Sp r, Km r, Ap r, Km r | This study |
| S22 | LM21Δ kpdC-kana/pSTAB | LM21 gfp Δ kpdC::KmFRT/pSTAB; Sp r, Km r, Ap r, Km r | This study |
| S23 | LM21Δ kpeC- kana/pSTAB | LM21 gfp Δ kpeC::KmFRT/pSTAB; Sp r, Km r, Ap r, Km r | This study |
| S24 | LM21Δ kpgC-kana/pSTAB | LM21 gfp Δ kpgC::KmFRT/pSTAB; Sp r, Km r, Ap r, Km r | This study |
| S25 | LM21Δ kpjC-kana/pSTAB | LM21 gfp Δ kpjC::KmFRT/pSTAB; Sp r, Km r, Ap r, Km r | This study |
| S26 | LM21Δ mrkC-kana/pSTAB | LM21 gfp Δ mrkC::KmFRT/pSTAB; Sp r, Km r, Ap r, Km r | This study |
| S27 | LM21Δ fimC-kana/pSTAB | LM21 gfp Δ fimC::KmFRT/pSTAB; Sp r, Km r, Ap r, Km r | This study |
| S28 | LM21Δ kpaC-kana- Strepto/pSTAB- kpaC | LM21 gfp Δ kpaC::KmFRT/pSTAB_ kpaC; Sp r, Km r,Ap r, St r | This study |
| S29 | LM21Δ kpbC-kana- Strepto/pSTAB- kpbC | LM21 gfp Δ kpbC:: KmFRT/pSTAB_ kpbC; Sp r, Km r, Ap r, St r | This study |
| S30 | LM21Δ kpdC-kana- Strepto/pSTAB- kpdC | LM21 gfp Δ kpdC::KmFRT/pSTAB_ kpdC; Sp r, Km r, Ap r, St r | This study |
| S31 | LM21Δ kpeC-kana- Strepto/pSTAB- kpeC | LM21 gfp Δ kpeC:: KmFRT/pSTAB_ kpeC; Sp r, Km r, Ap r, St r | This study |
| S32 | LM21Δ kpgC-kana- Strepto/pSTAB- kpgC | LM21 gfp Δ kpgC:: KmFRT/pSTAB_ kpgC; Sp r, Km r, Ap r, St r | This study |
| S33 | LM21Δ kpjC-kana- Strepto/pSTAB- kpjC | LM21 gfp Δ kpjC:: KmFRT/pSTAB_ kpjC; Sp r, Km r, Ap r, St r | This study |
| S34 | LM21Δ mrkC-kana- Strepto/pSTAB- mrkC | LM21 gfp Δ mrkC:: KmFRT/pSTAB_ mrkC; Sp r, Km r, Ap r, St r | This study |
| S35 | LM21Δ fimC-kana- Strepto/pSTAB- fimC | LM21 gfp Δ fimC:: KmFRT/pSTAB_ fimC; Sp r, Km r, Ap r, St r | This study |
| S36 | LM21Δ kpaC-kana- Strepto/pSTAB | LM21 gfp Δ kpaC::KmFRT/pSTAB; Sp r, Km r, Ap r, St r | This study |
| S37 | LM21Δ kpbC-kana- Strepto/pSTAB | LM21 gfp Δ kpbC::KmFRT/pSTAB; Sp r, Km r, Ap r, St r | This study |
| S38 | LM21Δ kpdC-kana- Strepto/pSTAB | LM21 gfp Δ kpdC::KmFRT/pSTAB; Sp r, Km r, Ap r, St r | This study |
| S39 | LM21Δ kpeC-kana- Strepto/pSTAB | LM21 gfp Δ kpeC::KmFRT/pSTAB; Sp r, Km r, Ap r, St r | This study |
| S40 | LM21Δ kpgC-kana- Strepto/pSTAB | LM21 gfp Δ kpgC::KmFRT/pSTAB; Sp r, Km r, Ap r, St r | This study |
| S41 | LM21Δ kpjC-kana- Strepto/pSTAB | LM21 gfp Δ kpjC::KmFRT/pSTAB; Sp r, Km r, Ap r, St r | This study |
| S42 | LM21Δ mrkC-kana- Strepto/pSTAB | LM21 gfp Δ mrkC::KmFRT/pSTAB; Sp r, Km r, Ap r, St r | This study |
| S43 | LM21Δ fimC-kana- Strepto/pSTAB | LM21 gfp Δ fimC::KmFRT/pSTAB; Sp r, Km r, Ap r, St r | This study |
| S44 | LM21Δ kpaC | LM21 gfp Δ kpaC; Sp r | This study |
| S45 | LM21Δ kpbC | LM21 gfp Δ kpbC; Sp r | This study |
| S46 | LM21Δ kpdC | LM21 gfp Δ kpdC; Sp r | This study |
| S47 | LM21Δ kpeC | LM21 gfp Δ kpeC, Sp r | This study |
| S48 | LM21Δ kpgC | LM21 gfp Δ kpgC; Sp r | This study |
| S49 | LM21Δ kpjC | LM21 gfp Δ kpjC; Sp r | This study |
| S50 | LM21Δ mrkC | LM21 gfp Δ mrkC; Sp r | This study |
| S51 | LM21Δ fimC | LM21 gfp Δ fimC, Sp r | This study |
| S52 | LM21Δ kpaC/pSTAB- kpaC | LM21 gfp Δ kpaC/pSTAB_ kpaC; Sp r, Ap r | This study |
| S53 | LM21Δ kpbC/pSTAB- kpbC | LM21 gfp Δ kpbC/pSTAB_ kpbC; Sp r, Ap r | This study |
| S54 | LM21Δ kpdC/pSTAB- kpdC | LM21 gfp Δ kpdC/pSTAB_ kpdC; Sp r, Ap r | This study |
| S55 | LM21Δ kpeC/pSTAB- kpeC | LM21 gfp Δ kpeC/pSTAB_ kpeC; Sp r, Ap r | This study |
| S56 | LM21Δ kpgC/pSTAB- kpgC | LM21 gfp Δ kpgC/pSTAB_ kpgC; Sp r, Ap r | This study |
| S57 | LM21Δ kpjC/pSTAB- kpjC | LM21 gfp Δ kpjC/pSTAB_ kpjC; Sp r, Ap r | This study |
| S58 | LM21Δ mrkC/pSTAB- mrkC | LM21 gfp Δ mrkC/pSTAB_ mrkC; Sp r, Ap r | This study |
| S59 | LM21Δ fimC/pSTAB- fimC | LM21 gfp Δ fimC/pSTAB_ fimC; Sp r, Ap r | This study |
| S60 | LM21Δ kpaC/pSTAB | LM21 gfp Δ kpaC/pSTAB; Sp r, Ap r | This study |
| S61 | LM21Δ kpbC/pSTAB | LM21 gfp Δ kpbC/pSTAB; Sp r, Ap r | This study |
| S62 | LM21Δ kpdC/pSTAB | LM21 gfp Δ kpdC/pSTAB; Sp r, Ap r | This study |
| S63 | LM21Δ kpeC/pSTAB | LM21 gfp Δ kpeC/pSTAB; Sp r, Ap r | This study |
| S64 | LM21Δ kpgC/pSTAB | LM21 gfp Δ kpgC/pSTAB; Sp r, Ap r | This study |
| S65 | LM21Δ kpjC/pSTAB | LM21 gfp Δ kpC/pSTAB; Sp r, Ap r | This study |
| S66 | LM21Δ mrkC/pSTAB | LM21 gfp Δ mrkC/pSTAB; Sp r, Ap r | This study |
| S67 | LM21Δ fimC/pSTAB | LM21 gfp Δ fimC/pSTAB; Sp r, Ap r | This study |
| S68 | TOP10 | E. coli from invitrogen | Invitrogen |
| Plasmids | |||
| V1 | pKOBEG199 | Plasmid encoding Lambda Red recombinase protein | [ 31] |
| V2 | pKD4 | Plasmid with FRT-flanked kanamycin-resistance cassette used for kanamycin casette amplification, Km r, Ap r, Km r, | [ 33] |
| V3 | pBlunt | Used for PCR product cloning | Invitrogen |
| V4 | pSTAB | pZE derivative plamsid. Contains the flm toxin-antitoxin system from F plasmid; Ap r | Gift from J.M. Ghigo |
| V5 | pCP20 | pCP20 carries the yeast recombinase gene (FLP, aka exo), chloramphenicol and ampicillin resistant gene and temperature sensitive replication. Ap r | [ 32] |
Abbreviations: Ap, ampicillin; Km, kanamycin; St, streptomycin; Sp, spectinomycin
Primers were designed on the basis of K. pneumoniae LM21 genome sequence information. All primers used are listed in Table 1. Chromosomal DNA extraction was performed by NucleoSpin tissue kit (Macherey-Nagel) according to the manufacturer’s recommendations.
The usher-defective mutants were created by allelic exchange after replacement of the Usher encoding gene by the selectable kanamycin resistance gene according to Chaveroche et al. [ 31]. The kanamycin cassette flanked by 60-bp fragments, which correspond to the encoding upstream and downstream regions of the usher encoding gene, was generated using pKD4 plasmid as template and primers P17 to P32 ( Table 1). They were electroporated in the K. pneumoniae LM21 strain harboring the lambda-red protein-encoding plasmid pKOBEG199 under the control of a promoter induced by
PCRs were performed using a Biorad T100 Thermal cycler. Restriction enzymes, Phusion high-Fidelity DNA polymerase and TaKaRa LA Taq were purchased from New England Biolabs, Thermo Scientific and Takara Biotechnology Inc, respectively, and used according to the manufacturers’ recommendations.
For transcomplementation assays, fragments containing the entire usher-like genes and their own putative promoters, as detected by sequence analysis, were amplified from K. pneumoniae LM21 genomic DNA by an overlapping extension PCR using primers listed in Table 1 (P35 to P66). The resulting fragment was cloned using Zero Blunt PCR cloning kit (Invitrogen) and subcloned into the EcoR1 or BamH1 digested pSTAB vector. Resulting recombinant vectors (pSTAB- usher) were then introduced by electroporation into the isogenic mutants. In parallel, the LM21 wild type strain and the isogenic mutants were transformed with the empty pSTAB plasmid vector ( Table 2).
Total RNA was extracted from bacteria grown in 3 different media conditions (LB, M63B1 and DMEM), using Trizol reagent (Invitrogen) according to the method described by Toledo-Araba et al. [ 34] after lysing bacteria in the Precellys tissue homogenizer (Bertin Technologie). Reverse transcription was performed with the iScript cDNA synthesis kit (Biorad) using 1 μg of RNA on the T100 Thermal Cycler (Biorad) according to the manufacturers’ recommendations, and quantification of cDNA levels was done using the SsoAdvanced Universal SYBR Green Supermix (Biorad) on a C1000 thermal Cycler- CFX96 (Biorad) with primers P67 to P82 ( Table 1). As internal controls, the rpoB gene was amplified with primers P83/P84. Amplification of a single expected product was confirmed by melting curve analysis. The amplification efficiency (E) of the reactions for the target genes was determined and used to compare relative gene expression. The ratio = (E
The ability of bacteria to form biofilm was assessed in both a static microtiter plate and a dynamic microfermentor biofilm model. All experiments were performed in biological and technical triplicates. For the microtiter experiment measuring the early biofilm formation capacity, 4.10 6 CFU/mL of an overnight culture were inoculated into 100μl of M63B1–0.4% Glu in a 96-well PVC microtiter plate (Falcon). After 4h incubation at 37°C, bacterial cells were stained for 15 minutes at room temperature by adding 50 μl of 0.5% (wt/vol) aqueous solution of crystal violet in each well. After five washes with distilled water, the bound dye was released from stained cells using 95% ethanol and measured by absorbance at 570 nm.
Biofilm formation was performed in 60 ml aerated microfermentors to assess mature biofilm formation as described by Ghigo et al. [ 35]. Continuous flow of 100ml/h of M63B1–0.4% Glu medium and constant aeration with sterile pressed air (0.3 bar) were used. After 24h of incubation, mature biofilms formed on the removable glass slide were dislodged by vortexing and sonication and resuspended in saline. Bacterial biomass was quantified by determining the number of CFUs.
Intestine 407 (Int-407) cells derived from human embryonic intestinal epithelium were purchased from American Type Culture Collection (ATCC strain CCL-6). Cells were grown in a humidified incubator at 37°C under 5% CO
Seeds of wild type Arabidopsis thaliana (Col-O) were obtained from the Nottingham Arabidopsis Stock Center (NASC). For in vitro cultures, seeds were sterilized in 70% EtOH with 0.05% SDS followed by washing in 95% EtOH, dried and sown on germination medium containing 0.8% w/v agar, 1% w/v sucrose and half-strength Murashige & Skoog salts (M0255; Duchefa Biochemie, Netherlands). After 2 days of stratification at 4°C in darkness, plants were grown under long-day conditions (6h light/8h dark cycles) at 23°C. Fifteen-day-old Arabidopsis plants were used for the in vitro adhesion assays.
Bacterial adhesion was tested as described in Haahtela et al. [ 36]. Briefly, 2.5 x 10 6 bacteria were incubated with whole plants in 5 ml of PBS at room temperature in a controlled environment incubator shaker set at 30 rpm for 4 hours. A non-infected plant control was maintained under the same conditions. The plants were then washed twice for 15 min with 10mL of saline (0.9 [w/s] sodium chloride) and homogenized in 1mL of saline with a tissue grinder (Kontes, size C), and the suspension was serially diluted and the number of adhering bacteria was determined by quantification of CFUs by plating the dilution onto LB agar plates. Each experiment was conducted in biological and technical triplicate.
Female specific-pathogen mice (OF1 Swiss; 3 to 5 weeks old, 22g, Charles River Swiss) were used. The models and protocols used in this study were all approved by the ethics committee of Auvergne (Comité Régional d'Ethique en Matière d'Expérimentation Animale Auvergne, CEMEEA C2EA-02) in compliance with the European Community guiding in the care and use of laboratory animals (86/609/CEE). A total of 50 animals were used in this experiment. Animals were housed five to a cage in a temperature-controlled room with a 12 h light/12 h dark cycle and were fed with Rodent Diet (A04-Safe, Epinay/Orge, France) ad libitum throughout the experiments. Cages were cleaned each two days. One day prior to infection, water was withdrawn and replaced with sterile water containing 5g of streptomycin per liter throughout the experiment. After 1 week of acclimation, 200 μl of bacterial suspension in sterile water (10 7 CFU) were given intragastrically to each mouse. For competition assays, each of the 8 LM21Δ usher- kana-strepto mutants was mixed with wild type strain LM21 in equal amounts in 200μl sterile water and administered intragastrically to 5 mice per group. The mutant strains showing a deficiency in colonization were then tested individually (5 mice per strain) and in competition with their respective trans-complemented strain by the same procedure. After 1 day and subsequently every day for 10 days, feces were collected and homogenized in 1mL saline, and serial dilutions were plated onto selective media. As described above, the removed feces were plated onto streptomycin-containing LB plates to measure the total number of CFUs and onto streptomycin-kanamycin-containing LB plates to measure the number of Δ usher mutant CFUs. From these numbers, the exact ratio of mutant to wild type or transcomplement was calculated for inoculum and feces contents. Mice were euthanized by cervical dislocation on day 12. Each experiment was conducted in biological and technical triplicate.
Overnight grown bacteria (8.10 9) were mechanically disrupted by sonication in 2mL of 40mM Tris-buffer, and lysates were centrifuged for 10 min at 20,000 g to pellet unbroken cells. Supernatants were ultracentrifuged for 1h at 100,000g, and pellets suspended in 0.1 mL of sarkosyl 0.5% were then incubated for 30 min on ice to solubilize inner membrane. Samples were then ultracentrifuged 1h at 100,000g, and pellets were suspended in 0.05 mL of tris-buffer. Protein quantification was performed using Bradford Protein Assay (Biorad) reagent according the manufacturers’ recommendations. Five μg of protein samples were then analyzed by western blotting using an anti-MrkA polyclonal antibody (generous gift from Steven Clegg).
For analysis of the significance of differences, Student’s t-test was used to compare data from the two groups. All experiments were made at least three times. A P-value of ≤ 0.05 was considered to be statistically significant. RT-PCR statistical analysis was performed using the non-parametric One-way ANOVA. P values of ≤ 0.05 were considered to be statistically significant.
The INSDC accession numbers of usher proteins used in this study are listed below. Klebsiella pneumoniae HS11286 (AEW59011, AEW59085, AEW60001, AEW61304, AEW6304); Klebsiella pneumoniae MGH 78578 (ABR75716, ABR75717, ABR75730, ABR75944, ABR77102, ABR78394,ABR78675, ABR78797, ABR79828, ABR79894); Klebsiella pneumoniae NTUH-K2044 (BAH61229, BAH61295,BAH61460, BAH62173, BAH63378, BAH64776, BAH64779, BAH65059, BAH65073); Klebsiella variicola 342 (initially identified as K. pneumoniae: ACI08730, ACI09976, ACI10676, ACI09288, ACI10013, ACI08659, ACI06599, ACI08146, ACI08479); Klebsiella pneumoniae KCTC 2242 (AEJ96010, AEJ96079, AEJ96970, AEJ98151, AEJ99466, AEJ99752, AEJ99817, AEJ99818, AEJ99901); Klebsiella pneumoniae JM45 (AGT22732, AGT22745, AGT23011, AGT24313, AGT25490, AGT25491, AGT26343, AGT26409); Klebsiella pneumoniae CG43 (AGX39043, AGX39045, AGX41005, AGX40456); Klebsiella pneumoniae 1084 (AFQ64205, AFQ67915, AFQ67856, AFQ67011, AFQ65856, AFQ67240, AFQ64480, AFQ64205); Klebsiella pneumoniae Kp13 (AHE42797, AHE42813,AHE43103, AHE43106, AHE44628, AHE45921, AHE46162, AHE46764, AHE46837); Klebsiella pneumoniae 30684/NJST258_2 (AHM77757, AHM77758, AHM77775, AHM78064, AHM78067, AHM79571, AHM80854, AHM80923, AHM81143, AHM81806, AHM81807, AHM81882); Klebsiella pneumoniae 30660/NJST258_1 (AHM83349, AHM83350, AHM83368, AHM83664, AHM83667, AHM85224, AHM86458, AHM86526, AHM86817, AHM87489, AHM87490, AHM87517); Klebsiella pneumoniae
In the K. pneumoniae LM21 genome, a total of eight potential CU fimbrial operons defined as polycistronic gene clusters containing at least one usher and one chaperone encoding sequence and flanked by one or more genes encoding fimbrial subunits were identified. The genetic organization of these CU fimbrial gene clusters ( Fig. 1) was predicted by inspecting individual genes for conserved fimbrial protein domains. The usher proteins are members of a classical chaperone/usher family and share conserved domains (PFAM00577 and/or COG3188). The presence of usher encoding genes was confirmed by PCR using primers P1 to P16 ( Table 1). The LM21 K. pneumoniae CU loci comprised type 1 and type 3 fimbrial gene clusters fim and mrk that are divergently clustered and transcribed. Five of the other six LM21 CU loci showed a strong similarity toward operons found out by Wu et al. [ 18] in strain NTUH-K2044. Together with type 1 and type 3, they showed a minimum of 93% of identity (coverage length >98%) when compared to NTUH-K2044 operon subunit, with an identity value between 95 and 100% for usher encoding genes. The common CU operons between LM21 and NTUH-K2044 strains were kpa, kpb, kpd, kpe, kpg, mrk and fim accordingly to the nomenclature proposed by Wu et al. [ 37].
The genetic organization of the different fimbrial types is depicted diagrammatically. The designation of putative fimbrial genes and the locus tag of ORFs annotated in the K. pneumoniae LM21 genome are indicated. A total of eight fimbrial gene clusters and genes encoding putative regulators are shown. Each of these fimbrial loci is underlined. Fimbriae are grouped according to the Nuccio cladding scheme (Nuccio and Baümler, 2007). Genes are color-coded according to predicted function of the corresponding protein product, with associated Pfam and COG domains indicated (CGO and PF). The scale represents DNA length in kilo base pair. Reference locus tags for individual fimbrial types are displayed under the locus.
A total of 90 amino acid sequences deduced from the 7 to 9 CU loci of the twelve K. pneumoniae genomes available in the NCBI data bank were used to infer the evolutionary relationship of usher protein. Fimbrial gene clusters were grouped according to the Nuccio subclade system (α, β, ϭ, п, κ, γ) and highlighted in color. K pneumoniae LM21 usher proteins are leaf labeled in red.
The classification of the fimbrial gene clusters into CU clades based on the usher sequences was previously shown to correlate with the gene arrangement within clusters [ 39]. The eight LM21 usher loci belong to γκп (for seven of them) and ϭ clade (one of them, LM21 kpd) ( Fig. 1) and are characterized by a common pilus subunit homology domain (PFAM00419). Seven CU loci share the same gene organization encoding first the major subunit then a chaperone followed by an usher (MCU organization: M for major subunit, C for chaperone and U for usher) ( Fig. 1). They are split into different subclades: LM21 kpa, LM21 kpe, LM21 kpg, LM21 kpj and LM21 fim are MCUT (T for Tip adhesin)-organized and belong to γ1 subclade. They share, like all γ clade members, the PFAM00419 subunit domain and a COG3539 domain, which are also found in subunits of γ1 and γ2 fimbriae. The LM21 mrk operon, which is MCUT-organized, belongs to the γ
Real time RT-PCR analysis performed using RNA samples from bacteria grown in rich (LB, DMEM) or minimal (M63B1) media used for phenotypical characterization showed that the eight LM21 usher encoding genes were all expressed, whatever the growth conditions. Compared to the rpoB housekeeping gene, there was no variation of usher gene expression between the different media, excepted for kpgC which was expressed at higher level in DMEM compared to LB (p<0.05; ANOVA) ( Table 3).
| kpaC | 46.6 ± 10.7 | 51.6 ± 8.2 | 49.6 ± 21.1 |
| kpbC | 7.1 ± 1.2 | 7.5 ± 0.8 | 7.1 ± 0.4 |
| kpdC | 52.0 ± 2.2 | 40.9 ± 3.2 | 55.1 ± 11.0 |
| kpeC | 441.3 ± 81.7 | 382.4 ± 83.1 | 344.4 ± 58.5 |
| kpgC | 93.6 ± 4.2 | 111.6 ± 20.4 | 75.3 ± 8.5 |
| kpjC | 94.6 ± 9.9 | 81.4 ± 20.3 | 92.6 ± 5.7 |
| mrkC | 16.6 ± 0.6 | 17.2 ± 2.9 | 14.7 ± 1.5 |
| fimC | 30.5 ± 1.4 | 34.1 ± 1.5 | 28.2 ± 4.9 |
Results were expressed in fold-decreased expression (±SD) compared to rpoB housekeeping gene expression level. Expression levels were compared by nonparametric one-way ANOVA, comparing expression of each usher gene in the three different media. Only kpgC expression was higher in DMEM compared to LB; p < 0.05 (ANOVA).
To investigate the role of the LM21 K. pneumoniae CU loci, isogenic deletion mutants were created by allelic replacement of each of the eight potential encoding usher genes. The growth rate of each mutant was similar to that of the wild type ( S1 Fig.). Western blot analysis performed with MrkA specific antibodies showed that all usher deleted mutants, except Δ mrkC, expressed type 3 pili at their cell surface ( S2 Fig.). In addition, assessment of the expression of the 7 usher genes in Δ mrkC mutant by RT-PCR indicated that there was no significant variation compared to the wild-type strain ( S2 Table).
Determination of biofilm biomass using CV staining in microtiter plates and biomass determination in the microfermentor device indicated that three mutants (LM21Δ kpaC, LM21Δ kpgC and LM21Δ mrkC) were impaired in their biofilm formation ability compared to the wild type K. pneumoniae LM21 strain ( Fig. 3). The ability to form biofilm was partially restored by transcomplementation with the wild type usher encoding gene (up to 80% of the wild type level), whatever the biofilm formation model used ( Fig. 3A and 3B).
Biofilms developed were quantified (A) by crystal violet staining on microtiter plates after 4 hours of incubation and (B) by CFU determination after 24 hours of incubation in the microfermentor model, as described in experimental procedures. Data are means of measurement made in triplicate. The biofilm formation ability of the mutant strains is expressed as a percentage of LM21 wild type biofilm, set to 100% (OD
The eight usher-deleted mutants were also tested for their ability to adhere to human intestinal Int-407 cells. Two of the mutants (LM21Δ kpgC and LM21Δ mrkC) adhered less than the wild type strain LM21, (75% and 20%, respectively) whereas the six other mutants did not show any difference compared to the parental strain. The adhesion phenotype was partially restored by the trans-complemented strains (up to 80% of the wild type level) ( Fig. 4).
Results are expressed as the percentages of LM21 wild type adhesion, set to 100% (CFU value for K. pneumoniae LM21 wild type was 1.93x10 9). Data are the means of measurements made in biological and technical triplicate. Significant differences are indicated by * p < 0.05 and ** for p<0.01 (Student’s t-test).
Adhesion assays performed with whole 15-day-old A. thaliana specimens showed that four mutants, LM21Δ kpeC, LM21Δ kpjC, LM21Δ fimC and LM21Δ mrkC, adhered at significantly lower levels than those of the wild type strain (P<0.01 with LM21Δ kpjC and P<0.05 for LM21Δ kpeC, LM21Δ fimC) ( Fig. 5).
Results are expressed as the percentages of LM21 wild type adhesion, set to 100% (CFU value for K. pneumoniae LM21 wild type was 1.47.10 7). Data are the means of measurements made in biological and technical triplicate. Significant differences are indicated by * and ** for p < 0.05 and p<0.01 respectively (Student’s t-test).
Determination of the ability of each usher mutant to colonize mice intestinal tract concurrently with the parental wild type strain indicated that four mutants, LM21Δ kpgC, LM21Δ kpjC, LM21Δ fimC and LM21Δ mrkC, were significantly impaired compared to the levels of the wild type strain ( Fig. 6A) (P<0.01 by the student’s test for LM21Δ kpgC and LM21 mrkC P<0.05 for fimC and P<0.01 for LM21Δ kpjC). Further colonization assays performed with the highest attenuated mutant, LM21Δ kpjC, showed that this mutant alone was also unable to colonize the intestinal tract and was outcompeted by its trans-complemented LM21Δ kpjC/pSTAB- kpjC mutant ( Fig. 6B).
(A) The colonization properties of the strains are shown as the competition between the wild type and the eight isogenic mutants. (B) For mutants showing an highly attenuated phenotype, individual assays involving the mutant alone and in competition assays with its trans-complemented strain were conducted. Data are means of measurement made with 5 mice per group. Significant differences are indicated by * and ** for p < 0.05 and p<0.01, respectively (Student’s t-test).
To detect CU clusters, the choice of the usher as target gene was conditioned by the fact that one usher encoding gene is ubiquitously associated with all CU gene clusters and is present in a single copy in all CU gene clusters so far described. A total of eight potential usher-encoding genes were detected in K. pneumoniae LM21 genome, all of them harboring adjacent cognate chaperone-encoding and fimbrial subunit-encoding genes. Whereas genes for CU pathways have been shown to be encoded on both chromosomal and plasmid locations [ 40, 41], the eight CU loci detected in the genome of K. pneumoniae LM21 were located on the chromosome and most of them belonged to the γ
Of the eight CU-loci detected in K. pneumoniae LM21 genome, two corresponded to previously well-characterized CU operons. The locus with ORFs KPLM21_90133 to KPLM21_90137 was identified as the type 3-encoding mrk operon previously described in all members of the family Enterobacteriaceae. While first identified and characterized in Klebsiella, type 3 pili are commonly found in other Enterobacteriaceae, and mrk gene clusters are mostly chromosome-borne [ 7, 43, 44]. m rk operon belongs to γ
Type 1 fimbriae-encoding operon was the second previously well-known CU operon detected in our study. These fimbriae are found in virtually all members of the family Enterobacteriaceae [ 12]. The genetic organization of the K. pneumoniae fim operon resembles that of E. coli fim and contains homologs of all nine fim genes described previously [ 3, 37]. fimC gene knock-out experiment in K. pneumoniae LM21 did not impair its biofilm formation capacity, as previously described for other K. pneumoniae strains [ 51– 54]. However, these results are at variance with those obtained in the closely model E. coli, in which type 1 fimbriae have been shown to promote biofilm formation [ 53]. This intriguing difference could be related to the characteristic production of copious amounts of capsular material by K. pneumoniae that impedes type 1 functionality during biofilm formation due to the shortness of these pili [ 55, 56].
In agreement with van Aarsten et al.,[ 57], we observed no significant difference between the LM21Δ fimC mutant and its parental strains in the in vitro animal cell adhesion assay. However, this mutant was impaired in its ability to adhere to Arabidopsis seedlings ( Fig. 5), suggesting that the type 1 fimbriae are involved in K. pneumoniae plant adhesion, as in the grass model of Haahtela et al. [ 36]. In addition, and in contrast with previous reports [ 54, 57], murine intestinal co-colonization assay performed with LM21Δ fimC mutant showed that the mutant had a lower colonization capacity than the wild type.
In addition to type 3 and type 1-encoding operons, K. pneumoniae LM21 genome harbored six other CU fimbriae systems. The newly identified kpj cluster was shown to be involved in adhesion to Arabidopsis tissues and in murine colonization. Determination of the ability of each mutant to colonize the murine intestinal tract was initially performed in co-colonization assays including the wild-type strain. To avoid misinterpretation due to concurrent colonization processes that potentially influence the host immune status and thus modify the capacity of both microorganisms to establish, the LM21Δ kpj mutant was assessed individually in the murine model; the bacterial load in the animals feces rapidly declined, indicating the mutant was also impaired in its colonization capacity when given alone ( Fig. 6B). Interestingly, the LM21Δ kpjC mutant was not impaired in its capacity to adhere to Int-407 cells, suggesting the adhesin potentially encoded by this operon does not recognize receptors at the surface of intestinal cells but rather interacts with other gastro-intestinal components.
Deletion of the LM21 kpjC usher-encoding gene significantly decreased its ability to form biofilm and its ability to adhere in vitro to Int-407 and plant cells, whereas deletion of LM21 kpaC usher gene was only associated with a decreased ability to form biofilm in both early and late stages. These results suggest that the different fimbrial adhesins harbored by K. pneumoniae have specific role allowing the bacteria to adhere to different receptors present in different niche and environnement. It has previously been demonstrated that type 1 fimbrial expression is up-regulated in wild type K. pneumoniae infecting the bladder, but is down-regulated in cells colonizing the intestinal tract or infecting the lungs [ 54].
Regarding the loci LM21 kpb, LM21 kpd and LM21 kpe, no clear in vitro or in vivo role was identified whatever the phenotype investigated, except for LM21 kpe, for which deletion induced a slightly decreased adhesion in the plant model. We demonstrated in this study that the 8 LM21 CU usher genes were expressed in vitro even though specific demonstration of the presence of corresponding fimbriae at the bacterial cell surface still requires further investigations. Numerous cryptic fimbrial operons have been detected in the genomes of E. coli K-12, E. coli O157:H7 and Salmonella, whose expression is subject to phase variation in response to environment cues [ 58– 60]. Each bacterium likely expresses a few pili type at a given time according to its growth or virulence requirements. Besides, by analogy with other CU systems, the upregulation of expression and biosynthesis of fimbriae could involve a complex interplay of multiple transcriptional regulator, invertible promoter switchs or DNA methylation-based systems, in addition to a potential regulation by the levels of expression of other surface components [ 5, 61– 63].
In conclusion, we report the characterization of eight CU loci on the genome of K. pneumoniae LM21. Using several in vitro and in vivo experimental models, we were able to show the involvement of five of them in bacterial adhesion or colonization processes, demonstrating therefore the large adhesion capacity of this species. However, complete demonstration of its adhesion capacities still requires the identification of the substrates recognized by the potential adhesins harbored by the non-yet phenotypically characterized CU operons. In addition, epidemiological studies assessing the presence and the expression of these loci in a large panel of K. pneumoniae isolates from different sources will complete the elucidation of their respective role.
(PDF)
Click here for additional data file.
(PDF)
Click here for additional data file.
Bacterial cells were collected every 30 min for 8.5 hours and plated on media. Results are expressed as the number of CFU/ml.
(TIF)
Click here for additional data file.
The figure shows an immunoblot of a gel on which 5 μg of extract from each bacterial strain has been loaded. The gel was immunostained with an antibody that recognizes the major subunit of type 3 pili (MrkA). MW, molecular weight size marker.
(TIF)
Click here for additional data file.
We thank LABGeM team and the National Infrastructure « France Genomique » for the annotation of K. pneumoniae LM21 genome. We thank Marie Claude Espagnol, Aline V. Probst and Christophe Tatout for generously providing the Arabidopsis thaliana plants used in our study. We also thank Michael Picard and Anne Pracros for their technical assistance.


Content
Sentiment analysis refers to the use of machine learning, natural language processing and computational linguistics to determine the sentiment content from the written language, i.e. it
analyzes peoples opinions, attitudes and emotions with respect to products, services, organizations, individuals, events or topics. The task of the project is to realize the automatic sentiment
analyzer for Twitter messages, which will be trained on the dataset containing tweets that are
manually annotated for the sentiment (positive, negative or neutral), and which will be applied
afterwards to previously unseen messages to classify their sentiment. Support Vector Machines
(SVM) should be used for classifying sentiments into three categories (positive, negative and
neutral). The frequency of occurrence of words should be used as features. Since the features are
all unique words in the dataset, feature selection need to be performed including the combination
of following techniques:
- Removing infrequent words (words that appear less than nmin number of times).
- Removing stop words that add no sentiment value (articles, some prepositions, etc...).
- Stemming: reducing distinct words to their root form (stem).
- Removing hashtags, usernames, hyperlinks, numbers, repeated letters (more than 2 repeated letters) and punctuation marks.
Dataset
SemEval-2014 Task 9 Corpus (see reference (B.1)) will be used for training and testing, which
was collected within the SemEval-2014 Task 9 competition that was a part of the International
Workshop on Semantic Evaluation. Tweets were gathered on a range of topics using Twitter
API, including entities (e.g., Gadafi, Steve Jobs), products (e.g. Kindle, Android phone) and
events (e.g. Japan earthquake, NHL playoffs). It contains training, development and test sets
which are manually annotated to three sentiments (positive, negative or neutral). While training
dataset contains only Twitter messages, test dataset contains SMS and LiveJournal messages in
addition to tweets, i.e. messages from different domains to find out how the systems trained on
Twitter data only will generalize on out-of-domain text messages. Tips below:
- Training and development sets can be merged to have more training instances.
- It can take approximatelly 18 hours to download the Semeval sentiment analysis training
dataset
- Check NLTK library for feature extraction and feature selection.
- Check sklearn library for SVM implementation.


| Vendor Name | SPI Consultants |
|---|---|
| Reference Number | W847L-4500995235 |
| Contract Date | 14-12-2012 |
| Description of Work | Human Resource Services, Business Consulting/Change Management; Project Management Services (Supply Arrangement TSPS) |
| Delivery Date | 5-3-2013 |
| Contract Value | $23,727.63 |
| Comments | This contract was competitively sourced.This contract is a call-up against a Public Works and Government Services procurement tool. |
| Additional Comments |


2020-02-27 12:28:53
_site.yml
index.Rmd
other_pages.Rmd
index.html
*_presentation
slide optionsinstall.packages("tinytex")
)install.packages("revealjs")
install.packages("xaringen")
https://github.com/gilmore-lab/sex-differences-in-motion-perception
This talk was produced on 2020-02-27 in RStudio using R Markdown. The code and materials used to generate the slides may be found at https://github.com/psu-psychology/psy-525-reproducible-research-2020. Information about the R Session that produced the code is as follows:
## R version 3.6.2 (2019-12-12) ## Platform: x86_64-apple-darwin15.6.0 (64-bit) ## Running under: macOS Mojave 10.14.6 ## ## Matrix products: default ## BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib ## LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib ## ## locale: ## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 ## ## attached base packages: ## [1] stats graphics grDevices utils datasets ## [6] methods base ## ## other attached packages: ## [1] lme4_1.1-21 Matrix_1.2-18 gapminder_0.3.0 ## [4] dplyr_0.8.4 ggplot2_3.2.1 ## ## loaded via a namespace (and not attached): ## [1] Rcpp_1.0.3 nloptr_1.2.1 ## [3] plyr_1.8.5 pillar_1.4.3 ## [5] compiler_3.6.2 tools_3.6.2 ## [7] boot_1.3-23 digest_0.6.25 ## [9] packrat_0.5.0 nlme_3.1-142 ## [11] lattice_0.20-38 evaluate_0.14 ## [13] lifecycle_0.1.0 tibble_2.1.3 ## [15] gtable_0.3.0 pkgconfig_2.0.3 ## [17] rlang_0.4.4 yaml_2.2.1 ## [19] xfun_0.12 withr_2.1.2 ## [21] stringr_1.4.0 knitr_1.28 ## [23] grid_3.6.2 tidyselect_1.0.0 ## [25] tufte_0.5 glue_1.3.1 ## [27] R6_2.4.1 databraryapi_0.1.9 ## [29] rmarkdown_2.1 minqa_1.2.4 ## [31] purrr_0.3.3 farver_2.0.3 ## [33] reshape2_1.4.3 magrittr_1.5 ## [35] MASS_7.3-51.5 splines_3.6.2 ## [37] scales_1.1.0 htmltools_0.4.0 ## [39] assertthat_0.2.1 colorspace_1.4-1 ## [41] labeling_0.3 stringi_1.4.6 ## [43] lazyeval_0.2.2 munsell_0.5.0 ## [45] crayon_1.3.4


Posts related to: Java
Spring Security User Service
Posted by
pradeep
on January 12, 2021
Spring Security Introduction
Posted by
pradeep
on January 12, 2021
Spring Cloud Gateway - Part 2
Posted by
pradeep
on November 30, 2020
Spring Cloud Gateway - Part 1
Posted by
pradeep
on November 23, 2020
Using new Switch expressions
Posted by
pradeep
on April 12, 2020
How to use records in Java
Posted by
pradeep
on April 8, 2020
How to process annotations in Java
Posted by
pradeep
on February 4, 2019
Generating static pages with J2HTML
Posted by
pradeep
on September 30, 2018
HTTP Client
Posted by
pradeep
on September 1, 2018
Chain of responsibility
Posted by
pradeep
on May 17, 2018
Introduction to java.time - Part 2
Posted by
pradeep
on May 13, 2018
Strategy design pattern
Posted by
pradeep
on April 22, 2018
Introduction to java.time - Part 1
Posted by
pradeep
on April 18, 2018
Regex Tester With Spring Shell
Posted by
pradeep
on April 11, 2018
Infinite streams
Posted by
pradeep
on April 8, 2018
Recipes for Optional
Posted by
pradeep
on April 3, 2018
Functions cheat sheet
Posted by
pradeep
on March 28, 2018
Reduce stream to single value
Posted by
pradeep
on March 24, 2018
Using consumer functional interface
Posted by
pradeep
on March 17, 2018
Create Maven project in GitHub
Posted by
pradeep
on March 14, 2018
Generate stream of random numbers
Posted by
pradeep
on March 3, 2018
Quick introduction to PriorityQueue
Posted by
pradeep
on February 23, 2018
Stream of dates with LocalDate
Posted by
pradeep
on February 17, 2018


Here is an easy way to set the default language for pages served by your server (edit the language to suit your needs):
# set the default language
DefaultLanguage en-US
Likewise, here we are setting the default character set (edit to taste):
# set the default character set
AddDefaultCharset UTF-8


This is for solving the egg drop problem. The setting is very simple: you have e eggs, and a building with n floors. You want to find out what is the highest floor to drop an egg without breaking it. In addition, you want to obtain the answer with as little attempts as possible, even for the worst-case scenario. Then, what is the minimal number of drops one needs?
The number of floor is: {{floors}}.
The number of eggs is {{eggs}}.
=====
The minimal number of drops for worst-case scenario is {{result}}.


×
Modal title
...
Facebook
|
Twitter
|
LinkedIn
|
Medium
© 2016, ohara.invent | All rights reserved.


getting started with golang part 8
Methods and Interfaces
LESSON 52
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := &Vertex{3, 4}
fmt.Println(v.Abs())
}
Go does not have classes. However, you can define methods on struct types. The method receiver appears in its own argument list between the func keyword and the method name.
package main
import (
"fmt"
"math"
)
type MyFloat float64
func (f MyFloat) Abs() float64 {
if f < 0 {
return float64(-f)
}
return float64(f)
}
func main() {
f := MyFloat(-math.Sqrt2)
fmt.Println(f.Abs())
}
In fact, you can define a method on any type you define in your package, not just structs. You cannot define a method on a type from another package, or on a basic type.
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v *Vertex) Scale(f float64) {
v.X = v.X * f
v.Y = v.Y * f
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := &Vertex{3, 4}
v.Scale(5)
fmt.Println(v, v.Abs())
}
Methods can be associated with a named type or a pointer to a named type.
We just saw two Abs methods. One on the *Vertex
pointer type and the other on the MyFloat value type.
There are two reasons to use a pointer receiver. First, to avoid copying the value on each method call (more efficient if the value type is a large struct). Second, so that the method can modify the value that its receiver points to.
Try changing the declarations of the Abs and Scale methods to use Vertex as the receiver, instead of *Vertex.
The Scale method has no effect when v is a Vertex. Scale mutates v. When v is a value (non-pointer) type, the method sees a copy of the Vertex and cannot mutate the original value.
Abs works either way. It only reads v. It doesn’t matter whether it is reading the original value (through a pointer) or a copy of that value.
LESSON 55
package main
import (
"fmt"
"math"
)
type Abser interface {
Abs() float64
}
func main() {
var a Abser
f := MyFloat(-math.Sqrt2)
v := Vertex{3, 4}
a = f // a MyFloat implements Abser
a = &v // a *Vertex implements Abser
// In the following line, v is a Vertex (not *Vertex)
// and does NOT implement Abser.
a = v
fmt.Println(a.Abs())
}
type MyFloat float64
func (f MyFloat) Abs() float64 {
if f < 0 {
return float64(-f)
}
return float64(f)
}
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
An interface type is defined by a set of methods.
A value of interface type can hold any value that implements those methods.
Note: The code on the left fails to compile.
Vertex doesn’t satisfy Abser because the Abs method is defined only on *Vertex, not Vertex.
package main
import (
"fmt"
"os"
)
type Reader interface {
Read(b []byte) (n int, err error)
}
type Writer interface {
Write(b []byte) (n int, err error)
}
type ReadWriter interface {
Reader
Writer
}
func main() {
var w Writer
// os.Stdout implements Writer
w = os.Stdout
fmt.Fprintf(w, "hello, writer\n")
}
A type implements an interface by implementing the methods.
There is no explicit declaration of intent.
Implicit interfaces decouple implementation packages from the packages that define the interfaces: neither depends on the other.
It also encourages the definition of precise interfaces, because you don’t have to find every implementation and tag it with the new interface name.
Package io defines Reader and Writer; you don’t have to.


Inclusion-exclusion formula is nice when we can calculate the probabilities of intersections of the events under consideration. Things are not always this nice, and sometimes that may be very difficult. Even if we could find them, summing them with signs according to the inclusion-exclusion formula may be difficult as the example 56 demonstrates. The idea behind the inclusion-exclusion formula can however be often used to compute approximate values of probabilities, which is very valuable in most applications. That is what we do next.
We know that $\mathbf{P}(A_{1}\cup \ldots \cup A_{n})\le \mathbf{P}(A_{1})+\ldots +\mathbf{P}(A_{n})$ for any events $A_{1},\ldots ,A_{n}$. This is an extremely useful inequality, often called the union bound. Its usefulness is in the fact that there is no assumption made about the events $A_{i}$s (such as whether they are disjoint or not). The following inequalities generalize the union bound, and gives both upper and lower bounds for the probability of the union of a bunch of events.
Similarly, one can prove the other inequalities in the series. We leave it as an exercise. The key point is that $r-\binom{r}{2}+\ldots +(-1)^{k-1}\binom{r}{k}$ is non-negative if $k$ is odd and non-positive if $k$ is even (prove this). Here as always $\binom{x}{y}$ is interpreted as zero if $y > x$.


ABOUT US
“The art challenges the technology, and
the technology inspires the art.”
E-DAM is an abbreviated entity which focusses on few
the most in-demand fields-designing and
marketing.
We are a student-based club organised by Institute of Aeronautical Engineering, Dundigal.
Our motive is
to help small scale businesses by building them
websites and/or apps, introducing them to e-commerce
world,
providing young talented developers/designers a platform to
showcase their skills. Our team
comprises of
hardworking tech, design and marketing enthusiasts who strongly
believe in your vision,
our design.
TEAM
Abhishek. N -
President
S. Ashwin
Technical Head and Web Development Head
V. Eshwar Reddy
Vice President and Web Development Head
K. Anirudh Sai
Vice President,App Developer and Content Writing Head
K. Amuktha
Web Editor and Digital Marketing Promoter
Rahim unisa
Web Editor and Content Writing Head
Akhila
Web Editor and Content Writer
Guru Datta
Web Editor and Lead Designer
N. Deepthi
Digital Marketing Head and App Developer
Ajay Varma
Web Editor and Designer
Sharwan Solanki
Web Editor and App Dev Head


In Representable, we differentiate between three APIs.
The declarative API is how we define representers. You can learn how to use those representers by reading about the very brief public API. Representable is extendable without having to hack existing code: the function API documents how to use its options to achieve what you need.
To render objects to documents or parse documents to objects, you need to define a representer.
A representer can either be a class (called decorator) or a module (called representer module). Throughout the docs, we will use decorators as they are cleaner and faster, but keep in mind you can also use modules.
require 'representable/json'
class SongRepresenter < Representable::Decorator
include Representable::JSON
property :id
property :title
end
A representer simply defines the fields that will be mapped to the document using property
or collection
. You can then decorate an object and render or parse. Here’s an example.
SongRepresenter.new(song).to_json #=> {"id": 1, title":"Fallout"}
The details are being discussed in the public API section.
Instead of using classes as representers, you can also leverage modules which will then get mixed into the represented object.
A representer module is also a good way to share configuration and logic across decorators.
module SongRepresenter
include Representable::JSON
property :id
property :title
end
The API in a module representer is identical to decorators. However, the way you apply them is different.
song.extend(SongRepresenter).to_json #=> {"id": 1, title":"Fallout"}
There’s two drawbacks with this approach.
to_json
).extend
s there will be a noteable performance decrease.Throughout this documentation, we will use decorator as examples to encourage this cleaner and faster approach.
Not everything is a scalar value. Sometimes an object’s property can be a collection of values. Use collection
to represent arrays.
class SongRepresenter < Representable::Decorator
include Representable::JSON
property :id
property :title
collection :composer_ids
end
The new collection composer_ids
has to be enumeratable object, like an array.
Song = Struct.new(:id, :title, :composer_ids)
song = Song.new(1, "Fallout", [2, 3])
song.to_json #=> {"id": 1, title":"Fallout", composer_ids:[2,3]}
Of course, this works also for parsing. The incoming composer_ids
will override the old collection on the represented object.
Representable can also handle compositions of objects. This works for both property
and collection
.
For example, a song could nest an artist object.
Song = Struct.new(:id, :title, :artist)
Artist = Struct.new(:id, :name)
artist = Artist.new(2, "The Police")
song = Song.new(1, "Fallout", artist)
Here’s a better view of that object graph.
#<struct Song
id=1,
title="Fallout",
artist=#<struct Artist
id=2,
name="The Police">>
The easiest way to nest representers is by using an inline representer.
class SongRepresenter < Representable::Decorator
include Representable::JSON
property :id
property :title
property :artist do
property :id
property :name
end
end
Note that you can have any levels of nesting.
Sometimes you want to compose two existing, stand-alone representers.
class ArtistRepresenter < Representable::Decorator
include Representable::JSON
property :id
property :name
end
To maximize reusability of representers, you can reference a nested representer using the :decorator
option.
class SongRepresenter < Representable::Decorator
include Representable::JSON
property :id
property :title
property :artist, decorator: ArtistRepresenter
end
This is identical to an inline representer, but allows you to reuse ArtistRepresenter
elsewhere.
Note that the :extend
and :decorator
options are identical. They can both reference a decorator or a module.
Regardless of the representer types you use, rendering will result in a nested document.
SongRepresenter.new(song).to_json
#=> {"id": 1, title":"Fallout", artist:{"id":2, "name":"The Police"}}
When parsing, per default Representable will want to instantiate an object for every nested, typed fragment.
You have to tell Representable what object to instantiate for the nested artist:
fragment.
class SongRepresenter < Representable::Decorator
# ..
property :artist, decorator: ArtistRepresenter, class: Artist
end
This happens via the :class
option. Now, the document can be parsed and a nested Artist
will be created by the parsing.
song = Song.new # nothing set.
SongRepresenter.new(song).
from_json('{"id":1,title":"Fallout",artist:{"id":2,"name":"The Police"}}')
song.artist.name #=> "The Police"
The default behavior is - admittedly - very primitive. Representable’s parsing allow rich mapping, object creation and runtime checks. Read about populators to learn how that works.
Not always does the structure of the desired document map to your objects. The ::nested
method allows structuring properties within a separate section while still mapping the properties to the outer object.
Imagine the following document.
{"title": "Roxanne",
"details":
{"track": 3,
"length": "4:10"}
}
However, in the Song
class, there’s no such concept as details
.
Song = Struct.new(:title, :track, :length)
Both track and length are properties of the song object itself. Representable gives you ::nested to map the virtual details
section to the song instance.
class SongRepresenter < Representable::Decorator
include Representable::JSON
property :title
nested :details do
property :track
property :length
end
end
Accessors for the nested properties will still be called on the song object. And as always, this works both ways - for rendering and parsing.
You can automatically wrap a document.
class SongRepresenter < Representable::Decorator
include Representable::JSON
self.representation_wrap= :song
property :title
property :id
end
This will add a container for rendering and parsing.
SongRepresenter.new(song).to_json
#=> {"song":{"title":"Fallout","id":1}}
Setting self.representation_wrap = true
will advice representable to figure out the wrap itself by inspecting the represented object class.
Note that representation_wrap
is a dynamic function option.
self.representation_wrap = ->(user_options:) { user_options[:my_wrap] }
This would allow to provide the wrap manually.
decorator.to_json(user_options: { my_wrap: "hit" })
When reusing a representer for a nested document, you might want to suppress its representation_wrap=
for the nested fragment.
Reusing SongRepresenter
from the last section in a nested setup allows suppressing the wrap via the :wrap
option.
class AlbumRepresenter < Representable::Decorator
include Representable::JSON
collection :songs,
decorator: SongRepresenter, # SongRepresenter defines representation_wrap.
wrap: false # turn off :song wrap.
end
The representation_wrap
from the nested representer now won’t be rendered and parsed.
AlbumRepresenter.new(album).to_json
#=> "{\"songs\": [{\"name\": \"Roxanne\"}]}"
Note that this only works for JSON and Hash at the moment.
Properties can be inherited across representer classes and modules.
class SongRepresenter < Representable::Decorator
include Representable::JSON
property :id
property :title
end
What if you need a refined representer to also add the artist. Use inheritance.
class SongWithArtistRepresenter < SongRepresenter
property :artist do
property :name
end
end
All configuration from SongRepresenter
will be inherited, making the properties on SongWithArtistRepresenter
: id
, title
, and artist
. The original SongRepresenter
will stay as it is.
You can also use modules and decorators together to compose representers.
module GenericRepresenter
include Representable::JSON
property :id
end
This can be included in other representers and will extend their configuration.
class SongRepresenter < Representable::Decorator
include GenericRepresenter
property :title
end
As a result, SongRepresenter
will contain the good old id
and title
property.
You might want to override a particular property in an inheriting representer. Successively calling property(name)
will override the former definition - exactly as you know it from overriding methods in Ruby.
class CoverSongRepresenter < SongRepresenter
include Representable::JSON
property :title, as: :name # overrides that definition.
end
Instead of fully replacing a property, you can extend it with :inherit
. This will add your new options and override existing options in case the one you provided already existed.
class SongRepresenter < Representable::Decorator
include Representable::JSON
property :title, as: :name, render_nil: true
end
You can now inherit properties but still override or add options.
class CoverSongRepresenter < SongRepresenter
include Representable::JSON
property :title, as: :songTitle, default: "n/a", inherit: true
end
Using the :inherit, this will result in a property having the following options.
property :title,
as: :songTitle, # overridden in CoverSongRepresenter.
render_nil: true # inherited from SongRepresenter.
default: "n/a" # defined in CoverSongRepresenter.
The :inherit
option works for both inheritance and module composition.
:inherit
also works applied with inline representers.
class SongRepresenter < Representable::Decorator
include Representable::JSON
property :title
property :artist do
property :name
end
end
You can now override or add properties within the inline representer.
class HitRepresenter < SongRepresenter
include Representable::JSON
property :artist, inherit: true do
property :email
end
end
Results in a combined inline representer as it inherits.
property :artist do
property :name
property :email
end
Naturally, :inherit
can be used within the inline representer block.
Note that the following also works.
class HitRepresenter < SongRepresenter
include Representable::JSON
property :artist, as: :composer, inherit: true
end
This renames the property but still inherits all the inlined configuration.
Basically, :inherit
copies the configuration from the parent property, then merges in your options from the inheriting representer. It exposes the same behaviour as super
in Ruby - when using :inherit
the property must exist in the parent representer.
If you need to include modules in all inline representers automatically, register it as a feature.
class AlbumRepresenter < Representable::Decorator
include Representable::JSON
feature Link # imports ::link
link "/album/1"
property :hit do
link "/hit/1" # link method imported automatically.
end
Nested representers will include
the provided module automatically.
Readers and Writers for properties will usually be called on the represented
object. If you want to change that, so the accessors get called on the decorator instead, use :exec_context
.
class SongRepresenter < Representable::Decorator
property :title, exec_context: :decorator
def title
represented.name
end
end
While lambdas are one option for dynamic options, you might also pass a “callable” object to a directive.
class Sanitizer
include Uber::Callable
def call(represented, fragment, doc, *args)
fragment.sanitize
end
end
Note how including Uber::Callable
marks instances of this class as callable. No respond_to?
or other magic takes place here.
property :title, parse_filter: Santizer.new
This is enough to have the Sanitizer
class run with all the arguments that are usually passed to the lambda (preceded by the represented object as first argument).
Using the :readable
and :writeable
options access to properties can be restricted.
property :title, readable: false
This will leave out the title
property in the rendered document. Vice-versa, :writeable
will skip the property when parsing and does not assign it.
If you need coercion when parsing a document you can use the Coercion module which uses virtus for type conversion.
Include Virtus in your Gemfile, first.
gem 'virtus', ">= 0.5.0"
Use the :type
option to specify the conversion target. Note that :default
still works.
class SongRepresenter < Representable::Decorator
include Representable::JSON
include Representable::Coercion
property :recorded_at, type: DateTime, default: "May 12th, 2012"
end
Coercing values only happens when rendering or parsing a document. Representable does not create accessors in your model as virtus
does.
Note that we think coercion in the representer is wrong, and should happen on the underlying object. We have a rich coercion/constraint API for twins.
When parsing, Representable reads properties from hashes using their string keys.
song.from_hash("title" => "Road To Never")
To allow symbol keys also include the AllowSymbols
module.
class SongRepresenter < Representable::Decorator
include Representable::Hash
include Representable::Hash::AllowSymbols
# ..
end
This will give you a behavior close to Rails’ HashWithIndifferentAccess
by stringifying the incoming hash internally.
The defaults
method allows setting options that will be applied to all property definitions of a representer.
class SongRepresenter < Representable::Decorator
include Representable::JSON
defaults render_nil: true
property :id
property :title
end
This will include render_nil: true
in both id
and title
definitions, as if you’d provided that option each time.
You can also have dynamic option computation at compile-time.
class SongRepresenter < Representable::Decorator
include Representable::JSON
defaults do |name|
{ as: name.camelize }
end
Combining those two forms also works.
class SongRepresenter < Representable::Decorator
include Representable::JSON
defaults render_nil: true do |name|
{ as: name.camelize }
end
All defaults are inherited to subclasses or including modules.
If it’s required to represent a bare hash object, use Representable::JSON::Hash
instead of Representable::JSON
.
This is sometimes called a lonely hash.
require "representable/json/hash"
class SongsRepresenter < Representable::Decorator
include Representable::JSON::Hash
end
You can then use this hash decorator on instances of Hash
.
hash = {"Nick" => "Hyper Music", "El" => "Blown In The Wind"}
SongsRepresenter.new(hash).to_json
#=> {"Nick":"Hyper Music","El":"Blown In The Wind"}
This works both ways.
A lonely hash starts to make sense especially when the values are nested objects that need to be represented, too. You can configure the nested value objects using the values
method. This works exactly as if you were defining an inline representer, accepting the same options.
class SongsRepresenter < Representable::Decorator
include Representable::JSON::Hash
values class: Song do
property :title
end
end
You can now represents nested objects in the hash, both rendering and parsing-wise.
hash = {"Nick" => Song.new("Hyper Music")}
SongsRepresenter.new(hash).to_json
In XML, use XML::Hash
. If you want to store hash attributes in tag attributes instead of dedicated nodes, use XML::AttributeHash
.
Likewise, you can represent lonely collections, instances of Array
.
require "representable/json/collection"
class SongsRepresenter < Representable::Decorator
include Representable::JSON::Collection
items class: Song do
property :title
end
end
Here, you define how to represent items in the collection using items
.
Note that the items can be simple scalar values or deeply nested objects.
ary = [Song.new("Hyper Music"), Song.new("Screenager")]
SongsRepresenter.new(ary).to_json
#=> [{"title":"Hyper Music"},{"title":"Screenager"}]
Note that this also works for XML.
Another trick to represent collections is using a normal representer with exactly one collection property named to_a
.
class SongsRepresenter < Representable::Decorator
include Representable::JSON # note that this is a plain representer.
collection :to_a, class: Song do
property :title
end
end
You can use this representer the way you already know and appreciate, but directly on an array.
ary = []
SongsRepresenter.new(ary).from_json('[{"title": "Screenager"}]')
In order to grab the collection for rendering or parsing, Representable will now call array.to_a
, which returns the array itself.
Instead of explicitly defining representers for collections using a “lonely collection”, you can let Representable do that for you.
Rendering a collection of objects comes for free, using for_collection
.
songs = Song.all
SongRepresenter.new(songs).for_collection).to_json
#=> '[{"title": "Sevens"}, {"title": "Eric"}]'
For parsing, you need to provide the class for the nested items. This happens via `collection_representer
class SongsRepresenter < Representable::Decorator
include Representable::JSON
property :title
collection_representer class: Song
end
You can now parse collections to Song
instances.
songs = Song.all
json = '[{"title": "Sevens"}, {"title": "Eric"}]'
SongRepresenter.new(songs).for_collection).from_json(json)
Note: the implicit collection representer internally is implemented using a lonely collection. Everything you pass to ::collection_representer
is simply provided to the ::items
call in the lonely collection. That allows you to use :populator
and all the other goodies, too.
In case you don’t want to know whether or not you’re working with a collection or singular model, use represent
.
# singular
SongRepresenter.represent(Song.find(1)).to_json
#=> '{"title": "Sevens"}'
# collection
SongRepresenter.represent(Song.all).to_json
#=> '[{"title": "Sevens"}, {"title": "Eric"}]' ```
represent
figures out the correct representer for you. This works for parsing, too.
When decorating an object with a representer, the object needs to provide readers for every defined property
- and writers, if you’re planning to parse.
In our small SongRepresenter
example, the represented object has to provide #id
and #title
for rendering.
Song = Struct.new(:id, :title)
song = Song.new(1, "Fallout")
You can render the document by decorating the object and calling the serializer method.
SongRepresenter.new(song).to_json #=> {"id":1, title":"Fallout"}
When rendering, the document fragment is read from the represented object using the getter (e.g. Song#id
).
Since we use Representable::JSON
the serializer method is #to_json
.
For other format engines the serializer method will have the following name.
Representable::JSON#to_json
Representable::JSON#to_hash
(provides a hash instead of string)Representable::Hash#to_hash
Representable::XML#to_xml
Representable::YAML#to_yaml
Likewise, parsing will read values from the document and write them to the represented object.
song = Song.new
SongRepresenter.new(song).from_json('{"id":1, "title":"Fallout"}')
song.id #=> 1
song.title #=> "Fallout"
When parsing, the read fragment is written to the represented object using the setter (e.g. Song#id=
).
For other format engines, the deserializing method is named analogue to the serializing counterpart, where to
becomes from
. For example, Representable::XML#from_xml
will parse XML if the format engine is mixed into the representer.
You can provide options when representing an object using the user_options:
option.
decorator.to_json(user_options: { is_admin: true })
Note that the :user_options
will be accessable on all levels in a nested representer.
Here’s an example where the :if
option function evaluates a dynamic user option.
property :id, if: ->(options) { options[:user_options][:is_admin] }
This property is now only rendered or parsed when :is_admin
is true.
Using Ruby 2.1’s keyword arguments is highly recommended - to make that look a bit nicer.
property :id, if: ->(user_options:, **) { user_options[:is_admin] }
Representable also allows passing nested options to particular representers. You have to provide the property’s name to do so.
decorator.to_json(artist: { user_options: { is_admin: true } })
This will pass the option to the nested artist
, only. Note that this works with any level of nesting.
Representable supports two top-level options.
:include
allows defining a set of properties to represent. The remaining will be skipped.
decorator.to_json(include: [:id]) #=> {"id":1}
The other, :exclude
, will - you might have guessed it already - skip the provided properties and represent the remaining.
decorator.to_json(exclude: [:id, :artist]) #=> {"title":"Fallout"}
As always, these options work both ways, for rendering and parsing.
Note that you can also nest :include
and :exclude
.
decorator.to_json(artist: { include: [:name] })
#=> {"id":1, "title":"Fallout", "artist":{"name":"Sting"}}


Index
present: [6.] vindháte etc.
derivatives: vidhú V.+ vidháva V.+ vidhura E.+
A body of forms of not unquestionable connection.


With Solar Mtaani, you won't have to worry when the power goes out.
Prepare your family and critical components (e.g, microwave, refrigiration, television-set) by combining renewable power with battery backup.
With Solar Mtaani, you won't have to worry when the power goes out.
Reduce your monthly power bill with solar energy and experience freedom from the rising electricity prices and the harmful emissions from the greenhouse.
Free yourselves from the rising electricity bills and become an environmentally-friendly company and power your business with free electricity from the sun.


The best way to put together a successful upgrade plan for a round trip ticket is to be flexible on your dates. By searching both directions separately, you can pick which dates in each direction are most convenient for you to travel. Then you can combine the results for the final ticket that you intend to book.
This tool goes out to United's website and searches just like you would in your web browser. That is a slow process, which is repeated for every day in the range you selected. Since it takes a while, we don't want you sitting at your web browser thinking it is stuck. Instead we email the results to you when we're finished.
There is currently no limit on the number of searches that you can do; however, if you abuse this free upgrade finder service then we will be forced to impose limits.
Airlines are funny companies. The "fare classes" available determines whether there's an upgrade or not. This changes by time of day, day of week, how many other customers are booked in for the flight, number of days until the flight, and probably the phase of the moon. The best days to look for upgrades are in the middle of the week when fewer people are buying airline tickets.
Keep in mind that upgrades are rarely available for peak travel periods, such as summer school vacation, unless booked exactly one year in advance.
United Premier 1K members, Global Services, anyone holding an upgrade certificate (Global Premier Upgrade or Regional Upgrade), or anyone that wants to use miles and cash to upgrade can find flights and dates that have immediate upgrade availability. If you book a flight with immediate upgrade availability, the agent on the phone can confirm you in the next class of service immediately after booking. You can also book online and choose to use your upgrade certificate once the ticket is issued (this can take 10-15 minutes or more).
This tool searches for one-way availability between the two specified airports. It looks at every date, and determines whether immediately upgradable seats are available. You should put your outbound flight in a one query, and then your potential return flight (and date range) as another. When you find both outbound and return flights with upgrade availability, then go to united.com and search with those specific dates.
This site is not affiliated in any way affiliated with United Airlines. I was tired of constantly searching through United's website manually to find flights with upgrade availability.
See the Privacy policy. Short version: we don't sell or use your email in any way whatsoever other than to deliver the search results to you.
This site and underlying tools are built using: Bootstrap, Flickr API, jQuery and jQueryUI, Select2, Google Web Fonts, Flask (with Werkzeug and Jinja 2), PhantomJS, and CasperJS.


| Bib |
Name |
Age |
M/F |
City |
St |
Ctry |
Ctz |
|
| |
5k |
10k |
15k |
20k |
Half |
25k |
30k |
35k |
40k |
| 0:36:18 |
1:15:03 |
1:52:08 |
2:29:48 |
2:37:36 |
3:07:31 |
3:46:31 |
4:23:26 |
4:59:29 |
| Finish: |
Pace |
Proj. Time |
Offl. Time |
Overall |
Gender |
Division |
| 0:12:00 |
- |
5:14:22 |
25464 |
14082 |
4820 |
|
| |
5k |
10k |
15k |
20k |
Half |
25k |
30k |
35k |
40k |
| 0:29:44 |
1:00:55 |
1:31:38 |
2:04:35 |
2:11:44 |
2:41:08 |
3:32:51 |
4:26:50 |
5:06:55 |
| Finish: |
Pace |
Proj. Time |
Offl. Time |
Overall |
Gender |
Division |
| 0:12:17 |
- |
5:21:38 |
25712 |
14199 |
376 |
|
|
|
|


|
BLE_API
v2.1.3
|
Functions | |
| void | BleDTM_Isr (void) |
| BleDtmStatus | BleDTM_init (void) |
| void | BleDTM_radio_process (void) |
| uint32_t | BleDTM_timerCount_update (void) |
| uint32_t | BleDTM_cmd_process (uint16_t command) |
| uint8_t | BleDTM_event_get (uint32_t *dtm_event) |
| uint8_t | BleDTM_gui_rssiFlag_get (void) |
| Function for Get the RSSI flag. More... | |
DTM Functions.
| uint32_t BleDTM_cmd_process | ( | uint16_t | command | ) |
Function for splitting UART command bit fields into separate command parameters for the DTM library.
| [in] | command | : The packed UART command. |
| uint8_t BleDTM_event_get | ( | uint32_t * | dtm_event | ) |
Function for reading the result of a DTM command.
| [out] | p_dtm_event | : Pointer to buffer for 16 bit event code according to DTM standard. |
| 0 | no event since last call. |
| 1 | new event. |
| uint8_t BleDTM_gui_rssiFlag_get | ( | void | ) |
Function for Get the RSSI flag.
| 0 | no No RSSI value provided. |
| 1 | the last RSSI value will be provided after BleDTM_EventGet. |
| BleDtmStatus BleDTM_init | ( | void | ) |
Function for initializing DTM module.
| BLEDTM_ERROR_ILLEGAL_CONFIGURATION | : Invalid configurations. |
| BLEDTM_SUCCESS | : Setting success. |
| void BleDTM_Isr | ( | void | ) |
Function for handle BLE stack interrupt.
| void BleDTM_radio_process | ( | void | ) |
Function for handle radio control process.
| uint32_t BleDTM_timerCount_update | ( | void | ) |
Function for get current timer counter.


Dear friend I am Mr. Fish Backlet, a South-Africa by Nationality, a Solicitor at law based in the United Kingdom and the personal attorney to Late Mr. Samy Makary a National of finland, who used to be a private contractor with the Halliburton Company in Saudi Arabia, herein after shall be referred to as my client. Upon Maturity, we sent a routine notification to his forwarding address but got no reply. After a month, we sent a reminder and finally we discovered from his contract employers (Gardiner & Theobald) that Mr Samy Makary was aboard the EgyptAir Flight 990, which crashed into the Atlantic Ocean on October 31 1999 (http://www.greatdreams.com/PassEAir990.htm). Since then, I have made several enquiries with his country's embassies to locate any of my clients extended relatives, this has also proved unsuccessful. After these several unsuccessful attempts, I decided to contact you with this business partnership proposal. I have contacted you to assist in repatriating a huge amount of money left behind by my Client before they get confiscated or declared unserviceable by the Bank where this huge deposit was lodged. The deceased had a deposit valued presently at �5Million(Eight Million Five hundred thousand Pounds) and the Bank has issued me a notice to provide his next of kin or Beneficiary by Will otherwise have the account confiscated within the next thirty official working days. Since I have been unsuccessful in locating the relatives for over three years now, I seek your consent to present you as the next of kin / Will Beneficiary to the deceased so that the proceeds of this account valued at �5Million(Eight Million Five hundred thousand Pounds) can be paid to you. This will be disbursed or shared in these percentages, sixty percentage to me and fourty precentage to you. I have all necessary legal documents that can be used to Back up any claim will be obtained From the Court of England with the Certificate Of Deposit which has been issued to me by the Bank. All I require is your honest Co-operation, Confidentiality and Trust to enable us see this project through.I guarantee you that this will be executed under a legitimate Arrangement that will protect you from any breach of the law. All the relevant documents that will give you the legal backing to claim the fund will be processed.Please acknowledge receipt of this message by e-mail as I am based in the United Kingdom. And please provide me the following below; this is to enable me commence immediate preparation of all legal document that will back up our claim. 1. Full Name 2. Your Telephone Number and Fax Number 3. Your Contact Address. Your urgent response will be highly anticipated and appreciated. Best regards, Mr. Fish Backlet twbktmdkykokabsclyrcxqqyxrek


Peace FM's Joe Diggy Enstooled Nkosuohene - PHOTOS
by Peace FM OnlinePeace FM's Joe Diggy has been enstooled Nkosuohene at Anum-Asamankese traditional area. His stool name is NANA BAFFOUR KWADWO ADDAE. Featured Video
Peace FM's Joe Diggy has been enstooled Nkosuohene at Anum-Asamankese traditional area. His stool name is NANA BAFFOUR KWADWO ADDAE. Featured Video


Game of Mastery
by Graham
Score: 0
Question:
Repeat
New question
×
Setup
General settings
Reset score
Play video
Give bonus
Timed
Video types
Fun
Educational
Quiz length
Endless
Fixed length
Number of questions
@
Quiz timer
None
Stopwatch
Timer
Time (seconds)
@
Graded
Graded
Question types
Clear all
×
Quiz results
You have answered
out of
questions with
out of
points (
%).
You get a(n)


--- layout: page description: "Welcome to Online Donations, A Complete Online Fundraising Solution" ---
Chances are you know someone who needs to use us. We focus on any and all teams that are in need of money. High school sports,Travel Clubs, Educational groups...we do it all. Unfortunately we see a trend in declining public funds, restricted activity budgets and in many cases, programs and events canceled for lack of funds.
This should not happen, and with our ALL IN approach, our goal is to ease the burden. We are here to help you help yourself.
If you think we can - call us. If we feel that there may be a better fit for your group or organization, we'll do our best to point you in the right direction.


{% extends "layouts/base-fullscreen.html" %} {% block title %} Sign UP {% endblock %} {% block stylesheets %}{% endblock stylesheets %} {% block content %} Jinja Swipe - Register Your Email Your Password Confirm Password I agree to the terms and conditions Sign in Have an account? Login © Themesberg - Coded by AppSeed. {% endblock content %} {% block javascripts %}{% endblock javascripts %}
© Themesberg - Coded by AppSeed.


Add all your clients who are connected to your business.
View your business profile and details.
View all your clients and transactions with them if any !
Request new payment from your client!


Public Types | |
Public constants | |
| enum | ErrorSeverity { DOM_SEVERITY_WARNING = 1, DOM_SEVERITY_ERROR = 2, DOM_SEVERITY_FATAL_ERROR = 3 } |
The severity of the error described by the DOMError . More... | |
Public Member Functions | |
Destructor | |
| virtual | ~DOMError () |
| Destructor. | |
Functions introduced in DOM Level 3 | |
| virtual ErrorSeverity | getSeverity () const =0 |
| Get the severity of the error. | |
| virtual const XMLCh * | getMessage () const =0 |
| Get the message describing the error that occured. | |
| virtual DOMLocator * | getLocation () const =0 |
| Get the location of the error. | |
| virtual void * | getRelatedException () const =0 |
| The related platform dependent exception if any. | |
| virtual const XMLCh * | getType () const =0 |
A XMLCh* indicating which related data is expected in relatedData. | |
| virtual void * | getRelatedData () const =0 |
| The related DOMError::getType dependent data if any. | |
Protected Member Functions | |
Hidden constructors | |
| DOMError () |
The severity of the error described by the DOMError
.
DOM_SEVERITY_ERROR:
The severity of the error described by the DOMError
is error. A DOM_SEVERITY_ERROR may not cause the processing to stop if the error can be recovered, unless DOMErrorHandler::handleError()
returns false.
DOM_SEVERITY_FATAL_ERROR
The severity of the error described by the DOMError
is fatal error. A DOM_SEVERITY_FATAL_ERROR will cause the normal processing to stop. The return value of DOMErrorHandler::handleError()
is ignored unless the implementation chooses to continue, in which case the behavior becomes undefined.
DOM_SEVERITY_WARNING
The severity of the error described by the DOMError
is warning. A DOM_SEVERITY_WARNING will not cause the processing to stop, unless DOMErrorHandler::handleError()
returns false.
| DOMError::DOMError | ( | ) | [protected] |
| virtual DOMError::~DOMError | ( | ) | [virtual] |
Destructor.
| virtual ErrorSeverity DOMError::getSeverity | ( | ) | const [pure virtual] |
Get the severity of the error.
| virtual const XMLCh* DOMError::getMessage | ( | ) | const [pure virtual] |
Get the message describing the error that occured.
| virtual DOMLocator* DOMError::getLocation | ( | ) | const [pure virtual] |
Get the location of the error.
| virtual void* DOMError::getRelatedException | ( | ) | const [pure virtual] |
The related platform dependent exception if any.
| virtual const XMLCh* DOMError::getType | ( | ) | const [pure virtual] |
A XMLCh*
indicating which related data is expected in relatedData.
Users should refer to the specification of the error in order to find its XMLCh*
type and relatedData definitions if any.
Note: As an example, DOMDocument::normalizeDocument()
does generate warnings when the "split-cdata-sections" parameter is in use. Therefore, the method generates a DOM_SEVERITY_WARNING with type "cdata-sections-splitted" and the first DOMCDATASection
node in document order resulting from the split is returned by the relatedData attribute.
| virtual void* DOMError::getRelatedData | ( | ) | const [pure virtual] |


special care is needed to prevent top grid from growing and causing shifts while you are dragging (which is a know issue).
You can either set a fix row, or have enough padding on a parent div to allow for an extra row to be created as needed), or....


2019 LA Auto Show: Land Rover Defender — America’s Coolest New SUV
It seems like all cars in this uber-high-performance luxury car segment are just becoming gigantic, squishy, straight-line bullet trains. They’re all astonishingly quick but lack …
by Nico DeMattiaLike most car enthusiasts, we were pretty excited about the launch of the new Land Rover Defender, primarily because it’s finally coming back to America. For those not in the know, the Defender was sold in North America for a few years in the ’90s and that’s it. Since then, American enthusiasts have been hoping Land Rover would bring its famous rugged SUV back to the ‘States. Now, that time is finally here.
At the 2019 LA Auto Show, the Land Rover made its North American debut, offering a chance to the majority of American media to see it for the first time. After seeing it, I’m firmly a believer in the fact that the new Defender is America’s coolest SUV.
As BMW enthusiasts, you might like the BMW X5 M or X3 M more than the Defender, finding either of those to be cooler than the new Land Rover. However, and I say this with as much objectivity as I can muster, you’re wrong.
The new Land Rover Defender is effortlessly cool. Its boxy, rugged styling, extremely customizable off-road kit and overall presence make it so incredibly charming and desirable. If I could afford one, there’s be a Defender 110 (five-door model) in my driveway with the cool ladder option and chunky tires. And I’d be an incredibly happy man.
Sure, the Defender isn’t very fast, nor will it handle all that well. However, it can off-road with the very best off-roaders in the world (and is honestly better than most, if not all) and it just looks so damn good. Its interior is also great, with nice materials, chunky styling and an overall sense of solidity, making it feel like a proper Land Rover.
Also in LA was the Land Rover Defender used to film the upcoming James Bond film, No Time to Die. If you couldn’t already tell, it’s the black one in the photo gallery that has mud and dents all on the exterior, with a stripped-out interior.


Here is a GIST that was created using the API. |
|
That is interesting to see that we can embed that content and document that into another page :) |
|
FUNDING ME :) |
Here is a way you can encourage my autonomous work :)Become a Patron! |