XML学习笔记(二)

 

l         Quality Control,只看了DTDSchema

DTD定义的主要有ELEMENT(元素)ATTLIST(元素的属性)ENTITY(这个没用过)NOTATION(没用过)。可用<!ELEMENT plan (person+)>来表示1 个或多个(还有零个或一个用“?”,零个或多个用“*”。属性中可以用“#REQUIRED”,“#IMPLITED”表示必需或可选等(还可以用“#FIXED 3”表示省缺为3)。以下是plan.dtd的代码:

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT plan (person+)>

<!ELEMENT person (group, name, task+)>

           <!ELEMENT group (#PCDATA)>

           <!ELEMENT name (#PCDATA)>

           <!ELEMENT task (contend, date+)>

                    <!ELEMENT contend (#PCDATA)>

                    <!ELEMENT date (year, month, day)>

                    <!ATTLIST date

                             type (begintime | deadtime) #REQUIRED

                    >

                             <!ELEMENT year (#PCDATA)>

                             <!ELEMENT month (#PCDATA)>

                             <!ELEMENT day (#PCDATA)>

不过现在一般更加提倡用XML Schema。下面就将XML SchemaDTD比较:

1.  前者符合XML文档的规范,后者不是。

2.  可以对文档里每个元素出现的个数(minOccmaxOcc)、每个元素的类型(complexTypesimpleType)做出详细的规定,以及对元素顺序的支持。而后者定义元素个数仅零个、一个或多个的概念,在元素类型上仅有PCDATA,枚举等。

3.  在开发方面,用XMLSpy来做,对XSD文档提供了视图开发,比DTD方便了许多。

4.  XSD中没规定XML的根结点,它可以对所有的Gloable Element进行验证。DTD中规定则根结点。

于是在XML Spy Schema的视图中,就可以看plan.xsd(定义的内容与plan.dtd一样)如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- edited with XMLSpy v2006 rel. 3 sp1 (http://www.altova.com) by WuRH (NewlandComputer) -->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

         <xsd:element name="plan">

                   <xsd:annotation>

                            <xsd:documentation>工作计划</xsd:documentation>

                   </xsd:annotation>

                   <xsd:complexType>

                            <xsd:sequence>

                                     <xsd:element name="person" maxOccurs="unbounded">

                                               <xsd:annotation>

                                                        <xsd:documentation>员工</xsd:documentation>

                                               </xsd:annotation>

                                               <xsd:complexType>

                                                        <xsd:sequence>

                                                                 <xsd:element name="group" type="xsd:string">

                                                                           <xsd:annotation>

                                                                                    <xsd:documentation>员工的工作小组</xsd:documentation>

                                                                           </xsd:annotation>

                                                                 </xsd:element>

                                                                 <xsd:element name="name" type="xsd:string">

                                                                           <xsd:annotation>

                                                                                    <xsd:documentation>员工姓名</xsd:documentation>

                                                                           </xsd:annotation>

                                                                 </xsd:element>

                                                                 <xsd:element name="task" maxOccurs="unbounded">

                                                                           <xsd:annotation>

                                                                                    <xsd:documentation>员工的任务</xsd:documentation>

                                                                           </xsd:annotation>

                                                                           <xsd:complexType>

                                                                                    <xsd:sequence>

                                                                                             <xsd:element name="contend" type="xsd:string">

                                                                                                       <xsd:annotation>

                                                                                                                <xsd:documentation>任务信息</xsd:documentation>

                                                                                                       </xsd:annotation>

                                                                                             </xsd:element>

                                                                                             <xsd:element name="date" minOccurs="2" maxOccurs="2">

                                                                                                       <xsd:annotation>

                                                                                                                <xsd:documentation>任务周期</xsd:documentation>

                                                                                                       </xsd:annotation>

                                                                                                       <xsd:complexType>

                                                                                                                <xsd:sequence>

                                                                                                                         <xsd:element name="year" type="xsd:gYear">

                                                                                                                                   <xsd:annotation>

                                                                                                                                            <xsd:documentation>gYear</xsd:documentation>

                                                                                                                                   </xsd:annotation>

                                                                                                                         </xsd:element>

                                                                                                                         <xsd:element name="month" type="xsd:gMonth">

                                                                                                                                   <xsd:annotation>

                                                                                                                                            <xsd:documentation>gMonth</xsd:documentation>

                                                                                                                                   </xsd:annotation>

                                                                                                                         </xsd:element>

                                                                                                                         <xsd:element name="day" type="xsd:gDay">

                                                                                                                                   <xsd:annotation>

                                                                                                                                            <xsd:documentation>gDay</xsd:documentation>

                                                                                                                                   </xsd:annotation>

                                                                                                                         </xsd:element>

                                                                                                                </xsd:sequence>

                                                                                                                <xsd:attribute name="type" type="dateType" use="required">

                                                                                                                         <xsd:annotation>

                                                                                                                                   <xsd:documentation>begintime/deadtime</xsd:documentation>

                                                                                                                         </xsd:annotation>

                                                                                                                </xsd:attribute>

                                                                                                      </xsd:complexType>

                                                                                             </xsd:element>

                                                                                    </xsd:sequence>

                                                                           </xsd:complexType>

                                                                 </xsd:element>

                                                        </xsd:sequence>

                                               </xsd:complexType>

                                     </xsd:element>

                            </xsd:sequence>

                   </xsd:complexType>

         </xsd:element>

         <xsd:simpleType name="dateType" final="list">

                   <xsd:annotation>

                            <xsd:documentation>时间类型</xsd:documentation>

                   </xsd:annotation>

                   <xsd:restriction base="xsd:string">

                            <xsd:enumeration value="begintime"/>

                            <xsd:enumeration value="deadtime"/>

                   </xsd:restriction>

         </xsd:simpleType>

         <xsd:element name="per">

                   <xsd:complexType>

                            <xsd:sequence>

                                     <xsd:element name="name"/>

                                     <xsd:element name="group"/>

                            </xsd:sequence>

                   </xsd:complexType>

         </xsd:element>

</xsd:schema>

以下代码都可以用XML Spy生成,有几个东西注意。

1<xsd:element/>里有加<xsd:complexType/>才能再加子结点。其中<xsd:sequence/>是带顺序的结点(另外还有<xsd:choice/>表可选,<xsd:all/>表无顺序)

2.可以自定义simpleType。如:       

<xsd:simpleType name="dateType" final="list">

                   <xsd:restriction base="xsd:string">

                            <xsd:enumeration value="begintime"/>

                            <xsd:enumeration value="deadtime"/>

                   </xsd:restriction>

</xsd:simpleType>

就表示创建枚举型。以下方法可以创建表示1-20内的数字:

         <xsd:simpleType name="finiteNum">

                   <xsd:restriction base="xsd:int">

                            <xsd:minInclusive value="1"></xsd:minInclusive>

                            <xsd:minInclusive value="20">L</xsd:minInclusive>

                   </xsd:restriction>

         </xsd:simpleType>

还要说明的xsd:gYear,xsd:gMonth, xsd:gDay的值是2006, -8, --1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值