最近在公司問了一下,知道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,用Regex限定格式:
<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,可以通過設定檔調整)
其中Gender的枚舉類型被自動產生嵌套枚舉類,是不是很方便呢?
public interface Gender extends org.apache.xmlbeans.XmlString
{
static final Enum 男 = Enum.forString("男");
static final Enum 女 = Enum.forString("女");
}
測試一下:
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) | 編輯 收藏