/* * xmltables.sql -- Create or replace tables for storing XML in the db * * Purpose: creates tables needed for XML database * * Created: 12 September 1999 * Author: Matt Jones * Organization: National Center for Ecological Analysis and Synthesis * Copyright: 2000 Regents of the University of California and the * National Center for Ecological Analysis and Synthesis * For Details: http://www.nceas.ucsb.edu/ * File Info: '$Id: xmltables.sql 123 2000-06-07 00:44:37Z jones $' * */ /* * Drop all of the objects in proper order */ set echo off DROP SEQUENCE xml_nodes_id_seq; DROP SEQUENCE xml_catalog_id_seq; DROP SEQUENCE xml_documents_id_seq; DROP TRIGGER xml_nodes_before_insert; DROP TRIGGER xml_documents_before_insert; DROP TRIGGER xml_catalog_before_insert; DROP TABLE xml_index; DROP TABLE xml_catalog; DROP TABLE xml_documents; DROP TABLE xml_nodes; /* * Nodes -- table to store XML Nodes (both elements and attributes) */ CREATE TABLE xml_nodes ( nodeid NUMBER(20), -- the unique node id (pk) nodeindex NUMBER(10), -- order of nodes within parent nodetype VARCHAR2(20), -- type (DOCUMENT, COMMENT, PI, -- ELEMENT, ATTRIBUTE, TEXT) nodename VARCHAR2(250), -- the name of an element or attribute nodedata VARCHAR2(4000), -- the data for this node (e.g., -- for TEXT it is the content) parentnodeid NUMBER(20), -- index of the parent of this node rootnodeid NUMBER(20), -- index of the root node of this tree docid NUMBER(20), -- index to the document id date_created DATE, date_updated DATE, CONSTRAINT xml_nodes_pk PRIMARY KEY (nodeid), CONSTRAINT xml_nodes_root_fk FOREIGN KEY (rootnodeid) REFERENCES xml_nodes, CONSTRAINT xml_nodes_parent_fk FOREIGN KEY (parentnodeid) REFERENCES xml_nodes ); CREATE SEQUENCE xml_nodes_id_seq; CREATE TRIGGER xml_nodes_before_insert BEFORE INSERT ON xml_nodes FOR EACH ROW BEGIN SELECT xml_nodes_id_seq.nextval INTO :new.nodeid FROM dual; END; / /* * Documents -- table to store XML documents */ CREATE TABLE xml_documents ( docid NUMBER(20), -- the document id # rootnodeid NUMBER(20), -- refernce to the root node of the DOM docname VARCHAR2(100), -- usually the root element name doctype VARCHAR2(100), -- public id indicating document type doctitle VARCHAR2(1000), -- title of document if exists date_created DATE, date_updated DATE, CONSTRAINT xml_documents_pk PRIMARY KEY (docid), CONSTRAINT xml_documents_root_fk FOREIGN KEY (rootnodeid) REFERENCES xml_nodes ); CREATE SEQUENCE xml_documents_id_seq; CREATE TRIGGER xml_documents_before_insert BEFORE INSERT ON xml_documents FOR EACH ROW BEGIN SELECT xml_documents_id_seq.nextval INTO :new.docid FROM dual; END; / /* * XML Catalog -- table to store all external sources for XML documents */ CREATE TABLE xml_catalog ( catalog_id NUMBER(20), -- the id for this catalog entry entry_type VARCHAR2(500), -- the type of this catalog entry -- (e.g., DTD, XSD, XSL) source_doctype VARCHAR2(500), -- the source public_id for transforms target_doctype VARCHAR2(500), -- the target public_id for transforms public_id VARCHAR2(500), -- the unique id for this type system_id VARCHAR2(1000), -- the local location of the object CONSTRAINT xml_catalog_pk PRIMARY KEY (catalog_id) -- CONSTRAINT xml_catalog_uk UNIQUE (entry_type, source_doctype, target_doctype, public_id) ); CREATE SEQUENCE xml_catalog_id_seq; CREATE TRIGGER xml_catalog_before_insert BEFORE INSERT ON xml_catalog FOR EACH ROW BEGIN SELECT xml_catalog_id_seq.nextval INTO :new.catalog_id FROM dual; END; / /* * Index of Nodes -- table to store precomputed paths through tree for * quick searching in structured searches */ CREATE TABLE xml_index ( nodeid NUMBER(20), -- the unique node id path VARCHAR2(20), -- precomputed path through tree CONSTRAINT xml_index_pk PRIMARY KEY (nodeid,path), CONSTRAINT xml_nodes_fk FOREIGN KEY (nodeid) REFERENCES xml_nodes );