【ARXML专题】-1-什么是ARXML

38 篇文章 347 订阅

目录

0 XML简介

1 XML文件内容

2 有效的XML

2.1认识DTD

2.1.1 DTD简介

2.1.2 内部的 DOCTYPE 声明

2.1.3 外部的 DOCTYPE 声明

2.2 认识XSD

2.2.1 XSD简介

2.2.2 XSD举例

3 结尾


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

下面通过XML来介绍ARXML。

《ARXML全系列精讲》专栏链接icon-default.png?t=LA92https://blog.csdn.net/qfmzhu/category_10698596.html《Autosar从入门到精通-实战篇》总目录--专栏链接icon-default.png?t=LA92https://blog.csdn.net/qfmzhu/article/details/112425670

推荐阅读(单击下方蓝色字体即可跳转):

【ARXML专题】-1-什么是ARXML

【ARXML专题】-2-创建一个Classic CAN(经典CAN2.0)/CANFD的系统描述ARXML文件

【ARXML专题】-3-在CANFD或CAN2.0的ARXML文件中实现Multiplexor多路复用信号

【ARXML专题】_4_提取Arxml的模板信息

【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表示;双引号:用&quot表示;空格:用&nbsp表示;&符号:用&amp表示;>符号:用&gt表示;<符号:用&lt表示;
  • 如下根元素下,可以存在多个并列的元素:
<?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的缺点:

  1. DTD约束XML的时候,不能对XML中数据类型做详细的限定。
  2. DTD约束有自己的语法,书写时必须遵守DTD的语法;
  3. 一个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要复杂一些,但是功能强大的多:

  1. 定义可出现在文档中的元素;
  2. 定义可出现在文档中的属性;
  3. 定义哪个元素是子元素;
  4. 定义子元素的次序;
  5. 定义子元素的数目;
  6. 定义元素是否为空,或者是否可包含文本;
  7. 定义元素的数据类型;
  8. 定义元素和属性的默认值以及固定值。
  9. 允许开发这自定义数据类型
  10. 可读性强
  11. 可针对未来需求进行扩展
  12. 一个XML中可以引入N个Schema进行约束。
  13. 书写的时候,它遵守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>

3 结尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车电子助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值