XML--可扩展标记语言

XML --可扩展标记语言(EXtensible Markup Language)

xml的历史

​ GML 通用标记语言(1969) ---->SGML 标准通用标记语言 (1985) ----->HTML 超文本的标记语言( 1993) ---->XML 可扩展的标记语言(1998)

​ XML,最初的本意是用来替代HTML语言的,但是俩种语言还有一定差异的,所以中间出现了一种过渡的语言:XHTML 。

​ 因为HTML在万维网上已经广泛使用,XML难以替代。

XML 把数据从 HTML 分离,这样就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。

1. XML和HTML的区别:

XML 被设计用来传输和存储数据。

HTML 被设计用来显示数据。

2.XML 不是对 HTML 的替代

XML 是对 HTML 的补充

XML 是独立于软件和硬件的信息传输工具。

3.XML没有任何行为仅仅是纯文本

<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

xml的应用

1.XML的文档实例

<?xml version="1.0" encoding="UTF-8" ?>   <!-- 这是一个XML文档的声明 -->
<courses>                                 <!-- 这是根元素-->
    <course>							  <!--这是子元素-->
        <name>XML</name>				  <!--这是子元素-->
        <time>2</time>					  <!--这是子元素-->
        <teacher>xiaocheng</teacher>      <!--这是子元素-->
    </course> 
    <course>							  
        <name>HTML</name>				  <!--这是子元素-->
        <time>10</time>					  <!--这是子元素-->
        <teacher>xiaocheng</teacher>      <!--这是子元素-->
    </course> 
</courses>
  • 声明中定义了XML的版本(1.0)和所使用的编码格式(UTF-8)

  • XML文档形成树形结构

    ![image-20210421133126107](H:\笔记\java笔记\XML .assets\image-20210421133126107.png)

2.XML的语法规则

  • XML 中的注释

    <!--这是一个XML注释 -->
    
  • 所有 XML 元素都须有关闭标签

    <!--HTML中或有一些标签可以不关闭,但XML要求所有的标签都必须关闭-->
    <p>This is a line</p>   <!-- </p>必须存在  -->
    
  • XML 标签对大小写敏感

    <p>This is a line</P>  <!--  这是错误的  -->
    
    <!--   以下两个可以同时存在,为两对标签    -->
    <p>This is a line</p> 
    <P>This is a line</P> 
    
  • XML 必须正确地嵌套

    <!--   由于 <i> 元素是在 <b> 元素内打开的,那么它必须在 <b> 元素内关闭。-->
    <b><i>This text is bold and italic</i></b>
    
  • XML 文档必须有根元素

    <courses>                                 <!-- 这是根元素 必须存在-->
        <course>							  <!--这是子元素-->
            <name>XML</name>				  <!--这是子元素-->
            <time>2</time>					  <!--这是子元素-->
            <teacher>xiaocheng</teacher>      <!--这是子元素-->
        </course> 
    </courses>
    
  • XML 的属性值须加引号

    <courses>                                 
        <course id="1">XML</course> 	<!--这是课程子元素,课程属性id的值必须写在”“中 -->
    </courses>
    
  • XML的实体引用

    在 XML 中,有 5 个预定义的实体引用:

    &lt; < 小于
    &gt; > 大于
    &amp; & 和号
    &apos; ' 单引号
    &quot; " 引号

    注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。

    <message>if salary < 1000 then</message>   <!--   xml语法错误,需使用实体引用  -->
    <message>if salary &lt; 1000 then</message>
    
  • 在 XML 中,空格会被保留

    HTML 会把多个连续的空格字符裁减(合并)为一个,而XML保留空格

  • XML 以 LF 存储换行

3.XML元素及属性

  • 什么是xml元素?

    从(且包括)开始标签直到(且包括)结束标签的部分。

        <course>							  
            <name>HTML</name>				  <!--这是子元素-->
            <time>10</time>					  <!--这是子元素-->
            <teacher>xiaocheng</teacher>      <!--这是子元素-->
        </course>
        
        <!--上述代码中整段代码是XML元素,其中<name>HTML</name>、<time>10</time>、<teacher>xiaocheng</teacher> 都是XML元素-->
    	<!--    <name>是开始标签,</name>是结束标签   -->
    
  • XML 命名规则

    XML 元素必须遵循以下命名规则:

    • 名称可以含字母、数字以及其他的字符
    • 名称不能以数字或者标点符号开始
    • 名称不能以字符 “xml”(或者 XML、Xml)开始
    • 名称不能包含空格

    可使用任何名称,没有保留的字词。

  • XML属性,为XML元素提供额外信息

     <course  date="21/04/2021">	<!-- 这其中id就是course元素的属性,其值需用”“括起  -->			<name>HTML</name>				  
            <time>10</time>					 
            <teacher>xiaocheng</teacher>      
     </course>  
    
  • 对XML属性的处理

    元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

    因使用属性而引起的一些问题:

    • 属性无法包含多重的值(元素可以)
    • 属性无法描述树结构(元素可以)
    • 属性不易扩展(为未来的变化)
    • 属性难以阅读和维护
     <!-- 上述例子写为此例: -->	
    <course>
         <date>
      		 <day>21</day>
     		 <month>04</month>
     		 <year>2021</year>
    	 </date>
        
         <id>0001</id>
         <name>HTML</name>				  
         <time>10</time>					 
         <teacher>xiaocheng</teacher>      
     </course>  
    

    而当ID 仅仅是一个标识符,用于标识不同的便签,不是便签数据的组成部分时写成属性:

    <?xml version="1.0" encoding="UTF-8" ?>
    <courses>
        <course id="0001">
            <name>java</name>
            <time>20</time>
            <teacher>xiaocheng</teacher>
        </course>
        <course id="0002">
            <name>HTML</name>
            <time>10</time>
            <teacher>xiaocheng</teacher>
        </course>
        <course id="0003">
            <name>XML</name>
            <time>2</time>
            <teacher>xiaocheng</teacher>
        </course>
    </courses>
    

XML验证

拥有正确语法的 XML 被称为“形式良好”的 XML。

通过 DTD 验证的 XML 是“合法”的 XML。

通过上述两步之后形成的xml才是有效的xml文件。

DTD

文件中描述并规定了元素、属性和其他内容在xml文档中的使用规则。DTD文件的后缀名为 .dtd 。

主要作用是验证数据,验证数据是否达到标准,验证外来数据是否符合标准。

DTD语法

  • DTD的声明

    • DTD的内部声明

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE students [
              <!ELEMENT students  (student)*>
              <!ELEMENT student (name,gender,age,com)>
              <!ELEMENT name     (#PCDATA)>
              <!ELEMENT gender    (#PCDATA)>
              <!ELEMENT age (#PCDATA)>
              <!ELEMENT com    (#PCDATA)>
              <!ATTLIST student id CDATA #REQUIRED>
              ]>
      <students>
          <student id="1">
              <name>张三</name>
              <gender>2104</gender>
              <age>18</age>
              <com>company</com>
          </student>
      </students>
      
    • DTD的外部声明

      student.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE students SYSTEM "stu.dtd">
      <students>
          <student id="1">
              <name>张三</name>
              <gender>2104</gender>
              <age>18</age>
              <com>company</com>
          </student>
      </students>
      

      stu.dtd

      <!ELEMENT students  (student)*>
      <!ELEMENT student (name,gender,age,com)>
      <!ELEMENT name     (#PCDATA)>
      <!ELEMENT gender    (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
      <!ELEMENT com    (#PCDATA)>
      <!ATTLIST student id CDATA #REQUIRED>
      
  • DTD元素语法格式

    <!ELEMENT 元素名 (内容模式)>  
    

    () 用来给元素分用组
    | 在列出的元素中选择一个

    1. EMPTY:元素不能包含子元素和文本(空元素)
    2. (#PCDATA):可以包含任何字符数据,但是不能在其中包含任何子元素
    3. ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下
    4. 修饰符:() | + * ? ,
      +表示该元素最少出现一次,可以出现多次 (1或n次)
      *表示该元素允许出现零次到任意多次(0到n次)
      ?表示该元素可以出现,但只能出现一次 (0到1次)
      ,对象必须按指定的顺序出现

  • 属性的语法格式:

    <!ATTLIST 元素名称
    	属性名称 属性类型 属性特点
    	属性名称 属性类型 属性特点
    >
    
    • 属性类型:
      1. CDATA:属性值可以是任何字符(包括数字和中文)
      2. ID:属性值必须唯一,属性值必须满足xml命名规则
      3. IDREF:属性的值指向文档中其它地方声明的ID类型的值。
      4. IDREFS:同IDREF,但是可以具有由空格分开的多个引用。
      5. enumerated:(枚举值1|枚举值2|枚举值3...),属性值必须在枚举值中
    • 属性特点:
      1. REQUIRED:元素的所有示例都必须有该属性

      2. IMPLIED :属性可以不出现

      3. default-value:属性可以不出现,但是会有默认值
      4. FIXED :属性可以不出现,但是如果出现的话必须是指定的属性值

posted @ 2021-04-21 15:54  愿半生代码如一生好友  阅读(189)  评论(0)    收藏  举报