<div dir="ltr"><div class="gmail_extra">Hello Peter,</div><div class="gmail_extra"><br><div class="gmail_quote">2017-11-03 1:59 GMT+06:00 Peter Brottveit Bock <span dir="ltr"><<a href="mailto:post@peterbb.net" target="_blank">post@peterbb.net</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
It seems to me that it's not possible to store xml in a database. Is there any reason for this?<br>
<br>
My understanding of ur/web is that the xml data type is—under the hood—simply a string. I therefore would have thought it would be trivial to store it in a database.<br>
<br></blockquote><div><br></div><div>Storing it in a database is prone to XML/HTML injection (therefore the general case is disallowed).</div><div><br></div><div>If you want to store in database, then you will have to print it to a string and then parse it back into XML/HTML (for a strictly controlled subset of XML/HTML).</div><div><br></div><div>There is a library for this use-case in UPO:</div><div><br></div><div><a href="https://github.com/achlipala/upo/blob/master/html.urs">https://github.com/achlipala/upo/blob/master/html.urs</a></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
As a minimal example:<br>
<br>
------------------<br>
table db : { Elem : xbody }<br>
<br>
fun display_db () =<br>
    queryX (SELECT * FROM db)<br>
           (fn row => row.Db.Elem)<br>
<br>
fun add_to_db (x : xbody) : transaction unit =<br>
    dml (INSERT INTO db(Elem) VALUES ({[x]}))<br>
<br>
fun main () =<br>
    add_to_db <xml> Hello </xml>;<br>
    display_db ()<br>
------------------<br>
<br>
fails with<br>
------------------<br>
example.ur:5:38: (to 5:43) Can't resolve type class instance<br>
       Class constraint:<br>
sql_injectable (xml ([Dyn = (), MakeForm = (), Body = ()]) ([]) ([]))<br>
Reduced to unresolvable:<br>
sql_injectable_prim<br>
 (xml ([Dyn = (), MakeForm = (), Body = ()]) ([]) ([]))<br>
------------------<br>
<br>
— Peter<br>
<br>
______________________________<wbr>_________________<br>
Ur mailing list<br>
<a href="mailto:Ur@impredicative.com">Ur@impredicative.com</a><br>
<a href="http://www.impredicative.com/cgi-bin/mailman/listinfo/ur" rel="noreferrer" target="_blank">http://www.impredicative.com/<wbr>cgi-bin/mailman/listinfo/ur</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Cheers,<br>Artyom Shalkhakov<br></div>
</div></div>