XML的简单介绍

一、前言

在学习Autosar时了解到ARXML这种文件格式,在网上搜索资料学习时,发现ARXML文件实质是一种XML文件。那么XML是什么呢,ARXML与XML之间的区别又在哪里呢?

一般通过Autosar标准的XSD进行约束,用专用的工具Artop,Systemdesk,Matlab,DaVinci developer,Autosar Explorer…生成。和XML文件一样,ARXML是一个通用的配置/数据库文件,所以这里只需了解ARXML文件的结构(方便在将ARXML导入工具时,能够检查一些基本的错误),无需想着用过多的时间手动生成它(生成的工作,专业工具已经帮你做解决了)。

二、XML简介

  • XML:指可扩展标记语言,被设计用来结构化、存储以及传输信息。因此,XML经常被用来充当"配置文件"和"数据库",一般可通过"Eclipse"和"网页浏览器"等软件工具打开XML文件。

    将ARXML文件的后缀名修改为XML,可以通过这些工具打开

  • XML不会做任何事情。如下实例所示,它包含了发送者和接受者的信息,同时拥有标题及信息主体。但是,这个XML文档仍然没有做任何事情,它仅仅是包装在XML标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Do not forget me this weekend!</body>
    </note>
    

三、XML用途

  • XML把数据从HTML分离
    1、如果需要在HTML文档中显示动态数据,那么每当数据改变时,将花费大量时间来编辑HTML。通过XML,数据能够存储在独立的XML文件中。这样开发人员可以专注于使用HTML/CSS进行显示和布局,并确保修改底层数据不再需要对HTML进行任何的改变

    通过使用几行JavaScrip代码,就可以读取一个外部XML文件,并更新网页的数据内容

    2、XML数据以纯文本的方式进行存储,因此提供了一种独立于软件和硬件的数据存储方式,这让创建不同应用程序可以共享的数据变得更加容易。

四、XML文件内容

  • XML文档是树状结构,如下图所示:
    在这里插入图片描述

  • 下面根据实例具体分析:

    <?xml version ="1.0" encoding ="utf-8"?>
    <bookstroe>
    	<!-- This is a comment -->
    	<book category = "Children">
    		<title>Harry Potter</title>
    		<author>J K. Rowing</auto>
    		<year>2005</year>
    		<price>35.5</price>
    	</book>
    	<book category = "WEB">
    		<title>Learning XML</title>
    		<author>Erik T.Ray</auto>
    		<year>2003</year>
    		<price>39.95</price>
    	</book>	
    </bookstore>
    

    1、第1行:XML声明。第一列,声明语句之前,不能有任何的空格和注释。定义了XML版本和编码信息。其中,版本永远都是1.0;编码方式一般都使用UTF-8(该编码支持中文标签)。

    2、 第2行:根元素,XML有且仅有一个根元素。元素由开始标签、元素内容、结束标签组成,没有被其它元素包围的元素称为根元素;

    3、第3行:注释的写法:<!—注释内容–>,但不能嵌套使用。

    4、第4行:"category = “Children”"表示属性。

    • 属性必有值,值必须使用引号(单引号,双引号)

    • 如果属性值本身包含双引号,可以使用单引号将值括起,也可以引用字符实体,如下所示:

    	<gangster name = 'George "Shotgun" Ziegler'>
    	<gangster name = "George &quot;Shotgun&quot; Ziegler">
    
    • 属性其实是描述标签一些额外的信息,一个标签可以有多个属性。可以将属性看为元素的另一种写法。

    • 属性不能包含多个值(元素可以)

    • 属性不能包含树结构(元素可以)

    5、第5~8行:表示元素。XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。一个元素可以包含其他元素、文本、属性等。

    注意
    1、XML中的标签区分大小写,对应的开始标签和结束标签必须大小写一致。
    2、所有的XML元素都必须有一个关闭标签,例如<title>必须对应关闭标签</title>
    3、标签对大小写敏感。标签<Letter>和<letter>是不同的,必须使用相同的大小写来编写打开标签和关闭标签:

    <Message>这是错误的</message>                                     
    <message>这是正确的</message>  
    

    4、在XML中,所有元素都必须彼此正确的嵌套,如下实例所示,由于<i>元素是在<b>元素内打开的,那么他必须在<b>元素内关闭

    <b><i>这是错误的示范</b></i>                                    
    <b><i>这是正确的示范</i></b>
    

    5、实体引用
    在XML中,一些字符拥有特殊含义,例如字符"<"在XML元素中,会发生错误,因为解析器会把它当做新元素的开始

    <!--Fault-->                                      
    <message>if salary < 1000 then</message> 
    

    为了避免出现错误,一般使用实体引用来代替"<"字符

    <message>if salary &lt; 1000 then</message>                                      
    

    6、一般XML中常见实体引用如下所示

实体引用含义
&lt;<less than
&gt;>greater than
&amp;&ampersand
'apostrophe
&quot;"quotation mark

五、XML命名规则

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

六、有效的XML

一般使用DTD和XSD(XML Schema)定义语义约束。ARXML文件使用XSD进行约束。

认识DTD

  • DTD简介
    1、 DTD(Document Type Definition),用于约束XML的文档格式,保证XML是一个有效的XML(要求开发者书写XML时只能按照DTD定义的格式写)。定义好接口和格式,方便多个人同时开发。DTD可以分为内部DTD和外部DTD。

    2、DTD和XML的关系:类和对象;数据库(表)和行(一条记录)

    3、DTD的缺点:

    • DTD约束XML的时候,不能对XML中数据类型做详细的限定
    • DTD约束有自己的语法,书写时必须遵守DTD的语法;
    • 一个XML文件中只能引入一个DTD约束,而无法通过多个DTD文件来约束同一个XML文件
  • 内部的DOCTYPE声明(内部DTD定义语法)
    1、 <!DOCTYPE 根元素 [元素声明]>
    2、 元素声明语法:<!ELEMENT 元素名 (子元素[,子元素…])>
    3、 数量词:

    • +:表示元素出现至少出现一次
    • ?:表示元素出现0次或1次
    • *:表示元素出现任意次。举例<!ELEMENT books (book*)>

    4、属性声明语法:

    • 属性类型:CDATA,表示字符数据(character data)
    • 默认值:
      #REQUIRED,表示必须出现
      #IMPLIED,表示不是必须出现

    5、带内部DTD的完整XML如下

    <?xml version ="1.0" encoding ="utf-8"?>  
    <!--DID-->                                                                                                                              
    <!DOCTYPE 书店 [                                                                                                                         
    	<!ELEMENT 书店 (book+)>                                         
    	<!ELEMENT book (title,author,year,price)>                       
    	<!ATTLIST book category CDATA #REQUIRED>                        
        <!ELEMENT title (#PCDATA)>                                      
         <!ELEMENT author (#PCDATA)>                                                                                                         
         <!ELEMENT year (#PCDATA)>                                                                                                         
         <!ELEMENT price (#PCDATA)>                                                                                                             
     ]>                                                                                                                                    
    <书店>                                                              
    <!--This is a comment-->                                                                                                                
        <book category = "Children">                                                                                                      
             <title>Harry Potter</title>                                                                                                   
             <author>J K. Rowling</author>                                                                                                 
             <year>2005</year>                                                                                                                
             <price>35.5</price>                                                                                                             
    	</book>                                                         
    	<book category = "WEB">                                                                                                           
    		<title>Learning XML</title>                                                                                                     
            <author>Erik T.Ray</author>                               
            <year>2003</year>                                                                                                         
             <price>39.95</price>                                                                                                      
        </book>                                                                                                                            
    </书店> 
    

    使用浏览器显示XML文件如下图所示:
    在这里插入图片描述

  • 外部的DOCTYPE声明
    1、 创建一个独立的外部DTD文件,如下所示

    <?xml version ="1.0" encoding ="utf-8"?>  
    <!--DID-->                                                                                                                                                                                                                                                      
    	<!ELEMENT 书店 (book+)>                                         
    	<!ELEMENT book (title,author,year,price)>                       
    	<!ATTLIST book category CDATA #REQUIRED>                        
    	<!ELEMENT title (#PCDATA)>                                      
    	<!ELEMENT author (#PCDATA)>                                                                                                         
    	<!ELEMENT year (#PCDATA)>                                                                                                         
    	<!ELEMENT price (#PCDATA)>
    

    2、 在XML文件中引入外部的DTD文件,语法:<!DOCTYPE 根元素 SYSTEM"文件名">,带外部引用DTD文件的XML如下所示:

    <?xml version ="1.0" encoding ="utf-8"?>  
    			<!DOCTYPE 书店 SYSTEM "C:\Users\taofangfang\Desktop\1.dtd">                                                                                                                                                                                                                                                                                                                                                                                  
    			<书店>                                                              
    			<!--This is a comment-->                                                                                                                
    			    <book category = "Children">                                                                                                      
    			         <title>Harry Potter</title>                                                                                                   
    			         <author>J K. Rowling</author>                                                                                                 
    			         <year>2005</year>                                                                                                                
    			         <price>35.5</price>                                                                                                            
    				</book>                                                         
    				<book category = "WEB">                                                                                                           
    					<title>Learning XML</title>                                                                                                     
    			        <author>Erik T.Ray</author>                               
    			        <year>2003</year>                                                                                                         
    			         <price>39.95</price>                                                                                                      
    			    </book>                                                                                                                            
    			</书店> 
    

认识XSD

  • XSD简介
    1、 XSD全称:XML结构定义(XML Schema Definition),是DTD的替代者。
    2、不仅可以定义XML文档的结构,还可以规范XML文档的内容。XSD本身也是XML文档。
    3、功能如下:

    • 定义可出现在文档中的元素和属性;
    • 定义哪个元素是子元素;
    • 定义子元素的次序;
    • 定义子元素的数目;
    • 定义元素是否为空,或者是否可包含文本;
    • 定义元素的数据类型;
    • 定义元素和属性的默认值以及固定值。
    • . 允许开发这自定义数据类型
    • 可读性强;可针对未来需求进行扩展
    • 一个XML中可以引入N个Schema进行约束。
    • 书写的时候,它遵守XML的语法规则,它的文件扩展名XSD。
  • XSD文件内容

    1、 不管是XML还是XSD文件,都需要被约束。对Schema头部约束步骤如下

    <?xml version="1.0" encoding="UTF-8"?>                          
    <schema xmlns="http://www.w3.org/2001/XMLSchema"                     
             targetNamespace="http://www.example.org/bookstore"          
             xmlns:tns="http://www.example.org/bookstore"                
             elementFormDefault="qualified">                            
             <!-- 具体约束内容 -->                                   
     </schema> 
    
    • xmlns=“http://www.w3.org/2001/XMLSchema”:显示schema约束中用到的元素和数据类型来自命名空间"http://www.w3.org/2001/XMLSchma",有时这行代码也会写成"xmlns:xs=“http://www.w3.org/2001/XMLSchema”“,显示schema约束中用到的元素和数据类型来自命名空间"http://www.w3.org/2001/XMLSchma”,同时元素名前需带有前缀xs
    	>此行代码固定
    
    • targetNamespace=“http://www.example.org/bookstore” :声明被此Schema定义的元素属于命名空间"http://www.example.org/bookstore"(只是声明,而不能说当前Schema默认使用该命名空间)。example部分可以自己定义,bookstore为根标。
    • xmlns:tns=“http://www.example.org/bookstore”:默认命名空间。
    • elementFormDefault=“qualified” :指出任何XML实例文档所使用的且在此schema中声明过的元素必须被命名空间限定。

      此行代码固定

    2、Schema约束的具体约定:

    将此段代码插入上个代码段的“具体约束内容”部分

    <element name="students">                                        
    <complexType>                                                   
            <sequence>                                                 
               <element name="student" minOccurs="1"                 
     maxOccurs="unbounded">                                           
                  <complexType>                                         
                    <sequence>                                         
                    <element name="name" type="string"                
     minOccurs="1" maxOccurs="1">                                  
                    <element name="sex">                              
                        <simpleType>                                    
                            <annotation>                               
      <documentation>只能为男或者女</documentation>                  
                           </annotation>                              
                            <restriction base="string">               
                                <enumeration value="">              
                                <enumeration value="">            
                            </restriction>                               
                       </simpleType>                                   
                    </element>                                       
                    <element name="age" minOccurs="1" maxOccurs="1">                                                
                       <simpleType>                                   
                           <annotation>                             
     <documentation>年龄必须在15~50岁</documentation>              
                            </annotation>                             
                            <restriction base="int">                  
                                <minInclusive value="15">             
                                <maxInclusive value="50">           
                            </restriction>                          
                        </simpleType>                               
                    </element>                          
                    <element name="subjects" minOccurs="1" maxOccurs="1">                                               
                        <complexType>                           
                            <sequence>          
                            <element name="subject" minOccurs="1" maxOccurs="3" type="string">                                    
                                <annotation> 
     <documentation>主修科目最少为一门,最多为三门</documentation> 
                                </annotation> 
                            </element>  
                            </sequence> 
                        </complexType> 
                    </element>                                           
                  </sequence>                                            
                  <!--注意属性约束的位置 -->                           
                <attribute name="id" type="int" use="required">   
                </complexType>                                                  
               </element>                                                                 
            </sequence>                                                  
    </complexType> 
    </element>                                                               
    
    • <complexType>&<simpleType>:当一个元素(称为A)的子元素(称为B)存在子元素(称为C)时,必须使用<complexType>标签包裹元素B,如果不满足上述条件则必须使用<simpleType>包裹元素B
    • <sequence>&<all>&<choice>:<sequence>表示元素出现的顺序必须是schema约束中的顺序;<all>表示元素可以以任意顺序出现;<choice>表示简单元素只能出现一个。
    • <annotation>&<documentation>:<annotation>包裹部分表示注解,<documentation>包裹部分为注解内容。
    • <restriction>:此标签包裹用来写限制内容。
    • <maxInclusive value=“max”/>&<minInclusive value=“min”/>:约束范围为min~max。
    • <enumeration value="/>:约束值只能为枚举值中的一个
    • <attribute>:给指定的元素加入属性约束

    注意:
    1、数据类型有很多种,如string,int,Integer等等,注意的是,在element标签中是写type,在restriction标签是写base。
    2、数量约束:minOccurs约束标签最少出现的次数,maxOccurs约束标签最多出现的次数,其中unbounded表示无穷次。
    3、属性:要给哪个元素添加属性约束就必须在属于该元素的部分的使用<attribute>标签来约束,其中use=“required”,表示属性是必须的,没有就会报错。

  • 在xml文件中引入Schema约束(如下图第2-4行所示)

    <?xml version ="1.0" encoding ="utf-8"?>                        
     <students xmlns="http://www.w3cschool.com.cn"                                         
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
           xsi:schemaLocation="http://www.w3cschool.com.cn students.xsd   
     ">                                                             
         <student id = "1">                                                                         
             <name>Harry Potter</name>                                                                         
             <!-- 只能是男或者是女 -->                                                                       
             <sex></sex>                                                                        
             <!-- 年龄必须在15~50岁 -->                                                                       
             <age>18</age>                                                                       
             <!-- 主修科目最少为一门,最多为三门 -->                                                                        |
             <subject>Math</subject>                                                                        
             <subject>English</subject>                                                                       
             <subject>Chinese</subject>                                                                      
         </student>                                                                       
         <student id = "2">                                                                  
             <name>Charliy</name>                                                             
             <!-- 只能是男或者是女 -->                                               
            <sex>4</sex>                                                 
             <!-- 年龄必须在15~50岁 -->                                             
             <age>16</age>                                                        
             <!-- 主修科目最少为一门,最多为三门 -->                                                   
             <subject>Math</subject>                                                       
             <subject>English</subject>                                         
        </student>                                                          
    </students >  
    
    • xmlns=“http://www.example.org/students”:写schema约束中的targetNamespace的地址 ;
    • xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”]:格式固定
    • xsi:schemaLocation="http://www.example.org/students"这一行代码中地址写schema约束文档的 xmlns:tns= 的地址,students.xsd是Schema约束文档的文件名

七、参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值