当前位置: 首页 > news >正文

xml 知识总结: xsd,xsi:schemaLocation,xmlns,xmlns:xsi

1、xmlns是一个属性名,意思是xml namespace,ns是namespace的缩写

2、xmlns属性写在xml的根标签

3、同一个xml文件里头,除了xmlns这个默认命名空间,还可以定义其他,比如最常见的是xmlns:xsi

  • 可以有其他非默认命名空间,也可以仅有xmlns默认命名空间,根据需要
  • 仅有xmlns默认命名空间的例子:这种平时少见,但问过AI,肯定是存在的
  • 多个命名空间的例子:非常多,如上面的截图
  • 也有没有任何命名空间的情况,读完这篇文章,后面有

4、默认的命名空间不加 ":shortName",如果一个xml文件中有多个命名空间,只能有一个默认的(即xmlns),其他的就得起一个别名,格式是 "xmlns:别名",eg: xmlns:xsi

5、xmlns:xsi 中的 xsi 是自己定义的名字,可自定义成别的值,如 xmlns:foobar,只是 xsi 是约定俗成,因为xsi是XML Schema Instance 的缩写

  • 如果用了 xmlns:foobar,那 xsi:schemaLocation 属性就得改成 foobar:schemaLocation
  • 假设这个 xml 中还用了 xsi 下的标签,比如 <xsi:qwert>,如果命名空间改成foobar,即 xmlns:foobar,同样标签要改前缀,改成 <foobar:qwert>

6、在一个xml中,是可以出现来自不同命名空间的标签的(少见,但确实存在)

  • 比如xml文件中同时存在<example>和<foobar:qwert>。 <example>是在默认的命名空间(xmlns)下的标签,<foobar:qwert> 是 xmlns:foobar 的命名空间下的标签
  • 再次强调,同一个xml文件多个命名空间,不仅仅体现在属性上,也体现在标签上
    • 体现在属性常见的是 xsi:schemaLocation 这种所定义的属性不在默认命名空间下、需要指定命名空间的
    • 也可以体现在标签:同一个文件出现有无前缀和有前缀的标签 <example>和<foobar:qwert>

一个例子,<bean>标签是默认空间的非默认空间的得加前缀

7、xmlns 或 xmlns:xxx 的值通常是一个网址,为什么是一个网址,能不能是其他值比如 xmlns="abcdef"?

  • 是网址是约定俗成,网址也不容易重复,网址也有一定含义
  • 使用 xmlns="abcdef" 是可以的,当然可能会冲突,最主要是不符合约定俗成的规范

8、xmlns 或 xmlns:xxx 的网址需要网络能访问通吗

  • 不需要,本质就是一个字符串

9、xsi:schemaLocation 的作用

  • 作用是告诉xml解析器去哪里下载这个xsd文件
  • xsd文件的网址一般是要能访问通的,我就遇到过访问不通导致报错的情况(是强迫你一定要解决的错误而不仅仅是提醒)。但也不绝对,可能解析器配置不校验就不会有错。
  • xsd文件就是xml的语法校验器

10、xsi:schemaLocation 的格式:{命名空间URL 1} {xsd的网址 1} {命名空间URL 2} {xsd的网址 2}

  • "命名空间" 和 "xsd的网址" 是一对,注意顺序,有一对就写一对,有多少对就写多少对,总之要成对出现
  • 这里的 "命名空间" 就不是简写了,是一个URL的长串,不能是 "default xsd_url_1 xsi xsd_url_2" 或 "xsd_url_1 xsi xsd_url_2" (省略default并要求必须先写默认的),为什么?没有为什么

  • "命名空间" 和 "xsd的网址" 之间都要有空格或换行符(一个空格、两个空格多少个空格,我估计都可以,甚至tab制表符我猜测也可以)
  • 一对 "命名空间" 和 "xsd的网址" 和另一对之间也是用空格或换行符隔开
  • xsd文件的网址一般是要能访问通的,我就遇到过访问不通导致报错的情况(是强迫你一定要解决的错误而不仅仅是提醒)。但也不绝对,可能解析器配置不校验就不会有错。

11、xml文件的头(或者叫声明,XML声明 (XML Declaration))

  • 一般都会有 <?xml version="1.0" encoding="UTF-8"?>,有时候是 <?xml version="1.0" encoding="UTF-8" standalone="no"?>

12、有些xml文件没有XML声明,是不规范的,但也不一定就会出错,总之万无一失要加上

13、<?xml version="1.0" encoding="UTF-8"?> 和 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 有区别吗?

       没区别,standalone默认是no的值,可以不写

14、XML声明中的versison有其他版本号吗?

  • 很少见,目前1.0最多,也有1.1 (可以认为没有1.1,因为1.1引入的新问题导致不被接受)

15、XML声明中的 encoding 除了UTF-8 还有其他吗?

  • 估计有,但这问题没意义,就照抄 UTF-8 就好了

16、有时候有些xml文件压根就没有 xmlns/ xmlns:xsi / xsi:schemaLocation 这些,其实也挺常见的,也没什么问题

例子,下载tomcat,解压,看到 conf/web.xml 就是没有的:

17、其实可以发现,xsi:schemaLocation 里头的namespace的URL,其实都是在定义namespace的时候出现过的,比如下图

下面的图特殊,xsi:shemaLocation只是出现了2个namespace的URL,并不是3个,这文件定义了3个namespace,其中 xmlns:xsi 的路径并没有出现在xsi:shemaLocation里头

18、xsd和dtd

两者都是用来描述xml文件有什么标签、标签有什么属性、属性值的类型等等的,是xml的"语法"。但是xsd更强大灵活,是现在的主流,dtd的例子也有,就是xhtml里头

19、使用dtd而不是xsd的一个例子,xhtml

下面是一些例子,常见的xml

------------------------------------------------------------------------------------------------

springboot 的 pom.xml

liquibase 的  (可以看到又去的现象,爆红,先不追究原因,大概应该是下载不了这个导致的)

liquibase 的另一个例子,定义了3个namespace: xmlns、xmlns:ext、xmlns:xsi

tomcat 解压缩后 conf/web.xml

tomcat 解压后 conf/server.xml  (这个就没有xmlns之类的)

tomcat 解压后 conf/context.xml (没有xmlns之类的)

logback-spring.xml  (也没有xmlns之类的,虽然可能你会说这个可能是你自己删掉的,但其他例子,上面的例子,尤其是官网下载的tomcat解压出来的文件已经足够证明 "存在xml文件没有xmlns之类的在根标签" 是存在的现象)

一个例子:在一个xml文件里头除了默认的标签,还用了非默认的标签,得加前缀

http://www.dtcms.com/a/272686.html

相关文章:

  • SpringBoot系列—MyBatis(xml使用)
  • codeforeces Round1032 - Round 1036
  • 【node后端】搭建项目(Express+Ts+Typeorm+Mysql一步到位)
  • 深入浅出 Python Asynchronous I/O:从 asyncio 入门到实战
  • Arc Institute提出首个AIVC虚拟细胞模型STATE
  • 上海交大医学院张维拓老师赴同济医院做R语言训练营培训
  • 从Debug中学习MiniGPT4
  • 在Vue中如何对组件进行销毁在进行挂载
  • 模型训练之数据标注-Labelme的使用教程
  • 5款工具高效制作插图,PPT设计新选择!
  • 货车车架和悬架设计cad【7张】+设计说明书
  • leetcode 3440. 重新安排会议得到最多空余时间 II 中等
  • 《PyQt6-3D:开启Python 3D编程新世界 2》
  • 【TCP/IP】8. 传输层协议
  • hive小文件问题
  • 二层环路避免-STP技术
  • Linux【大数据运维】下制作Redis绿色免安装包(一)
  • 企业网络安全的“金字塔”策略:构建全方位防护体系的核心思路
  • upload-labs靶场通关详解:第20关 /.绕过
  • 以下哪种类型在Golang中不是内置类型?
  • zookeeper etcd区别
  • Keepalived+LVS实现LNMP网站的高可用部署
  • 登录为图片验证时,selenium通过token直接进入页面操作
  • Java 导出word 实现饼状图导出--可编辑数据
  • CIEDE2000 色差公式C++及MATLAB实现
  • 【零基础学AI】第35讲:策略梯度方法 - 连续控制任务实战
  • Swift 图论实战:DFS 算法解锁 LeetCode 323 连通分量个数
  • 快速搭建服务器,fetch请求从服务器获取数据
  • ReentrantLock 与 Synchronized 的区别
  • 给MySQL做定时备份,一天3次