精华内容
下载资源
问答
  • 要使用DTD进行有效性检验,就要使用文档类型定义声明指定DTD。文档类型声明位于XML声明之后,根元素之前。如果dtd文档位于本机,可用路径名直接指出dtd文档位置。 由于XML可自定义标签,所以每个人定义标签集...
  • 即可构建一个专属于微博代理池,有效的代理都是可以爬取微博。 如果使用 Docker-Compose 启动代理池,则需要在 docker-compose.yml 文件里面指定环境变量,如: version: '3' services: redis: image: redis:...
  • 本文使用标准普尔 (S&P) 500 公司,检验此类声明的有效性。 我们发现有证据表明,对于那些有志成为 CEO 的人来说,经济学是一个不错的专业选择。 经济学排名第三,2004 年标普 500 指数公司的 CEO 中有 9% 是本科...
  • 智能交通系统(ITS)在减少交通拥堵和提高日常交通安全方面... 此外,结果表明,在德黑兰-卡拉伊高速公路上,关于“由于维护或重建造成路线阻塞信息的声明”和“路径几何条件的声明”等指标ITS表现是不可接受
  • at selection-screen用法

    千次阅读 2013-07-06 19:59:46
    AT SELECTION-SCREEN 是PAI处理,选择屏幕显示之后,用来...在这个事件响应中,可以对屏幕字段进行有效性检验等,但无法修改选择屏幕。 所以分为以下几个方面: 1. ON field :在PARAMETER变化时触发事件,对于选

    AT SELECTION-SCREEN
    是PAI处理,选择屏幕显示之后,用来响应回车,F8,F1,F4等事件
    (1).选择屏幕事件,此处声明的变量是局部变量。
    (2).check sy-ucomm 判断用户命令。
    (3).在这个事件响应中,可以对屏幕字段进行有效性检验等,但无法修改选择屏幕。
    所以分为以下几个方面:
    1. ON field :在PARAMETER变化时触发的事件,对于选择屏幕某字段输入的PAI事件,当该字段的值被传递给程序时被触发,可以应用于改字段本身的正确性检查,如可系统提示错误,则可以在该字段中重新输入,此时其他元素呈灰色,不接受输入
    2. ON END OF sel :SELECT-OPTION触发的事件,用于整个选择表输入结束后各行的检查
    3. .ON VALUE-REQUEST FOR psel_low_high :当光标位于某屏幕字段时,选择的帮助(F4)
    4. .ON HELP-REQUEST FOR psel_low_high :当光标位于某屏幕字段时,选择的帮助(F1)
    5. .ON RADIOBUTTON GROUP radi :单选按钮事件,必须进行整体输入检查
    6. .ON BLOCK block :框架的触发事件

    AT SELECTION-SCREEN OUTPUT :PBO处理,在选择屏幕显示之前就被调用;响应屏幕上的事件,用户回车或F8后也被调用;通过modify screen可以修改选择屏幕字段。

    AT SELECTION-SCREEN ON S_EQUI.
      CHECK SY-UCOMM = 'ONLI'.”F8
      IF S_EQUI IS INITIAL.
        MESSAGE mess TYPE 'E'.
      ENDIF.

    AT SELECTION-SCREEN OUTPUT.
    IF SCREEN-NAME = 'KOSTL_TX' .”成本中心描述


    IF S_KOSTL-LOW IS NOT INITIAL.
        CALL FUNCTION 'ZIP_GET_KOSTL_NM' ”通过成本中心S_KOSTL取得成本中心描述L_KOSTL
          EXPORTING
            I_KOSTL = S_KOSTL-LOW
          IMPORTING
            E_GTEXT = L_KOSTL.
        KOSTL_TX = L_KOSTL.”修改屏幕字段成本中心描述
      ELSE.
        KOSTL_TX = SPACE.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.

    展开全文
  • 并且在改变传统网络和社会结构:网络信息不再是虚假不可验证,交流和沟通更有明确选择和方向,单一思想和群体智慧结合变更加有效,个人出版变成人人都可以实现梦想—— Blog 正在影响和改变着我们...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    5.3 用缩写指针比较“if(p)”检查空指针是否有效?如果空指针内部表达不是0会怎样? NULL宏 5.4 NULL是什么,它是怎么定义? 5.5 在使用非零位模式作为空指针内部表示机器上,NULL是如何定义? ...
  • LINGO软件学习

    2009-08-08 22:36:50
    注意如果派生集B父集是另外派生集A,那么上面所说原始父集是集A向前回溯到最终原始集,其顺序保持不变,并且派生集A过滤器对派生集B仍然有效。因此,派生集索引个数是最终原始父集个数,索引取值是...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    5.3 用缩写指针比较“if(p)”检查空指针是否有效?如果空指针内部表达不是0会怎样? 55 NULL 宏 56 5.4 NULL是什么,它是怎么定义? 56 5.5 在使用非零位模式作为空指针内部表示机器上,NULL 是...
  • 5.3 用缩写指针比较“if(p)”检查空指针是否有效?如果空指针内部表达不是0会怎样? 55 NULL 宏 56 5.4 NULL是什么,它是怎么定义? 56 5.5 在使用非零位模式作为空指针内部表示机器上,NULL 是...
  • DTD基础

    2008-02-28 11:14:00
    3.1. 文档类型声明要使用DTD进行有效性检验,就要使用文档类型定义声明指定DTD。如: Jims Jims@163.com Jims@21cn.com文档类型声明位于XML声明之后,根元素之前。如果dtd文档位于本机,可用路径名直接指出dtd文档...

    3.1. 文档类型声明

    要使用DTD进行有效性检验,就要使用文档类型定义声明指定DTD。如:

    <?xml version="1.0" standalone="no"?><!DOCTYPE portal SYSTEM "http://www.w3c.com/dtd/portal.dtd"><portal>  <name>Jims</name>  <email>Jims@163.com</email>  <email>Jims@21cn.com</email></portal>

    文档类型声明位于XML声明之后,根元素之前。如果dtd文档位于本机,可用路径名直接指出dtd文档的位置。portal.dtd的内容如下:

    <!ELEMENT portal (name,email*)><!ELEMENT name (#PCDATA)><!ELEMENT email (#PCDATA)>

    上面的内容也可直接写到XML文档内,这种dtd声明方式叫内部dtd子集,如:

    <?xml version="1.0" standalone="no"?><!DOCTYPE portal [<!ELEMENT portal (name,email*)><!ELEMENT name (#PCDATA)><!ELEMENT email (#PCDATA)>]><portal>  <name>Jims</name>  <email>Jims@163.com</email>  <email>Jims@21cn.com</email></portal>

    如果dtd位于XML文档外,则叫外部dtd子集。我们可以结合内外dtd,共同组成一个dtd来为XML文档作验证。如:

    <!DOCTYPE portal SYSTEM "external.dtd" [<!ELEMENT portal (name,email*)><!ELEMENT name (#PCDATA)><!ELEMENT email (#PCDATA)>]>

    注意,使用内外dtd时,这两个dtd要互相兼容,不能有冲突。

    3.2. 元素声明

    上节文档类型声明中的每一项都是元素声明,定义了每个元素的约束。元素声明的格式为:

    <!ELEMENT element_name (content_model)>

    有效文档中使用的每个元素都必须在文档的DTD中用元素声明进行声明。element_name可是任何合法的XML名称,content_model(内容模型)指定元素可以或必须包含的子元素以及子元素的顺序。下面具体介绍内容模型的内容。

    • #PCDATA,规定元素只包含已析的字符数据。下面声明指出一个name元素可以包含文本,但不能划分为独立的area_code、number和extension元素:

      <!ELEMENT name (#PCDATA)>
    • 子元素,可指明元素的子元素。下面声明表示name元素必须包含且只包含一个desc元素。

      <!ELEMENT name (desc)>

      也可用逗号为分隔符,指明多个子元素。并且子元素出现的次序必须按定义时的顺序。如:

      <!ELEMENT name (id,desc)>

      name元素的id子元素必须在desc子元素前面,否则验证会出错,该文档不是一个有效的XML文档。

      下面这个文档是有效的<name>   <id>1</id>   <desc>dtd test</desc></name>下面这个文档是无效的,顺序颠倒了<name>   <desc>dtd test</desc>   <id>1</id></name>下面的文档也是无效的,有多余的元素<name>   <id>1</id>   <desc>dtd test</desc>   <date>2005/01/31</date></name>
    • 子元素的个数,我们可通过正则表达式来规定子元素的个数。

      • ?,允许零个或一个该元素

      • *,允许零个或多个该元素

      • +,允许一个或多个该元素

      下面我们可利用这些符号规定id子元素必须出现,且只能出现一次,而desc子元素可选。

      <!ELEMENT name (id,desc*)>

      根据上面的声明,下面的name元素都是有效的。

      <name>   <id>1</id>   <desc>dtd test</desc></name><name>   <id>2</id></name><name>   <id>3</id>   <desc>dtd test</desc>   <desc>another test</desc></name>
    • 可选项(|),选项是一个参数列表,每个参数间用“|”分隔,代表能且只能选一个子元素。

      <!ELEMENT choice (good | bad)>

      上例的choice元素可选一个good子元素,或bad子元素,且只能从选一个。可选的参数列可以多项,不限于两项。如:

      <!ELEMENT choice (one | two | three | four)>
    • 小括号,可用小括号把选项括起来,以表达更丰富的意思,如我们想表示choice元素必须包含一个good子元素,并且必须包含ok子元素或bad子元素的一个。

      <!ELEMENT choice (good,(ok|bad))>
    • 混合内容,在一些文档中,一个元素可能既包含子元素,也包含字符串,这些内容叫混合内容。可用以下方式表示:

      <!EMEMENT description (#PCDATA | term)* )>

      该声明表示description元素可包含已析的字符串和term子元素,且允许出现零次或多次,如:

      <description>this is a <term>dtd</term> test.</description>

      #PCDATA必须在第一位,可选的子元素可任意多项。

    • 空元素,某些元素不用包含任何内容,称之为空元素。写成以/>结束的独立标签。

      <!ELEMENT image EMPTY>

      示例:

      <image src="http://www.xml.com/dtd.jpg" />
    • ANY,允许元素内包含任意内容。该选项在dtd测试时很有用,在生产系统中尽量不要使用。

      <!ELEMENT page ANY>

    3.3. 属性声明

    一个有效的XML文档,必须对元素的属性进行声明。使用ATTLIST声明来完成,一个ATTLIST可以为一个元素类型声明多个属性。

    <!ATTLIST image src CDATA #REQUIRED>

    上例声明image元素必须有一个src属性,该属性的值是字符数据。可用ATTLIST声明为一个元素声明多个属性,如:

    <!ATTLIST image src    CDATA #REQUIRED                width  CDATA #REQUIRED                height CDATA #REQUIRED                alt    CDATA #IMPLIED>

    上述声明指出src、width、height属性是必须的,alt属性是可选的。

    3.3.1. 属性类型

    • CDATA类型属性值可包含任意文本字符串。DTD不能指定属性为一个整数或一个日期,Schema能提供更为强大的数据类型。

    • NMTOKEN类型属性值是一个XML名称记号。XML名称记号与XML名称类似,但XML名称记号允许所有的字符作为名称的开始字符,而XML名称的第一个字母必须是字母、表意字符和下划线。因此10,.bashrc是合法的XML名称标记,但不是合法的XML名称。每个XML名称都是一个XML名称标记,然而XML名称标记不全是XML名称。如果属性包含1990,2005之类的整数,则应该指定其类型为NMTOKEN。如:

      <!ELEMENT person birthday NMTOKEN #REQUIRED>
    • NMTOKENS类型属性包含一个或多个用空白分隔的XML名称记号。如:

      <person dates="02-01-2005 03-01-2005 05-01-2005">person</person>

      对应的声明应为:

      <!ATTLIST person dates NMTOKENS #REQUIRED>

      另一方面,对01/02/2005这样的形式不能使用该声明,因为其中的正斜杠不是合法的名称字符。

    • 枚举声明,枚举不用关键字。直接列举所有的值,中间用竖线分隔。如:

      <!ATTLIST date month(January | February | March | April | May | June | July | August | September | October | November | December) #REQUIRED>

      针对上述声明,date元素的month属性可选十二个月份的中一个。

    • ID类型的属性必须包含一个XML名称,而且该名称在文档中是独一无二的。ID属性可为元素分配一个唯一的标识符。

      <!ATTLIST name card_id ID #REQUIRED>

      由于数字不是合法的XML名称,所以ID编号不能以数字开头,解决办法是在前面加下划线或字母。

    • IDREF类型的属性指向文档中某元素的ID类型的属性。因此,它必须是一个XML名称,它的作用是当简单的包含关系不能满足要求时在元素间建立多对多关系。如:

      <project project_id="p1">   <goal>deploy linux</goal>   <team_member person_card_id="c123"></project><person card_id="c123">   <name>linuxsir</name>   <assignment project_project_id="p1"></person>

      project元素的project_id属性和person元素的card_id属性应该是ID类型。team_member元素的person_card_id属性和assignment元素的project_project_id属性是IDREF类型。对应的声明如下:

      <!ATTLIST person  card_id    ID #REQUIRED><!ATTLIST project project_id ID #REQUIRED><!ATTLIST team_member person_card_id     IDREF #REQUIRED><!ATTLIST assignment  project_project_id IDREF #REQUIRED>
    • IDREFS类型的属性包含一个XML名称列表。名称间用空白间隔,且每个名称都是文档中某个元素的ID。当某个元素需要引用多个其他元素时使用该元素。如:

      <!ATTLIST person card_id    ID     #REQUIRED                 assignment IDREFS #REQUIRED><!ATTLIST project project_id ID     #REQUIRED                 team        IDREFS #REQUIRED>

      对应的文档可写成:

      <project project_id="p1" team="c123">   <gold>deploy linux</gold></project><person card_id="c123" assignment="p1">   <name>Linuxsir</name></person>
    • ENTITY类型的属性包含在DTD的其它位置声明的未析实体的名称中。如movie元素可能有一个标识激活时播放mpeg或rm文件的实体属性:

      <!ATTLIST movie src ENTITY #REQUIRED>

      如果DTD声明了一个名为play的未析实体,则此movie元素可用于在XML文档中嵌入视频文件:

      <movie src="play" />
    • ENTITIES类型的属性包含在DTD的其它位置声明的多个未析实体名称,其间用空白隔开。

      <!ATTLIST slide_show slides ENTITIES #REQUIRED>

      如果DTD声明了未析实体slide1、slide2、slide3、...,则可使用slide_show元素在XML文档中嵌入幻灯片。

      <slide_show slides="slide1 slide2 slide3" />
    • NOTATION类型的属性包含在文档的DTD中声明的某个记法的名称。该属性类型较少用。理论上,可以使用该属性使某些特殊元素与类型相关联,下例声明为不同的图像类型定义了4个记法,然后规定每个image元素都必须从中选择一种type属性。

      <!NOTATION gif SYSTEM "image/gif"><!NOTATION tiff SYSTEM "image/tiff"><!NOTATION jpeg SYSTEM "image/jpeg"><!NOTATION png SYSTEM "image/png"><!ATTLIST image type NOTATION (gif | tiff | jpeg | png) #REQUIRED>

      每个image元素的type属性的值可以为gif,tiff,jpeg和png四个值中的一个。该属性比枚举类型稍具优势,因为记法的实际MIME媒体类型在理论上是可用的。由于斜杠在XML名称中不是一个合法字符,所以枚举类型不能指定image/png或image/jpeg作为允许值。

    3.3.2. 属性缺省值

    每个ATTLIST声明除了要提供一种数据类型外,还要声明属性的缺省行为。

    • #IMPLIED,属性可选。

    • #REQUIRED,属性必须有。

    • #FIXED,属性是常量,不能更改。

      <!ATTLIST person name CDATA #FIXED "linuxsir"
    • Literal,作为一个引用字符串的实际缺省值。

      <!ATTLIST person name NMTOKEN "linuxsir"

      如果没有显示指明person元素的name属性,则该值为linuxsir。

    3.4. 实体

    • 用ENTITY声明定义实体。如:

      <!ENTITY linux "linux is a very good system">用&linux;可引用该字符串
    • 可定义一个外部实体,引用外部XML文档

      <!ENTITY linux SYSTEM "/home/linux/test.xml">使用&linux;可引用/home/linux/test.xml文档

      外部实体没有XML声明,但可以有文本声明,两者很类似,主要区别是文本声明必须有编码声明,而版本信息则是可选的。

      <?xml version="1.0" encoding="gb2312"?>    是一个合法的文本声明<?xml encoding="gb2312"?>                  也是一个合法的文本声明
    • 不是所有的数据都是XML。如jpeg照片,mpeg电影等。XML建议使用外部未析实体作为在文档中嵌入这些内容的机制。DTD为包含非XML数据的实体指定一个名称和URI。

      <!ENTITY movie SYSTEM "/home/linux/test.avi" NDATA avi>

      由于数据不是XML格式,所以使用NDATA声明指定数据类型。avi是在NOTATION中定义的MIME媒体类型。在XML中嵌入未析实体很复杂且不规范,尽量不要使用。

    • 参数实体可定义一组通用的实体,在文档中可通过该参数实体来引用实体。参数实体的定义与通用实体定义类似,只是中间多了一个%,引用时也是用%代码&。

      <!ENTITY % person "name,address,postcode">引用方法%person;这样会用name,address,postcode代替参数实体%person;
    • 通常DTD都比较大,DocBook的DTD长达11000多行,如果把它存放在单一文件中,管理和维护起来都非常困难。我们可以使用外部DTD子集,把一个大的DTD按功能分成不同的功能块,存放在不同的文件中。再通过外部参数实体声明引入当前DTD中,如:

      定义参数实体引用外部names.dtd<!ENTITY % names SYSTEM "names.dtd">调用外部DTD子集%names;
    • 使用IGNORE关键字可注释声明,如:

      <![IGNORE[   <!ELEMENT note (#PCDATA)>]]>

      当然了,使用<!-- 注释 -->的方式也是一样的。

    • INCLUDE关键字表示DTD中的确在使用给定的声明,如:

      <![INCLUDE[   <!ELEMENT note (#PCDATA)>]]>

      单从该声明来看,有没有使用INCLUDE效果都一样,但如果组合INCLUDE和IGNORE,可实现DTD功能的选择。我们可定义一个参数实体:

      <!ENTITY % note_allowed "INCLUDE" >

      然后使用参数实体引用而不使用关键字:

      <![%note_allowed;[   <!ELEMENT note (#PCDATA)>]]>

      按上述操作,元素声明是有效的,但我们也可以把参数实体%note_allowed重新定义为IGNORE,这样,该元素声明就无效了。

    my simple example:

    .DTD文件

    <!--ELEMENT聲明 ===>對元素進行聲明,一個元素可包含多個子元素
     ATTLIST聲明===>對元素的屬性進行聲明,一個元素可包含多個屬性
     ? :表示允許 0個或1個 該元素
     *  :表示允許 0個或多個 該元素
     +  :表示允許 1個或多個 該元素
    -->

    <!--有4個子元素-->
    <!ELEMENT Family (Person, Furniture, Pet)>
    <!ELEMENT Person (#PCDATA)>
    <!ELEMENT Furniture (#PCDATA)>
    <!ATTLIST Family
     type CDATA #REQUIRED
    >
    <!--有3個屬性-->
    <!ATTLIST Person
     UserName CDATA #REQUIRED
     Sex CDATA #REQUIRED
     Age CDATA #REQUIRED
    >
    <!ATTLIST Furniture
     Name CDATA #REQUIRED
     Number CDATA #REQUIRED
     Description CDATA #REQUIRED
    >
    <!--有1個屬性-->

    <!ELEMENT Pet (#PCDATA)>

    .xslt文件

    <?xml version="1.0" encoding="big5"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="xml" version="1.0" encoding="big5" indent="yes"/>
     <xsl:template match="/">
      <html>
       <head><title>My XML SPY教程</title></head>
       <body><xsl:apply-templates/></body>
      </html>
     </xsl:template>
      <xsl:template match="Family">
      Family
      <table>
       <tbody>
        <tr>
         <td>Person</td>
         <td>Furniture</td>
         <td>Pet</td>
        </tr>
        <tr>
         <td><xsl:value-of select="Person"/></td>
         <td> <xsl:value-of select="Furniture"/></td>
         <td><xsl:value-of select="Pet"/></td>
        </tr>
       </tbody>
      </table>
     </xsl:template>
    </xsl:stylesheet>

    .XML文件

    <?xml version="1.0" encoding="Big5"?>
    <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by KELLY (SS) -->
    <!DOCTYPE Family SYSTEM "D:/My xml/myDTD1.dtd">
    <?xml-stylesheet type="text/xsl" href="D:/My _fcksavedurl=""D:/My" _fcksavedurl=""D:/My" _fcksavedurl=""D:/My" xml/myXSLT1.xslt"?>
    <Family type="">
     <Person UserName="Kell" Sex="Femail" Age="20">Kell</Person>
     <Furniture Name="Computer" Number="2" Description="Good">Computer</Furniture>
     <Pet>Dog</Pet>
    </Family>


     
    展开全文
  • DTD基礎

    千次阅读 2006-03-09 14:47:00
     文档类型声明要使用DTD进行有效性检验,就要使用文档类型定义声明指定DTD。如: Jims Jims@163.com Jims@21cn.com文档类型声明位于XML声明之后,根元素之前。如果dtd文档位于本机,可用路径名直接指出dtd文档...

    DTD

    3.1. 文档类型声明

    要使用DTD进行有效性检验,就要使用文档类型定义声明指定DTD。如:

    <?xml version="1.0" standalone="no"?>
    <!DOCTYPE portal SYSTEM "http://www.w3c.com/dtd/portal.dtd">
    <portal>
      <name>Jims</name>
      <email>Jims@163.com</email>
      <email>Jims@21cn.com</email>
    </portal>
    

    文档类型声明位于XML声明之后,根元素之前。如果dtd文档位于本机,可用路径名直接指出dtd文档的位置。portal.dtd的内容如下:

    <!ELEMENT portal (name,email*)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT email (#PCDATA)>
    

    上面的内容也可直接写到XML文档内,这种dtd声明方式叫内部dtd子集,如:

    <?xml version="1.0" standalone="no"?>
    <!DOCTYPE portal [
    <!ELEMENT portal (name,email*)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT email (#PCDATA)>
    ]>
    <portal>
      <name>Jims</name>
      <email>Jims@163.com</email>
      <email>Jims@21cn.com</email>
    </portal>
    

    如果dtd位于XML文档外,则叫外部dtd子集。我们可以结合内外dtd,共同组成一个dtd来为XML文档作验证。如:

    <!DOCTYPE portal SYSTEM "external.dtd" [
    <!ELEMENT portal (name,email*)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT email (#PCDATA)>
    ]>
    

    注意,使用内外dtd时,这两个dtd要互相兼容,不能有冲突。

    3.2. 元素声明

    上节文档类型声明中的每一项都是元素声明,定义了每个元素的约束。元素声明的格式为:

    <!ELEMENT element_name (content_model)>
    

    有效文档中使用的每个元素都必须在文档的DTD中用元素声明进行声明。element_name可是任何合法的XML名称,content_model(内容模型)指定元素可以或必须包含的子元素以及子元素的顺序。下面具体介绍内容模型的内容。

    • #PCDATA,规定元素只包含已析的字符数据。下面声明指出一个name元素可以包含文本,但不能划分为独立的area_code、number和extension元素:

      <!ELEMENT name (#PCDATA)>
      
    • 子元素,可指明元素的子元素。下面声明表示name元素必须包含且只包含一个desc元素。

      <!ELEMENT name (desc)>
      

      也可用逗号为分隔符,指明多个子元素。并且子元素出现的次序必须按定义时的顺序。如:

      <!ELEMENT name (id,desc)>
      

      name元素的id子元素必须在desc子元素前面,否则验证会出错,该文档不是一个有效的XML文档。

      下面这个文档是有效的
      <name>
         <id>1</id>
         <desc>dtd test</desc>
      </name>
      
      下面这个文档是无效的,顺序颠倒了
      <name>
         <desc>dtd test</desc>
         <id>1</id>
      </name>
      
      下面的文档也是无效的,有多余的元素
      <name>
         <id>1</id>
         <desc>dtd test</desc>
         <date>2005/01/31</date>
      </name>
      
    • 子元素的个数,我们可通过正则表达式来规定子元素的个数。

      • ?,允许零个或一个该元素

      • *,允许零个或多个该元素

      • +,允许一个或多个该元素

      下面我们可利用这些符号规定id子元素必须出现,且只能出现一次,而desc子元素可选。

      <!ELEMENT name (id,desc*)>
      

      根据上面的声明,下面的name元素都是有效的。

      <name>
         <id>1</id>
         <desc>dtd test</desc>
      </name>
      
      <name>
         <id>2</id>
      </name>
      
      <name>
         <id>3</id>
         <desc>dtd test</desc>
         <desc>another test</desc>
      </name>
      
    • 可选项(|),选项是一个参数列表,每个参数间用“|”分隔,代表能且只能选一个子元素。

      <!ELEMENT choice (good | bad)>
      

      上例的choice元素可选一个good子元素,或bad子元素,且只能从选一个。可选的参数列可以多项,不限于两项。如:

      <!ELEMENT choice (one | two | three | four)>
      
    • 小括号,可用小括号把选项括起来,以表达更丰富的意思,如我们想表示choice元素必须包含一个good子元素,并且必须包含ok子元素或bad子元素的一个。

      <!ELEMENT choice (good,(ok|bad))>
      
    • 混合内容,在一些文档中,一个元素可能既包含子元素,也包含字符串,这些内容叫混合内容。可用以下方式表示:

      <!EMEMENT description (#PCDATA | term)* )>
      

      该声明表示description元素可包含已析的字符串和term子元素,且允许出现零次或多次,如:

      <description>
      this is a <term>dtd</term> test.
      </description>
      

      #PCDATA必须在第一位,可选的子元素可任意多项。

    • 空元素,某些元素不用包含任何内容,称之为空元素。写成以/>结束的独立标签。

      <!ELEMENT image EMPTY>
      

      示例:

      <image src="http://www.xml.com/dtd.jpg" />
      
    • ANY,允许元素内包含任意内容。该选项在dtd测试时很有用,在生产系统中尽量不要使用。

      <!ELEMENT page ANY>
      

    3.3. 属性声明

    一个有效的XML文档,必须对元素的属性进行声明。使用ATTLIST声明来完成,一个ATTLIST可以为一个元素类型声明多个属性。

    <!ATTLIST image src CDATA #REQUIRED>
    

    上例声明image元素必须有一个src属性,该属性的值是字符数据。可用ATTLIST声明为一个元素声明多个属性,如:

    <!ATTLIST image src    CDATA #REQUIRED
                    width  CDATA #REQUIRED
                    height CDATA #REQUIRED
                    alt    CDATA #IMPLIED
    >
    

    上述声明指出src、width、height属性是必须的,alt属性是可选的。

    3.3.1. 属性类型

    • CDATA类型属性值可包含任意文本字符串。DTD不能指定属性为一个整数或一个日期,Schema能提供更为强大的数据类型。

    • NMTOKEN类型属性值是一个XML名称记号。XML名称记号与XML名称类似,但XML名称记号允许所有的字符作为名称的开始字符,而XML名称的第一个字母必须是字母、表意字符和下划线。因此10,.bashrc是合法的XML名称标记,但不是合法的XML名称。每个XML名称都是一个XML名称标记,然而XML名称标记不全是XML名称。如果属性包含1990,2005之类的整数,则应该指定其类型为NMTOKEN。如:

      <!ELEMENT person birthday NMTOKEN #REQUIRED>
      
    • NMTOKENS类型属性包含一个或多个用空白分隔的XML名称记号。如:

      <person dates="02-01-2005 03-01-2005 05-01-2005">person</person>
      

      对应的声明应为:

      <!ATTLIST person dates NMTOKENS #REQUIRED>
      

      另一方面,对01/02/2005这样的形式不能使用该声明,因为其中的正斜杠不是合法的名称字符。

    • 枚举声明,枚举不用关键字。直接列举所有的值,中间用竖线分隔。如:

      <!ATTLIST date month(January | February | March | April | May | June | July | August | September | October | November | December) #REQUIRED>
      

      针对上述声明,date元素的month属性可选十二个月份的中一个。

    • ID类型的属性必须包含一个XML名称,而且该名称在文档中是独一无二的。ID属性可为元素分配一个唯一的标识符。

      <!ATTLIST name card_id ID #REQUIRED>
      

      由于数字不是合法的XML名称,所以ID编号不能以数字开头,解决办法是在前面加下划线或字母。

    • IDREF类型的属性指向文档中某元素的ID类型的属性。因此,它必须是一个XML名称,它的作用是当简单的包含关系不能满足要求时在元素间建立多对多关系。如:

      <project project_id="p1">
         <goal>deploy linux</goal>
         <team_member person_card_id="c123">
      </project>
      
      <person card_id="c123">
         <name>linuxsir</name>
         <assignment project_project_id="p1">
      </person>
      

      project元素的project_id属性和person元素的card_id属性应该是ID类型。team_member元素的person_card_id属性和assignment元素的project_project_id属性是IDREF类型。对应的声明如下:

      <!ATTLIST person  card_id    ID #REQUIRED>
      <!ATTLIST project project_id ID #REQUIRED>
      
      <!ATTLIST team_member person_card_id     IDREF #REQUIRED>
      <!ATTLIST assignment  project_project_id IDREF #REQUIRED>
      
    • IDREFS类型的属性包含一个XML名称列表。名称间用空白间隔,且每个名称都是文档中某个元素的ID。当某个元素需要引用多个其他元素时使用该元素。如:

      <!ATTLIST person card_id    ID     #REQUIRED
                       assignment IDREFS #REQUIRED>
      <!ATTLIST project project_id ID     #REQUIRED
                       team        IDREFS #REQUIRED>
      

      对应的文档可写成:

      <project project_id="p1" team="c123">
         <gold>deploy linux</gold>
      </project>
      
      <person card_id="c123" assignment="p1">
         <name>Linuxsir</name>
      </person>
      
    • ENTITY类型的属性包含在DTD的其它位置声明的未析实体的名称中。如movie元素可能有一个标识激活时播放mpeg或rm文件的实体属性:

      <!ATTLIST movie src ENTITY #REQUIRED>
      

      如果DTD声明了一个名为play的未析实体,则此movie元素可用于在XML文档中嵌入视频文件:

      <movie src="play" />
      
    • ENTITIES类型的属性包含在DTD的其它位置声明的多个未析实体名称,其间用空白隔开。

      <!ATTLIST slide_show slides ENTITIES #REQUIRED>
      

      如果DTD声明了未析实体slide1、slide2、slide3、...,则可使用slide_show元素在XML文档中嵌入幻灯片。

      <slide_show slides="slide1 slide2 slide3" />
      
    • NOTATION类型的属性包含在文档的DTD中声明的某个记法的名称。该属性类型较少用。理论上,可以使用该属性使某些特殊元素与类型相关联,下例声明为不同的图像类型定义了4个记法,然后规定每个image元素都必须从中选择一种type属性。

      <!NOTATION gif SYSTEM "image/gif">
      <!NOTATION tiff SYSTEM "image/tiff">
      <!NOTATION jpeg SYSTEM "image/jpeg">
      <!NOTATION png SYSTEM "image/png">
      <!ATTLIST image type NOTATION (gif | tiff | jpeg | png) #REQUIRED>
      

      每个image元素的type属性的值可以为gif,tiff,jpeg和png四个值中的一个。该属性比枚举类型稍具优势,因为记法的实际MIME媒体类型在理论上是可用的。由于斜杠在XML名称中不是一个合法字符,所以枚举类型不能指定image/png或image/jpeg作为允许值。

    3.3.2. 属性缺省值

    每个ATTLIST声明除了要提供一种数据类型外,还要声明属性的缺省行为。

    • #IMPLIED,属性可选。

    • #REQUIRED,属性必须有。

    • #FIXED,属性是常量,不能更改。

      <!ATTLIST person name CDATA #FIXED "linuxsir"
      
    • Literal,作为一个引用字符串的实际缺省值。

      <!ATTLIST person name NMTOKEN "linuxsir"
      

      如果没有显示指明person元素的name属性,则该值为linuxsir。

    3.4. 实体

    • 用ENTITY声明定义实体。如:

      <!ENTITY linux "linux is a very good system">
      用&linux;可引用该字符串
      
    • 可定义一个外部实体,引用外部XML文档

      <!ENTITY linux SYSTEM "/home/linux/test.xml">
      使用&linux;可引用/home/linux/test.xml文档
      

      外部实体没有XML声明,但可以有文本声明,两者很类似,主要区别是文本声明必须有编码声明,而版本信息则是可选的。

      <?xml version="1.0" encoding="gb2312"?>    是一个合法的文本声明
      <?xml encoding="gb2312"?>                  也是一个合法的文本声明
      
    • 不是所有的数据都是XML。如jpeg照片,mpeg电影等。XML建议使用外部未析实体作为在文档中嵌入这些内容的机制。DTD为包含非XML数据的实体指定一个名称和URI。

      <!ENTITY movie SYSTEM "/home/linux/test.avi" NDATA avi>
      

      由于数据不是XML格式,所以使用NDATA声明指定数据类型。avi是在NOTATION中定义的MIME媒体类型。在XML中嵌入未析实体很复杂且不规范,尽量不要使用。

    • 参数实体可定义一组通用的实体,在文档中可通过该参数实体来引用实体。参数实体的定义与通用实体定义类似,只是中间多了一个%,引用时也是用%代码&。

      <!ENTITY % person "name,address,postcode">
      引用方法
      %person;
      这样会用name,address,postcode代替参数实体%person;
      
    • 通常DTD都比较大,DocBook的DTD长达11000多行,如果把它存放在单一文件中,管理和维护起来都非常困难。我们可以使用外部DTD子集,把一个大的DTD按功能分成不同的功能块,存放在不同的文件中。再通过外部参数实体声明引入当前DTD中,如:

      定义参数实体引用外部names.dtd
      <!ENTITY % names SYSTEM "names.dtd">
      调用外部DTD子集
      %names;
      
    • 使用IGNORE关键字可注释声明,如:

      <![IGNORE[
         <!ELEMENT note (#PCDATA)>
      ]]>
      

      当然了,使用<!-- 注释 -->的方式也是一样的。

    • INCLUDE关键字表示DTD中的确在使用给定的声明,如:

      <![INCLUDE[
         <!ELEMENT note (#PCDATA)>
      ]]>
      

      单从该声明来看,有没有使用INCLUDE效果都一样,但如果组合INCLUDE和IGNORE,可实现DTD功能的选择。我们可定义一个参数实体:

      <!ENTITY % note_allowed "INCLUDE" >
      

      然后使用参数实体引用而不使用关键字:

      <![%note_allowed;[
         <!ELEMENT note (#PCDATA)>
      ]]>
      

      按上述操作,元素声明是有效的,但我们也可以把参数实体%note_allowed重新定义为IGNORE,这样,该元素声明就无效了。

    my simple example:

    .DTD文件

    <!--ELEMENT聲明 ===>對元素進行聲明,一個元素可包含多個子元素
     ATTLIST聲明===>對元素的屬性進行聲明,一個元素可包含多個屬性
     ? :表示允許 0個或1個 該元素
     *  :表示允許 0個或多個 該元素
     +  :表示允許 1個或多個 該元素
    -->

    <!--有4個子元素-->
    <!ELEMENT Family (Person, Furniture, Pet)>
    <!ELEMENT Person (#PCDATA)>
    <!ELEMENT Furniture (#PCDATA)>
    <!ATTLIST Family
     type CDATA #REQUIRED
    >
    <!--有3個屬性-->
    <!ATTLIST Person
     UserName CDATA #REQUIRED
     Sex CDATA #REQUIRED
     Age CDATA #REQUIRED
    >
    <!ATTLIST Furniture
     Name CDATA #REQUIRED
     Number CDATA #REQUIRED
     Description CDATA #REQUIRED
    >
    <!--有1個屬性-->

    <!ELEMENT Pet (#PCDATA)>

    .xslt文件

    <?xml version="1.0" encoding="big5"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="xml" version="1.0" encoding="big5" indent="yes"/>
     <xsl:template match="/">
      <html>
       <head><title>My XML SPY教程</title></head>
       <body><xsl:apply-templates/></body>
      </html>
     </xsl:template>
      <xsl:template match="Family">
      Family
      <table>
       <tbody>
        <tr>
         <td>Person</td>
         <td>Furniture</td>
         <td>Pet</td>
        </tr>
        <tr>
         <td><xsl:value-of select="Person"/></td>
         <td> <xsl:value-of select="Furniture"/></td>
         <td><xsl:value-of select="Pet"/></td>
        </tr>
       </tbody>
      </table>
     </xsl:template>
    </xsl:stylesheet>

    .XML文件

    <?xml version="1.0" encoding="Big5"?>
    <!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by KELLY (SS) -->
    <!DOCTYPE Family SYSTEM "D:/My xml/myDTD1.dtd">
    <?xml-stylesheet type="text/xsl" href="D:/My _fcksavedurl=""D:/My" _fcksavedurl=""D:/My" _fcksavedurl=""D:/My" xml/myXSLT1.xslt"?>
    <Family type="">
     <Person UserName="Kell" Sex="Femail" Age="20">Kell</Person>
     <Furniture Name="Computer" Number="2" Description="Good">Computer</Furniture>
     <Pet>Dog</Pet>
    </Family>

    展开全文
  • 6.2.1 声明性数据保护 231 6.2.2 基本语法 233 6.2.3 基于简单表达式CHECK约束 235 6.2.4 基于函数CHECK约束 237 6.2.5 约束引起错误 242 6.2.6 DML触发器 244 6.2.7 处理来自触发器和约束错误 277 ...
  • 6.2.1 声明性数据保护 231 6.2.2 基本语法 233 6.2.3 基于简单表达式CHECK约束 235 6.2.4 基于函数CHECK约束 237 6.2.5 约束引起错误 242 6.2.6 DML触发器 244 6.2.7 处理来自触发器和约束错误 277 ...
  • DTD介绍1

    2010-03-14 14:45:00
    DTD(Document Type Definition,文档...当进行有效性验证XML处理器读到该指令时,它获取DTD,并根据其中定义规则对文档进行检验。文档类型声明必须位于XML声明之后,且在根元素(文档元素)之前。1.内部DTD ]>文档

    DTD(Document Type Definition,文档类型定义),有了DTD就可以检测XML文档的结构是否正确。通过在XML文档中包含文档类型声明,来建立当前文档和DTD的关联。当进行有效性验证的XML处理器读到该指令时,它获取DTD,并根据其中定义的规则对文档进行检验。文档类型声明必须位于XML声明之后,且在根元素(文档元素)之前。

    1.内部DTD

    <?xml version="1.0" encoding='gb2312' standalone='yes'?>

    <!DOCTYPE greeting [

         <!ELEMENT greeting (#PCDATA)>

    ]>

    文档类型声明由<!开始,后面紧跟一个关键字DOCTYPE,然后是文档根元素的名称,接下来是标记声明块,标记声明块是放在左中括号[和右中括号]之间,由一个或多个标记声明构成,最后由>结束。在DTD中,所有的关键字都是大写的,不过定义的元素和属性的大小写可以任意指定。

    2.外部DTD

    在文档类型声明时,用关键字SYSTEM或PUBLIC来指出外部DTD文件的位置,使用SYSTEM关键字的声明语法如下:

    <!DOCTYPE 根元素的名字 SYSTEM "外部DTD文件的URI">

    SYSTEM关键字表示文档使用的是私有的DTD文件,"外部DTD文件的URI"可以是相当URI或者绝对URI,相对URI是相对于文档类型声明所在的文档的位置。

    使用PUBLIC关键字的声明语法如下:

    <!DOCTYPE 根元素的名字 PUBLIC"DTD的名称""外部DTD文件的URI">

    "DTD的名称(公共标识符)"可以存放在某个公共的地方,XML处理程序会根据名称按照某种方式去检索DTD,如果XML处理器不能根据名称检索到DTD,就会使用"外部DTD文件的URI(系统标识符)"来查找该DTD。

    "DTD的名称"规则:

    它们只能包含ASCII字母和数字字符,空格,回车符,换行符和一些标点符号。

    如果一项DTD是ISO标准,它的名称要以字符串"ISO"开始,如果是一个非ISO的标准组织批准的DTD,它的名称以+开始,其它的则以-开始。

    这些字符后接//和DTD所有者的名字,之后是另一个//和DTD描述的文档类型,接着又是//后接ISO 639语言标识符,如EN表示英语(参见http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt)。

    例如:-//xin sun//DTD HR 1.0//ZH

    我们可以通过在声明中通过standalone="yes"来定义我们的文档不依赖于外部文档。

     

    展开全文
  • 内容索引:VC/C++源码,算法相关,进制转换 一个VC++进制转换组件及实例源代码,提供各种不同进制互相转换接口声明,以及二个接口涵数:IsValidate()用来检验输入有效性;Convert()来完成实际转换,编译时只用编译...
  • 功能测试方法及测试点

    千次阅读 2015-10-10 10:47:44
    声明:由于本人刚接触功能测试。... (1)有效等价类 合理,有意义输入数据构成集合,检验程序是否实现规格说明预先规定功能和性能。 (2)无效等价类 不合理,无意义输入数据构成集合,检
  • 从分布式认证流程中,我们不难发现,这中间起最关键作用就是token,token安全与否,直接关系到系统健壮,这里我们选择使用JWT来实现token生成和校验。 JWT,全称JSON Web Token,官网地址https://jwt.io,...
  • Gams用户指南

    热门讨论 2013-01-05 22:23:06
     从著名的1963书(由George Dantzig编写)中提取的一个运输问题,用来描述GAMS的有效性.这个模型只是模型库中的部分,模型库中还包含了大量的完整GAMS模型.  支持模型的类型:  GAMS模型类型包括LP,MIP和NLPs的不同...
  • 中文版Excel.2007高级VBA编程宝典 1/2

    热门讨论 2012-04-06 16:00:16
     11.1.10 有效地遍历选中单元格区域  11.1.11 删除所有空行  11.1.12 任意次数地复制行  11.1.13 确定单元格区域是否包含在另一个单元格区域内  11.1.14 确定单元格数据类型  11.1.15 读写单元格区域  ...
  • 中文版Excel.2007高级VBA编程宝典 2/2

    热门讨论 2012-04-06 16:41:38
     11.1.10 有效地遍历选中单元格区域  11.1.11 删除所有空行  11.1.12 任意次数地复制行  11.1.13 确定单元格区域是否包含在另一个单元格区域内  11.1.14 确定单元格数据类型  11.1.15 读写单元格区域  ...
  • RFC中文文档-txt

    2009-09-11 14:56:56
    RFC2208 资源预留协议(RSVP)——版本1 适用性声明 关于配置一些指导 RFC2212 有保证质量服务说明书 RFC2217 TelnetCom端口控制选项 RFC2221 IMAP4 登陆参考 RFC2228 FTP 安全扩展 RFC2234 语法说明书扩充BNF:...
  • 中文版RFC,共456

    2009-04-19 22:56:29
    RFC2208 资源预留协议(RSVP)——版本1 适用性声明 关于配置一些指导 RFC2212 有保证质量服务说明书 RFC2217 TelnetCom端口控制选项 RFC2221 IMAP4 登陆参考 RFC2228 FTP 安全扩展 RFC2234 语法说明书扩充BNF:...
  • RFC2208 资源预留协议(RSVP)——版本1 适用性声明 关于配置一些指导 RFC2212 有保证质量服务说明书 RFC2213 综合服务管理信息基础使用SMI版本2 RFC2217 TelnetCom端口控制选项 RFC2221 IMAP4 登陆参考 RFC2228 ...
  • 4.9.1 声明的结构 72 4.9.2 声明多个名字 73 4.9.3 名字 73 4.9.4 作用域 74 4.9.5 初始化 75 4.9.6 对象和左值 76 4.9.7 typedef 76 4.10 忠告 77 4.11 练习 77 第5章 指针、数组和结构 79 5.1 指针 79 ...
  • 4.9.1 声明的结构 72 4.9.2 声明多个名字 73 4.9.3 名字 73 4.9.4 作用域 74 4.9.5 初始化 75 4.9.6 对象和左值 76 4.9.7 typedef 76 4.10 忠告 77 4.11 练习 77 第5章 指针、数组和结构 79 5.1 指针 79 ...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    4.9.1 声明的结构 72 4.9.2 声明多个名字 73 4.9.3 名字 73 4.9.4 作用域 74 4.9.5 初始化 75 4.9.6 对象和左值 76 4.9.7 typedef 76 4.10 忠告 77 4.11 练习 77 第5章 指针、数组和结构 79 5.1 指针 79 ...
  • ASP.NET精品课程+源代码

    千次下载 热门讨论 2009-01-05 20:15:51
    从案例教学与传统教学相比,虽然它在实用和应用方面有很大优势,但由于在课堂中具体一个小案例,它所包含知识系统与连续,不如传统教学有优势等。这有待于我们对案例教学进一步探索与研究,使案例教学...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

检验声明的有效性