您的位置:首页 > 编程语言 > Java开发

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)编辑 收藏
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: