锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏄犲皠鏂囦歡鏄竴涓壒孌婄殑XML鏂囦歡錛岀敤鎴峰湪鍏朵腑鎸囧畾XML鍏冪礌銆佸睘鎬э紙attributes錛変互鍙奝CDATA濡備綍鏄犲皠鍒版暟鎹簱鐨勮〃涓庡垪銆?a >娓呭崟A灝辨槸榪欎釜XML紺轟緥鐨勬槧灝勬枃浠訛紝娓呭崟B鏄? 鏁版嵁搴撶殑涓涓猄QL鏋舵瀯銆傚湪娓呭崟A涓紝Options鍏冪礌鍖呭惈緋葷粺鐗規湁鐨勪竴浜涘弬鏁般傚湪榪欎緥瀛愪腑錛屼綘瑕佽緗浉搴旂殑鏍煎紡錛屼互瀹炵幇DATE綾誨瀷鐨勬暟鎹簱瀛楁涓? XML鏁版嵁鐨勭浉浜掕漿鎹€傛敞鎰忥紝Pattern灞炴у繀欏婚伒寰猨ava.text.SimpleDateFormat妯″紡瑙勮寖銆?/p>
娓呭崟A:
Listing A |
![]() |
![]() |
<?xml version='1.0' ?> <XMLToDBMS Version="2.0" xmlns="http://www.xmlmiddleware.org/xmldbms/v2"> <Options> <SimpleDateFormat Pattern="yyyy-MM-dd" DefaultForTypes="DATE" /> </Options> <Databases> <Database Name="Default"> <Catalog> <Schema> <Table Name="users"> <Column Name="user_id" DataType="VARCHAR" Length="24" Nullable="No"/> <Column Name="company" DataType="VARCHAR" Length="255" Nullable="No"/> <PrimaryKeyKeyGenerator="UID"> <UseColumn Name="user_id"/> </PrimaryKey> </Table> <Table Name="orders"> <Column Name="order_id" DataType="VARCHAR" Length="24" Nullable="No"/> <Column Name="user_id" DataType="VARCHAR" Length="24" Nullable="No"/> <Column Name="posted_at" DataType="DATE" Nullable="No"/> <Column Name="type" DataType="INTEGER" Nullable="Yes"/> <ForeignKey Name="order_to_user_FK"> <UseTable Name="users" /> <UseUniqueKey Name="PrimaryKey" /> <UseColumn Name="user_id"/> </ForeignKey> <PrimaryKeyKeyGenerator="UID"> <UseColumn Name="order_id"/> </PrimaryKey> </Table> <Table Name="cargos"> <Column Name="cargo_id" DataType="VARCHAR" Length="24" Nullable="No"/> <Column Name="order_id" DataType="VARCHAR" Length="24" Nullable="No"/> <Column Name="title" DataType="VARCHAR" Length="255" Nullable="Yes"/> <Column Name="code" DataType="VARCHAR" Length="255" Nullable="Yes"/> <Column Name="quantity" DataType="INTEGER" Nullable="Yes"/> <Column Name="weight" DataType="INTEGER" Nullable="Yes"/> <Column Name="danger" DataType="VARCHAR" Length="255" Nullable="Yes"/> <PrimaryKeyKeyGenerator="UID"> <UseColumn Name="cargo_id"/> </PrimaryKey> <ForeignKey Name="cargo_to_order_FK"> <UseTable Name="orders" /> <UseUniqueKey Name="PrimaryKey" /> <UseColumn Name="order_id"/> </ForeignKey> </Table> </Schema> </Catalog> </Database> </Databases> <Maps> <ClassMap> <ElementType Name="order"/> <ToClassTable Name="orders"/> <PropertyMap> <ElementType Name="order_id"/> <ToColumn Name="order_id"/> </PropertyMap> <PropertyMap> <ElementType Name="user_id"/> <ToColumn Name="user_id"/> </PropertyMap> <PropertyMap> <ElementType Name="posted_at"/> <ToColumn Name="posted_at"/> </PropertyMap> <PropertyMap> <ElementType Name="type"/> <ToColumn Name="type"/> </PropertyMap> <RelatedClassKeyInParentTable="Unique"> <ElementType Name="cargo"/> <UseUniqueKey Name="PrimaryKey"/> <UseForeignKey Name="cargo_to_order_FK"/> </RelatedClass> </ClassMap> <ClassMap> <ElementType Name="cargo"/> <ToClassTable Name="cargos"/> <PropertyMap> <ElementType Name="cargo_id"/> <ToColumn Name="cargo_id"/> </PropertyMap> <PropertyMap> <ElementType Name="order_id"/> <ToColumn Name="order_id"/> </PropertyMap> <PropertyMap> <ElementType Name="title"/> <ToColumn Name="title"/> </PropertyMap> <PropertyMap> <ElementType Name="code"/> <ToColumn Name="code"/> </PropertyMap> <PropertyMap> <ElementType Name="quantity"/> <ToColumn Name="quantity"/> </PropertyMap> <PropertyMap> <ElementType Name="weight"/> <ToColumn Name="weight"/> </PropertyMap> <PropertyMap> <ElementType Name="danger"/> <ToColumn Name="danger"/> </PropertyMap> </ClassMap> </Maps> </XMLToDBMS> |
Listing B |
![]() |
![]() |
CREATE TABLE XMLDBMSKey ( HighKeyint(11) ); CREATE TABLE orders ( order_idvarchar(24) DEFAULT '' NOT NULL, user_idvarchar(24) DEFAULT '' NOT NULL, posted_atdate, type integer, PRIMARY KEY (order_id) ); CREATE TABLE cargos ( cargo_idvarchar(24) DEFAULT '' NOT NULL, order_idvarchar(24) DEFAULT '' NOT NULL, title varchar(255), code varchar(255), quantity integer, weight integer, danger varchar(255), PRIMARY KEY (cargo_id) ); |
娓呭崟A鐨凞atabases鍏冪礌鍖呭惈鏁版嵁搴撶殑涓涓叧緋繪灦鏋勩傝鏋勬灦紜繚XML-DBMS鑳芥紜湴鏄犲皠鏁版嵁騫剁紪璇戞槧灝勬枃浠訛紙濡傛灉瑕佸湪澶氫釜鏄犲皠鏂囦歡涓嬌鐢ㄧ浉鍚岀殑鏁版嵁搴撴灦鏋勶紝鏈濂界殑鍔炴硶灝辨槸鍦ㄦ瘡涓枃浠朵腑灝嗘灦鏋勪綔涓轟竴涓猉ML澶栭儴瀹炰綋鏉ュ寘瀹癸紝涓嶅繀姣忔閮借繘琛岄噸鍐欙級銆?/p>
鏁版嵁搴撳悕縐扳淒efault鈥濇剰鍛崇潃鏁版嵁搴撳繀欏誨湪JDBC榪炴帴URL涓樉寮忓湴鎸囧畾銆傚繀欏誨湪姣忎釜琛ㄤ腑鎻愪緵涓婚敭淇℃伅錛岃屼笖姣忎釜閿兘蹇呴』瀛樺湪浜庢暟鎹簱涓傚惁鍒欙紝緙栬瘧鍣ㄥ彲鑳芥姤鍛婁竴涓槧灝勫紓甯搞?/p>
鍦↘eyGenerator涓紝浣犻渶瑕佹彁渚涗富閿敓鎴愬櫒鐨勫悕縐幫紝鍚屾椂蹇呴』鐢ㄤ竴涓嫭绔嬬殑Java綾繪潵瀹炵幇榪欎釜鐢熸垚鍣ㄣ侹eyGenerator鏄疛ava鎺ュ彛鐨勪竴涓疄鐜幫紝姣忔鎵ц涓涓狪NSERT鎿嶄綔鏃訛紝瀹冮兘浼氱敓鎴愪竴涓儫涓鐨勯敭鍊箋備篃鍙嬌鐢ㄤ竴涓畝鍗曠殑銆佺幇鎴愮殑鐢熸垚鍣ㄣ?/p>
鍥綛鐨刋MLDBMSKey琛ㄥ寘鍚簡鐢盞eyGenerator浣跨敤鐨勫箋俇seColumn鍏冪礌鎸囧悜涓涓厖褰撲富閿殑鍏冪礌錛屽茍鍛婅瘔紼嬪簭鍦ㄥ摢閲屽啓鐢熸垚 鐨勯敭鍊箋傞櫎闈濶ame灞炴ф槑紜寚瀹氫簡涓涓悕縐幫紝鍚﹀垯涓婚敭浼氶殣寮忓湴閲囩敤PrimaryKey榪欎竴榛樿鍚嶇О銆備富閿彲鑳藉悓鏃朵嬌鐢ㄤ簡澶氬垪錛? KeyGenerator鐨勫疄鐜板繀欏葷煡閬撳畠搴旇鐢熸垚澶氬皯涓敭銆?/p>
娓呭崟A鐨凢oreignKey鍏冪礌鐢ㄤ簬鎻忚堪鍏冪礌綾諱箣闂寸殑涓婚敭鈥撳閿叧緋匯?/p>
鍦ㄦ槧灝勬枃浠朵腑錛屾渶閲嶈鐨勪竴閮ㄥ垎灝辨槸Maps灝忚妭銆傚厓绱犵被鍨嬪強鍏跺唴瀹歸氬父琚涓轟竴涓被錛屽茍鏄犲皠鍒頒竴涓〃銆傝繖鏄氳繃涓涓狢lassMap鍏冪礌鍙婂叾瀛愬厓绱? 鏉ュ畬鎴愮殑銆傚瓙鍏冪礌鍖呮嫭ElementType錛屽叾涓惈鏈夎鏄犲皠鐨勫厓绱犵殑鍚嶇О錛涗互鍙奣oClassTable錛屽畠鎸囧畾鍏冪礌瑕佹槧灝勫埌鍝釜琛ㄣ?/p>
PropertyMap鍏冪礌鑳芥帶鍒垛滅畝鍗曗濓紙瀛愯妭鐐逛腑鐨凱CDATA錛夊厓绱犳垨灞炴э紙attribute錛夋槧灝勨斺旇櫧鐒跺湪榪欎釜渚嬪瓙涓紝搴旂敤紼嬪簭鏄犲皠鐨? 鍙槸鍏冪礌銆俁elatedClass鍏冪礌鍏佽鎴戜滑鍦ㄦ灝佽鍙︿竴涓厓绱犵被錛屼絾閭d釜綾誨繀欏誨湪鍙︿竴涓狢lassMap鍏冪礌涓緱鍒板畾涔夈?/p>
鏄犲皠鏂囨。緙栬瘧鎴怷MLDBMap Java瀵硅薄錛屾渶緇堢殑緇撴灉浼氫紶緇橠BMSToDOM銆丏OMToDBMS鎴栬匘BMSDelete瀵硅薄銆傝繖浜涚壒孌婂璞¤礋璐d笌閫夋嫨銆佹彃鍏ャ佹洿鏂版垨鍒犻櫎鏁版嵁鏈夊叧鐨勫叏閮ㄥ伐浣溿?/p>
緙栧啓榪囨護鍣ㄥ拰鍔ㄤ綔鏂囦歡
榪囨護鍣ㄦ枃妗g敱涓緋誨垪榪囨護鍣ㄦ瀯鎴愶紝榪欎簺榪囨護鍣ㄥ簲鐢ㄤ簬鏁版嵁搴撲腑鐨勫箋傝繖鏍蜂竴鏉ワ紝榪囨護鍣ㄥ氨鑳借繃婊ょ敱SELECT鎿嶄綔媯绱㈢殑琛屾垨鑰呯敱DELETE鎿嶄綔鍒犻櫎鐨? 琛屻傝繃婊ゅ櫒璇█浣嶄簬鏄犲皠璇█鐨勯《绔傛崲璦涔嬶紝榪囨護鍣ㄦ枃妗e厑璁鎬綘鎸囧畾鏁版嵁鐨勬绱㈡潯浠訛紝鑰屾槧灝勮璦鎻愪緵緇撴瀯鍖栦俊鎭紙涔熷氨鏄仈鎺モ搄oin錛夈備綘鍙涓烘槧灝勮璦 鍜岃繃婊ゅ櫒璇█鍚堝茍鍦ㄤ竴璧鳳紝鍏卞悓涓烘暟鎹簱鎻愪緵浜嗕竴濂楃畝鍗曠殑鏌ヨ璇█錛屽畠紜繚緇撴灉浠ML鐨勫艦寮忚繑鍥炪傝繃婊ゅ櫒鏂囨。瑕佺紪璇戞垚FilterSet Java瀵硅薄錛屾渶緇堢殑瀵硅薄浼氫紶緇橠BMSToDOM鎴栬匘BMSDelete瀵硅薄銆?/p>
鍔ㄤ綔鏂囨。鐢變竴緋誨垪鍔ㄤ綔鏋勬垚錛岃繖浜涘姩浣滆搴旂敤浜嶺ML鏂囨。涓殑鍊箋備綘闇瑕佷負浣滀負綾繪潵鏄犲皠鐨勫厓绱犵被鍨嬫寚瀹氱浉搴旂殑鍔ㄤ綔銆傝繖浜涘姩浣滀細杞崲涓哄琛岀殑鎻掑叆銆佹洿鏂? 鍙婂垹闄ゆ搷浣溿傚湪涓涓姩浣滄枃妗d腑錛屽鏋滃凡緇忚瀹氱壒瀹氱殑琛岄渶瑕佹彃鍏ユ垨鏇存柊錛屽氨涓嶈兘鍐嶈瀹氶偅浜涜闇瑕佸垹闄わ紱鍙嶄箣浜︾劧銆傚鏋滀竴涓姩浣滄枃妗h瀹氭煇浜涜闇瑕佹彃鍏ユ垨鏇? 鏂幫紝灝變細鐢盌OMToDBMS瀵硅薄鏉ヤ嬌鐢ㄩ偅浜涙枃妗c傜浉鍙嶏紝濡傛灉瑙勫畾鏌愪簺琛岄渶瑕佸垹闄わ紝鍒欎細鐢盌BMSDelete瀵硅薄鏉ヤ嬌鐢ㄣ?/p>
Listing C
錛?xmlversion='1.0' ?錛?br />錛淎ctions Version="2.0" xmlns="http://www.xmlmiddleware.org/xmldbms/actions/v2"錛?br />錛淒efaultAction錛?br />錛淣one /錛?br />錛?DefaultAction錛?br />錛淎ction錛?br />錛淓lementType Name="order" /錛?br />錛淯pdateOrInsert /錛?br />錛?Action錛?br />錛淎ction錛?br />錛淓lementType Name="cargo" /錛?br />錛淯pdateOrInsert /錛?br />錛?Action錛?br />錛?Actions錛?/p>
娓呭崟C婕旂ず浜嗘彃鍏?鏇存柊鍔ㄤ綔銆傝繖孌典唬鐮佷細浣跨敤涓涓凡鐭ョ殑涓婚敭錛堝鏋滃瓨鍦ㄧ殑璇濓級鏉ユ洿鏂頒竴涓錛屾垨鑰呯敓鎴愪竴涓柊鐨勪富閿紙濡傛灉涓嶅瓨鍦ㄧ殑璇濓級銆傚疄闄呬笂錛屼綘闇瑕佷負涓や釜綾伙紙order鍜宑argo錛夋彃鍏ュ厓绱狅紝鍥犱負cargo鍏冪礌宓屽鍦╫rder鍏冪礌涓?/p>
Listing D
錛?xmlversion='1.0' ?錛?br />錛淔ilterSet Version="2.0" xmlns="http://www.xmlmiddleware.org/xmldbms/filters/v2"錛?br />錛淥ptions錛?br />錛淲rapper Name="orders" /錛?br />錛?Options錛?br />錛淔ilters錛?br />錛淔ilter錛?br />錛淩ootFilter錛?br />錛淭able Name="orders" /錛?br />錛淲here Condition=" user_id = 'UID745632' "/錛?br />錛?RootFilter錛?br />錛?Filter錛?br />錛?Filters錛?br />錛?FilterSet錛?/p>
閫夋嫨鎴栧垹闄ゆ暟鎹椂錛岄渶瑕佷嬌鐢ㄥ寘鍚湪娓呭崟D涓殑榪囨護鍣ㄦ枃浠躲侽ptions鍏冪礌鍖呭惈涓涓壒孌婄殑Wrapper鍏冪礌錛屽畠鐢ㄤ簬鍖呰鏌ヨ緇撴灉銆傚鏋滀細浠庢暟鎹? 搴撲腑媯绱㈠涓厓绱狅紝灝遍渶瑕佷嬌鐢╓rapper鍏冪礌銆傚湪榪欑鎯呭喌涓嬶紝鐢熸垚鐨勬槸鍚湁澶氫釜鏍瑰厓绱犵殑XML緇撴瀯錛岀幇琛岀殑璁稿鏍囧噯閮戒笉鏀寔瀹冦?/p>
RootFilterelements鐢ㄤ簬鎸囧畾浠庢牴琛ㄦ绱㈠埌鐨勫箋?/p>
緙栧啓Java浠g爜
鐜板湪錛屾垜浠凡鍑嗗濂界紪鍐欒嚜宸辯殑搴旂敤紼嬪簭錛屽畠灝嗗湪涓涓叧緋繪暟鎹簱涓瓨鍌ㄥ拰媯绱OM鏂囨。銆傛竻鍗旹鍖呭惈浜嗙ず鑼冩х殑Java浠g爜錛屽畠鏈夊繀瑕佽繘涓姝ヨ鏄庛?/p>
Listing E
package test.xmldbms;
importorg.xmlmiddleware.db.*;
import org.xmlmiddleware.utils.XMLMiddlewareException;
importorg.xmlmiddleware.xmldbms.*;
importorg.xmlmiddleware.xmldbms.tools.*;
importorg.xmlmiddleware.xmldbms.actions.*;
importorg.xmlmiddleware.xmldbms.datahandlers.*;
importorg.xmlmiddleware.xmldbms.filters.*;
importorg.xmlmiddleware.xmldbms.keygenerators.*;
importorg.xmlmiddleware.xmldbms.maps.*;
importorg.xmlmiddleware.xmlutils.*;
importorg.xml.sax.*;
import org.w3c.dom.*;
importjava.io.*;
importjava.util.*;
public class XMLToDBMSAndViceVersa
{
// Service objects
private DOMToDBMSdomToDBMS = null;
private DBMSToDOMdbmsToDOM = null;
private DBMSDeletedbmsDelete = null;
// Credentials for connecting to database
private static String JDBC_DRIVER = "org.gjt.mm.mysql.Driver";
private static String JDBC_URL = "jdbc:mysql://localhost/dbname";
private static String JDBC_DBNAME = "dbname";
private static String JDBC_USER = "dbuser";
private static String JDBC_PASSWORD = "dbpassword";
// Some file names
private static String mapFilename = "Listing-A.map";
private static String actionFilename = "Listing-C.act";
private static String filterFilename = "Listing-D.act";
// Datahandler class
private static String GENERICHANDLER = "org.xmlmiddleware.xmldbms.datahandlers.GenericHandler";
// Key generation class
private static String KEYGENERATOR = "org.xmlmiddleware.xmldbms.keygenerators.KeyGenerator";
// Parser utils class; XML-DBMS does not yet support JAXP, so such operations as XML parsing and serializing
// needs to be a little customized for each parser. this is the class for supporting Xerces parser.
private static String PARSERUTILSCLASS = "org.xmlmiddleware.xmlutils.external.ParserUtilsXerces";
private static boolean VALIDATING_PARSER = false;
public static void main(String [] args) {
// Tell the JVM to run finalizers on exit. This is necessary to ensure
// that database connections are properly closed.
System.runFinalizersOnExit(true);
// Creating parser utilities
ParserUtilsutils = (ParserUtils)Class.forName(PARSERUTILSCLASS).newInstance();
// Creating a data source and data handler.
DataSourcedataSource = new JDBC1DataSource(JDBC_DRIVER, JDBC_URL);
dataHandler = (DataHandler)Class.forName(GENERICHANDLER).newInstance();
dataHandler.initialize(dataSource, JDBC_USER, JDBC_PASSWORD);
// Compiling and instantiating a Map object
MapCompiler compiler = new MapCompiler(utils.getXMLReader(VALIDATING_PARSER));
XMLDBMSMap map = compiler.compile(new InputSource(new FileReader(mapFilename)));
// Create an object containing information needed to transfer data
TransferInfotransferInfo = new TransferInfo(map);
transferInfo.addDataHandler(JDBC_DBNAME, dataHandler);
// Compiling and instantiating an Action object
ActionCompiler compiler = new ActionCompiler(utils.getXMLReader(VALIDATING_PARSE));
Actions actions = compiler.compile(map, new InputSource(new FileReader(actionFilename)));
// Creating and configuring service object
domToDBMS = new DOMToDBMS();
domToDBMS.setCommitMode(DataHandler.COMMIT_AFTERSTATEMENT);
domToDBMS.stopOnException(true);
domToDBMS.setFilterSetReturned(false);
KeyGeneratorkeyGen = (KeyGenerator)Class.forName(KEYGENERATOR).newInstance();
domToDBMS.addKeyGenerator("UID", keyGen); // Adding used in Listing-A key generator named UID
// Getting our XML document into DOM document
Document doc = utils.openDocument(new InputSource(new StringReader(xmlString)),VALIDATING_PARSER);
// Ooops... and our XML file is already in the database!
domToDBMS.storeDocument(transferInfo, doc, actions);
// Creating FilterSet object for retrieving data
FilterCompiler compiler = new FilterCompiler(utils.getXMLReader(validate));
FilterSetfilterSet = compiler.compile(map, new InputSource(new FileReader(filterFilename)));
// Creating and configuring another service object
dbmsToDOM = new DBMSToDOM(utils);
dbmsToDOM.setDTDInfo(null, null);
Hashtableparams = new Hashtable();
// And now we are getting a DOM document from database
doc = dbmsToDOM.retrieveDocument(transferInfo, filterSet, params, null);
}
}
棣栧厛錛屼綘蹇呴』瀹炰緥鍖栦竴涓暟鎹簮鍜屼竴涓暟鎹鐞嗙▼搴忋侸DBC1DataSource綾繪槸JDBC 2.0 DataSource鐨勪竴涓疄鐜幫紝瀹冪敤浜庝竴涓伒寰狫DBC1鏍囧噯鐨勯┍鍔ㄧ▼搴忥紝鑰屼笖鎻愪緵浜嗗榪炴帴姹犵殑鏀寔銆侱atahandler鏄敤浜庡鏁版嵁搴撹闂繘琛屾娊 璞$殑涓涓帴鍙c備綘榪樿鎸囩ずJVM鍦ㄩ鍑烘椂榪愯緇堢粨鍣紙finalizers錛夛紝榪欐槸鐢⊿ystem.runFinalizersOnExit(true) 鏉ュ疄鐜扮殑銆傜粓緇撳櫒蹇呴』榪愯錛屽惁鍒欐棤娉曚繚璇佹暟鎹簱榪炴帴姝g‘鍏抽棴銆侾arserUtils鏄疄鐜頒簡瑙f瀽鍣ㄧ壒鏈夋柟娉曠殑涓涓被鐨勬帴鍙c備箣鎵浠ラ渶瑕佸畠錛屾槸鍥犱負XML 瑙f瀽鍜屽簭鍒楀寲鎿嶄綔闇瑕侀拡瀵規瘡涓涓В鏋愬櫒榪涜灝戣瀹氬埗銆?/p>
浣犲繀欏葷紪璇戝拰瀹炰緥鍖栦竴涓狹ap瀵硅薄銆丄ctions瀵硅薄浠ュ強FilterSet瀵硅薄錛屽畠浠叏閮戒細鍦ㄦ枃妗h漿鎹㈣繃紼嬩腑浣跨敤銆備負姝わ紝浣犻渶瑕佷嬌鐢ㄧ敱 MapCompiler銆丄ctionCompiler鍜孎ilterCompiler絳夊璞℃彁渚涚殑鐩稿簲鐨勬柟娉曘俆ransferInfo瀵硅薄鍖呭惈鍦? XML鏂囨。鍜屾暟鎹簱涔嬮棿浼犺緭鏁版嵁鎵闇鐨勪俊鎭傚畠灝佽浜嗘牴鎹竴涓壒瀹氱殑鏄犲皠錛屽湪XML鏂囨。鍜屾暟鎹簱涔嬮棿浼犺緭鏁版嵁鎵闇鐨勬槧灝勫厓鏁版嵁浠ュ強DataHandler 瀵硅薄銆傚畠涓烘瘡涓暟鎹簱閮藉寘鍚崟鐙竴涓猉MLDBMSMap瀵硅薄鍜屼竴涓狣ataHandler瀵硅薄銆備綘榪樺繀欏誨垱寤轟竴涓狵eyGenerator瀹炵幇瀵硅薄錛屼互 渚垮湪鎻掑叆鏂板璞℃椂鐢熸垚涓婚敭銆傞敭鐢ㄤ簬鑱旀帴涓嶅悓鐨勮〃錛堜粠綾昏〃鍒扮被琛紝鎴栬呬粠綾昏〃鍒板睘鎬ц〃錛夛紝榪樼敤浜庝粠鏍硅〃錛坮oot tables錛夋绱㈡暟鎹?/p>
鏈鍚庯紝浣犲彲鍒涘緩涓涓狣OMToDBMS瀵硅薄錛屼互渚垮皢鏁版嵁浠庝竴涓狣OM鏍戜紶杈撳埌鏁版嵁搴撱傞噰鍙栫被浼肩殑鏂瑰紡錛岃繕鍙垱寤轟竴涓狣BMSToDOM瀵硅薄錛屼互渚垮皢鍏崇郴鏁版嵁浼犲洖DOM銆?/p>
鎬葷粨
鏈枃璇佹槑浣跨敤XML-DBMS鏉ュ瓨鍌╔ML鏁版嵁鍏跺疄騫朵笉闅俱傚鏋滀綘宸茬粡寤虹珛浜嗕竴涓叧緋繪暟鎹簱鍩虹緇撴瀯錛屾垨鑰呭笇鏈涘緩绔嬩竴涓嫭绔嬩簬鏁版嵁搴撳巶鍟嗙殑鍩虹緇? 鏋勶紝灝辨帹鑽愰噰鍙栬繖縐嶆柟寮忋傜敱浜嶺ML-DBMS涓嶈姹備換浣曠壒瀹氱殑鏁版嵁搴擄紝鎵浠ヤ綘鐨勬暟鎹簱鍙渶鐞嗚В鏍囧噯SQL錛岃屼笖鏈変竴涓狫DBC椹卞姩紼嬪簭錛堟垨鑰呭叿鏈夋ˉ鎺ユ満 鍒剁殑涓涓? ODBC椹卞姩紼嬪簭錛夊氨鍙互浜嗐傚鏋滀綘鐨勫簲鐢ㄧ▼搴忛渶瑕佹悳绱㈡垨鑰呭悎騫舵潵鑷笉鍚岀被鍨嬬殑鏁版嵁婧愮殑淇℃伅錛屽氨閫傚悎浣跨敤榪欎釜妗嗘灦錛屽洜涓哄叧緋繪暟鎹簱鏋舵瀯寰堝鏄撻氳繃XML DTD鍜孹ML鏋舵瀯鏉ュ緩绔嬶紝鍙﹀榪樻湁澶ч噺宸ュ叿鍙皢DTD鍜屾灦鏋勮漿鎹㈡垚鏄犲皠鏂囦歡銆傚彟澶栵紝榪樺彲鐢ㄥ畠鐢熸垚鐢辨暟鎹┍鍔ㄧ殑搴旂敤紼嬪簭錛屾瘮濡備竴涓狢MS鎴栬匔RM緋葷粺銆? XML-DBMS鏄粠XML鍒癉BMS鐨勪腑闂翠歡浜у搧鐨勪竴涓吀鑼冿紝鑳芥湁鏁堝湴鏁村悎鏀寔鍜屼笉鏀寔XML鐨勭郴緇熴?/p>