﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-无为-随笔分类-DB编程</title><link>http://www.blogjava.net/mlh123caoer/category/6208.html</link><description>无为则可为，无为则至深！
</description><language>zh-cn</language><lastBuildDate>Mon, 24 Oct 2011 16:29:08 GMT</lastBuildDate><pubDate>Mon, 24 Oct 2011 16:29:08 GMT</pubDate><ttl>60</ttl><item><title>DB DML，DCL，DDL具体包含哪些操作</title><link>http://www.blogjava.net/mlh123caoer/archive/2011/08/25/357307.html</link><dc:creator>草儿</dc:creator><author>草儿</author><pubDate>Thu, 25 Aug 2011 13:50:00 GMT</pubDate><guid>http://www.blogjava.net/mlh123caoer/archive/2011/08/25/357307.html</guid><wfw:comment>http://www.blogjava.net/mlh123caoer/comments/357307.html</wfw:comment><comments>http://www.blogjava.net/mlh123caoer/archive/2011/08/25/357307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlh123caoer/comments/commentRss/357307.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlh123caoer/services/trackbacks/357307.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; background-color: #ffffff; ">DDL&nbsp;<br />Data Definition Language (DDL) statements are used to define the database structure or schema. Some examples:&nbsp;<br /><br />CREATE - to create objects in the database&nbsp;<br />ALTER - alters the structure of the database&nbsp;<br />DROP - delete objects from the database&nbsp;<br />TRUNCATE - remove all records from a table, including all spaces allocated for the records are removed&nbsp;<br />COMMENT - add comments to the data dictionary&nbsp;<br />RENAME - rename an object&nbsp;<br /><br />DML&nbsp;<br />Data Manipulation Language (DML) statements are used for managing data within schema objects. Some examples:&nbsp;<br /><br />SELECT - retrieve data from the a database&nbsp;<br />INSERT - insert data into a table&nbsp;<br />UPDATE - updates existing data within a table&nbsp;<br />DELETE - deletes all records from a table, the space for the records remain&nbsp;<br />MERGE - UPSERT operation (insert or update)&nbsp;<br />CALL - call a PL/SQL or Java subprogram&nbsp;<br />EXPLAIN PLAN - explain access path to data&nbsp;<br />LOCK TABLE - control concurrency&nbsp;<br /><br />DCL&nbsp;<br />Data Control Language (DCL) statements. Some examples:&nbsp;<br /><br />GRANT - gives user's access privileges to database&nbsp;<br />REVOKE - withdraw access privileges given with the GRANT command&nbsp;<br /><br />TCL&nbsp;<br />Transaction Control (TCL) statements are used to manage the changes made by DML statements. It allows statements to be grouped together into logical transactions.&nbsp;<br /><br />COMMIT - save work done&nbsp;<br />SAVEPOINT - identify a point in a transaction to which you can later roll back&nbsp;<br />ROLLBACK - restore database to original since the last COMMIT&nbsp;<br />SET TRANSACTION - Change transaction options like isolation level and what rollback segment to use&nbsp;</span><img src ="http://www.blogjava.net/mlh123caoer/aggbug/357307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlh123caoer/" target="_blank">草儿</a> 2011-08-25 21:50 <a href="http://www.blogjava.net/mlh123caoer/archive/2011/08/25/357307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用变参执行SQL语句</title><link>http://www.blogjava.net/mlh123caoer/archive/2007/09/05/142885.html</link><dc:creator>草儿</dc:creator><author>草儿</author><pubDate>Wed, 05 Sep 2007 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/mlh123caoer/archive/2007/09/05/142885.html</guid><wfw:comment>http://www.blogjava.net/mlh123caoer/comments/142885.html</wfw:comment><comments>http://www.blogjava.net/mlh123caoer/archive/2007/09/05/142885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlh123caoer/comments/commentRss/142885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlh123caoer/services/trackbacks/142885.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 当你需要多次执行相同的SQL语句（一般情况下是update）但是使用不同的参数值时 ，可以使用<br>PrepareStatement方法，举例如下：&nbsp;&nbsp;<a href='http://www.blogjava.net/mlh123caoer/archive/2007/09/05/142885.html'>阅读全文</a><img src ="http://www.blogjava.net/mlh123caoer/aggbug/142885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlh123caoer/" target="_blank">草儿</a> 2007-09-05 14:12 <a href="http://www.blogjava.net/mlh123caoer/archive/2007/09/05/142885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件开发技术常用术语英中对照</title><link>http://www.blogjava.net/mlh123caoer/archive/2007/08/26/139506.html</link><dc:creator>草儿</dc:creator><author>草儿</author><pubDate>Sun, 26 Aug 2007 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/mlh123caoer/archive/2007/08/26/139506.html</guid><wfw:comment>http://www.blogjava.net/mlh123caoer/comments/139506.html</wfw:comment><comments>http://www.blogjava.net/mlh123caoer/archive/2007/08/26/139506.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/mlh123caoer/comments/commentRss/139506.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlh123caoer/services/trackbacks/139506.html</trackback:ping><description><![CDATA[<p>A.I. 人工智能<br>A2A integration A2A整合<br>abstract 抽象的<br>abstract base class (ABC)抽象基类<br>abstract class 抽象类<br>abstraction 抽象、抽象物、抽象性<br>access 存取、访问<br>access function 访问函数<br>access level访问级别<br>account 账户<br>action 动作<br>activate 激活<br>active 活动的<br>actual parameter 实参<br>adapter 适配器<br>add-in 插件<br>address 地址<br>address space 地址空间<br>address-of operator 取地址操作符<br>ADL (argument-dependent lookup)<br>ADO(ActiveX Data Object)ActiveX数据对象<br>advanced 高级的<br>aggregation 聚合、聚集<br>algorithm 算法<br>alias 别名<br>align 排列、对齐<br>allocate 分配、配置<br>allocator分配器、配置器<br>angle bracket 尖括号<br>annotation 注解、评注<br><span id=more-140></span><br>API (Application Programming Interface) 应用(程序)编程接口<br>app domain (application domain)应用域<br>appearance 外观<br>append 附加<br>application 应用、应用程序<br>application framework 应用程序框架<br>Approximate String Matching 模糊匹配<br>Arbitrary Precision Arithmetic 高精度计算<br>architecture 架构、体系结构<br>archive file 归档文件、存档文件<br>argument引数(传给函式的值)。参见parameter<br>array 数组<br>arrow operator 箭头操作符<br>ASP(Active Server Page)活动服务器页面<br>ASP.NET worker process ASP.NET工作者进程<br>assembly 装配件、配件<br>assembly language 汇编语言<br>assembly manifest 装配件清单<br>assert(ion) 断言<br>assign 赋值<br>assignment 赋值、分配<br>assignment operator 赋值操作符<br>associated 相关的、相关联的<br>associative container 关联式容器(对应sequential container)<br>asynchronous 异步的<br>atomic 原子的<br>atomic operation 原子操作<br>attribute 特性、属性<br>audio 音频<br>authentication service 验证服务<br>authorization 授权<br>B2B integration B2B整合、B2B集成(business-to-business integration)<br>background 背景、后台(进程)<br>backup 备份<br>backup device备份设备<br>backup file 备份文件<br>backward compatible 向后兼容、向下兼容<br>bandwidth 带宽<br>Bandwidth Reduction 带宽压缩<br>base class 基类<br>base type 基类型<br>batch 批处理<br>BCL (base class library)基类库<br>Bin Packing 装箱问题<br>binary 二进制<br>binary function 双参函数<br>binary large object二进制大对象<br>binary operator 二元操作符<br>binary search 二分查找<br>binary tree 二叉树<br>binding 绑定<br>bit 位<br>bitmap 位图<br>bitwise 按位&#8230;<br>bitwise copy 为单元进行复制；位元逐一复制,按位拷<br>bitwise operation 按位运算<br>block 块、区块、语句块<br>bookkeeping 簿记<br>boolean 布林值(真假值，true或false)<br>border 边框<br>bounds checking 边界检查<br>boxing 装箱、装箱转换<br>brace (curly brace) 大括号、花括号<br>bracket (square brakcet) 中括号、方括号<br>breakpoint 断点<br>browser applications 浏览器应用(程序)<br>browser-accessible application 可经由浏览器访问的应用程序<br>bug 臭虫<br>build 编连(专指编译和连接<br>built-in 内建、内置<br>bus 总线<br>business 业务、商务(看场合)<br>business Logic 业务逻辑<br>business rules 业务规则<br>buttons 按钮<br>by/through 通过<br>byte 位元组(由8 bits组成)<br>cache 高速缓存<br>calendar 日历<br>Calendrical Calculations 日期<br>call 调用<br>call operator 调用操作符<br>call-level interface (CLI)调用级接口(CLI)<br>callback 回调<br>candidate key 候选键 (for database)<br>cascading delete 级联删除 (for database)<br>cascading update 级联更新 (for database)<br>casting 转型、造型转换<br>catalog 目录<br>chain 链(function calls)<br>character 字符<br>character format 字符格式<br>character set 字符集<br>check box 复选框<br>check button 复选按钮<br>CHECK constraints CHECK约束 (for database)<br>checkpoint 检查点 (for database)<br>child class 子类<br>CIL (common intermediate language)通用中间语言、通用中介语言<br>class 类<br>class declaration 类声明<br>class definition 类定义<br>class derivation list 类继承列表<br>class factory 类厂<br>class hierarchy 类层次结构<br>class library 类库<br>class loader 类装载器<br>class template 类模板<br>class template partial specializations 类模板部分特化<br>class template specializations 类模板特化<br>classification 分类<br>clause 子句<br>cleanup 清理、清除<br>CLI (Common Language Infrastructure) 通用语言基础设施<br>client 客户、客户端<br>client application 客户端应用程序<br>client area 客户区<br>client cursor 客户端游标 (for database)<br>client-server 客户机/服务器、客户端/服务器<br>clipboard 剪贴板<br>Clique 最大团<br>clone 克隆<br>CLS (common language specification) 通用语言规范<br>code access security 代码访问安全<br>code page 代码页<br>COFF (Common Object File Format) 通用对象文件格式<br>collection 集合<br>COM (Component Object Model) 组件对象模型<br>Combinatorial Problems 组合问题<br>combo box 组合框<br>command line 命令行<br>comment 注释<br>commit 提交 (for database)<br>communication 通讯<br>compatible 兼容<br>compile time 编译期、编译时<br>compiler 编译器<br>component组件<br>composite index 复合索引、组合索引 (for database)<br>composite key 复合键、组合键 (for database)<br>composition 复合、组合<br>Computational Geometry 计算几何<br>concept 概念<br>concrete具体的<br>concrete class 具体类<br>concurrency 并发、并发机制<br>configuration 配置、组态<br>Connected Components 连通分支<br>connection 连接 (for database)<br>connection pooling 连接池<br>console 控制台<br>constant 常量<br>Constrained and Unconstrained Optimization 最值问题<br>constraint 约束 (for database)<br>construct 构件、成分、概念、构造（for language）<br>constructor (ctor) 构造函数、构造器<br>container 容器<br>containment包容<br>context 环境、上下文<br>control 控件<br>Convex Hull 凸包<br>cookie (不译)<br>copy 拷贝<br>CORBA 通用对象请求中介架构(Common Object Request Broker Architecture)<br>cover 覆盖、涵盖<br>create/creation 创建、生成<br>crosstab query 交叉表查询 (for database)<br>CRTP (curiously recurring template pattern)<br>Cryptography 密码<br>CTS (common type system)通用类型系统<br>cube 多维数据集 (for database)<br>cursor 光标<br>cursor 游标 (for database)<br>custom 定制、自定义<br>data 数据<br>data connection 数据连接 (for database)<br>Data Control Language (DCL) 数据控制语言(DCL) (for database)<br>Data Definition Language (DDL) 数据定义语言(DDL) (for database)<br>data dictionary 数据字典 (for database)<br>data dictionary view 数据字典视图 (for database)<br>data file 数据文件 (for database)<br>data integrity 数据完整性 (for database)<br>data manipulation language (DML)数据操作语言(DML) (for database)<br>data mart 数据集市 (for database)<br>data member 数据成员、成员变量<br>data pump 数据抽取 (for database)<br>data scrubbing 数据清理 (for database)<br>data source 数据源 (for database)<br>data source 数据源 (for database)<br>Data source name (DSN) 数据源名称(DSN) (for database)<br>data structure数据结构<br>Data Structures 基本数据结构<br>data table 数据表 (for database)<br>data warehouse 数据仓库 (for database)<br>data-aware control数据感知控件 (for database)<br>data-bound 数据绑定 (for database)<br>database 数据库 (for database)<br>database catalog 数据库目录 (for database)<br>database diagram 数据关系图 (for database)<br>database file 数据库文件 (for database)<br>database object 数据库对象 (for database)<br>database owner 数据库所有者 (for database)<br>database project 数据库工程 (for database)<br>database role 数据库角色 (for database)<br>database schema 数据库模式、数据库架构 (for database)<br>database script 数据库脚本 (for database)<br>datagram 数据报文<br>dataset 数据集 (for database)<br>dataset 数据集 (for database)<br>DBMS (database management system)数据库管理系统 (for database)<br>DCOM (distributed COM)分布式COM<br>dead lock 死锁 (for database)<br>deallocate 归还<br>debug 调试<br>debugger 调试器<br>decay 退化<br>decision support 决策支持<br>declaration 声明<br>declarative referential integrity (DRI)声明引用完整性(DRI) (for database)<br>deduction 推导<br>default 缺省、默认值<br>DEFAULT constraint默认约束 (for database)<br>default database 默认数据库 (for database)<br>default instance 默认实例 (for database)<br>default result set 默认结果集 (for database)<br>defer 推迟<br>definition 定义<br>delegate 委托<br>Delegates 一般译法为&#8221;委托&#8221;，微软没有对这个术语进行正式解释或翻译。<br>delegation 委托<br>dependent name<br>deploy 部署<br>dereference 解引用<br>dereference operator (提领)运算子<br>derived class 派生类<br>design by contract 契约式设计<br>design pattern 设计模式<br>destroy 销毁<br>destructor(dtor)析构函数、析构器<br>Determinants and Permanents 行列式<br>device 设备<br>DHTML (dynamic HyperText Markup Language)动态超文本标记语言<br>dialog 对话框<br>Dictionaries 字典<br>digest 摘要<br>digital 数字的<br>DIME (Direct Internet Message Encapsulation)直接Internet消息封装<br>directive (编译)指示符<br>directory 目录<br>dirty pages脏页 (for database)<br>dirty read 脏读 (for database)<br>disassembler 反汇编器<br>DISCO (Discovery of Web Services)Web Services的查找<br>Discrete Fourier Transform 离散Fourier变换<br>disk 盘<br>dispatch 调度、分派、派发（我喜欢&#8220;调度&#8221;）<br>DISPID (Dispatch Identifier)分派标识符<br>distributed computing 分布式计算<br>distributed query 分布式查询 (for database)<br>DNA (Distributed interNet Application) 分布式网间应用程序<br>document 文档<br>DOM (Document Object Model)文档对象模型<br>dot operator (圆)点操作符<br>double-byte character set (DBCS)双字节字符集(DBCS)<br>DP——Dynamic Programming——动态规划<br>Drawing Graphs Nicely 图的描绘<br>Drawing Trees 树的描绘<br>driver 驱动(程序)<br>DTD (document type definition) 文档类型定义<br>dump 转储<br>dump file 转储文件<br>dynamic assembly 动态装配件、动态配件<br>dynamic binding 动态绑定<br>dynamic cursor 动态游标 (for database)<br>dynamic filter 动态筛选 (for database)<br>dynamic locking 动态锁定 (for database)<br>dynamic recovery 动态恢复 (for database)<br>dynamic snapshot 动态快照 (for database)<br>dynamic SQL statements 动态SQL语句 (for database)<br>e-business 电子商务<br>EAI (enterprise application integration)企业应用程序集成(整合)<br>EBCO (empty base class optimization) 空基类优化（机制）<br>Edge and Vertex Connectivity 割边/割点<br>Edge Coloring 边染色<br>EDI (Dlectronic Data Interchange)电子数据交换<br>efficiency 效率<br>efficient 高效<br>encapsulation 封装<br>enclosing class 外围类别(与巢状类别 nested class有关)<br>end user 最终用户<br>end-to-end authentication 端对端身份验证<br>engine 引擎<br>entity 实体<br>enum (enumeration) 枚举<br>enumerators 枚举成员、枚举器<br>equal 相等<br>equality 相等性<br>equality operator 等号操作符<br>error log 错误日志 (for database)<br>escape character 转义符、转义字符<br>escape code 转义码<br>Eulerian Cycle / Chinese Postman Euler回路/中国邮路<br>evaluate 评估<br>event 事件<br>event driven 事件驱动的<br>event handler 事件处理器<br>evidence 证据<br>exception 异常<br>exception declaration 异常声明<br>exception handling 异常处理、异常处理机制<br>exception specification 异常规范<br>exception-safe 异常安全的<br>exclusive lock 排它锁 (for database)<br>exit 退出<br>explicit 显式<br>explicit specialization 显式特化<br>explicit transaction 显式事务 (for database)<br>export 导出<br>expression 表达式<br>facility 设施、设备<br>Factoring and Primality Testing 因子分解/质数判定<br>fat client 胖客户端<br>feature 特性、特征<br>Feedback Edge/Vertex Set 最大无环子图<br>fetch 提取<br>field 字段 (for database)<br>field 字段(java)<br>field length 字段长度 (for database)<br>file 文件<br>filter 筛选 (for database)<br>finalization 终结<br>finalizer 终结器<br>Finite State Machine Minimization 有穷自动机简化<br>firewall 防火墙<br>firmware 固件<br>flag 标记<br>flash memory 闪存<br>flush 刷新<br>font 字体<br>For GUI 界面<br>foreign key (FK) 外键(FK) (for database)<br>form 窗体<br>formal parameter 形参<br>forward declaration 前置声明<br>forward-only 只向前的<br>forward-only cursor 只向前游标 (for database)<br>fragmentation 碎片 (for database)<br>framework 框架<br>full specialization 完全特化<br>function 函数<br>function call operator (即operator ()) 函数调用操作符<br>function object 函数对象<br>function overloaded resolution函数重载决议<br>function template函数模板<br>functionality 功能<br>functor 仿函数<br>GAC (global assembly cache) 全局装配件缓存、全局配件缓存<br>game 游戏<br>GC (Garbage collection) 垃圾回收(机制)、垃圾收集(机制)<br>generate 生成<br>Generating Graphs 图的生成<br>Generating Partitions 划分生成<br>Generating Permutations 排列生成<br>Generating Subsets 子集生成<br>generic 泛化的、一般化的、通用的<br>generic algorithm通用算法<br>genericity 泛型<br>getter (相对于 setter)取值函数<br>global 全局的<br>global object 全局对象<br>global scope resolution operator 全局范围解析操作符<br>grant 授权 (for database)<br>granularity 粒度<br>Graph Data Structures 图<br>Graph Isomorphism 同构<br>Graph Partition 图的划分<br>Graph Problems — hard 图论-NP问题<br>Graph Problems — polynomial 图论-多项式算法<br>group 组、群<br>group box 分组框<br>GUI 图形界面<br>GUID (Globally Unique Identifier) 全球唯一标识符<br>Hamiltonian Cycle Hamilton回路<br>hand shaking 握手<br>handle 句柄<br>handler 处理器<br>hard disk 硬盘<br>hard-coded 硬编码的<br>hard-copy 截屏图<br>hardware 硬件<br>hash table 散列表、哈希表<br>header file头文件<br>heap 堆<br>help file 帮助文件<br>hierarchical data 阶层式数据、层次式数据<br>hierarchy 层次结构、继承体系<br>high level 高阶、高层<br>hook 钩子<br>Host (application)宿主(应用程序)<br>hot key 热键<br>HTML (HyperText Markup Language) 超文本标记语言<br>HTTP (HyperText Transfer Protocol) 超文本传输协议<br>HTTP pipeline HTTP管道<br>hyperlink 超链接<br>icon 图标<br>IDE (Integrated Development Environment)集成开发环境<br>identifier 标识符<br>IDL (Interface Definition Language) 接口定义语言<br>idle time 空闲时间<br>if and only if当且仅当<br>IL (Intermediate Language) 中间语言、中介语言<br>image 图象<br>IME 输入法<br>immediate base 直接基类<br>immediate derived 直接派生类<br>immediate updating 即时更新 (for database)<br>implement 实现<br>implementation 实现、实现品<br>implicit 隐式<br>implicit transaction隐式事务 (for database)<br>import 导入<br>in-place active 现场激活<br>increment operator 增加操作符<br>incremental update 增量更新 (for database)<br>Independent Set 独立集<br>index 索引 (for database)<br>infinite loop 无限循环<br>infinite recursive 无限递归<br>information 信息<br>infrastructure 基础设施<br>inheritance 继承、继承机制<br>initialization 初始化<br>initialization list 初始化列表、初始值列表<br>initialize 初始化<br>inline 内联<br>inline expansion 内联展开<br>inner join 内联接 (for database)<br>instance 实例<br>instantiated 具现化、实体化(常应用于template)<br>instantiation 具现体、具现化实体(常应用于template)<br>integrate 集成、整合<br>integrity 完整性、一致性<br>integrity constraint完整性约束 (for database)<br>interacts 交互<br>interface 接口<br>interoperability 互操作性、互操作能力<br>interpreter 解释器<br>interprocess communication (IPC)进程间通讯(IPC)<br>Intersection Detection 碰撞测试<br>introspection 自省<br>invariants 不变性<br>invoke 调用<br>isolation level 隔离级别 (for database)<br>item 项、条款、项目<br>iterate 迭代<br>iteration 迭代(回圈每次轮回称为一个iteration)<br>iterative 反复的、迭代的<br>iterator 迭代器<br>JIT compilation JIT编译 即时编译<br>Job Scheduling 工程安排<br>Kd-Trees 线段树<br>key 键 (for database)<br>key column 键列 (for database)<br>Knapsack Problem 背包问题<br>laser 激光<br>late binding 迟绑定<br>left outer join 左向外联接 (for database)<br>level 阶、层例<br>library 库<br>lifetime 生命期、寿命<br>Linear Programming 线性规划<br>link 连接、链接<br>linkage 连接、链接<br>linker 连接器、链接器<br>list 列表、表、链表<br>list box 列表框<br>literal constant 字面常数<br>livelock 活锁 (for database)<br>load 装载、加载<br>load balancing 负载平衡<br>loader 装载器、载入器<br>local 局部的<br>local object 局部对象<br>lock 锁<br>log 日志<br>login 登录<br>login security mode登录安全模式 (for database)<br>Longest Common Substring 最长公共子串<br>lookup table 查找表 (for database)<br>loop 循环<br>loose coupling 松散耦合<br>lvalue 左值<br>machine code 机器码、机器代码<br>macro 宏<br>maintain 维护<br>Maintaining Line Arrangements 平面分割<br>managed code 受控代码、托管代码<br>Managed Extensions 受控扩充件、托管扩展<br>managed object 受控对象、托管对象<br>mangled name<br>manifest 清单<br>manipulator 操纵器(iostream预先定义的一种东西)<br>many-to-many relationship 多对多关系 (for database)<br>many-to-one relationship 多对一关系 (for database)<br>marshal 列集<br>Matching 匹配<br>Matrix Multiplication 矩阵乘法<br>Medial-Axis Transformation 中轴变换<br>Median and Selection 中位数<br>member 成员<br>member access operator 成员取用运算子(有dot和arrow两种)<br>member function 成员函数<br>member initialization list成员初始值列表<br>memberwise 以member为单元&#8230;、members 逐一&#8230;<br>memberwise copy<br>memory 内存<br>memory leak 内存泄漏<br>menu 菜单<br>message 消息<br>message based 基于消息的<br>message loop 消息环<br>message queuing消息队列<br>metadata 元数据<br>metaprogramming元编程<br>method 方法<br>micro 微<br>middle tier 中间层<br>middleware 中间件<br>MIME Multipurpose Internet Mail Extension 多用途 Internet 邮件扩展<br>Minimum Spanning Tree 最小生成树<br>Minkowski Sum Minkowski和<br>modeling 建模<br>modeling language 建模语言<br>modem 调制解调器<br>modifier 修饰字、修饰符<br>module 模块<br>most derived class最底层的派生类<br>Motion Planning 运动规划<br>mouse 鼠标<br>multi-tasking 多任务<br>multi-thread 多线程<br>multicast delegate 组播委托、多点委托<br>multidimensional OLAP (MOLAP) 多维OLAP(MOLAP) (for database)<br>multithreaded server application 多线程服务器应用程序<br>multiuser 多用户<br>mutable 可变的<br>mutex 互斥元、互斥体<br>named parameter 命名参数<br>named pipe 命名管道<br>namespace 名字空间、命名空间<br>native 原生的、本地的<br>native code 本地码、本机码<br>Native Image Generator (NGEN)本地映像生成器<br>Nearest Neighbor Search 最近点对查询<br>nested class 嵌套类<br>nested query 嵌套查询 (for database)<br>nested table 嵌套表 (for database)<br>network 网络<br>network card 网卡<br>Network Flow 网络流<br>nondependent name<br>Numerical Problems 数值问题<br>object 对象<br>object based 基于对象的<br>object file 目标文件<br>object model 对象模型<br>object oriented 面向对象的<br>object pooling 对象池化<br>ODBC data source ODBC数据源 (for database)<br>ODBC driver ODBC驱动程序 (for database)<br>ODR (one-definition rule)<br>OLE Automation objects OLE自动化对象 (for database)<br>OLE Automation server OLE自动化服务器 (for database)<br>OLE DB consumer OLE DB使用者 (for database)<br>OLE DB for OLAP 用于OLAP的OLE DB (for database)<br>OLE DB provider OLE DB提供者 (for database)<br>one-to-many relationship 一对多关系 (for database)<br>one-to-one relationship 一对一关系 (for database)<br>online analytical processing (OLAP) 联机分析处理(OLAP) (for database)<br>online redo log 联机重做日志 (for database)<br>online transaction processing (OLTP) 联机事务处理(OLTP) (for database)<br>Open Data Services (ODS) 开放式数据服务(ODS) (for database)<br>Open Database Connectivity (ODBC) 开放式数据库连接(ODBC) (for database)<br>operand 操作数<br>operating system (OS) 操作系统<br>operation 操作<br>operator 操作符、运算符<br>optimizer 优化器<br>option 选项<br>outer join 外联接 (for database)<br>overflow 上限溢位(相对于underflow)<br>overhead 额外开销<br>overload 重载<br>overload resolution 重载决议<br>overloaded function 重载的函数<br>overloaded operator 被重载的操作符<br>override 覆写、重载、重新定义<br>package 包<br>packaging 打包<br>palette 调色板<br>parallel 并行<br>parameter 参数、形式参数、形参<br>parameter list 参数列表<br>parameterize 参数化<br>parent class 父类<br>parentheses 圆括弧、圆括号<br>parse 解析<br>parser 解析器<br>part 零件、部件<br>partial specialization 局部特化<br>pass by address 传址(函式引数的传递方式)(非正式用语)<br>pass by reference 传地址、按引用传递<br>pass by value 按值传递<br>pattern 模式<br>PDA (personal digital assistant)个人数字助理<br>PE (Portable Executable) file 可移植可执行文件<br>performance 性能<br>persistence 持久性<br>PInvoke (platform invoke service) 平台调用服务<br>pixel 像素<br>placeholder 占位符<br>placement delete<br>placement new<br>Planarity Detection and Embedding 平面性检测和嵌入<br>platform 平台<br>POD (plain old data (type))<br>POI (point of instantiation)<br>Point Location 位置查询<br>pointer 指针<br>poll 轮询<br>Polygon Partitioning 多边形分割<br>polymorphism 多态<br>pooling 池化<br>pop up 弹出式<br>port 端口<br>postfix 后缀<br>precedence 优先序(通常用于运算子的优先执行次序)<br>prefix 前缀<br>preprocessor 预处理器<br>primary key (PK)主键(PK) (for database)<br>primary table 主表 (for database)<br>primary template原始模板<br>primitive type 原始类型<br>print 打印<br>printer 打印机<br>Priority Queues 堆<br>procedural 过程式的、过程化的<br>procedure 过程<br>process 进程<br>profile 评测<br>profiler 效能(性能)评测器<br>program 程序<br>programmer 程序员<br>programming编程、程序设计<br>progress bar 进度指示器<br>project 项目、工程<br>property 属性<br>protocol 协议<br>pseudo code伪码<br>qualified 经过资格修饰(例如加上scope运算子)<br>qualified name<br>qualifier 修饰符<br>quality 质量<br>queue 队列<br>race condition 竞争条件（多线程环境常用语）<br>radian 弧度<br>radio button 单选按钮<br>raise 引发(常用来表示发出一个exception)<br>random number 随机数<br>Random Number Generation 随机数生成<br>range 范围、区间<br>Range Search 范围查询<br>rank 等级<br>raw 未经处理的<br>re-direction 重定向<br>readOnly只读<br>record 记录 (for database)<br>recordset 记录集 (for database<br>recursion —— 递归<br>recursive 递归<br>refactoring 重构<br>refer 引用、参考<br>reference 引用、参考<br>reference counting引用计数<br>referential integrity (RI)引用完整性(RI) (for database)<br>reflection 反射<br>refresh data 刷新数据 (for database)<br>register 寄存器<br>regular expression 正则表达式<br>relational database 关系数据库<br>remote 远程<br>remote request 远程请求<br>represent 表述，表现<br>resolution 解析过程<br>resolve 解析、决议<br>result set 结果集 (for database)<br>retrieve data 检索数据<br>return 返回<br>return type 返回类型<br>return value 返回值<br>revoke 撤销<br>right outer join 右向外联接 (for database)<br>robust 健壮<br>robustness 健壮性<br>roll back 回滚 (for database)<br>roll forward 前滚 (for database)<br>routine 例程<br>row 行 (for database)<br>row lock 行锁 (for database)<br>rowset 行集 (for database)<br>RPC (remote procedure call)RPC(远程过程调用)<br>runtime 执行期、运行期、执行时、运行时<br>rvalue 右值<br>Satisfiability 可满足性<br>save 保存<br>savepoint 保存点 (for database)<br>SAX (Simple API for XML)<br>scalable 可伸缩的、可扩展的<br>schedule 调度<br>scheduler 调度程序<br>schema 模式、纲目结构<br>scope 作用域、生存空间<br>scope operator 生存空间操作符<br>scope resolution operator 生存空间解析操作符<br>screen 屏幕<br>scroll bar滚动条<br>SDK (Software Development Kit)软件开发包<br>sealed class 密封类<br>search 查找<br>Searching 查找<br>semantics 语义<br>semaphore 信号量<br>sequential container序列式容器<br>serial 串行<br>serialization/serialize 序列化<br>server 服务器、服务端<br>server cursor服务端游标、服务器游标 (for database)<br>session 会话 (for database)<br>Set and String Problems 集合与串的问题<br>Set Cover 集合覆盖<br>Set Data Structures 集合<br>Set Packing 集合配置<br>setter 设值函数<br>Shape Similarity 相似多边形<br>shared lock 共享锁 (for database)<br>Shortest Common Superstring 最短公共父串<br>Shortest Path 最短路径<br>sibling 同级<br>side effect 副作用<br>signature 签名<br>Simplifying Polygons 多边形化简<br>single-threaded 单线程<br>slider滑块<br>slot 槽<br>smart pointer 智能指针<br>SMTP (Simple Mail Transfer Protocol) 简单邮件传输协议<br>snapshot 截屏图<br>snapshot 快照 (for database)<br>SOAP (simple object access protocol) 简单对象访问协议<br>software 软件<br>Solving Linear Equations 线性方程组<br>Sorting 排序<br>source code 源码、源代码<br>specialization 特化<br>specification 规范、规格<br>splitter 切分窗口<br>SQL (Structured Query Language) 结构化查询语言 (for database)<br>stack 栈、堆栈<br>stack unwinding 叠辗转开解(此词用于exception主题)<br>standard library 标准库<br>standard template library 标准模板库<br>stateless 无状态的<br>statement 语句、声明<br>static cursor 静态游标 (for database)<br>static SQL statements 静态SQL语句 (for database)<br>status bar 状态条<br>Steiner Tree Steiner树<br>stored procedure 存储过程 (for database)<br>stream 流<br>string 字符串<br>String Matching 模式匹配<br>stub 存根<br>subobject子对象<br>subquery 子查询 (for database)<br>subroutine 子例程<br>subscript operator 下标操作符<br>subset 子集<br>subtype 子类型<br>support 支持<br>suspend 挂起<br>symbol 记号<br>syntax 语法<br>system databases 系统数据库 (for database)<br>system tables 系统表 (for database)<br>table 表 (for database)<br>table lock 表锁 (for database)<br>table-level constraint 表级约束 (for database)<br>tape backup 磁带备份 (for database)<br>target 标的,目标<br>task switch 工作切换<br>TCP (Transport Control Protocol) 传输控制协议<br>template 模板<br>template argument deduction 模板参数推导<br>template explicit specialization 模板显式特化<br>template parameter 模板参数<br>template template parameter<br>template-id<br>temporary object 临时对象<br>temporary table 临时表 (for database)<br>text 文本<br>Text Compression 压缩<br>text file 文本文件<br>thin client 瘦客户端<br>third-party 第三方<br>thread 线程<br>thread-safe 线程安全的<br>throw 抛出、引发(常指发出一个exception)<br>token 符号、标记、令牌（看场合）<br>Topological Sorting 拓扑排序<br>trace 跟踪<br>transaction 事务 (for database)<br>transaction log 事务日志 (for database)<br>transaction rollback 事务回滚 (for database)<br>transactional replication 事务复制 (for database)<br>Transitive Closure and Reduction 传递闭包<br>translation unit 翻译单元<br>Traveling Salesman Problem 旅行商问题<br>traverse 遍历<br>Triangulation 三角剖分<br>trigger 触发器 (for database)<br>tuple<br>two-phase commit 两阶段提交 (for database)<br>two-phase lookup 两阶段查找<br>type 类型<br>UDDI(Universary Description, Discovery and Integration)统一描述、查询与集成<br>UML (unified modeling language)统一建模语言<br>unary function 单参函数<br>unary operator 一元操作符<br>unboxing 拆箱、拆箱转换<br>underflow 下限溢位(相对于overflow)<br>Unicode 统一字符编码标准，采用双字节对字符进行编码<br>Union query 联合查询 (for database)<br>UNIQUE constraints UNIQUE约束 (for database)<br>unique index 唯一索引 (for database)<br>unmanaged code 非受控代码、非托管代码<br>unmarshal 散集<br>unqualified 未经限定的、未经修饰的<br>URI (Uniform Resource identifier) 统一资源标识符<br>URL (Uniform Resource Locator) 统一资源定位器<br>user 用户<br>user interface 用户界面<br>value types 值类型<br>variable 变量<br>vector 向量(一种容器，有点类似array)<br>VEE (Virtual Execution Engine)虚拟执行引擎<br>vendor 厂商<br>Vertex Coloring 点染色<br>Vertex Cover 点覆盖<br>viable 可行的<br>video 视频<br>view 视图 (for database)<br>view 视图<br>virtual function 虚函数<br>virtual machine 虚拟机<br>virtual memory 虚拟内存<br>Voronoi Diagrams Voronoi图<br>vowel 元音字母<br>Web Services web服务<br>WHERE clause WHERE子句 (for database)<br>wildcard characters 通配符字符 (for database)<br>wildcard search 通配符搜索 (for database)<br>window 窗口<br>window function 窗口函数<br>window procedure 窗口过程<br>Windows authentication Windows身份验证<br>wizard 向导<br>word 单词<br>word processor 字处理器<br>wrapper 包装、包装器<br>write enable 写启用 (for database)<br>write-ahead log 预写日志 (for database)<br>write-only 只写<br>WSDL (Web Service Description Language)Web Service描述语言<br>XML (eXtensible Markup Language) 可扩展标记语言<br>XML Message Interface (XMI) XML消息接口<br>XSD (XML Schema Definition) XML模式定义语言<br>XSL (eXtensible Stylesheet Language) 可扩展样式表语言<br>XSLT (eXtensible Stylesheet Language Transformation)可扩展样式表语言转换<br>xxx based 基于xxx的<br>xxx oriented 面向xxx</p>
<p>数据结构术语英中对照表<br>abstract data type 抽象数据类型<br>activity on edge AOE网<br>activity on vertex AOV网<br>adjacency list 邻接表<br>adjacency matrix 邻接矩阵<br>adjacency multilist 邻接多重表<br>adjacent edge 相邻边<br>adjacent vertex 相邻顶点<br>ancestor 祖先<br>arc 弧<br>array 数组<br>articulation point 连接点<br>atomic data type 基本数据类型<br>augmenting path 增广路径<br>augmenting path graph 增广路径图<br>average search length 平均查找长度<br>balance merging sort 平衡归并排序<br>balance two-way merging 二路平衡归并排序<br>banlanced binary tree 平衡二叉树<br>biconnected graph 重连通图<br>binary search 二分查找<br>binary search tree 二叉查找树<br>binary sort tree 二叉排序树<br>binary tree 二叉树<br>bipartite graph 二部图<br>blank string 空白（空格）串<br>block search 分块查找<br>bottom 栈底<br>brother 兄弟<br>children 孩子<br>circular linked list 循环链表<br>cirular queue 循环队列<br>column major order 以列为主的顺序分配<br>complete binary tree 完全二叉树<br>complete graph 完全图<br>connected component 连通分量<br>connected graph 连通图<br>critical path 关键路径<br>cycle 回路（环）<br>data abstraction 数据抽象<br>data element 数据元素<br>data item 数据项<br>data object 数据对象<br>data type 数据类型<br>decision tree 判定树<br>deletion 删除<br>dense graph 稠密图<br>depth 深度<br>deque(double-ended queue) 双端列表<br>descentdant 子孙<br>destination 终点<br>digital analysis method 数字分析法<br>digital search tree 数字查找树<br>digraph(directed graph) 有向图<br>diminishing increment sort 随小增量排序<br>direct access file 直接存取文件<br>directed acyclic graph 有向无环图<br>directory structure 目录结构<br>division method 除法<br>doubly linked list 双向链表<br>doubly linked tree 双链树<br>edge 边<br>external sort 外部排序<br>file 文件<br>first-out list 先进先出表（队列）first-in<br>first-out list 后进先出表（队列）last-in<br>fixed-aggregate data type 固定聚合数据类型<br>folding method 折叠法<br>forest 森林<br>front 队头<br>full binary tree 满二叉树<br>generalized list 广义表<br>grabh 图<br>hash funticion 散列函数<br>hash search 散列查找<br>hash table 散列表<br>head 弧头<br>head node 头结点<br>head pointer 头指针<br>heap sort 堆排序<br>Huffman tree 哈夫曼树<br>immediate predecessor 直接前趋<br>immediate successor 直接后继<br>immediately allocating method 直接定址法<br>incident edge 关联边<br>indegree 入度<br>indexed file 索引文件<br>indexed non-sequential file 索引非顺序文件<br>indexed sequential file 索引顺序文件<br>initial node 初始结点<br>inorder traversal 中序遍历<br>insertion 插入<br>insertion sort 插入排序<br>internal sort 内部排序<br>inverted file 倒排文件<br>leaf 叶子<br>level 层次<br>linear linked list 线性链表<br>linear list 线性表<br>linear structure 线性结构<br>link 链<br>link field 链域<br>linked list 链表<br>logical structure 逻辑结构<br>master file 主文件<br>matching 匹配<br>matrix 矩阵<br>maximum matching 最大匹配<br>merge sort 归并排序<br>mid-square method 平方取中法<br>minimum(cost)spanning tree 最小（代价）生成树<br>multi-dimentional array 多维数组<br>multilinked list 多重链表<br>multilist file 多重链表文件<br>node 结点<br>nonlinear structure 非线性结构<br>ordered pair 有序对<br>ordered tree 有序数<br>orthogonal list 十字链表<br>outdegree 出度<br>overflow 上溢<br>parents 双亲<br>partical order 偏序<br>path 路径<br>phyical structure 物理结构<br>ployphase merging sort 多步归并排序<br>pointer 指针<br>pointer field 指针域<br>pop 弹出<br>postorder traversal 后序遍历<br>predecessor 前趋<br>preorder traversal 先序遍历<br>push 压入<br>queue 队列<br>quick sort 快速排序<br>radix sort 基数排序<br>random number method 随机数法<br>rear 队尾<br>replacement selection sort 置换选择排序<br>root 根<br>row major order 以行为主的顺序分配<br>search (sequential search) 线性查找（顺序查找）linear<br>searching 查找，线索<br>searching 查找<br>selection sort 选择排序<br>sequential file 顺序文件<br>shortest path 最短路径<br>simple cycle 简单回路<br>simple path 简单路径<br>single linked list 单链表<br>sink 汇点<br>sort 排序<br>sorting 排序（分类)<br>source 源点<br>spanning forest 生成森林<br>spanning tree 生成树<br>spares graph 稀疏图<br>sparse matrix 稀疏矩阵<br>stack 栈<br>string 空串（零串）null<br>string 串<br>string 串<br>strongly connected graph 强连通图<br>subgraph 子图<br>substring 子串<br>subtree 子树<br>successor 后继<br>symmetric matrix 对称矩阵<br>tail 弧尾<br>tail pointer 尾指针<br>terminal node 终端结点<br>threaded binary tree 线索二叉树<br>top 栈定<br>topological order 拓扑有序<br>topological sort 拓扑排序<br>transposed matrix 转置矩阵<br>traversal of tree 树的遍历<br>traversing binary tree 遍历二叉树<br>traversing graph 遍历图<br>tree 树<br>tree index 树型索引<br>truangular matrix 三角矩阵<br>unconnected graph 非连通图<br>underflow 下溢<br>undigraph(undirected graph) 无向图<br>unordered pair 无序对<br>unordered tree 无序数<br>updating 更新<br>variable-aggregate data type 可变聚合数据类型<br>vertex 顶点<br>weakly connected graph 弱连通图<br>weight 权<br>weighted graph 加权图</p>
<p>算法常用术语英中对照<br>Approximate String Matching 模糊匹配<br>Arbitrary Precision Arithmetic 高精度计算<br>Bandwidth Reduction 带宽压缩<br>Bin Packing 装箱问题<br>Calendrical Calculations 日期<br>Clique 最大团<br>Combinatorial Problems 组合问题<br>Computational Geometry 计算几何<br>Connected Components 连通分支<br>Constrained and Unconstrained Optimization 最值问题<br>Convex Hull 凸包<br>Cryptography 密码<br>Data Structures 基本数据结构<br>Determinants and Permanents 行列式<br>Dictionaries 字典<br>Discrete Fourier Transform 离散Fourier变换<br>Drawing Graphs Nicely 图的描绘<br>Drawing Trees 树的描绘<br>Edge and Vertex Connectivity 割边/割点<br>Edge Coloring 边染色<br>Eulerian Cycle / Chinese Postman Euler回路/中国邮路<br>Factoring and Primality Testing 因子分解/质数判定<br>Feedback Edge/Vertex Set 最大无环子图<br>Finite State Machine Minimization 有穷自动机简化<br>Generating Graphs 图的生成<br>Generating Partitions 划分生成<br>Generating Permutations 排列生成<br>Generating Subsets 子集生成<br>Graph Data Structures 图<br>Graph Isomorphism 同构<br>Graph Partition 图的划分<br>Graph Problems — hard 图论-NP问题<br>Graph Problems — polynomial 图论-多项式算法<br>Hamiltonian Cycle Hamilton回路<br>Independent Set 独立集<br>Intersection Detection 碰撞测试<br>Job Scheduling 工程安排<br>Kd-Trees 线段树<br>Knapsack Problem 背包问题<br>Linear Programming 线性规划<br>Longest Common Substring 最长公共子串<br>Maintaining Line Arrangements 平面分割<br>Matching 匹配<br>Matrix Multiplication 矩阵乘法<br>Medial-Axis Transformation 中轴变换<br>Median and Selection 中位数<br>Minimum Spanning Tree 最小生成树<br>Minkowski Sum Minkowski和<br>Motion Planning 运动规划<br>Nearest Neighbor Search 最近点对查询<br>Network Flow 网络流<br>Numerical Problems 数值问题<br>Planarity Detection and Embedding 平面性检测和嵌入<br>Point Location 位置查询<br>Polygon Partitioning 多边形分割<br>Priority Queues 优先队列<br>Random Number Generation 随机数生成<br>Range Search 范围查询<br>rate of convergence 收敛速度<br>robustness 鲁棒性<br>Satisfiability 可满足性<br>Searching 查找<br>Set and String Problems 集合与串的问题<br>Set Cover 集合覆盖<br>Set Data Structures 集合<br>Set Packing 集合配置<br>Shape Similarity 相似多边形<br>Shortest Common Superstring 最短公共父串<br>Shortest Path 最短路径<br>Simplifying Polygons 多边形化简<br>Solving Linear Equations 线性方程组<br>Sorting 排序<br>Steiner Tree Steiner树<br>String Matching 模式匹配<br>Text Compression 压缩<br>Topological Sorting 拓扑排序<br>Transitive Closure and Reduction 传递闭包<br>Traveling Salesman Problem 旅行商问题<br>Triangulation 三角剖分<br>Vertex Coloring 点染色<br>Vertex Cover 点覆盖<br>Voronoi Diagrams Voronoi图 </p>
<p>English Simplified Chinese </p>
<p>RIA &#8211; Rich Internet Application 丰富互联网应用程序<br>Framework 框架<br>delivery. delivering (a RIA) 提供<br>design pattern 设计模式<br>application vs. architectural framework 应用程序与架构框架<br>leveraging 利用<br>Factory, Flyweight, Observer, Decorator 工厂模式, 享元模式, 观察者模式, 装饰模式 Singleton 单例<br>Mandelbrot Mandelbrot<br>manage state 管理状态<br>stateful client 状态客户端<br>best practice 最佳实践<br>architecting the user experience 构建用户经验<br>widget 窗口小部件<br>upgrade 升级<br>development tool 开发工具<br>parent (of object), child 父级(对象),子对象<br>encapsulate 封装<br>implementation 实现<br>data collection 数据集合<br>persistence framework 持续性框架<br>transaction framework 事务框架<br>logging framework 日志框架<br>aspect-oriented framewor 面向方面的框架<br>animation framework 动画框架<br>unit-testing framework 单元测试框架<br>history management 历史管理<br>layout management 布局管理<br>cursor management 光标管理<br>exception handling 异常处理<br>application-level services 应用程序层服务<br>highly granular 高度微粒化<br>software engineering 软件工程<br>instance (of a class) （类的）实例<br>subset 子集 user gestures 用户姿态<br>drag&#8217;n'drop functionality 拖（拽）放功能 </p><img src ="http://www.blogjava.net/mlh123caoer/aggbug/139506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlh123caoer/" target="_blank">草儿</a> 2007-08-26 16:45 <a href="http://www.blogjava.net/mlh123caoer/archive/2007/08/26/139506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XMLBeans 2.0</title><link>http://www.blogjava.net/mlh123caoer/archive/2007/08/21/138303.html</link><dc:creator>草儿</dc:creator><author>草儿</author><pubDate>Tue, 21 Aug 2007 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/mlh123caoer/archive/2007/08/21/138303.html</guid><wfw:comment>http://www.blogjava.net/mlh123caoer/comments/138303.html</wfw:comment><comments>http://www.blogjava.net/mlh123caoer/archive/2007/08/21/138303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlh123caoer/comments/commentRss/138303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlh123caoer/services/trackbacks/138303.html</trackback:ping><description><![CDATA[Apache XMLBeans是一个非常有价值的工具，它提供一种在Java中使用XML的简便方法。在本文中，我们将介绍XMLBeans以及XMLBeans 2.0中的一些有用特性。
<h3>XMLBeans简介</h3>
<p>　　W3C XML Schema是一个XML文档，该文档定义一组其他XML文档必须遵守才合法的规则。与早期XML模式语言如文档类型定义（document type definition，DTD）或简单对象XML（simple object XML，SOX）相比，W3C XML Schema具有许多优点，它还提供了可供用户以多种方式使用的丰富特性集。</p>
<p>　　XMLBeans是完全与模式兼容的XML-Java绑定工具，使用这个工具可以以对Java友好的方式访问XML的全部特性。XMLBean解决方案是独一无二的，因为它提供XML数据的双重视图。XMLBeans维护一个信息和结构均未更改的原始XML文档，并提供一个基于Java的XML数据视图。</p>
<p>　　现在我们通过显示一些代码示例来演示XMLBeans 2.0中的一些特性。在每个示例中，我们都会提供模式以及一些操纵模式的XMLBean表示的Java代码。模式和Java示例都可供下载。</p>
<p>　　下面我们来看下面的模式片断：</p>
<p>　　&nbsp;</p>
<pre class=code>　　1 &lt;xs:element name="order"&gt;
2   &lt;xs:complexType&gt;
3     &lt;xs:sequence&gt;
4       &lt;xs:element name="orderNo" type="xs:string"/&gt;
5       &lt;xs:element name="item" nillable="true"
6          maxOccurs="unbounded" type="tns:itemType"/&gt;
7       &lt;xs:element name="address" type="tns:addressType"/&gt;
8       &lt;xs:element name="quantity" type="tns:quantityType"/&gt;
10     &lt;/xs:sequence&gt;
11   &lt;/xs:complexType&gt;
12 &lt;/xs:element&gt;</pre>
<p>　　要生成XMLBeans类，需要对模式进行编译。使用scomp实用工具可以很轻松地完成这个任务，因为它可以为所有简单和复杂的类型生成接口。所有类和接口的包名均派生自模式中指定的targetNamespace值。详细情况请阅读Hetal Shah的<a href="http://dev2dev.bea.com.cn/techdoc/2005031005.html"><u><font color=#0000ff>Configuring XMLBeans</font></u></a>（中文版，Dev2Dev，2005年3月）。</p>
<p>　　现在我们看看如何生成实例文档，如何针对模式检查文档的有效性，以及如何将实例保存到文件系统。</p>
<p>　　下面所生成的OrderDocument接口是一个XMLBeans为任意全局元素或类型创建的特殊&#8220;文档&#8221;类型示例。</p>
<p>　　AddressType和ItemType是为全局复杂类型addressType和sizeType创建的接口：</p>
<p>　　&nbsp;</p>
<pre class=code>　　 1 OrderDocument orderDoc = OrderDocument.Factory.newInstance();
2 Order order = orderDoc.addNewOrder();
3 order.setOrderNo("ORD1234");
4 order.setQuantity(4);
5
6 AddressType aType = order.addNewAddress();
7 aType.setCity("Kirkland");
8
9 ItemType iType = order.addNewItem();
10 iType.setId("ITEM003");
11
12 boolean isValid = orderDoc.validate(xopt);
13
14 orderDoc.save(new File("sample.xml"),xopt);
</pre>
<p>　　运行此示例会导致构建一个实例文档，该文档将被验证并以&#8220;sample. xml&#8221;为名保存在本地文件系统中。该程序还会将此实例文档的内容以及验证测试的结果显示到命令提示符或Unix shell中：</p>
<p>　　&nbsp;</p>
<pre class=code>　　 1 &lt;sam:order xmlns:sam="http://temp.openuri.org/Sample"&gt;
2   &lt;sam:orderNo&gt;ORD1234&lt;/sam:orderNo&gt;
3   &lt;sam:item&gt;
4     &lt;sam:id&gt;ITEM003&lt;/sam:id&gt;
5     &lt;sam:description&gt;Latest Item&lt;/sam:description&gt;
6     &lt;sam:size&gt;Large&lt;/sam:size&gt;
7   &lt;/sam:item&gt;
8   &lt;sam:address&gt;
9     &lt;sam:Name&gt;BEA Systems, Inc&lt;/sam:Name&gt;
10     &lt;sam:Street&gt;10230 NE Points Drive, Ste 300&lt;/sam:Street&gt;
11     &lt;sam:City&gt;Kirkland&lt;/sam:City&gt;
12     &lt;sam:Zip&gt;98033&lt;/sam:Zip&gt;
13     &lt;sam:State&gt;WA&lt;/sam:State&gt;
14     &lt;sam:Country&gt;USA&lt;/sam:Country&gt;
15   &lt;/sam:address&gt;
16   &lt;sam:quantity&gt;4&lt;/sam:quantity&gt;
17 &lt;/sam:order&gt;</pre>
<p>　　这是一个有效的实例文档。在编译一个模式时，从模式生成的API会与表示底层XML模式的XMLBeans类型系统相集成。对模型相关信息的访问权限可通过使用模式类型系统API获取。</p>
<p>　　在下一个示例中，我们将展示如何使用getEnumerationValues()方法编程式地访问特定模式类型的多个枚举值。我们使用的模式类型是sizeType，它是带有三个可能值的枚举类型。该模式片断如下所示：</p>
<p>　　&nbsp;</p>
<pre class=code>　　 1 &lt;xs:simpleType name="sizeType"&gt;
2   &lt;xs:restriction base="xs:token"&gt;
3     &lt;xs:enumeration value="Small"/&gt;
4     &lt;xs:enumeration value="Medium"/&gt;
5     &lt;xs:enumeration value="Large"/&gt;
6   &lt;/xs:restriction&gt;
7 &lt;/xs:simpleType&gt;</pre>
<p>　　SizeType是SchemaType类，它包含关于simpleType模式类型的信息：</p>
<pre class=code>　　SchemaType schType = null;
XmlAnySimpleType [] xmlarray = null;
SizeType sType = SizeType.Factory.newInstance();
schType = sType.schemaType();
xmlarray = schType.getEnumerationValues();
</pre>
<p>　　运行此代码示例（EnumerationSample.java）将导致编程式地获取枚举值并将其重定向到System.out：</p>
<pre class=code>　　Enumeration values for ItemType :
Small
Medium
Large
</pre>
<p>　　XmlCursor是XMLBeans中的一个有趣特性；它们提供一种操作或导航XML实例文档的直观方法。XmlCursor还提供了一种执行XQuery表达式的方法。一旦加载了XML文档，就可以创建一个游标来表示XML中的特定位置。因为用户可以使用具有或不具有对应于XML的模式的游标，因此游标是处理XML的理想方法。</p>
<p>　　下一个示例演示如何使用游标操作XMLBean实例。此示例分析在第一个示例中创建的sample.xml。一旦将该文件保存到内存中，就会使用XmlCursor API导航到quantity元素并将值更改为104：</p>
<pre class=code>　　orderDoc = OrderDocument.Factory.parse(new File("sample.xml"));
XmlCursor xcursor = orderDoc.newCursor();
xcursor.toFirstChild();
xcursor.toChild(3);
xcursor.toEndToken();
xcursor.toPrevChar(1);
xcursor.insertChars("10");
xcursor.disp ose();
</pre>
<p>　　运行此示例会生成下面的输出，它显示修改后的XMLBean文档为什么会无效：</p>
<pre class=code>　　Message: decimal
value (104) is greater than maxInclusive facet (5) for
quantityType in namespace http://temp.openuri.org/Sample
Location of invalid XML:
&lt;xml-fragment xmlns:sam="http://temp.openuri.org/Sample"/&gt;</pre>
<p>　　到目前为止，我们已经简要介绍了XMLBeans，现在介绍一下2.0版本中的新特性。</p>
<h3>XMLBeans 2.0中的新特性</h3>
<p>　　通常，通过观察产品的实际运行来了解其中的新特性是比较简便的方法。我们将通过介绍一个利用了XMLBeans的某些重要特性的项目来介绍这些新特性。众所周知，XMLBeans是一个Apache项目，所以它使用Atlassian的Jira问题跟踪和项目管理应用程序来跟踪bug、特性和其他问题。BEA对XMLBeans项目进行了投资，并拥有一个提供高质量软件的标准。这意味着BEA很关注XMLBeans之类项目的质量。由于XMLBeans是开源项目，并且它使用Apache的常见工具如Jira，所以问题就在于BEA如何跟踪XMLBeans的质量指标。</p>
<p>　　用于揭示XMLBeans 2.0中的一些新特性的计划就是对这个问题的回答：如何方便地从Jira收集质量指标？</p>
<p>　　下面的屏幕快照显示了XMLBeans的项目主页面。请看图片的右边，在Project Summary区域下可以看到一些与我们关心的质量指标问题相关的选项。</p>
<p align=center><a href="http://dev2dev.bea.com/images/2006/05/JiraProjectPage.png" target=_blank><img height=300 alt="图1：XMLBeans Jira项目页面" src="http://dev2dev.bea.com.cn/images/image060713002.gif" width=449 vspace=4 border=0></a><br>图1：XMLBeans Jira项目页面（单击图像查看大图）</p>
<p>　　Jira的一个好处就是它能提供问题数据的不同视图。在下图中，请看名为<strong>Current View</strong>的标题。在屏幕快照中，目前选择的是Browser视图，但还有其他选项，包括一个打印视图、一个XML视图，甚至还有一个Excel电子表格视图：</p>
<p align=center><a href="http://dev2dev.bea.com/images/2006/05/JiraIssueNav.png" target=_blank><img height=245 alt="图2：XMLBeans Jira Issue Navigator" src="http://dev2dev.bea.com.cn/images/image060713004.gif" width=449 vspace=4 border=0></a><br>图2：XMLBeans Jira Issue Navigator（单击图像查看大图）</p>
<p>　　熟悉Jira以及XMLBeans跟踪质量指标的方式后，我们可以通过多种方式收集质量指标。我们的选项包括屏幕抓取HTML、分析电子表格以及从URL获取XML。我们认为最合理的是从URL（通过从Issue Navigator页面单击XML链接而提供）使用XML视图。该URL的内容看起来与下面的XML文档类似：</p>
<pre class=code>　　&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;!--  RSS generated by JIRA 98 at Sun Dec 04 18:08:34 CET 2005
--&gt;
&lt;rss version="0.92"&gt;
&lt;channel&gt;
&lt;title&gt;ASF JIRA&lt;/title&gt;
&lt;link&gt;http://issues.apache.org/jira&lt;/link&gt;
&lt;description&gt;This file is an XML representation of some
issues&lt;/description&gt;
&lt;language&gt;en&lt;/language&gt;
&lt;item&gt;
&lt;title&gt;[XMLBEANS-232] Fast Xml Infoset&lt;/title&gt;
&lt;link&gt;http://issues.apache.org/jira/browse/x&lt;/link&gt;
&lt;description&gt;
&lt;!-- left out for brevity --&gt;
&lt;/description&gt;
&lt;environment&gt;&lt;![CDATA[]]&gt;&lt;/environment&gt;
&lt;key id="12326193"&gt;XMLBEANS-232&lt;/key&gt;
&lt;summary&gt;Fast Xml Infoset&lt;/summary&gt;
&lt;type id="4"&gt;Improvement&lt;/type&gt;
&lt;priority id="3"&gt;Major&lt;/priority&gt;
&lt;status id="1"&gt;Open&lt;/status&gt;
&lt;resolution&gt;Unresolved&lt;/resolution&gt;
&lt;assignee&gt;Unassigned&lt;/assignee&gt;
&lt;reporter username="rrusin"&gt;Rafal
Rusin&lt;/reporter&gt;
&lt;created&gt;Wed, 30 Nov 2005 13:29:44 +0100
(CET)&lt;/created&gt;
&lt;updated&gt;Sat, 3 Dec 2005 18:15:10 +0100
(CET)&lt;/updated&gt;
&lt;version&gt;unspecified&lt;/version&gt;
&lt;fixVersion&gt;unspecified&lt;/fixVersion&gt;
&lt;component&gt;XmlObject&lt;/component&gt;
&lt;due&gt;&lt;/due&gt;
&lt;votes&gt;0&lt;/votes&gt;
&lt;comments&gt;
&lt;comment author="dandiep" created="Sat, 3 Dec 2005
18:15:10 +0100 (CET)" level=""&gt;
&lt;!-- ... --&gt;
&lt;/comment&gt;
&lt;/comments&gt;
&lt;customfields&gt;
&lt;/customfields&gt;
&lt;/item&gt;
&lt;item&gt;
&lt;!-- left out for brevity --&gt;
&lt;/item&gt;
&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p>　　如果从上面的XML feed查看片断，会发现它被定义为RSS feed。我们的第一步是找到一个RSS 0.92版本的XML Schema模式，这样就可以编译模式，并通过使用XMLBeans的类似于JavaBean的简单API来使用XMLBeans分析URL。我们无法找到官方模式，但可以找到规范，并可由此开始创建模式。随后，我们发现根据规范创建的模式与从Jira获取的RSS feed不匹配。我们该怎么做呢？我们实际上惟一可以选择的就是为此RSS feed创建一个模式，但这费时且容易出错。进行了进一步的调查后，我们偶然发现了新增的inst2xsd特性。</p>
<h3>模式到实例再到模式的过程</h3>
<p>　　 inst2xsd工具可作为命令行实用工具使用，但用户也可以编程式地使用API。其目的是采用一个XML实例并创建一个合法模式集。该工具也是可配置的，它提供了用于指定使用哪种设计模式的选项（包括Russian Doll、Salami Slice、Venetian Blind；详细信息请参见<a href="http://www.xfront.com/GlobalVersusLocal.html" target=_blank><u><font color=#0000ff>模式设计指导原则</font></u></a>）。</p>
<p>　　该工具还能够将枚举映射到重复值，并能够根据数据类型的最小公分母创建类型。</p>
<p>　　我们使用lcd:val这个值作为创建最小公分母类型的示例。该文本可由多个内置XML Schema数据类型表示，例如字符串派生的类型（xsd:string、xsd:normalizedString、xsd:token，等等）以及QName类型。在本例中，inst2xsd特性确定类型的方式是查找前缀为lcd的命名空间声明。如果找到该前缀，该类型将是QName，而不是某个可能基于字符串的类型。</p>
<p>　　现在看一下我们从Jira接收的RSS feed的结果是什么。如果我们已经将feed保存到名为jiraRssFeed.xml的实例中并已将XMLBEANS_HOME\bin放在我们的路径中，工作流将如下：</p>
<pre class=code>　　/home/user&gt;inst2xsd
Generates XMLSchema from instance xml documents.
Usage: inst2xsd [opts] [instance.xml]*
Options include:
-design [rd|ss|vb] - XMLSchema design type
rd  - Russian Doll Design - local elements and local types
ss  - Salami Slice Design - global elements and local
types
vb  - Venetian Blind Design (default) - local elements and
global complex types
-simple-content-types [smart|string] - Simple content types
detection (leaf text). Smart is the default
-enumerations [never|NUMBER] - Use enumerations. Default
value is 10.
-outDir [dir] - Directory for output files. Default is '.'
-outPrefix [file_name_prefix] - Prefix for output file names.
Default is 'schema'
-validate - Validates input instances against generated
schemas.
-verbose - print more informational messages
-license - print license information
-help - help information
/home/user&gt;inst2xsd jiraRssFeed.xml -enumerations never
-design rd -verbose -validate
# this generates a schema named schema0.xsd
</pre>
<p>　　这将生成名为schema0.xsd的（可配置）文件，并且模式将与下面的片断类似：</p>
<pre class=code>　　 1 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
2 &lt;xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;
3  &lt;xs:element name="rss"&gt;
4    &lt;xs:annotation&gt;
5      &lt;xs:documentation&gt;RSS generated by JIRA 98...
&lt;/xs:documentation&gt;
6    &lt;/xs:annotation&gt;
7    &lt;xs:complexType&gt;
8      &lt;xs:sequence&gt;
9        &lt;xs:element name="channel"&gt;
10          &lt;xs:complexType&gt;
11            &lt;xs:sequence&gt;
12              &lt;xs:element type="xs:string" name="title"/&gt;
13              &lt;xs:element type="xs:anyURI" name="link"/&gt;
14              &lt;xs:element type="xs:string" name="description"/&gt;
15              &lt;xs:element type="xs:string" name="language"/&gt;
15              &lt;xs:element name="item" maxOccurs="unbounded"
minOccurs="0"&gt;</pre>
<p>　　从这个片断中我们发现Jira RSS feed所需的所有元素均已定义。</p>
<p>　　如果用户想要通过其他方式工作，例如从XML Schema开始，XMLBeans的最新版本就提供了这种功能。xsd2inst工具就为用户提供了从模式和全局元素创建示例文档的方式；该实例将包含简单类型的值。上述两种工具的使用使得使用XML实例和模式变得非常简单。</p>
<p>　　在项目的这个阶段，我们就拥有了一个模式，使用这个模式可以通过scomp实用工具创建一个XMLBeans类型jar，并可开始处理业务逻辑以及先前尝试收集的质量指标。</p>
<p>　　通过查看Jira RSS feed实例，我们发现我们关注的bug详细信息放在名为item的元素中，而且生成的模式将item元素作为数组。这意味着，如果我们想要获得可能出现在所有项中的信息，就需要迭代所有项。现在我们看看如何通过一些代码实现这个目标。在下面的代码中，我们会遇到名字被指定为方法参数的用户导致的所有问题：</p>
<pre class=code>　　 1 public Vector getItemsFromReporter(String reporter) {
2
3  // Get the Jira RSS feed instance from a URL
4  URL jiraFeedUrl; = new URL("<jirafeedurl>");
5
6  // Get instance objects
7  RssDocument rssDoc = RssDocument.Factory.parse(jiraFeedUrl);
8  RssDocument.Rss rss = rssDoc.getRss();
9  RssDocument.Rss.Channel channel = rss.getChannel();
10
11  // We will use this object to get most of our data
12  RssDocument.Rss.Channel.Item[] items = channel.getItemArray();
13
14  //We will store all of the valid results in a vector
15  Vector results = new Vector();
16
17  for (int i = 0; i &lt; items.length; i++) {
18   RssDocument.Rss.Channel.Item item = items[i];
19
20   //Add item to results vector when reporter == username
21   if(item.getReporter().getUsername().compareTo(reporter) == 0)
22     results.add(item);
23   }
24  }
25
26  return results;
27 }
</pre>
<p>　　可以看出，这是非常整洁的Java代码。但是，当项数变大时，使用此代码也会影响性能。在最新的XMLBeans版本中，新增了两个新特性来帮助解决这些问题。第一个特性是对JDK 5.0泛型的支持，第二个特性是对XPath和Xquery的支持。我们来看看如何将泛型用于XMLBeans。</p>
<h3>将泛型用于XMLBeans</h3>
<p>　　很明显，JDK 5.0泛型可帮助创建参数化的类和方法。Collections API是XMLBeans中首批使用泛型的API之一。在XML Schema中，当元素包含的maxOccurs属性的值大于1时，默认情况下XMLBeans将针对这些类型创建一个Java数组。为了启用泛型，需要将一个附加参数添加到scomp，并需要使用一个兼容JDK 5.0的虚拟机。</p>
<p>　　默认情况下，用于从channel获取item元素的API包含如下方法：</p>
<table cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <th class=right colSpan=2>&nbsp;</th>
        </tr>
        <tr>
            <td class=left width="40%">RssDocument.Rss.Channel.Item</td>
            <td class=right width="60%">getItemArray(int i)<br>获取item元素</td>
        </tr>
        <tr>
            <td class=left>RssDocument.Rss.Channel.Item[]</td>
            <td class=right>getItemArray()<br>获取所有item元素的数组</td>
        </tr>
        <tr>
            <td class=left>void</td>
            <td class=right>setItemArray(int i,RssDocument.Rss.Channel.Item item)<br>设置item元素</td>
        </tr>
        <tr>
            <td class=left>void</td>
            <td class=right>setItemArray(RssDocument.Rss.Channel.Item[] itemArray)<br>设置所有item元素的数组</td>
        </tr>
    </tbody>
</table>
<p>　　但是，执行了启用泛型的编译步骤后，API会有所变化：</p>
<pre class=code>　　/home/user&gt;scomp
Compiles a schema into XML Bean classes and metadata.
Usage: scomp [opts] [dirs]* [schema.xsd]* [service.wsdl]*
[config.xsdconfig]*
Options include:
...
-javasource [version] - generate java source compatible for a
Java version (1.4 or 1.5)
...
#This is all it takes to enable Generics in your use of XMLBeans
/home/user&gt;scomp -javasource 1.5 schema0.xsd
</pre>
<p>　　使用上面的示例，可用的新方法将如下所示：</p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td width="40%">java.util.List&lt;RssDocument.Rss.Channel.Item&gt;</td>
            <td width="60%">getItemList<br>获取item元素的列表</td>
        </tr>
    </tbody>
</table>
<p>　　现在我们来看看泛型的使用如何能够简化用于实现获取单个用户报告的所有项的方法的代码：</p>
<pre class=code> 1 public List<item> getItemsFromReporter(String reporter) {
2
3  // We already loaded the data as above
4  // ...
5  RssDocument.Rss.Channel channel = rss.getChannel();
6
7  // We will use this object to get most of our data
8  List&lt;RssDocument.Rss.Channel.Item&gt; items =
channel.getItemList();
9
10  for (int i = 0; i &lt; items.size(); i++) {
11    RssDocument.Rss.Channel.Item item =  items.get(i);
12
13    //Remove results from list
14    if (item.getReporter().getUsername().compareTo(reporter)
!= 0)
15        items.remove(i);
16    }
17  }
18
19  return items;
20 }
</pre>
<p>　　这种方法非常不错，但还有一种更加简单的获取每个用户的项信息的方法——当您了解XPath和/或XQuery之后。</p>
<h3>XQuery和XPath</h3>
<p>　　XMLBeans与XQuery和XPath的集成在2.0版本中有了变化。版本1中使用了Jaxen（一种XPath实现），但与XMLBeans的集成不支持命名空间和前缀。最新版本构建于Saxon 8.1.1版本所提供的XQuery实现的基础之上。由于XQuery在Xpath之上构建，所以Saxon还为XMLBeans提供了XPath实现。为了使用XQuery和XPath的特性，XmlObject类（所有XMLBeans类型都派生自它）提供了两个执行实例的查询和语句的方法。XmlObject API的execQuery()和selectPath()方法返回一个匹配组件的数组。这些方法在XmlCursor对象上也存在，但返回对象是使用匹配值列表填充的另一个XmlCursor对象：</p>
<pre class=code> 1 String xq = "for $e in //employee
where $e/name='Bob' return $e ";
2
3 // Input is a valid xml instance
4 XmlObject o = XmlObject.Factory.parse(input);
5
6 XmlObject[] xObjres = o.execQuery(xq);
7 XmlCursor xCurres = o.newCursor.selectPath(xq);
</pre>
<p>　　从上面的代码片断中可以看出API相当易用，而且您可以采取最方便的方式处理生成的数据。我们在第4行中构建了自己的查询语句，并在第6和第7行中使用不同的API运行该查询。XQuery是一个强大的工具，从下面的代码中可以看出获取项数据变得多么简单：</p>
<pre class=code>　　 1 public XmlObject[] getItemsFromReporter(String reporter) {
2
3  //Load Jira RSS feed data
4  URL jiraFeedUrl; = new URL("<jirafeedurl>");
5
6  //This is the only object we need
7  RssDocument rssDoc = RssDocument.Factory.parse(jiraFeedUrl);
8
9  //Build the statement for the xpath engine
10  String xpathStatement =
"//item[reporter/@username='"+reporter+"']";
11
12  //Execute the statement on the instance
13  //We could cast this to an Item[] if we wanted
14  XmlObject[] queryResult = rssDoc.selectPath(xpathStatement);
15
16  return queryResult;
17 }
</pre>
<p>　　将XQuery与XMLBeans同时使用将使其如虎添翼，使对XML的处理变得简单得多。如果要获取更多有关XQuery的信息，有无数的资源可供参考。我们建议从<a href="http://xmlbeans.apache.org/samples/XQueryXPath.html" target=_blank><u><font color=#0000ff>Apache XMLBeans Web站点</font></u></a>上的XMLBeans示例开始。</p>
<p>　　到此时，由于XMLBeans提供的最新特性，XMLBeans的质量指标跟踪问题解决方案实现起来已经非常容易了。我们使用inst2xsd实用工具为实例创建模式，而不用从头编写，从而节省了时间。我们可以看到泛型的启用如何通过使业务逻辑变得容易编写而提高了生产力。最后，我们看到新增的XQuery集成如何提供操纵和查询XML的丰富特性。</p>
<p>　　这些仅仅是最新版本的XMLBeans中的基本新特性。一些其他特性使得XMLBeans成为可满足处理XML时的所有开发需要的理想工具。而下一个特性提供有关使用XML和XML Schema时可能接收到的错误的更详细信息，从而帮助开发人员提高生产力。</p>
<h3>错误代码</h3>
<p>　　错误代码是2.0版本中提供的另一个伟大特性。人们已创建了许多种方法，以便将这个新特性与scomp之类的工具集成，并允许编程式地访问以便（比如说）在IDE中使用。XML Schema规范的附录C定义了一个错误代码集，它定义了非法模式条款。在分析、验证和编译过程中，可使用错误监听程序编程式地访问错误代码。以前，错误消息的详细信息和模式一致性是越小越好。此外，还添加了有关错误所在位置以及模式规范中的相关内容的详细信息。错误代码本身以&#8220;cvc-complex-type.2.2&#8221;的形式定义，可参见http://www.w3c.org/TR/xmlschema-1/#cvc-complex-type条款2.2中的解释。下面我们来看看它的工作方式。我们从一个XML Schema开始，并针对它验证一个实例。然后我们将查看旧的错误，并与接收到的最新版本进行比较。</p>
<pre class=code>　　 1 &lt;!-- errorcode.xsd --&gt;
2 &lt;xs:schema
3   xmlns:xs="http://www.w3.org/2001/XMLSchema"
4   targetNamespace="http://xmlbeans.rocks.com/"
5   xmlns:tns="http://xmlbeans.rocks.com/" &gt;
6   &lt;xs:element name="address" type="tns:address"/&gt;
7   &lt;xs:complexType name="address"&gt;
8     &lt;xs:sequence&gt;
9       &lt;xs:element name="number" type="xs:unsignedInt"/&gt;
10       &lt;xs:element name="street" type="xs:string"/&gt;
11       &lt;xs:choice&gt;
12         &lt;xs:sequence&gt;
13           &lt;xs:element name="city" type="xs:string"/&gt;
14           &lt;xs:element name="state" type="xs:string"/&gt;
15         &lt;/xs:sequence&gt;
16         &lt;xs:element name="zipcode" type="xs:int"/&gt;
17       &lt;/xs:choice&gt;
18       &lt;xs:element name="country" type="xs:string"/&gt;
19     &lt;/xs:sequence&gt;
20   &lt;/xs:complexType&gt;
21 &lt;/xs:schema&gt;</pre>
<p>　　这个模式相当简单。注意xs:choice模型组的用法，因为下面的示例正是在对其进行定义时出错的。我们将要介绍一些错误代码，您很快就可以发现问题所在：</p>
<pre class=code>　　 1 &lt;!-- errorcode.xml --&gt;
2 &lt;t:address
3   xmlns:t="http://xmlbeans.rocks.com/" &gt;
4   &lt;number&gt;72&lt;/number&gt;
5   &lt;street&gt;156th NE&lt;/street&gt;
6   &lt;country&gt;USA&lt;/country&gt;
7 &lt;/t:address&gt;</pre>
<p>　　除了可从命令行使用的scomp实用工具，还存在一个可针对模式验证实例的实用工具。</p>
<pre class=code>　　/home/user&gt;validate
Validates the specified instance against the specified schema.
Contrast with the svalidate tool, which validates using a stream.
Usage: validate [-dl] [-nopvr] [-noupa] [-license]
schema.xsd instance.xml
Options:
-dl - permit network downloads for imports and
includes (default is off)
-noupa - do not enforce the unique particle attribution rule
-nopvr - do not enforce the particle valid (restriction) rule
-partial - allow partial schema type system
-license - print license information
</pre>
<p>　　如果使用XMLBeans的1.0版本运行validate实用工具，结果将如下所示：</p>
<pre class=code>　　/home/user&gt;validate errorcode.xsd errorcode.xml
errorcode.xml:0: error: Expected elements
city zipcode at the end of the content in element
address@http://xmlbeans.rocks.com/
</pre>
<p>　　上面的错误文本提到了实例的名称，并告诉我们地址的末尾缺少一些应有的元素。在这个小示例中，这是有点用处的，但没有行号很难找到起点。现在我们将这个代码文本与新版本中的新增错误代码特性进行比较：</p>
<pre class=code>　　 /home/user&gt;validate errorcode.xsd errorcode.xml
errorcode.xml:4: error: cvc-complex-type.2.4a: Expected elements
'city state' instead of 'country' here in element
address@http://xmlbeans.beaworld.com/
errorcode.xml:4: error: cvc-complex-type.2.4c: Expected elements
'zipcode' before the end of the content in element
address@http://xmlbeans.beaworld.com/
</pre>
<p>　　与XMLBeans的1.0版本中的错误文本相比，新的错误文本有很大的改进。两个错误文本都提到了实例，但新错误代码还提供了行号、问题严重程度、附录C模式参考以及更清楚的错误消息。而且，使用新的错误代码，我们发现错误代码cvc-complex-type.2.4a和cvc-complex-type.2.4c还提及更多造成故障的问题。同样，这些错误代码也分别对应于模式规范中一个可使用URL访问的位置。</p>
<p>　　刚刚我们介绍了如何通过命令行获取详细的错误文本，现在介绍如何以编程方式获取错误信息：</p>
<pre class=code>　　 1 // Create the error listener and XmlOptions
2 LinkedList list = new LinkedList();
3 XmlOptions opts = new XmlOptions().setErrorListener(list);
4
5 // Load the instance
6 File instance = new File("&lt;SOME_PATH&gt;\errorcodes.xml");
7 AddressDocument ad = AddressDocument.Factory.parse(instance);
8
9 // If there are errors, making a method call like this will
10 // populate the error listener
11 ad.validate(opts);
12
13 // Since we know there are errors, let's
14 // look at how to get at the data
15 for(int i=0; i &lt; errors.size(); i++) {
16
17   // Cast list object to an XmlError
// type XmlError e = (XmlError)
18   errors.get(i);
19
20   // Now, let's get at all the information about the error
21   // This will be the location of the error in the instance
22   System.out.println("["+e.getLine()+","+e.getColumn()+"]-" +
e.getSeverity())
23   // Information about the error
24   System.out.println(e.getErrorCode() + ": " +e.getMessage());
25 }</pre>
<p>　　请看此代码片断，以编程方式访问错误信息并不比从命令行获取类似信息困难多少。</p>
<h3>性能提升</h3>
<p>　　用户可能不会注意到以前的特性，但一定会注意到它对开发工作的影响。如果新版本无法带来性能提升，那它还有什么好处呢？</p>
<p>　　与在XMLBeans 1.0中一样，性能对于2.0版本极为重要。在大多数情况下，与1.0相比，2.0版本性能有了10%到60%的提升。导致性能提升的原因有许多，其中最重要的是完全不同的存储架构。在1.0版本中，使用了一个名为splay tree的数据结构使所有存储在XML Store中的内容与影响XML数据的操作同步。对于不熟悉它的用户，splay tree可以理解为支持O(log N)次Find、Insert和Delete操作的平衡树。这种数据结构与其他此类树的差别在于它不维持显式的平衡条件。其详细程度超出了用户在大多数情况下的需要。2.0版本使用了一个较为简单的架构，提供较少的复制和较少的对象。</p>
<p>　　在对XML数据执行任何操作时，XMLBeans都会加载一个XML Store。XMLBeans总是加载一个XML Store，然后在Store上提供一个绑定视图。与直接解组到Java对象的其他Java/XML绑定框架相比，此绑定视图与完整的XML Infoset真实性通常导致额外的开销。这使得XMLBeans的性能一直是一个障碍，从而消弱了额外的特性与信息所带来的好处。对于运行时性能，人们主要关注的就是XML Store方面，并尽可能地使Store的性能得到提高。</p>
<p>　　在对XML Store进行改写时，新增了一个特性，该特性使得使用XMLBeans进行编程可以有更好的性能，并且更易于使用。此特性即DOM Level II支持。DOM是Document Object Model（文档对象模型）的简写，它提供了一个用于处理XML数据的接口。Level II则指定哪些接口是可用的。它与SAX的区别在于XML信息保存在内存中。</p>
<h3>固有的DOM II支持</h3>
<p>　　在1.0版本中，对DOM的访问由Xerces处理，因此此类调用返回一个Xerces DOM Node。在2.0中，类似调用返回XMLBeans DOM表示，因为DOM II现在是天然实现的。这意味着在XMLBeans内无需协调两种不同的数据存储即可访问DOM表示和XMLBeans表示。</p>
<p>　　这还意味着可以通过以下三种方式中的任何一种来处理XML。第一种方式是使用XmlObject API中JavaBean风格的方法。第二种方式是通过XMLCursor API使用基于令牌的模型。而第三种方式是使用对熟悉DOM API的人来说非常熟悉的树模型。它有一个特别的好处，就是用户可以在这些方法之间来回切换，而不必担心实例的同步问题。从开发人员的角度来看，这就意味着他们可以使用最顺手的方式来处理XML。现在我们来了解一些可以在其中进行切换以便获得XML的底层视图的API：</p>
<pre class=code>　　//To get the live DOM Node:
Node  XmlObject.getDomNode()
Node  XmlCursor.getDomNode()
//To get back:
XmlObject XmlBeans.nodeToObject(Node n)
XmlCursor XmlBeans.nodeToCursor(Node n)
//XMLBeans 1.0 API returns a copy:
Node XmlObject.newDomNode()
</pre>
<p>　　从上面的代码中可以看出，在这些视图之间进行切换相当容易。</p>
<h3>结束语</h3>
<p>　　本文介绍了XMLBeans 2.0中可用的一些新特性。我们了解到XMLBeans提供了一个健壮且完全保真的Java到XML的绑定框架。我们还介绍了如何使用XMLBeans 2.0的一些新特性更方便快捷地完成项目。这些新特性可以提高开发人员的生产力。性能提升也有助于提高生产力，但更重要的是，这意味着花在对应用程序进行调试和分析瓶颈上的时间将会减少。</p>
<p>　　我们介绍的特性只是XMLBeans的最新版本所提供的一部分增强。请了解一下XMLBeans，看它是如何帮助改进开发人员的开发工作的。</p>
<h3>参考资料</h3>
<ul>
    <li><a href="http://xmlbeans.apache.org/sourceAndBinaries/index.html" target=_blank><u><font color=#0000ff>Apache XMLBeans</font></u></a>——XMLBeans官方网站
    <li>一个<a href="http://xmlbeans.apache.org/samples/XQueryXPath.html" target=_blank><u><font color=#0000ff>XQuery和XPath</font></u></a>示例
    <li>一些有用的<a href="http://www.xfront.com/GlobalVersusLocal.html" target=_blank><u><font color=#0000ff>模式设计指导原则</font></u></a>
    <li>Dev2Dev上的<a href="http://dev2dev.bea.com/opensource/" target=_blank><u><font color=#0000ff>开源</font></u></a>页面 </li>
</ul><img src ="http://www.blogjava.net/mlh123caoer/aggbug/138303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlh123caoer/" target="_blank">草儿</a> 2007-08-21 11:06 <a href="http://www.blogjava.net/mlh123caoer/archive/2007/08/21/138303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JLINQ: IBM's new paradigm for writing Java database applications</title><link>http://www.blogjava.net/mlh123caoer/archive/2007/08/19/137999.html</link><dc:creator>草儿</dc:creator><author>草儿</author><pubDate>Sun, 19 Aug 2007 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/mlh123caoer/archive/2007/08/19/137999.html</guid><wfw:comment>http://www.blogjava.net/mlh123caoer/comments/137999.html</wfw:comment><comments>http://www.blogjava.net/mlh123caoer/archive/2007/08/19/137999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlh123caoer/comments/commentRss/137999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlh123caoer/services/trackbacks/137999.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Level: IntermediateAzadeh Ahadian (azadeh@us.ibm.com), Eclipse Application Development Tools , IBM16 Aug 2007The project code named Java&#8482; Language Integrated Query (JLINQ) gives database a...&nbsp;&nbsp;<a href='http://www.blogjava.net/mlh123caoer/archive/2007/08/19/137999.html'>阅读全文</a><img src ="http://www.blogjava.net/mlh123caoer/aggbug/137999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlh123caoer/" target="_blank">草儿</a> 2007-08-19 22:57 <a href="http://www.blogjava.net/mlh123caoer/archive/2007/08/19/137999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COGNOS业务智能产品</title><link>http://www.blogjava.net/mlh123caoer/archive/2007/01/03/91613.html</link><dc:creator>草儿</dc:creator><author>草儿</author><pubDate>Wed, 03 Jan 2007 11:41:00 GMT</pubDate><guid>http://www.blogjava.net/mlh123caoer/archive/2007/01/03/91613.html</guid><wfw:comment>http://www.blogjava.net/mlh123caoer/comments/91613.html</wfw:comment><comments>http://www.blogjava.net/mlh123caoer/archive/2007/01/03/91613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mlh123caoer/comments/commentRss/91613.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlh123caoer/services/trackbacks/91613.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、       																				Cognos														业务智能服务的主要产品																																																														 												使用				Cognos			...&nbsp;&nbsp;<a href='http://www.blogjava.net/mlh123caoer/archive/2007/01/03/91613.html'>阅读全文</a><img src ="http://www.blogjava.net/mlh123caoer/aggbug/91613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlh123caoer/" target="_blank">草儿</a> 2007-01-03 19:41 <a href="http://www.blogjava.net/mlh123caoer/archive/2007/01/03/91613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MDA简介</title><link>http://www.blogjava.net/mlh123caoer/archive/2006/01/03/26464.html</link><dc:creator>草儿</dc:creator><author>草儿</author><pubDate>Tue, 03 Jan 2006 11:38:00 GMT</pubDate><guid>http://www.blogjava.net/mlh123caoer/archive/2006/01/03/26464.html</guid><wfw:comment>http://www.blogjava.net/mlh123caoer/comments/26464.html</wfw:comment><comments>http://www.blogjava.net/mlh123caoer/archive/2006/01/03/26464.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/mlh123caoer/comments/commentRss/26464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mlh123caoer/services/trackbacks/26464.html</trackback:ping><description><![CDATA[MDA（模型驱动架构）是OMG提出的新的软件开发方法学。本文通过精练的文字、独到的案例介绍MDA的概念、应用和相关技术。<img src ="http://www.blogjava.net/mlh123caoer/aggbug/26464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mlh123caoer/" target="_blank">草儿</a> 2006-01-03 19:38 <a href="http://www.blogjava.net/mlh123caoer/archive/2006/01/03/26464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>