XML DTD备忘

来源:互联网 发布:剧本统计软件 编辑:程序博客网 时间:2024/06/05 11:53

        XML中的DTD(Document Type Definition)用来描述xml的结构规则的描述语言,通常用在xml建模上面。

       

        如何定义XML中的节点?

        DTD 有两种元素类型:简单性复杂型。简单型就是不包含子节点的元素,如:<xmltest>xmltest</xmltest>。复杂型及为包含子节点的元素,如:<xmlroot><xmlfirstchild>xmlfirstchild</xmlfirstchild></xmlroot>.

       简单型元素的定义语法为:<!ElEMENT name (#PCDATA)> 。如:<!ELEMENT xmltest (#PCDATA)>就是对应上面的例子定义的简单元素类型。

       复杂型元素的定义语法为:<!ELEMENT name (子节点1,子节点2,....,..)>.如:<!ELEMENT xmlroot (xmlfirstchild)>.

       在这里也可以使用通配符来灵活的 描述子节点出现的情况。

       ?  该子节点出现1次或0次  <!ELEMENT xmlroot (xmlfirstchild,xmlsecondchild?)>

       *  出现0次或N次 <!ELEMENT xmlroot (xmlfirstchild,xmlsecondchild*)>

       +  出现1次或N次 <!ELEMENT xmlroot (xmlfirstchild,xmlsecondchild+)>

       |   不是必须出现的子节点 <!ELEMENT xmlroot (xmlfirstchild|xmlsecondchild)>

       如何定义xml中的属性?

       DTD的属性类型:如<xmltest id="001"/> 这个元素的属性用DTD来定义的话如下:<!ATTLIST xmltest id CDATA>

       属性类型的定义语法为:<!ATTLIST nodename attname type default_value|#REQUIRED|#IMPLIED>

       nodename是指当前定义的属性是在哪个节点中

       type是指属性值的类型,共有8种类型,分别为:

              CDATA:  可以理解为字符串类型 <xmltest id="abcdef"/>

              Enumerated:<xmltest id=book computerbook xmlprograming"/>用空格分隔开的列表

              ID:类似于标识列,当定义<xmltest id='1'/>后,就不允许再有<xmltest id='1'/>定义。

              IDREF:引用标示列 如有定义<xmltestcollection id="1 2 3"/> 其中的"1"分别是元素<xmltest id="1"/>       

              IDREFS:引用标示列 如有定义<xmltestcollection id="1 2 3"/> 其中的"1 2 3"分别是元素<xmltest id="1"/>,<xmltest id="2"/>,<xmltest id="3"/>

              ENTITY: 导入类型 <!ATTRIBUTE xmltest id ENTITY> 引用这类元素:<!ENTITY test SYSTEM http://www.abc.com/abc.jpg>

              ENTITIES:导入类型集合 <!ATTRIBUTE xmltest id ENTITYs>

              NMTOKEN:

              NMTOKENS:

              NOTATION

      如何能更有效率的开发dtd文档?

      实体类型:DTD中有两类实体一般实体和参数实体。这里的实体类似于c语言中的宏

      一般实体作用于内容元素(xml文档),参数实体作用于定义元素(dtd文档内容)

      一般内部实体:<!ENTITY bookname "Xml Programming">

                           <book>

                                  <bookid>1<bookid/>

                                  <bookname>&bookname;</bookname>

                          </book>

       一般外部实体:<!ENTITY book SYSTEM "book.xml">

                          <books>

                                       <book>

                                                   <bookid>1<bookid/>

                                                  <bookname>xml programming</bookname>

                                      </book>

                                       &book;

 

                          </books>

 

         参数内部实体:<!ENTITY % book "(bookid,bookname)">

                              使用该实体:<!ELEMENT book %book;>

        参数外部实体:<!ENTITY % book SYSTEM "book.dtd">

                              使用该实体:<!ELEMENT books (book)+>

                                                %book;

 

       如何在xml文件用引用dtd文档?

            有三中方法:1.嵌入式

                           <!DOCTYPE books[

                                    <!ELEMENT books (book)+>

                                    <!ELEMENT book  (bookid,bookname)> 

                             ]>

                            <books>

                                     <book><bookid>1</bookid></bookname></book>

                            </books>

                              2.外部引用式

                              

                           <!DOCTYPE books SYSTEM "books.dtd">

                              3.混合式

 

                           <!DOCTYPE books SYSTEM "books.dtd" [

                                    <!ELEMENT books (book)+>

                                    <!ELEMENT book  (bookid,bookname)> 

                             ] >

 

 

      

原创粉丝点击