Java: 玩转schema+xmlbeans
2004-12-06 23:49
459 查看
最近在公司问了一下,知道schema的人很少,能够运用的更是凤毛麟角.
schema是用来定义xml的,就象定义数据库中库中要定义表结构,没有schma的xml是一盘散沙.
在很多产品中,都能看到schema的身影,比如.net中的dataset,Office中的infopath,WebService中的wsdl...
schema的一些特点:
定义简单和复杂的数据结构
用NameSpace来区别,相互引用
语言无关
可以加入描述等附加信息...
先看看schema的简单功能:
简单类型,基于String, 长度介于2~5位
<xs:simpleType name="chineseName">
<xs:restriction base="xs:string">
<xs:maxLength value="5"/>
<xs:minLength value="2"/>
</xs:restriction>
</xs:simpleType>
简单类型,基于String,用正则表达式限定格式:
<xs:simpleType name="arenumber">
<xs:restriction base="xs:string">
<xs:pattern value="0[1-9][0-9]{1,2}"/>
</xs:restriction>
</xs:simpleType>
简单类型,基于String,枚举:
<xs:simpleType name="gender">
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
posted @ 2004-10-14 21:37 steeven 阅读(115) | 评论 (0) | 编辑 收藏
Java: 玩转schema+xmlbeans (2)
手写xml是个很痛苦的事情,手写schema更痛苦.即使用xmlspy,还是有些东西写不出来,比如复杂的数据限制.
xmlbeans是bea捐赠给apache的根据schema生成Java Bean的工具.上面的schema通过编译:
scomp -src src test.xsd
生成如下类:(注意package是xsd的targetNamespace,可以通过配置文件调整)
public interface Gender extends org.apache.xmlbeans.XmlString
Arenumber area = Arenumber.Factory.newInstance();
area.setStringValue("0467");
System.out.println(area);
System.out.println("验证结果:"+area.validate());
Gender gender = Gender.Factory.newInstance();
gender.setStringValue(Gender.女.toString());
System.out.println(gender);
System.out.println("验证结果:"+gender.validate());
ChineseName cn = ChineseName.Factory.newInstance();
cn.setStringValue("李");
System.out.println(cn);
System.out.println("验证结果:"+cn.validate());
运行结果:
<xml-fragment>
0467
</xml-fragment>
验证结果:true
<xml-fragment>
女
</xml-fragment>
验证结果:true
<xml-fragment>
李
</xml-fragment>
验证结果:false
注意:
ChineseName的验证结果为false,因为长度不符合.
因为schemaType只描述数据,<xml-fragment>只是匿名容器
除了上面的newInstance()和validate()方法,还有一些其它实用方法:
Gender.Factory.newValue(Object);//生成新实例
Gender.Factory.parse(File);
Gender.Factory.parse(Reader);
Gender.Factory.parse(InputStream);
Gender.Factory.parse(Node);
Gender.Factory.parse(URL);
Gender.Factory.parse(String);
cn.newDomNode(); //生成DOM
cn.newInputStream(); //生成InputStream
cn.newReader(); //生成Reader
cn.xmlText(); //生成xml文本
cn.schemaType(); //拿到编译后的Schema.用途稍后再说
cn.save(File);
cn.save(Writer);
cn.save(OutputStream);
cn.selectPath("some/path[here='where']"); //xpath
posted @ 2004-10-14 22:31 steeven 阅读(121) | 评论 (2) | 编辑 收藏
schema是用来定义xml的,就象定义数据库中库中要定义表结构,没有schma的xml是一盘散沙.
在很多产品中,都能看到schema的身影,比如.net中的dataset,Office中的infopath,WebService中的wsdl...
schema的一些特点:
定义简单和复杂的数据结构
用NameSpace来区别,相互引用
语言无关
可以加入描述等附加信息...
先看看schema的简单功能:
简单类型,基于String, 长度介于2~5位
<xs:simpleType name="chineseName">
<xs:restriction base="xs:string">
<xs:maxLength value="5"/>
<xs:minLength value="2"/>
</xs:restriction>
</xs:simpleType>
简单类型,基于String,用正则表达式限定格式:
<xs:simpleType name="arenumber">
<xs:restriction base="xs:string">
<xs:pattern value="0[1-9][0-9]{1,2}"/>
</xs:restriction>
</xs:simpleType>
简单类型,基于String,枚举:
<xs:simpleType name="gender">
<xs:restriction base="xs:string">
<xs:enumeration value="男"/>
<xs:enumeration value="女"/>
</xs:restriction>
</xs:simpleType>
posted @ 2004-10-14 21:37 steeven 阅读(115) | 评论 (0) | 编辑 收藏
Java: 玩转schema+xmlbeans (2)
手写xml是个很痛苦的事情,手写schema更痛苦.即使用xmlspy,还是有些东西写不出来,比如复杂的数据限制.
xmlbeans是bea捐赠给apache的根据schema生成Java Bean的工具.上面的schema通过编译:
scomp -src src test.xsd
生成如下类:(注意package是xsd的targetNamespace,可以通过配置文件调整)
public interface Gender extends org.apache.xmlbeans.XmlString
Arenumber area = Arenumber.Factory.newInstance();
area.setStringValue("0467");
System.out.println(area);
System.out.println("验证结果:"+area.validate());
Gender gender = Gender.Factory.newInstance();
gender.setStringValue(Gender.女.toString());
System.out.println(gender);
System.out.println("验证结果:"+gender.validate());
ChineseName cn = ChineseName.Factory.newInstance();
cn.setStringValue("李");
System.out.println(cn);
System.out.println("验证结果:"+cn.validate());
运行结果:
<xml-fragment>
0467
</xml-fragment>
验证结果:true
<xml-fragment>
女
</xml-fragment>
验证结果:true
<xml-fragment>
李
</xml-fragment>
验证结果:false
注意:
ChineseName的验证结果为false,因为长度不符合.
因为schemaType只描述数据,<xml-fragment>只是匿名容器
除了上面的newInstance()和validate()方法,还有一些其它实用方法:
Gender.Factory.newValue(Object);//生成新实例
Gender.Factory.parse(File);
Gender.Factory.parse(Reader);
Gender.Factory.parse(InputStream);
Gender.Factory.parse(Node);
Gender.Factory.parse(URL);
Gender.Factory.parse(String);
cn.newDomNode(); //生成DOM
cn.newInputStream(); //生成InputStream
cn.newReader(); //生成Reader
cn.xmlText(); //生成xml文本
cn.schemaType(); //拿到编译后的Schema.用途稍后再说
cn.save(File);
cn.save(Writer);
cn.save(OutputStream);
cn.selectPath("some/path[here='where']"); //xpath
posted @ 2004-10-14 22:31 steeven 阅读(121) | 评论 (2) | 编辑 收藏
相关文章推荐
- Java 站点链接
- java-FileFilter接口的使用
- java-在Java中读写Excel文件
- java-在Java中操作Zip文件,压缩/解压
- java-Java 的文件(读 写)输入输出
- WDSsoft免费源代码,java加密解密编程常用工具包 JCT 1.0 (整理)
- java beans
- JAVA上加密算法的实现用例
- 第一次进入这个论坛,请大家多多指教!我喜欢学JAVA
- Hate Eclipse 3.0
- Java中执行程序并获取输出
- 我的eclipse版本选择
- 代码加密:加密Java源代码,保护自己的版权!
- 用Java开发代理服务器
- JAVA上加密算法的实现用例MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用
- 整合Java与XML的新应用
- 开发基于JBoss的J2EE应用
- Struts分页的一个实现
- Java关于xml的API
- 枚举类型入门(转载自IBM开发者)