最近在公司问了一下,知道schema的人很少,能够运用的更是凤毛麟角.

schema是用来定义xml的,就象定义数据库中库中要定义表结构,没有schma的xml是一盘散沙.

在很多产品中,都能看到schema的身影,比如.net中的dataset,Office中的infopath,WebService中的wsdl...

schema的一些特点:
    定义简单和复杂的数据结构
    用NameSpace来区别,相互引用
    语言无关
    可以加入描述等附加信息...

先看看schema的简单功能:

简单类型,基于String, 长度介于2~5位
Java: 玩转schema+xmlbeans    <xs:simpleType name="chineseName">
Java: 玩转schema+xmlbeans        
<xs:restriction base="xs:string">
Java: 玩转schema+xmlbeans            
<xs:maxLength value="5"/>
Java: 玩转schema+xmlbeans            
<xs:minLength value="2"/>
Java: 玩转schema+xmlbeans        
</xs:restriction>
Java: 玩转schema+xmlbeans    
</xs:simpleType>
简单类型,基于String,用正则表达式限定格式:
Java: 玩转schema+xmlbeans    <xs:simpleType name="arenumber">
Java: 玩转schema+xmlbeans        
<xs:restriction base="xs:string">
Java: 玩转schema+xmlbeans            
<xs:pattern value="0[1-9][0-9]{1,2}"/>
Java: 玩转schema+xmlbeans        
</xs:restriction>
Java: 玩转schema+xmlbeans    
</xs:simpleType>
简单类型,基于String,枚举:
Java: 玩转schema+xmlbeans    <xs:simpleType name="gender">
Java: 玩转schema+xmlbeans        
<xs:restriction base="xs:string">
Java: 玩转schema+xmlbeans            
<xs:enumeration value="男"/>
Java: 玩转schema+xmlbeans            
<xs:enumeration value="女"/>
Java: 玩转schema+xmlbeans        
</xs:restriction>
Java: 玩转schema+xmlbeans    
</xs:simpleType>
Java: 玩转schema+xmlbeans
posted @ 2004-10-14 21:37 steeven 阅读(115) | 评论 (0)编辑 收藏


手写xml是个很痛苦的事情,手写schema更痛苦.即使用xmlspy,还是有些东西写不出来,比如复杂的数据限制.

xmlbeans是bea捐赠给apache的根据schema生成Java Bean的工具.上面的schema通过编译:
    scomp -src src test.xsd
生成如下类:(注意package是xsd的targetNamespace,可以通过配置文件调整)
Java: 玩转schema+xmlbeans
其中Gender的枚举类型被自动生成嵌套枚举类,是不是很方便呢?Java: 玩转schema+xmlbeans

Java: 玩转schema+xmlbeanspublic interface Gender extends org.apache.xmlbeans.XmlString
{
Java: 玩转schema+xmlbeans    
static final Enum 男 = Enum.forString("");
Java: 玩转schema+xmlbeans    
static final Enum 女 = Enum.forString("");
Java: 玩转schema+xmlbeans}

测试一下:

Java: 玩转schema+xmlbeans        Arenumber area = Arenumber.Factory.newInstance();
Java: 玩转schema+xmlbeans        area.setStringValue(
"0467");
Java: 玩转schema+xmlbeans        System.
out.println(area);
Java: 玩转schema+xmlbeans        System.
out.println("验证结果:"+area.validate());
Java: 玩转schema+xmlbeans        Gender gender 
= Gender.Factory.newInstance();
Java: 玩转schema+xmlbeans        gender.setStringValue(Gender.女.toString());
Java: 玩转schema+xmlbeans        System.
out.println(gender);
Java: 玩转schema+xmlbeans        System.
out.println("验证结果:"+gender.validate());
Java: 玩转schema+xmlbeans        ChineseName cn 
= ChineseName.Factory.newInstance();
Java: 玩转schema+xmlbeans        cn.setStringValue(
"");
Java: 玩转schema+xmlbeans        System.
out.println(cn);
Java: 玩转schema+xmlbeans        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()方法,还有一些其它实用方法:

Java: 玩转schema+xmlbeans        Gender.Factory.newValue(Object);//生成新实例
Java: 玩转schema+xmlbeans
        Gender.Factory.parse(File);
Java: 玩转schema+xmlbeans        Gender.Factory.parse(Reader);
Java: 玩转schema+xmlbeans        Gender.Factory.parse(InputStream);
Java: 玩转schema+xmlbeans        Gender.Factory.parse(Node);
Java: 玩转schema+xmlbeans        Gender.Factory.parse(URL);
Java: 玩转schema+xmlbeans        Gender.Factory.parse(String);        
Java: 玩转schema+xmlbeans        cn.newDomNode(); 
//生成DOM
Java: 玩转schema+xmlbeans
        cn.newInputStream(); //生成InputStream
Java: 玩转schema+xmlbeans
        cn.newReader(); //生成Reader
Java: 玩转schema+xmlbeans
        cn.xmlText(); //生成xml文本
Java: 玩转schema+xmlbeans
        cn.schemaType(); //拿到编译后的Schema.用途稍后再说
Java: 玩转schema+xmlbeans
        cn.save(File); 
Java: 玩转schema+xmlbeans        cn.save(Writer);
Java: 玩转schema+xmlbeans        cn.save(OutputStream);
Java: 玩转schema+xmlbeans        cn.selectPath(
"some/path[here='where']"); //xpath
Java: 玩转schema+xmlbeans



 

posted @ 2004-10-14 22:31 steeven 阅读(121) | 评论 (2)编辑 收藏

相关文章:

  • 2022-12-23
  • 2021-06-11
  • 2021-08-01
  • 2022-12-23
  • 2022-12-23
  • 2022-01-19
  • 2021-12-20
猜你喜欢
  • 2021-12-11
  • 2021-12-19
  • 2021-08-09
  • 2021-09-04
  • 2021-05-22
  • 2022-12-23
  • 2022-01-10
相关资源
相似解决方案