目录
ARXML文件实质是一个XML文件,一般通过Autosar标准的XSD进行约束,用专用的工具Artop,Systemdesk,Matlab,DaVinci developer,Autosar Explorer…生成。和XML文件一样,ARXML是一个通用的配置/数据库文件,所以这里只需了解ARXML文件的结构(方便在将ARXML导入工具时,能够检查一些基本的错误),无需想着用过多的时间手动生成它(生成的工作,专业工具已经帮你做解决了)。
下面通过XML来介绍ARXML。
《ARXML全系列精讲》专栏链接https://blog.csdn.net/qfmzhu/category_10698596.html《Autosar从入门到精通-实战篇》总目录--专栏链接https://blog.csdn.net/qfmzhu/article/details/112425670
推荐阅读(单击下方蓝色字体即可跳转):
【ARXML专题】-2-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件
【ARXML专题】-3-在CANFD或CAN2.0的ARXML文件中实现Multiplexor多路复用信号
【ARXML专题】_5_提取Arxml中CAN波特率属性New_CanCluster--Standard
【ARXML专题】_6_提取Arxml中描述信息New_CanCluster--Expert
【ARXML专题】_7_提取Arxml中CAN物理通道信息CANChannel--Physical Channel
【ARXML专题】_8_提取Arxml中CAN Node节点信息Creat_ECU
【ARXML专题】_9_提取Arxml中CAN采样点信息Creat_ECU--Standard
【ARXML专题】_10_提取Arxml中描述信息Creat_ECU--Expert
【ARXML专题】_11_提取Arxml中CAN的Frame/Message和CAN_ID信息
【ARXML专题】_12_提取Arxml中CAN PDU信息
【ARXML专题】_13_提取Arxml中CAN PDU周期信息
【ARXML专题】_14_提取Arxml中CAN Signal信号信息
0 XML简介
XML:可扩展标记语言(Extensible Markup Language),是是一种非常灵活的标记语言,没有固定的标签,所有的标签,在符合XML命名规则的基础上,都可以自定义,但是在写标签名的时候一定要有含义。
通常,XML被用于信息的记录和传递。因此,XML经常被用来充当“配置文件”和“数据库”。
一般可通过“Eclipse”和“网页浏览器”等软件工具打开XML文件。将ARXML文件的后缀名修改为XML,可以通过这些工具打开。
1 XML文件内容
下面是XML文件中一小段内容:
<?xml version="1.0" encoding="utf-8"?>
<books>
<!—图书信息-->
<book id=”book_1”>
<author>张三</ author >
<title>XML高级教程</ title >
<description>介绍XML和XML实战</ description >
</book>
</books>
XML文档是树状结构;
第1行:XML声明。必须放在第一行,第一列,声明语句之前,不能有任何的空格和注释。定义了XML版本和编码信息。其中,版本永远都是1.0;编码方式一般都使用UTF-8(该编码支持中文标签),编码信息不区分大小写。
第2行:根元素,XML有且仅有一个根元素。元素由开始标签、元素内容、结束标签组成,没有被其它元素包围的元素称为根元素;
第3行:注释的写法:<!—注释内容-->,但不能嵌套使用。
第4行:” id=;book_1’”表示属性。属性必有值,值必须使用引号(单引号,双引号)。属性其实是描述标签一些额外的信息,一个标签可以有多个属性。可以将属性看为元素的另一种写法。
第5~7行:表示元素。
注意:
- XML中的标签区分大小写,对应的开始标签和结束标签必须大小写一致。
- 标签命名:普通字符有:字母,数字,-中横线,_下划线,.点号,数字不能作为首字母出现等。大段内容有许多特殊符号内容,使用<![CDATA[]]>转义,如下的例子:<![CDATA[上来就打开了<手机到了>了看可是lj<sdlkjs>lkdjlsjd ls<jdl>ksj lsjdlks d]]>
- XML中的标签是成对的,而且要正确嵌套:标签可以嵌套,但不可以交叉嵌套。
- 实际的项目当中,第4~8行这部分经常是重复的。
- 特殊符号使用符号实体:单引号:用&apos表示;双引号:用"表示;空格:用 表示;&符号:用&表示;>符号:用>表示;<符号:用<表示;
- 如下根元素下,可以存在多个并列的元素:
<?xml version="1.0" encoding="utf-8"?>
<books>
<!—图书信息-->
<book id=”book_1”>
<author>张三</ author >
<title>XML高级教程</ title >
<description>介绍XML和XML实战</ description >
</book>
<book id=”book_2”>
<author>李四</ author >
<title>XML中级教程</ title >
<description>介绍XML和XML实战</ description >
</book>
</books>
2 有效的XML
XML首先必须是格式良好的,一般使用DTD和XSD(XML Schema)定义语义约束。ARXML文件使用XSD进行约束。
2.1认识DTD
2.1.1 DTD简介
DTD全称:Document Type Definition。
用于约束XML的文档格式,保证XML是一个有效的XML。定义好接口和格式,方便多个人同时开发。
DTD可以分为两种:内部DTD;外部DTD。
DTD和XML之间的关系:
类(人类)和对象(我)
数据库(表)和行(一条记录)
DTD的缺点:
- DTD约束XML的时候,不能对XML中数据类型做详细的限定。
- DTD约束有自己的语法,书写时必须遵守DTD的语法;
- 一个XML文件中只能引入一个DTD约束,而无法通过多个DTD文件来约束同一个XML文件。
2.1.2 内部的 DOCTYPE 声明
内部DTD的定义,语法如下:
a)<!DOCTYPE 根元素 [元素声明]>
b)元素声明语法:
<!ELEMENT 元素名 (子元素[,子元素...])>
b)数量词:
+:表示元素出现至少出现一次
?:表示元素出现0次或1次
*:表示元素出现任意次。举例<!ELEMENT books (book*)>
c)属性声明语法:
属性类型:CDATA,表示字符数据(character data)
默认值:
#REQUIRED,表示必须出现
#IMPLIED,表示不是必须出现
带内部DTD的完整XML:
<?xml version="1.0" encoding="utf-8"?>
<!—声明内部DTD-->
<!DOCTYPE books [
<!ELEMENT books (book+)>
<!ELEMENT book (author, title, description)>
<!ATTLIST book id CDATA #REQUIRED >
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>
<books>
<!—图书信息-->
<book id=”book_1”>
<author>张三</ author >
<title>XML高级教程</ title >
<description>介绍XML和XML实战</ description >
</book>
<book id=”book_2”>
<author>李四</ author >
<title>XML中级教程</ title >
<description>介绍XML和XML实战</ description >
</book>
</books>
2.1.3 外部的 DOCTYPE 声明
创建一各独立的外部DTD文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!—声明内部DTD-->
<!ELEMENT books (book+)>
<!ELEMENT book (author, title, description)>
<!ATTLIST book id CDATA #REQUIRED >
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT description (#PCDATA)>
在XML中引入外部DTD文件,完整的语法如下:
<!DOCTYPE 根元素 SYSTEM "文件名">
带外部DTD的完整XML:
<?xml version="1.0" encoding="utf-8"?>
<!—声明外部DTD-->
<!DOCTYPE books SYSTEM “books.dtd”>
<books>
<!—图书信息-->
<book id=”book_1”>
<author>张三</ author >
<title>XML高级教程</ title >
<description>介绍XML和XML实战</ description >
</book>
<book id=”book_2”>
<author>李四</ author >
<title>XML中级教程</ title >
<description>介绍XML和XML实战</ description >
</book>
</books>
2.2 认识XSD
2.2.1 XSD简介
XSD全称:XML结构定义(XML Schema Definition),是DTD的替代者。
不仅可以定义XML文档的结构,还可以规范XML文档的内容。XSD本身也是XML文档。
XSD采用XML文档来定义语义约束,比DTD要复杂一些,但是功能强大的多:
- 定义可出现在文档中的元素;
- 定义可出现在文档中的属性;
- 定义哪个元素是子元素;
- 定义子元素的次序;
- 定义子元素的数目;
- 定义元素是否为空,或者是否可包含文本;
- 定义元素的数据类型;
- 定义元素和属性的默认值以及固定值。
- 允许开发这自定义数据类型
- 可读性强
- 可针对未来需求进行扩展
- 一个XML中可以引入N个Schema进行约束。
- 书写的时候,它遵守XML的语法规则,它的文件扩展名XSD。
2.2.2 XSD举例
这一章节仅做了解,无需过多深入。知道XML和XSD的之间的关系就行。
book.xsd文件内容:
<?xml version="1.0" encoding="utf-8">
<!--
Schema文件中使用W3C对Schema文件的约束信息
不管是XML还是XSD文件,都需要被约束
在根标签上使用xmls属性(xmlns="http://www.w3.org/2001/XMLSchema")引用W3C的约束
在schema中使用
targetNamespace定义当前schema被xml引用是的名称(名称空间);
targetNamespace="http://www.example.org/book"定义当前的schema的名称为:http://www.example.org/book值,这个值可以随便写,用来标识约束文件
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/book"
xmlns:tns="http://www.example.org/book"
elementFormDefault="qualified">
<!--
在Schema文件中使用element标签来定义xml中可以书写的标签名
-->
<element name="books">
<!--
在books中的子标签,需要在Schema中定义的books的标签内部嵌入element来定义。
简单标签:如果一个标签没有子标签,也没有属性,这个标签是一个简单标签。
复杂标签:如果标签拥有属性或者拥有子标签,那么这个标签就是一个复杂标签。
在element标签中
complexType来声明当前element定义的那个标签是一个复杂标签
simpleType来声明当前element定义的那个标签是一个简单标签
-->
<complexType>
<!--在complexType使用sequence定义子标签之间的顺序-->
<sequence>
<element name="book">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="price" type="double"></element>
<element name="author" type="string"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
book.xml文件内容:
<?xml version="1.0" encoding="utf-8">
<!--
在根标签上使用xmls属性(xmlns="http://www.example.org/book")引用Schema的约束
当引用多个约束时,需要在xmlns后追加
xmlns:context="***"
xmlns:p="***"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
声明当前的XML文件是schema一个实例(当前这是一个自定义的xml文件,是被某个schema文件约束)
xsi:schemaLocation="http://www.example.org/book book.xsd"引用schema的位置,其中的“http://www.example.org/book”要与XSD中的targetNamespace里的字符串保持一致
-->
<books
xmlns="http://www.example.org/book"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/book book.xsd"
>
<book>
<name>XML高级教程</name>
<price>59</price>
<author>张三</author>
</book>
</books>