[ruby-oci8-devel] About XML DB support in Ruby-OCI8
KUBO Takehiro
kubo at jiubao.org
Thu Mar 13 10:27:42 EDT 2008
Hi Liming,
On Wed, Mar 12, 2008 at 12:25 PM, Liming Lian <liming.lian at oracle.com> wrote:
> Hi Kubo,
>
> I am looking into XML DB support in Ruby-OCI8. It is apparent the
> existed code in xmldb.c only implements part of this functionality. And
> it is quite standalone and focuses only on how to construct REXML
> objects from XML data. The missing parts are: defining new data type of
> XMLType for binding, operating XML data in database and some other
> functions related to OCI operations.
Yes. I had implemented oci8_make_rexml() to construct REXML objects
from XML data in Oracle type attributes. It was called from tdo.c,
which was deleted about one year ago. When I reconstructed Oracle
object type support, I didn't add code for XML type. That's because
I thought I would add it after XML type binding was finished.
But it have been postponed.
> Another issue I concern is that, the XML DB support depends on XMLDB
> development toolkit(XDK). We have to check the host environment to
> determine if the XDK is available in the configuration phase. To check
> prerequisite of XDK installation, I think we have to change the
> ext/oci8/extconf.rb or ext/oci8/oraconf.rb a little bit to generate
> proper Makefile for compiling oci8lib.
As for oci8_make_rexml(), it doesn't need XMLDB headers. Required
function prototypes are copied to xmldb.c.
> Before taking further step into improving XML DB support in OCI8, I
> would like to know your thoughts including how did you previously plan
> to design xmldb.c, what's the difficulties you have ever met, and does
> this module depends on any other parts in Ruby-OCI8. I believe those
> information is a great of importance to me.
* How did you previously plan to design xmldb.c.
previous plan:
xmldb.c
- conversion between REXML objects and XML data
tdo.c
- binding XML data
- get/set XML data in object type attributes
* Does this module depends on any other parts in Ruby-OCI8.
current plan:
xmldb.c
- conversion between REXML objects and XML data
- binding XML data
object.c
- get/set XML data in object type attributes
Almost XML type support are implemented in xmldb.c.
- bind class (OCI8::BindType::REXML?)
- conversion between XML data and REXML objects
The number of non-static C functions in xmldb.c is only three.
void Init_oci_xmldb(void);
VALUE oci8_make_rexml(struct xmlctx *xctx, xmlnode *node);
construct REXML objects from XML data.
void oci8_set_rexml(struct xmlctx *xctx, xmlnode *node, VALUE obj);
1. clear all contents of a XML datum
2. set REXML object's contents to the XML datum.
object.c uses oci8_make_rexml and oci8_set_rexml to get and set
XML type attributes in Oracle object types.
* What's the difficulties you have ever met.
1. whitespaces
Whitespaces in XML text may or may not be reserved when converting
to DOM objects. I have forgot the details.
2. encoding
REXML's encoding must be UTF-8. But XML type's encoding depends on
NLS_LANG.
More information about the ruby-oci8-devel
mailing list