非 Unicode 数据库中的 XML
2009-11-28 00:00:00 来源:WEB开发网如果 BLOB XML 流不包含 BOM,那么解析这个流,以便在 XML 数据头部中的 "<?xml version="1.0" encoding = "...encoding string">" 格式中发现 XML 属性 encoding。encoding 属性(如果存在)被映射为一个 CCSID,然后这个 CCSID 被用作内部编码。
如果没有 BOM,也没有给定的编码属性,则假定 BLOB 数据由 UTF-8 代码点组成。注意,在 XML 解析之前不会进行检查以确保 BLOB 只包含合法的 UTF-8 代码点。如果传入一个包含单独一个代码点 0xDB 的 BLOB 以将其解析为 XML,那么会导致一个错误,因为这不是合法的 UTF-8 代码点。对于 XML 可以包含的合法 UTF-8 代码点还有更多的限制。
用于 “清理” XML 文档的 UDF
最后一种办法是将有问题的字符转换为十六进制字符引用(格式为 "hhhh;",其中 hhhh 是字符的十六进制 Unicode UTF16 代码点)。十进制字符引用可以在任何 XML 片段中使用,并且在 XML 解析期间被实际的代码点替换。字符串 "I just joined the ΔΨ fraternity!" 在 UTF-8 中相当于 "I just joined the ΔΨΠ fraternity!" 。
为了帮助用户转换 XML 文档,DB2 提供了两个 UDF,这两个 UDF 在 XML 文档被插入数据库之前测试和清理 XML 文档。
第一个 UDF 名为 TEST_XML,它以一个包含 XML 文档的 BLOB 为参数(较可取的方法是使用一个 BLOB_FILE,该 BLOB_FILE 引用一个用 UTF-8 码集编码的 XML 文本文件),并输出一个 Boolean 值。当 TEST_XML 被调用时,DB2 尝试将这个 BLOB 从 UTF-8 转换为数据库代码页,如果在转换期间没有遇到替换字符则返回 TRUE,如果遇到替换字符则返回 FALSE。这个函数不会插入文档或者修改 BLOB。它只是一个测试,看是否可以安全地将这个 XML 文档作为 CHAR、VARCHAR 或 CLOB 插入到数据库中,而不会损失数据完整性。
更多精彩
赞助商链接