以文本方式查看主题 - W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL (http://bbs.xml.org.cn/index.asp) -- 『 XML 与 数据库 』 (http://bbs.xml.org.cn/list.asp?boardid=17) ---- 映射 DTD 到数据库 (http://bbs.xml.org.cn/dispbbs.asp?boardid=17&rootid=&id=328) |
-- 作者:mhss -- 发布时间:12/22/2003 12:26:00 PM -- 映射 DTD 到数据库 http://mhss.nease.net/xml/dtd_map.html 映射 DTD 到数据库 作者:Ronald Bourret May 09, 2001 翻译:寒蝉退士 译者声明:译者对译文不做任何担保,译者对译文不拥有任何权利并且不负担任何责任和义务。 原文:http://www.xml.com/pub/a/2001/05/09/dtdtodbs.html 目录 -------------------------------------------------------------------------------- 1. 概述 这两种映射通常用做在 XML 文档和数据库、特别是关系数据库之间传输数据的软件的基础。它们在这方面的一个重要特征是双向的。就是说,它们可以用来从 XML 文档向数据库、从数据库向 XML 文档传输数据。 结果之一是它们可用做规范映射,在它顶上的 XML 查询语言可以被建造在非 XML 数据库上。规范映射将定义可以用类似 XQuery 的某种东西来查询的虚拟 XML 文档。 除了在 XML 文档和数据库之间传输数据之外,对象关系映射首要角色是用在“数据绑定”之中,这是在 XML 文档和对象之间的数据集结和解散。 2. 基于表的映射 <A> <Table> <Tables> 这种映射的明显的优点是它的简单性。因为它匹配在关系数据库中的表和结果集的结构,基于这种映射写代码很容易、快速、缩放自如,并对特定应用非常有用,比如在数据库之间一次一个表的传输数据。 这种映射有许多缺点;首先,它只能处理 XML 文档的非常小的子集。此外,它不保存物理结构(比如字符和实体引用,CDATA 段,字符编码,和孤立的声明)或文档信息(比如文档类型或 DTD),注释,或处理指令。 基于表的映射通常被中间件用来在 XML 文档和关系数据库之间传输数据。它还在某些 Web 应用服务器中用来把结果集数据返回为 XML。 3. 对象-关系映射 (名字“对象-关系”实际上是用词不当的 -- 更好的名字是基于对象的映射。这是因为对象可以被映射到非关系数据库,比如面向对象数据库或层次数据库, 或者简单的不去管它,在数据绑定系统中就是这么做的。但是,由于对象-关系是一个熟知的术语而且这种映射通常与关系数据库一起使用,所以这里用了这个术语。此外,所有例子都使用关系表。) 要理解对象-关系映射,最好先看一下一些简单的例子。作为开始,注意在下面 XML 文档、对象、和在表中的行之间有明显的映射: XML 对象 表 Table A DTD 类 表模式 class A { CREATE TABLE A <SalesOrder> object SalesOrder { SaleOrders 3.1. 基本映射 在考虑这种映射的时候,理解涉及到的对象是特定于每个 DTD 的,而不是来自 DOM 的对象是很重要的。特别是,这些对象建模在 XML 文档中的数据,而 DOM 建模 XML 文档的结构。例如,下面展示了为上面的例子中的 XML 文档建立的,特定于数据的对象和 DOM 对象的对象树: SalesOrder Document 3.1.1. 映射 DTD 到对象模式 有元素或混合内容、或有属性的元素类型叫做复杂数据类型;术语还是取自 XML Schema。它们持有有结构的值,并等价于在面向对象编程语言中的类或 C 中的结构。注意有空内容和有属性的元素类型仍是“复杂的”。如此做的原由是属性也提供了结构并粗略的等价于子唯 PCDATA 元素。 对象-关系映射首先把简单类型映射成标量数据类型。例如,元素类型 Title 可以映射成 String,而元素类型 Price 可以映射成 float。它接着映射复杂类型到类,同时把这个复杂类型的内容模型中的每个元素类型映射成这个类的类属性。每个类属性的数据类型都是引用的元素类型所映射成的数据类型。例如,到 Title 元素的一个引用将被映射成一个 String 类属性,而到 Price 元素的一个引用将被映射成一个 float 类属性。到复杂元素类型的引用被映射成到复杂元素类型所映射成的类的一个对象的指针/引用。 映射的最后一部分是把属性映射成类属性,同时由属性的数据类型决定类属性的数据类型。注意这些属性等价于在内容模型中到元素类型的引用。这是因为,就象在内容模型中的引用,它们局限在一个给定的元素类型中。它们只是概念上不同,属性类型是局部定义的,而不是在一个全局(DTD 范围)级别,对于元素类型是这种情况。 例如,在下面的简单元素类型 B、D、E 和属性 F 都被映射成 String 而复杂元素类型 A 和 C 被映射成类 A 和 C。 A 和 C 的内容模型和属性被映射成类 A 和 C 的类属性。在 A 和 C 的内容模型中到 B、D 和 E 的引用被映射成 String 类属性(因为这些类型被映射成 String),而属性 F 也被映射成一个 String 类属性。在 A 的内容模型中到 C 的引用被映射成带有到类 C 的一个对象的指针/引用的类型的一个类属性,因为元素类型 C 被映射成类 C。 DTD 类 <!ELEMENT A (B, C)> class A { 例如,考虑下面的 Title 和 Section 元素类型。所有这些元素类型都在 Chapter 和 Appendix 的内容模型中被引用。每个引用都单独为每个父元素类型做映射。把引用到 Title 的类属性的数据类型映射成 String,因为 Title 包含唯 PCDATA 并被映射成一个 String。把引用到 Section 类属性的数据类型映射成到一个 Section 对象的指针/引用,因为 Section 元素类型是复杂的并被映射成一个 Section 类。 DTD 类 <!ELEMENT Chapter (Title, Section+)> class Chapter { class Appendix { 3.1.2. 映射对象模式到数据库模式 类 表 class C { Table C: 可以建立一个主键列作为映射的一部分,列 c_pk 的情况就是这样,或者使用一个现存的列或多个列作为主键。例如,如果一个 SalesOrder 元素类型有一个 Number 子元素,可以把它映射成主键列。 如果建立一个主键列作为映射的一部分,它的值必须由数据库或传输软件生成。尽管一般认为这是比使用数据列作为主键更好的数据库设计,在与 XML 一起使用的时候这是个缺点,这个生成的键在源数据库之外是无意义的。所以,在带有生成的键的数据传输到 XML 文档中的时候,它要么包含无意义的主键(如果传输了主键)要么根本没有主键(如果没有传输主键)。在后者情况下,有可能不能重标识数据的来源,如果数据被修改并作为 XML 文档被返回到数据库则这就是一个问题。 3.1.3. 杂记 DTD 类 <!ELEMENT Part (Number, Price)> class PartClass { 类 表 class PartClass { Table PRT 3.2. 映射复杂内容模型 <!ELEMENT A (B?, (C | ((D | E | F | G)*, (H | I)+, J?)))> 3.2.1. 映射序列 DTD 类 表 <!ELEMENT A (B, C)> class A { Table A <!ELEMENT C (D, E)> class C { Table C DTD 类 <!ELEMENT A (B | C)> class A { 类 表 class A { Table A ( XML 对象 表 Table A 3.2.3. 映射重复子元素 如果一个内容模型包含到一个简单类型的重复的引用,这些引用被映射成一个单一的类属性,它是已知大小的一个数组。它可以被映射成在一个表中的多个列或一个属性表。例如,下面展示如何把一个重复的引用映射成一个表中的多个列: DTD 类 表 <!ELEMENT A (B, B, B, C)> class A { Table A DTD 类 表 <!ELEMENT A (B+, C)> class A { Table A DTD 类 <!ELEMENT A (B | C | D)> class A { 类 表 class A { Table A DTD 类 <!ELEMENT A (B?, C*)> class A { 类 表 class A { Table A 3.2.5. 映射子组 DTD 类 <!ELEMENT A (B, (C | D))> class A { 类 表 class A { Table A <A> <A> 把在子组中的引用直接映射成在父类中的类属性的一个结果是重复性和可选性可以是间接的。例如,在下列内容模型中 C、D 和 E 是既可选的又可重复的。它们是可重复的、因为 + 操作符间接的应用到它们上。C 是可选择的、因为它间接的在一个选择组中,而 D 和 E 是可选择的、因为它们间接的在一个选择组中。 DTD 类 <!ELEMENT A (B, (C | (D, E))+)> class A { 要看如何映射混合的内容,考虑下列 XML 文档: <A> <A> DTD 类 class A { 类 表 Table PCDATA 对象 表 Table PCDATA Table C 有两种方式解决这个问题,第一个是使用不同于对象-关系映射的其他映射。例如,如果这个文档使用 DOM 或类似结构来建模,并使用对象-关系映射把它映射到数据库,数据库中只有很少的表 -- Document, Element, Attr, Text 等。-- 尽管需要一个类似的连接编号来检索一个文档。第二种策略是不是把文档分解成最小的可能构件,而是分解成大的片断,比如章或节。这种策略可以与对象-关系映射一起使用;详情请参见章节 3.6.1,“映射复杂元素类型到标量类型”。 3.4. 映射次序 3.4.1. 同级次序, 层次次序, 和文档次序 A 同级次序(只有一个同级元素的地方次序不显示): A 1 A A <Part> <Part> 对象 表 在另一方面,在以文档为中心的应用中,通常文档是为了人的消费而设计的,同级次序是非常重要的。例如,我很可能喜欢第一个评述而不是第二个: <Review> <Review> 3.4.2. 映射同级次序 3.4.2.1. 次序属性和列 DTD 类 class A { 类 表 Table PCDATA 下面的例子展示使用次序属性来保留在"makes-no-sense"例子中的同级次序。这里要注意的重要的事情是所有次序类属性共享相同的次序空间。出现在一个次序类属性中一个次序值不会出现在另一个次序类属性中。 类 表 Table PCDATA <!ELEMENT A (B*, C)> 例如,给出下列内容模型,映射可以存储 A 的子元素的次序是 B 然后 C 然后 D 的信息: <!ELEMENT A (B, C, D)> <!ELEMENT A (B?, C, B)> 让多数软件这么麻烦的这么做是不大可能的。转而,只对组织所有相同元素类型的同级元素在一起的那些内容模型提供合理的限制。对于许多以数据为中心的内容模型这是足够的,并可以通过在映射中存储每个元素在内容模型中的位置来实现。 例如,在下列元素中同级元素的次序可以被如此映射。注意在第三个内容模型中,Author 和 Editor 二者都可以被赋予相同的次序值或不同的值;如果它们被赋予不同的值,一种类型的所有元素都都会出现在其他类型的任何元素的前面。 <!ELEMENT Part (Number, Description, Price)> <!ELEMENT A (B+, C)> 3.5. 映射属性 3.5.1. 映射单值和多值属性 DTD 类 表 <!ELEMENT A (B, C)> class A { Table A DTD 类 表 <!ELEMENT A (B, C)> class A { Table A <A B="bbb" <A C="ccc" XML 对象 object a { 3.5.2. 映射 ID/IDREF(S) 属性 A <A> Table A 在数据从数据库传输到 XML 文档的时候存在类似的问题。如果取回的数据起源于多于一个文档,则数据传输软件需要确保 ID 值是唯一的。这可能涉及到改变一个或多个值,连同引用它们的所有 IDREF(S) 属性的值。 目前,多数产品不把 ID/IDREF 作为有别于其他属性的属性来支持。 3.5.3. 映射注记属性 <Desc type="xhtml"> 对此的唯一的例外发生在注记指示包含的文本的数据类型的时候。例如,注记“base64”可以告诉应用包含二进制数据的一个元素被编码为 Base64 (映射二进制数据到 US-ASCII 的一个子集的一种 MIME 编码)。在多数情况下,这种信息只对生成映射的软件有意义。它可以使用这种信息来映射元素类型到二进制值类属性并接着到 BLOB (二进制大对象)。在这些情况下,映射自身不使用这些信息。从元素到到 BLOB 的映射独立于注记包含数据类型信息的事实。 对此的唯一的例外是当数据传输软件复杂到基于注记值来在运行时间切换映射的时候。在这种情况下,每种可能的注记被映射成一种数据类型,接着使用它来转换数据。 3.5.4. 映射 ENTITY/ENTITIES 属性 因为未分析实体总是有相关的注记,在决定实体的数据类型(在映射时间或运行时间)的时候可能用到这些注记。 3.6. 可供选择的映射 3.6.1. 映射复杂元素类型到标量类型 例如,考虑给出关于 part 的信息的一个 XML 文档。如果某个子元素被部分的用 XHTML 描述,进一步分解它可能没有意义。如同我们已经描述的那样,这将导致数据被分散到许多表中;italic 字一个表,bold 字一个表,用在 hyperlink 中的字一个表,等等。所以,最好在一个单一列中存储这些描述: DTD 类 表 <!ELEMENT Part (Num, Desc)> class Part { Table Part <Part> An example of the <b> element is <b>this element</b>. An example of the <b> element is <b>this element</b>. 3.6.2. 映射标量类属性到属性表 类 表 class Part { Table Parts 应当注意所有这些产品实现了对象-关系映射轻微不同的版本,并且没有一个实现了映射中所有可能的东西。在映射的更加公用的部分中,都把复杂元素映射成类并把到元素类型的引用映射成类属性,同样的使用主键、外键对来连接表。但是,一些只对唯 PCDATA 元素映射列,另一些只对属性映射列,还有其他一些允许二者。类似的,多数这些产品不支持同级次序或混合内容,并且许多在映射期间都不允许用户改变名字。 对象-关系映射对于普通文档不是个好的选择。首先,在使用混合内容的时候它是低效的。其次,象基于表的映射一样,它不保留物理结构、注释和处理指令。 4. 生成模式 对于面向对象数据库,生成过程是类似的。 4.1. 从 DTD 生成关系数据库模式 复杂元素类型生成带有主键列的类表。 到简单元素类型的单一引用生成列;如果这个引用是可选的(? 操作符),这个列是有空值的。 单值属性生成列;如果属性是可选的,这个列是有空值的。 DTD 表 <!ELEMENT Order (OrderNum, Date, CustNum, Item*)> DTD 表 <!ELEMENT Order (OrderNum, Date, CustNum, Item*)> ==> Table Order DTD 表 <!ELEMENT Order (OrderNum, Date, CustNum, Item*)> ==> Table Order <!ELEMENT Part (PartNum, Price)> ==> Table Part DTD 表 <!ELEMENT Order (OrderNum, Date, CustNum, Item*)> ==> Table Order 4.2. 从数据库模式生成 DTD 每个根表生成带有一个单一序列形式的元素内容的一个元素类型。 远端表用同根表相同的方式处理。 下列例子展示这个处理是如何工作的。考虑下列数据库模式: Table Orders Table Parts 表 DTD Table Orders ==> <!ELEMENT Orders ()> Table Parts 表 DTD Table Orders ==> <!ELEMENT Orders (Date, CustNum)> Table Parts 表 DTD Table Orders ==> <!ELEMENT Orders (Date, CustNum, OrderNum)> Table Parts 表 DTD Table Orders <!ELEMENT Orders (Date, CustNum, OrderNum, Items*)> Table Parts 表 DTD Table Orders <!ELEMENT Orders (Date, CustNum, OrderNum, Items*)> Table Parts 表 DTD Table Orders <!ELEMENT Orders (Date, CustNum, OrderNum, Items*)> Table Parts ==> <!ELEMENT Parts()> 表 DTD Table Orders <!ELEMENT Orders (Date, CustNum, OrderNum, Items*)> Table Parts ==> <!ELEMENT Parts(PartNum, Price)> 5. 映射 XML 模式到数据库 在 W3C Schemas 的情况下,能获得到对象模式并接着到数据库模式的一个完整映射。简单的说,这种把复杂类型映射到类(带有复杂类型扩展映射成继承),并把简单类型映射成标量类型(尽管许多细节丢失了)。“all”组都象无序的序列那样来对待,而替换(substitution)组象选择那样对待。最后,多数同一性约束都被映射成键。详情请参见 http://www.rpbourret.com/xml/SchemaMap.htm。 6. 有关的话题 XML and Databases (http://www.rpbourret.com/xml/XMLAndDatabases.htm) 关于 XML 数据库产品的一个适当更新的列表请参见: XML Database Products (http://www.rpbourret.com/xml/XMLDatabaseProds.htm) [此贴子已经被admin于2004-2-24 0:38:42编辑过]
|
-- 作者:mhss -- 发布时间:12/26/2003 9:48:00 AM -- 存储 XML 到关系数据库中: http://mhss.nease.net/xml/dbxml.html 存储 XML 在关系数据库中 by Igor Dayen June 20, 2001 翻译:寒蝉退士 译者声明:译者对译文不做任何担保,译者对译文不拥有任何权利并且不负担任何责任和义务。 原文:http://www.xml.com/pub/a/2001/06/20/databases.html 介绍 Oracle XML SQL Utility 把 XML 文档元素建模为一组嵌套的表。通过使用 Oracle 对象数据类型建模套入的元素。"SQL-to-XML"转换使用被对象数据类型引用的表,和嵌套的元素之间的一到一关联来构造 XML 文档。"XML-to-SQL"可能要求数据模型的改进(从关系转换到对象-关系)或重新构造最初的 XML 文档。 IBM DB2 XML Extender 允许存储 XML 文档为 BLOB 式的对象或分解到一组表中。后者得变换叫做 XML 收集,以 XML 1.0 语法定义。 Microsoft 通过扩展 SQL-92 并介入 OPENXML 行集来解决问题。 Sybase Adaptive Server 介入 ResultSetXml Java 类作为在两个方向上处理 XML 文档的基础。 在这篇文章中,我们将详细讨论这些厂商的解决方案。此后,我们将尝试回答下列问题: 我们可以调整并简化问题吗? <!-- 简单类型 --> <!ELEMENT CURRENCY1 (#PCDATA)> <!ELEMENT CURRENCY2 (#PCDATA)> <!ELEMENT AMOUNT (#PCDATA)> <!ELEMENT SETTLEMENT (#PCDATA)> <!ELEMENT BANKCODE (#PCDATA)> <!ELEMENT BANKACCT (#PCDATA)> <!-- 派生类型 --> <!ELEMENT ACCOUNT (BANKCODE, BANKACCT)> <!ELEMENT FXTRADE (CURRENCY1, CURRENCY2, AMOUNT, SETTLEMENT, ACCOUNT)> Oracle XML-SQL Utility (XSU) CREATE TABLE FXTRADE CREATE TYPE AccountType as OBJECT
从给定的对象-关系模型生成相应的 XML 文档(使用 "SELECT * FROM FXTRADE")如下 <?xml version="1.0"?> 从数据库提取 XML 首先,建立了 OracleXMLQuery 的一个实例,其后,执行一个查询,并把结果表示为上面的 XML 文档的形式。类似的,可以提取 XML 文档到 DOM 的形式;在这种情况下,可以调用 qry.getXMLDOM() 取代 getXMLString()。 import oracle.jdbc.driver.*; // 测试 XML 文档生成为 String 的类 public static void main(String[] args) // 建立查询类 // 得到 XML 字符串 // 打印 XML 输出 // 总是关闭查询来释放所有资源 // 得到给定的用户名字和口令的连接 // 建立 OCI8 驱动程序的连接 return conn;
存储 XML 在数据库中 import java.sql.*; ...
如果 XML 和在数据库中的对象-关系模型是同步的则一切正常,但是如果不同呢? 在这种情况下你有两种选择。 调整对象-关系模型 -- 可以构造一个可修改的对象-关系视图来完成多表修改;或者, Oracle XSU 的总结 Java API 由类 OracleXMLQuery 和 OracleXMLSave 组成。 IBM DB2 XML Extender XML 列: 存储和取回整个 XML 文档为 DB2 列数据 下面是一个例子 DAD。 <?xml version="1.0"?>
DAD 通过使用 element_node 到 RDB_node 关联来定义在 XML 文档和关系数据库列之间的映射。顶层的 element_node FXTRADE 被定义为在表 FXTRADE 和 ACCOUNT 之间的连接,带有在 ACCOUNT 表中的字段 ID 作为主键。子元素 CURRENCY1 被映射到在表 FXTRADE 中的字段 CURRENCY1 上,以此类推。注意 ACCOUNT 元素不包含任何 RDB_node -- 这是不需要的,原因是在前面已经定义了 ACCOUNT 和 FXTRADE 之间的连接。ACCOUNT、BANCCODE 和 BANKACCT 的子元素分别的定义在 ACCOUNT 表中的对应的列中。原子 XML 元素在 DAD 中标记为 text_node。在上面的例子中,除了 FXTRADE 和 ACCOUNT 之外的所有元素都是原子的。 从数据库提取 XML dxxGenXML() 的主要输入参数是 DAD: 以 DB2 CLOB 数据类型的形式存储; 在 "IBM DB2 Universal Database XML Extender Administration and Programming, Version 7" 中的一个 C 程序内、可以找到的存储过程的一个详尽的例子。 存储 XML 在数据库中 dxxShredXML() 的输入参数是 DAD: 以 DB2 CLOB 数据类型的形式存储; 总结 进一步增强将包含新的 XML-SQL 转换语法,它将使用 XML 转换语言,是 W3C XSLT 的一个子集。 Microsoft SQL Server 2000 从数据库提取 XML <数据库列> AS [元素名字! 嵌套级别! 属性名字! 指示] 从数据库生成 XML 的过程有两步。 步骤 1。建立到你希望输出 XML 中的原子元素的 As-别名;别名定义了在元素之间的父/子联系。下面的表展示给我们的例子文档的别名。 FXTRADE /* LEVEL=1 */
步骤 2。在 SQL 中定义输出树结构。通过 SELECT 语句定义树的每个级别,此后通过 UNION ALL 语句的手段把各个级别组合在一起到树中。级别-1 SELECT 语句介入在所有级别上的原子元素名字。每个 SELECT 语句介入一个树级别标记和它的父标记。在结果集中有一个单一记录对应于树根,如同在下面的第一个 SELECT 语句中定义的那样。 SELECT
FOR XML 通过分析在组合的行集中的标记和AS-别名构造 XML 文档。关键字 EXPLICIT 选择构造 XML 文档的最灵活的、用户定义的模式。另一个模式 AUTO 通过应用缺省规则构造 XML 文档。关键字 ELEMENTS 在元素级别建模 SQL 列;否则,缺省的是在属性级别建模 SQL 列。 存储 XML 在数据库中 OPENXML (<XML 文档句柄>, <路径 pattern>, <标志>) 使用存储过程 sp_xml_preparedocument,通过把 XML 文档编译成内部 DOM 表示来获取一个 XML 文档句柄。 通过对模式字段关联上原子 XML 元素来构造一个模式。 通过路径 pattern(绝对基础路径)加上相对元素路径来定义 XML 元素。通过标志值 2 指示以元素为中心的映射。可以使用现存的表替代一个模式,带有等价于 XML 名字的字段名字。 使用存储过程 sp_xml_removedocument 从内存中删除编译过的 XML 文档。 在下列例子中展示这些步骤。 DECLARE @idoc int
总结 Sybase Adaptive Server <?xml version="1.0"?>
ResultSet DTD 好像不允许嵌套元素的定义。 从数据库提取 XML jcs.xml.resultset.ResultSetXml rsx = new jcs.xml.resultset.ResultSetXml
存储 XML 在数据库中 String xmlString = FileUtil.file2string ("FxTradeSet.xml");
总结 厂商比较 厂商间的公共特征是: XML 持久性建立在特别的基础上,就是说,没有一般性的设施来存储任意 XML 文档);如果 XML 文档使用一个新的文法则需要专门的映射; 在这种策略下,XML 文档保存为正常的树结构 -- 原始树数据 -- 用于进一步的应用处理。进一步数据处理的框架是一组数据库对象(存储过程),类似于 DOM API,用来通过传统的 SQL 处理来操纵数据。 使用与全自动方式相反的框架方式的好处有: 数据库群体(population)通常由分布在"纯"应用程序代码、事务处理、数据库层(layer)和存储过程之间的应用逻辑来控制的,不必提及一些表可能驻留在远端数据库中。 此外,在异构的数据库环境中,拥有一个统一的工具来对不同的数据库完成相同的任务有着明显的好处。 作者的解决方案,ObjectCentric Solutions x-Persistence Utility,实现了这里讨论的策略。 原始树结构通过如下表来定义。 1) 树节点定义 CREATE TABLE NodeDef ( 2) 在节点间的父-子关系 CREATE TABLE NodeLinks (
用例 XML2SQL <XML 文档文件名> get_tree_roots <树种类> -- 提取一个给定森林的所有文档根 id 当前的平台包括: Sybase,MS SQL Server。 引用
[此贴子已经被admin于2004-2-24 0:39:50编辑过]
|
-- 作者:szn -- 发布时间:12/27/2003 2:32:00 PM -- thank you ! |
-- 作者:intopython -- 发布时间:1/16/2004 10:29:00 AM -- xiexie |
-- 作者:nizijian -- 发布时间:4/12/2004 9:38:00 AM -- 3x |
-- 作者:nolf -- 发布时间:5/13/2004 11:34:00 AM -- thx very much |
-- 作者:凤舞九天 -- 发布时间:7/8/2004 2:28:00 PM -- 3Q |
-- 作者:kittypig -- 发布时间:7/13/2004 3:38:00 PM -- 好人啊!正需要这方面的资料,哈哈! |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
550.781ms |