关于XMLBeans/shcema,不得不说的话题

博客介绍了schema和xpath的重要性,指出xmlbeans可针对schema生成类。阐述了xmlbeans的特点,如生成强Java类型、支持验证等。还提及schema在webservice、数据表生成dataset等方面的应用,以及其相互引用的强大之处,最后指出xmlbeans存在的不足。

知道了xml相当于会浏览数据库的表
知道了xpath相当于知道了sql
知道了schema相当于知道建表了

所以,schema/xpath一定要明白,而且,了解了以后相当好用.

我有一个多年的梦想,至少两年,现在为止,部分实现,因为发现了xmlbeans

简单的说,xmlbeans是针对schema生成类的,就象我们要对数据库里面的表结构生成class一样.
这个东西是bean捐赠给apache的,出自名门,对schema支持的相当全面.

简单看看这样一个schema:
<xsd:element name="field">
    <xsd:complexType mixed="true">
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
        <xsd:attribute name="label" type="xsd:string" use="optional"/>
    </xsd:complexType>
</xsd:element>
运行scomp test.xsd,生成的Field类大致如下:
class Field{
  String getName();
  void setName(String);
  String getLabel();
  voidSetLabel(String);
}

如果schema中有复杂的嵌套complexType定义,就相应的生成复杂的类,并且支持数组等类型.
详细例子请参考Getting started with XMLBeans

xmlbeans的主要特点如下:
对schema生成强Java类型
生成的类型可以读取相应schema的文档,或者DOM
加载数据后可以根据schema验证.
可以对XmlObject取得对应的SchemaType知道其Schema定义.这是dom3的特性
内建xpath查询
强大的输出到xml.(最简单的方法是toString())

schema是个强大的类型,包括树型类型定义语言.webservice的定义就是依靠schema.
virual studio中数据表生成dataset也是先把数据表定义转换为xsd,然后根据xsd生成强类型dataset..

schema另外一个强大之处在于schema之间的相互引用.完全可以语言定义好一些业务元数据,然后在各种其它shema中引用.并且这些定义是基于QName区分的(类似于网址).完全可以生成一个全球范围的shema知识库,大家相互引用,产生共同标准,比如订单/设备描述等等..并且在某个Type中指明,哪些webservice可以提供这个Type的相关服务.

schema定义的强大的复杂结构,可以用于各种场合,以前曾经尝试过用schema来定义整个网站页面的输入和输出.当时限于条件,只是利用shema生成了xsl,样本数据和database定义.schema只是一种定义,并不是限定了传输数据必须是xml. 如果用了xmlbeans,可以生成强类型的DTO,并且对用户录入进行验证.甚至根据schema利用echo等动态构造网站的framework动态生成客户端界面.

也许对xmlbeans还不熟,觉得有些遗憾的地方:
1. 编译过的schemaType不能得到org.w3c.schema....包下XmlObject的原始类,如果用来分析schema结构恐怕不方便.
2. 动态构造schema不能直接拿来验证数据,需要编译成schemaType才能用于验证.

schemas目录下面有个s4s目录,就是schema for schema,打开XMLSchema.xsd就会想到鸡生蛋蛋生鸡的问题.编译看看,很有趣 :) 如果没有xmlspy的话, 写schema是个比较痛苦的事情.用schema类来写schema就容易的多,因为有强类型提示,而且只会提示允许存在的类型.

下次有空会讲讲如何生成schema的schema.这是我冥思苦想了几天的问题

一些有用的资源:
让生成的类实现特定接口.
http://wiki.apache.org/xmlbeans/ExtensionInterfacesFeature

目前提供的引用内容未涉及 org/apache/xmlbeans/XmlToken$Factory 的相关信息,以下是依据一般知识的介绍。 ### 详细介绍 `org/apache/xmlbeans/XmlToken$Factory` 是 Apache XMLBeans 库中的一个工厂类。Apache XMLBeans 是一个用于处理 XML 数据的 Java 库,它提供了一种类型安全的方式来操作 XML 数据,同时严格遵守 XML 标准。`XmlToken$Factory` 主要用于创建 `XmlToken` 类型的实例。`XmlToken` 代表 XML 中的通用标记,可用于表示任意 XML 内容。 ### 使用方法 #### 1. 添加依赖 如果是 Maven 项目,需在 `pom.xml` 中添加以下依赖: ```xml <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>3.1.0</version> </dependency> ``` #### 2. 创建 `XmlToken` 实例 以下是一个简单的 Java 代码示例,展示了如何使用 `XmlToken$Factory` 创建 `XmlToken` 实例: ```java import org.apache.xmlbeans.XmlToken; public class XmlTokenFactoryExample { public static void main(String[] args) { // 使用工厂类创建 XmlToken 实例 XmlToken xmlToken = XmlToken.Factory.newInstance(); // 设置 XML 内容 xmlToken.setStringValue("<example>这是一个示例 XML 内容</example>"); // 输出 XML 内容 System.out.println(xmlToken.xmlText()); } } ``` 在上述代码中,首先通过 `XmlToken.Factory.newInstance()` 方法创建了一个 `XmlToken` 实例,然后使用 `setStringValue` 方法设置了 XML 内容,最后使用 `xmlText` 方法输出 XML 内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值