Changes for page Postup převodu dat z Clavia
Last modified by Jan Šimeček on 2025/11/03 15:11
From version 1.1
edited by Jan Šimeček
on 2024/06/28 09:42
on 2024/06/28 09:42
Change comment:
There is no comment for this version
To version 32.1
edited by Jan Šimeček
on 2024/06/28 10:37
on 2024/06/28 10:37
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -2,33 +2,41 @@ 2 2 3 3 = Záloha dat Clavia pro převod do Tritia = 4 4 5 -Postup pro malé knihovny k poslání je zde: [[Záloha dat Clavia pro převod do Tritia>> url:https://confluence.tritius.cz/pages/viewpage.action?pageId=94109860]]5 +Postup pro malé knihovny k poslání je zde: [[Záloha dat Clavia pro převod do Tritia>>doc:.Zaloha-dat-Clavia-pro-prevod-do-Tritia.WebHome]] 6 6 7 7 = Převod = 8 8 9 9 == Tipy a Triky == 10 10 11 -|((( 12 - 11 +{{html}} 12 +<button onclick="toggleContent('content1')">Tipy a Triky - přečíst</button> 13 +<div id="content1" style="display: none;"> 14 +<p>Revize se nepřevádí, musí být před zahájením převodu do Tritia uzavřena.</p> 15 +<p>Dispečink Clavia se nepřevádí, pokud data potřebují, tak si je musí před vypnutím Clavia opsat.</p> 16 +<p>Statistiky LWWW se nepřevádí, knihovna si je musí opsat.</p> 17 +<p>Neměnit klíč v definici poplatků po testovacím převodu, nepovede se pak napojení poplatků při dalším importu - měnit až po posledním importu knihovny.</p> 18 +<p>Neměnit zkratky v odděleních, nebude fungovat vazba výchozího oddělení čtenáře - měnit až po ostrém startu.</p> 19 +</div> 20 +<script> 21 + function toggleContent(contentId) { 22 + var content = document.getElementById(contentId); 23 + if (content.style.display === "none") { 24 + content.style.display = "block"; 25 + } else { 26 + content.style.display = "none"; 27 + } 28 + } 29 +</script> 30 +{{/html}} 13 13 14 -|=Popis 15 -|(% colspan="1" %)Revize se nepřevádí, musí být před zahájením převodu do Tritia uzavřena. 16 -|(% colspan="1" %)Dispečink Clavia se nepřevádí, pokud data potřebují, tak si je musí před vypnutím Clavia opsat. 17 -|(% colspan="1" %)Statistiky LWWW se nepřevádí, knihovna si je musí opsat. 18 -|Neměnit klíč v definici poplatků po testovacím převodu, nepovede se pak napojení poplatků při dalším importu - měnit až po posledním importu knihovny. 19 -|Neměnit zkratky v odděleních, nebude fungovat vazba výchozího oddělení čtenáře - měnit až po ostrém startu. 20 - 21 - 22 -))) 23 - 24 24 == Příprava převodu == 25 25 26 -* Zeptat se knihovny před převodem: [[Dotazy na knihovnu před převodem>> url:https://confluence.tritius.cz/pages/viewpage.action?pageId=118194244]]27 -* Zálohu rozbalovat přes Total Commander - ne přes Windows průzkumníka!!! 34 +* Zeptat se knihovny před převodem: [[Dotazy na knihovnu před převodem>>doc:.Dotazy-na-knihovnu-pred-prevodem.WebHome]] 35 +* Zálohu rozbalovat přes **{{html}}<span style="color: red;">Total Commander </span>{{/html}}**- ne přes Windows průzkumníka!!! 28 28 29 -1. **Aktualizovat Clavius** na současnou verzi (Pomůcky → Update přes internet) 30 -1. **Provést synchronizaci polí (**Pomůcky → Editace polí → Sync → Aktualizovat)31 -1. **Provést kontrolu integrit dat **(chyby opravovat !!! hlavně dogenerovat autority a smazat chybná pole) 37 +1. **{{html}}<span style="color: green;">Aktualizovat Clavius</span>{{/html}}** na současnou verzi (Pomůcky → Update přes internet) 38 +1. **{{html}}<span style="color: green;">Provést synchronizaci polí</span>{{/html}}** (Pomůcky → Editace polí → Sync → Aktualizovat) 39 +1. **{{html}}<span style="color: green;">Provést kontrolu integrit dat </span>{{/html}}**(chyby opravovat !!! hlavně dogenerovat autority a smazat chybná pole) 32 32 1*. Katalogizace: 33 33 1**. **do integrit with .t.,.t. **( lze využít i příkazu **do tritius** , dělá to samé ) 34 34 1***. vyzve ke sloučení slovníků C1 a C3 do C1 - dát ano ... ... @@ -35,14 +35,14 @@ 35 35 1**. **do OKindik with .T.** 36 36 1*. Výpůjčák 37 37 1**. Clex.exe → Systém → Provést Kontrolu integrity dat) 38 -1. **pohled([select !s.scislo, s.pcislo, s.ucislo, #s.ckod from svazky s, (select ckod from svazky group by ckod having count(*)>1) s1 where s.ckod<>'' and s.ckod=s1.ckod order by s.ckod])** 46 +1. **{{html}}<span style="color: green;">pohled([select !s.scislo, s.pcislo, s.ucislo, #s.ckod from svazky s, (select ckod from svazky group by ckod having count(*)>1) s1 where s.ckod<>'' and s.ckod=s1.ckod order by s.ckod])</span>{{/html}}** 39 39 1*. duplicity čárových kódů svazků řešit ve foxíku tak že za čárový kód přídáte písmeno a,b,c ... kromě prvního výskytu čárového kódu 40 -1. **select isxn, count(*) as pocet from tituly group by isxn order by pocet desc** 48 +1. **{{html}}select isxn, count(*) as pocet from tituly group by isxn order by pocet desc{{/html}}** 41 41 1*. kontrola na duplicitu ISBN 42 42 43 43 == Vlastní export dat z Clavia - automaticky (verze Clavia od 28.2.2019) == 44 44 45 -* **Pokud se jedná o reksové centrum, musí export probíhat pod uživatelem Správce Reksu!!** ( Systém - Servis dat - Výběr jiné knihovny - zaškrtnout Správce REKSu - OK )53 +* **{{html}}<span style="color: red;">Pokud se jedná o reksové centrum, musí export probíhat pod uživatelem Správce Reksu!!</span>{{/html}}** ( Systém - Servis dat - Výběr jiné knihovny - zaškrtnout Správce REKSu - OK ) 46 46 * Při importu REKS knihovny = přečíst oddíl 2.5 ( možná úprava svazků v Claviu ) 47 47 * ve foxíku spustit: 48 48 * **do FULLEXPORT** ... ... @@ -51,39 +51,81 @@ 51 51 52 52 == Příprava CLAVIUS SQL == 53 53 54 -Pro převod dat akvizice, výpůjčního protokolu a další částí se používá přímý převod do Tritiia z SQL databáze Clavius. 55 -Proto je nutné převést celý Clavius do SQL (lze využít SQL server pro Tritius), tento krok lze vynechat jen pokud se importuje pouze fond. 62 +{{html}} 63 +<button onclick="toggleContent('content4')">NASQL</button> 64 +<div id="content4" style="display: none;"> 65 +<p>Pro převod dat akvizice, výpůjčního protokolu a další částí se používá přímý převod do Tritiia z SQL databáze Clavius. 66 +<p>Proto je nutné převést celý Clavius do SQL (lze využít SQL server pro Tritius), tento krok lze vynechat jen pokud se importuje pouze fond. 67 +<p>Je zapotřebí použít program <b>NASQL.exe</b></p> 68 +</div> 69 +<script> 70 + function toggleContent(contentId) { 71 + var content = document.getElementById(contentId); 72 + if (content.style.display === "none") { 73 + content.style.display = "block"; 74 + } else { 75 + content.style.display = "none"; 76 + } 77 + } 78 +</script> 79 +{{/html}} 56 56 57 -* postup vytvoření databáze clavius na SQL serveru a převodu dat Clavia pomocí **NASQL.EXE** viz: [[http:~~/~~/www.vkta.cz/LANius/diskety/sql/mssql.htm>>url:http://www.vkta.cz/LANius/diskety/sql/mssql.htm]] pro MSSQL 58 -* není potřeba nic nastavovat pouze je potřeba SQL uživatel který má plná práva pro databázi clavius 59 - 60 60 == Importování knihovny pokud v cílovém Tritiu již je část svazků (např. Výměnné soubory) == 61 61 62 62 V případě připojování dat je nutná existence čárového kódu v tabulce svazky u výměnných souborů, aby došlo ke správnému napárování: 63 63 64 -| 65 65 66 -{{{Kontrola dat v Claviu, jestli obsahují vygenerovaný správně ckod, kdy 31840 - je prefix nadřízené knihovny: 67 - 68 -browse for betw(val(pcislo),500000,599999) and !empt(ckod) and ckod<>'31840' 69 - 70 -Pokud nic nevrátí, tak netřeba dělat! V opačném případě je potřeba předem dogenerovat do svazky.ckod čárový kód s prefiem nadřízené knihovny: 71 - 72 -browse for betw(val(pcislo),500000,599999) and betw(len(allt(ckod)),0,8) 86 +{{html}} 87 +<button onclick="toggleContent('content2')">Postup kontroly a příkazy pro vygenerování</button> 88 +<div id="content2" style="display: none;"> 89 +<p><b>Kontrola dat v Claviu, jestli obsahují vygenerovaný správně ckod, kdy 31840 - je prefix nadřízené knihovny:</b></p> 90 +<br> 91 +<p>browse for betw(val(pcislo),500000,599999) and !empt(ckod) and ckod<>'31840'</p> 92 + <br> 93 +<p><b>Pokud nic nevrátí, tak netřeba dělat! V opačném případě je potřeba předem dogenerovat do svazky.ckod čárový kód s prefiem nadřízené knihovny:</b></p> 94 + <br> 95 +<p>browse for betw(val(pcislo),500000,599999) and betw(len(allt(ckod)),0,8)</p> 96 +<br> 97 +<p>repl ckod with '31840'+padl(allt(pcislo),8,'0') for betw(val(pcislo),500000,599999) and betw(len(allt(ckod)),0,8)</p> 98 +<p>repl ckod with '31840'+right(ckod,7) for betw(val(pcislo),500000,599999) and !empt(ckod) and ckod<>'31840'</p> 99 +<br><br> 100 +</div> 101 +<script> 102 + function toggleContent(contentId) { 103 + var content = document.getElementById(contentId); 104 + if (content.style.display === "none") { 105 + content.style.display = "block"; 106 + } else { 107 + content.style.display = "none"; 108 + } 109 + } 110 +</script> 111 +{{/html}} 73 73 74 -repl ckod with '31840'+padl(allt(pcislo),8,'0') for betw(val(pcislo),500000,599999) and betw(len(allt(ckod)),0,8) 75 -repl ckod with '31840'+right(ckod,7) for betw(val(pcislo),500000,599999) and !empt(ckod) and ckod<>'31840' }}} 113 +Je nutné zkontrolovat u VS, aby svazky měli {{html}}<span style="color: red;">vyplněný</span>{{/html}} CKOD (viz výše) a poté {{html}}<span style="color: red;">PIDKN</span>{{/html}} obsahovalo znak {{html}}<span style="color: red;">˙</span>{{/html}} : 76 76 77 -Je nutné zkontrolovat u VS, aby svazky měli **vyplněný **CKOD (viz výše) a poté **PIDKN **obsahovalo znak **˙ :** 115 +{{html}} 116 +<button onclick="toggleContent('content3')">Postup kontroly a příkazy pro vygenerování</button> 117 +<div id="content3" style="display: none;"> 118 +<p><b>Kontrola:</b></p> 119 +<p>pohled("SELECT * FROM svazky where ckod <> ' ' AND ckod not like 'prefixImportovaneREKSovky%' AND pidkn != '˙'")</p> 120 +<p></p> 121 +<p><b>Oprava:</b></p> 122 +<p>pohled("UPDATE svazky SET pidkn = '˙' where ckod <> ' ' AND ckod not like 'prefixImportovaneREKSovky%' AND pidkn != '˙'")</p> 123 +<br><br> 124 +</div> 125 +<script> 126 + function toggleContent(contentId) { 127 + var content = document.getElementById(contentId); 128 + if (content.style.display === "none") { 129 + content.style.display = "block"; 130 + } else { 131 + content.style.display = "none"; 132 + } 133 + } 134 +</script> 135 +{{/html}} 78 78 79 -| 80 - 81 -{{{Kontrola: 82 -pohled("SELECT * FROM svazky where ckod <> ' ' AND ckod not like 'prefixImportovaneREKSovky%' AND pidkn != '˙'") 83 - 84 -Oprava: 85 -pohled("UPDATE svazky SET pidkn = '˙' where ckod <> ' ' AND ckod not like 'prefixImportovaneREKSovky%' AND pidkn != '˙'")}}} 86 - 87 87 //Rozdíly oproti bodu 2.6.2 Import dat~:// 88 88 89 89 1. **Díla:** ... ... @@ -120,7 +120,7 @@ 120 120 121 121 **POZOR!!!!**: kontrola na existenci A podpolí v Tritiu, které zbyli od minulého importu, pokud ano tak smazat před importem!: 122 122 123 -| 173 +| 124 124 125 125 {{{select count(*) from authority_data where subfield_definition in ( 126 126 select id from subfield_definition where name_sub='A') ... ... @@ -131,7 +131,7 @@ 131 131 dále: 132 132 Po zapnutí Importovacího módu nesmí tabulka import_id_backup obsahovat jediný řádek, který má ve sloupci library ID právě převáděné knihovny, tedy select * from import_id_backup where library = ID_prave_prevadene_knihovny musí vrátit 0 . }}} 133 133 134 -* Pokud importuji do knihovny s defaultně jiným jazykem (slovenské knihovny) musím před importem správně nastavit **SYSTEM_DEFAULT_LANGUAGE **tak i** LOCALE.**184 +* Pokud importuji do knihovny s defaultně jiným jazykem (slovenské knihovny) musím před importem správně nastavit **SYSTEM_DEFAULT_LANGUAGE **tak i** LOCALE.** 135 135 * Pokud se nejedná o multiknihovní instanci, nastavit v položkách nastavení **MULTI_LIBRARY_INSTANCE** na false ( -304 ) - musí se provést před importem vzkazů čtenářů. 136 136 * V záložce **Systém** je volba **Import dat** 137 137 * Spustí se importní mód - běžní uživatelé se do knihovny v importním módu nemohou přihlásit ... ... @@ -205,77 +205,70 @@ 205 205 == Autority == 206 206 207 207 |=Popis problému|=Regulární výraz|=Vstup|=Výstup|=(% colspan="1" %)Poznámka 208 -| Pole 100 obsahuje podpole 4.| 258 +| Pole 100 obsahuje podpole 4.| 209 209 210 210 {{{100\\ [\\ 0-9]{2}\\ \\$4.*}}}| 211 211 212 -{{{ 100 1 $4070}}}| |(% colspan="1" %)Celé pole se zahodí. 213 -| Obsahuje pole 1??| 262 +{{{100 1 $4070}}}| |(% colspan="1" %)Celé pole se zahodí. 214 214 264 +| Obsahuje pole 1??| 265 + 215 215 {{{(1\?\?\ )(.*,.*)§100 $2}}} 216 216 217 217 {{{(1\?\?\ )(.*)§110 $2}}}| 218 218 219 -{{{ 1??$aAudoly, Sylvie}}}|270 +{{{1?? $aAudoly, Sylvie}}}| 220 220 221 -{{{ 100 $aAudoly, Sylvie}}}|(% colspan="1" %)Pokusí se rozpoznat zda se jedná o osobní jméno, nebo korporaci (pokud je osobní jméno, obsahuje hodnota čárku) 222 -|(% colspan="1" %)Pole 1XXa je prázdné|(% colspan="1" %) 272 +{{{100 $aAudoly, Sylvie}}}|(% colspan="1" %)Pokusí se rozpoznat zda se jedná o osobní jméno, nebo korporaci (pokud je osobní jméno, obsahuje hodnota čárku) 223 223 224 - {{{^1??.*\\$a$}}}|(% colspan="1" %)274 +|(% colspan="1" %)Pole 1XXa je prázdné|(% colspan="1" %) 225 225 226 -{{{199 $a}}}|(% colspan="1" %) |(% colspan="1" %)Odstraní se celé opakování pole 227 -|(% colspan="1" %)Obsahuje pole 100 a 110|(% colspan="1" %) 276 +{{{^1??.*\\$a$}}}| 228 228 229 -{{{ ^110.*}}}|(% colspan="1" %)278 +{{{199 $a}}}|(% colspan="1" %) |Odstraní se celé opakování pole 230 230 231 -{{{100 1 $aRoni, Luigi 232 -110 2 $aRoni, Luigii}}}|(% colspan="1" %) 280 +|(% colspan="1" %)Obsahuje pole 100 a 110|(% colspan="1" %) 233 233 234 -{{{1 001$aRoni, Luigi}}}|(% colspan="1" %)Odstraní opakování pole 110282 +{{{^110.*}}}| 235 235 284 +{{{100 1 $aRoni, Luigi 110 2 $aRoni, Luigii}}}| 285 + 286 +{{{100 1 $aRoni, Luigi}}}|(% colspan="1" %)Odstraní opakování pole 110 287 + 236 236 == Díla == 237 237 238 238 |=Popis problému|=Regulární výraz|=Vstup|=Výstup|=(% colspan="1" %)Poznámka 239 -|Odkazy na soubory v NAWEB obsahují před adresářem neplatné znaky.| 291 +|Odkazy na soubory v NAWEB obsahují před adresářem neplatné znaky.| 240 240 241 -{{{(X00[\ ]{4}.*\$[uo]).*(NAWEB.*)(\$.*)§$1$2$3 242 -(X00[\ ]{4}.*\$[uo]).*(NAWEB.*)§$1$2}}}| 293 +{{{(X00[\ ]{4}.*\$[uo]).*(NAWEB.*)(\$.*)§$1$2$3 (X00[\ ]{4}.*\$[uo]).*(NAWEB.*)§$1$2}}}| 243 243 244 -{{{X00 $uW:\NAWEB\OBSAHY\N38492.pdf$tObsah$oNAWEB\2016_Knihy\N38492.jpg 245 -X00 $uW:\NAWEB\OBSAHY\N38492.pdf$tObsah$oW:\NAWEB\2016_Knihy\N38492.jpg 246 -X00 $uNAWEB\OBSAHY\N38492.pdf$tObsah$oW:\NAWEB\2016_Knihy\N38492.jpg 247 -X00 $oW:\NAWEB\OBSAHY\N38492.pdf$tObsah$uNAWEB\2016_Knihy\N38492.jpg 248 -X00 $oW:\NAWEB\OBSAHY\N38492.pdf$tObsah$uW:\NAWEB\2016_Knihy\N38492.jpg 249 -X00 $oNAWEB\OBSAHY\N38492.pdf$tObsah$uW:\NAWEB\2016_Knihy\N38492.jpg}}}| 295 +{{{X00 $uW:\NAWEB\OBSAHY\N38492.pdf$tObsah$oNAWEB\2016_Knihy\N38492.jpg X00 $uW:\NAWEB\OBSAHY\N38492.pdf$tObsah$oW:\NAWEB\2016_Knihy\N38492.jpg X00 $uNAWEB\OBSAHY\N38492.pdf$tObsah$oW:\NAWEB\2016_Knihy\N38492.jpg X00 $oW:\NAWEB\OBSAHY\N38492.pdf$tObsah$uNAWEB\2016_Knihy\N38492.jpg X00 $oW:\NAWEB\OBSAHY\N38492.pdf$tObsah$uW:\NAWEB\2016_Knihy\N38492.jpg X00 $oNAWEB\OBSAHY\N38492.pdf$tObsah$uW:\NAWEB\2016_Knihy\N38492.jpg}}}| 250 250 251 -{{{X00 $uNAWEB\OBSAHY\N38492.pdf$tObsah$oNAWEB\2016_Knihy\N38492.jpg 252 -X00 $uNAWEB\OBSAHY\N38492.pdf$tObsah$oNAWEB\2016_Knihy\N38492.jpg 253 -X00 $uNAWEB\OBSAHY\N38492.pdf$tObsah$oNAWEB\2016_Knihy\N38492.jpg 254 -X00 $oNAWEB\OBSAHY\N38492.pdf$tObsah$uNAWEB\2016_Knihy\N38492.jpg 255 -X00 $oNAWEB\OBSAHY\N38492.pdf$tObsah$uNAWEB\2016_Knihy\N38492.jpg 256 -X00 $oNAWEB\OBSAHY\N38492.pdf$tObsah$uNAWEB\2016_Knihy\N38492.jpg}}}|(% colspan="1" %)Odstraní znaky co nepatří před NAWEB. 257 -|(% colspan="1" %)X00 odakzuje na adresář, který neexistuje z důvodu velikosti písmen na linuxu (velikost písmen se musí shodovat).|(% colspan="1" %) 297 +{{{X00 $uNAWEB\OBSAHY\N38492.pdf$tObsah$oNAWEB\2016_Knihy\N38492.jpg X00 $uNAWEB\OBSAHY\N38492.pdf$tObsah$oNAWEB\2016_Knihy\N38492.jpg X00 $uNAWEB\OBSAHY\N38492.pdf$tObsah$oNAWEB\2016_Knihy\N38492.jpg X00 $oNAWEB\OBSAHY\N38492.pdf$tObsah$uNAWEB\2016_Knihy\N38492.jpg X00 $oNAWEB\OBSAHY\N38492.pdf$tObsah$uNAWEB\2016_Knihy\N38492.jpg X00 $oNAWEB\OBSAHY\N38492.pdf$tObsah$uNAWEB\2016_Knihy\N38492.jpg}}}|(% colspan="1" %)Odstraní znaky co nepatří před NAWEB. 258 258 259 - {{{(X00[\]{4}\$[ou]NAWEB[\\/])OBSAHY([\\/].*)§$1Obsahy$2}}}|(% colspan="1" %)299 +|(% colspan="1" %)X00 odakzuje na adresář, který neexistuje z důvodu velikosti písmen na linuxu (velikost písmen se musí shodovat).|(% colspan="1" %) 260 260 261 -{{{X00 $oNAWEB/OBSAHY/NC3404.pdf}}}|(% colspan="1" %)301 +{{{(X00[\ ]{4}\$[ou]NAWEB[\\/])OBSAHY([\\/].*)§$1Obsahy$2}}}| 262 262 263 -{{{X00 $oNAWEB/Obsahy/NC3404.pdf}}}|(% colspan="1" %)Změna velikosti písmen "OBSAHY" → "Obsahy". Regulární příkaz se musí dát až za regulární příkaz opravující validnost cesty. 264 -|(% colspan="1" %)Obsahuje pole ???.|(% colspan="1" %) 303 +{{{X00 $oNAWEB/OBSAHY/NC3404.pdf}}}| 265 265 266 -{{{ ^\?\?\?.*}}}|(% colspan="1" %)305 +{{{X00 $oNAWEB/Obsahy/NC3404.pdf}}}|(% colspan="1" %)Změna velikosti písmen "OBSAHY" → "Obsahy". Regulární příkaz se musí dát až za regulární příkaz opravující validnost cesty. 267 267 268 -{{{??? $aCzech Republic$eautomapa}}}|(% colspan="1" %) |(% colspan="1" %)Odstraní otazníkové pole. 269 -|(% colspan="1" %)1XX4 nebo 7XX4 obsahuje neexistující kód role|(% colspan="1" %) 307 +|(% colspan="1" %)Obsahuje pole ???.|(% colspan="1" %) 270 270 271 -{{{ (^[710]{3}.*)(\$4sut)(.*)§$1$3}}}|(% colspan="1" %)309 +{{{^\?\?\?.*}}}| 272 272 273 -{{{ 100 1$A1000239919$aLiker,Jeffrey K.$7xx0031426$4sut}}}|(% colspan="1" %)311 +{{{??? $aCzech Republic$eautomapa}}}|(% colspan="1" %) |Odstraní otazníkové pole. 274 274 313 +|(% colspan="1" %)1XX4 nebo 7XX4 obsahuje neexistující kód role|(% colspan="1" %) 314 + 315 +{{{(^[710]{3}.*)(\$4sut)(.*)§$1$3}}}| 316 + 317 +{{{100 1 $A1000239919$aLiker, Jeffrey K.$7xx0031426$4sut}}}| 318 + 275 275 {{{100 1 $A1000239919$aLiker, Jeffrey K.$7xx0031426}}}|(% colspan="1" %)kód role z autority Neznámý kód role odstraní. 276 276 277 277 278 278 ))) 279 279 280 - 281 - 324 + ~{~{/html}}~{~{/html}}