从xmlns的作用说起
查了资料和自己实践后,得出了一些关于xml和xmlns的结论
看一个最常见的javaweb 中xml配置文件的开头:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
其中xmlns的意思就是xml namespace ,就是命名空间,为了区分一个xml中重复的定义而产生的,为什么后面跟着一串url,
为了唯一性
如何使用xmlns:
很简单,使用语法: xmlns:namespace-prefix="namespaceURI",如:
xmlns:abc="http://www.springframework.org".
定义了abc后,要引用"http://www.springframework.org"中的元素,就必须加上abc前缀,如常见的:
<context:component-scan base-package="com.taotao.controller" />
看这一句:
<beans xmlns="http://www.springframework.org/schema/beans"
定义默认命名空间为http://www.springframework.org/schema/beans
为一个xml文档定义默认的命名空间
为什么beans前没有加上命名空间限定符,因为用xmlns定义了默认的命名空间后,在该xml下使用这个命名空间下的元素可以不用加前缀
第三行到第五行:
定义了三个命名空间,代号为xsi,context,mvc
再看看后面的:
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
由于第三行定义了xsi,所以可以使用xsi中的元素 schemaLocation
xsi是个什么?
按照前面说的xmlns:xsi,就是定义了命名空间代号xsi,代表http://www.w3.org/2001/XMLSchema-instance
但是我们发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的
Schema :概要,计划,图表 ,XML Schema Definition可以理解为xml文件的规范和约束
注解: XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构是否和 XSD 文件中定义的一致。 XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器。
那么, 有了上述的理解, 再来看xsi:schemaLocation 这几句:
上面三句的语法其实是, xsi:schemaLocation = "键" “值” "键" “值” "键" “值”,分别对应上面的三个代号,一共是三对
即 xsi 命名空间下 schemaLocation 元素的值为一个由空格分开的键值对
前一个“键”http://www.springframework.org/schema/beans 指代 【命名空间URL】
后一个值指代 【XSD location URI】 , 这个值指示了前一个命名空间所对应的 XSD 文件的位置, xml解析器可以根据这个获取到 XSD 文件, 从而通过 XSD 文件对所有属于 命名空间http://www.springframework.org/schema/beans“的元素结构进行校验, 因此这个值必然是可以访问的, 且访问到的内容是一个 XSD 文件的内容
XSD本身也是一个xml文件,遵循XML格式
问题:
1.在项目生成时,会去网络上请求访问这些xsd文件吗?
应该是本地有一份备份,包含了新老版本的xsd文件,javaweb项目应该会先访问本地的,本地找不到再访问网络上的
1.1.那会去网络上请求访问xmlns的对应的url吗?
不知道
2.在设置了命名空间后能不能写别的节点元素,比如<aaa></aaa>
设置了命名空间后,无法再自定义元素了,要是命名空间中的元素才能被定义,而且必须要遵循xsd语法规则
3.把这些命名空间全删了又能怎么样
编译能过,因为不写命名空间的话,没约束,可以自定义元素,但是一旦有请求进来就会报错:
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 2 in XML document from class path resource [spring/springmvc.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 8; cvc-elt.1: 找不到元素 'beans' 的声明。
4.xsd里面写了些什么?
可以拷贝url到浏览器访问一下,是一份xml文件,里面有定义一些元素和元素的语法
5.只定义xmlns ,删除后面的xsi:schemaLocation行不行
不行,经测试,会报错,提示beans元素找不到,也就是说xml中的元素是被定义在了xsd中而不是前面的url中,既定义在“值”中,而不是“键”中
如果加上xsi:schemaLocation,则在xml中编辑,敲一个<符号,会有一堆下拉的智能提示,而删除xsi:schemaLocation仅剩xmlns则没有智能提示
而且如本例中的context, 键URLhttp://www.springframework.org/schema/context ,访问下是个列表
而值URL http://www.springframework.org/schema/context/spring-context-4.0.xsd 才是真正的XSD文件所在
只有加上了这个,才能有xml中的元素,例如bean,context:annotation-config等元素,如下图:
也就是说 定义 xmlns:A ="url01" 然后xsi:schemaLocation = "url01 real_url/4.0_xsd"
真正的元素都在xsd中
那么是不是url01也是个代号,可以随意改呢?
答案是不行,若本xml中没有使用url01中的元素,那么无所谓,可以。但是一旦使用了,就会报错
所以除了A是一个可以任意替换的字符串代号外,url01和 real_url/4.0_xsd都是不能乱改的
6.只定义xsi:schemaLocation,删掉xmlns中某行,比如本例中xsi:schemaLocation不动,删除xmlns:context这一行,行不行?
不行,报错
WPF中的xaml
xaml是xml的一种,是子集,xaml也遵循xml语法|
<Window x:Class="TestClient.TradeWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="" Height="450" Width="800">
<Grid>
</Grid>
</Window>
x:Class="TestClient.TradeWindow" 这句的意思为本xml中对应的类为"TestClient.TradeWindow"
xml文件只要遵循xml语法即可,可以任意定义元素,但是xml解析器不同,所以解析的规则也不一样,VS的解析方式和Eclipse的不一致,所以应该区别对待,但是在xmlns上,基本上是一致的
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
定义默认命名空间,这个url能访问,但是内容是无效的,但是vs的解析器应该是把这个url映射到了WPF的presentation程序集下
因此,在这个xml中,可以定义多个如Grid,Dockpanel的元素
总结:
1.xml根据不同IDE有不同的写法,但是必须遵循基本的xml语法,如只能有一个根节点,节点必须关闭
2.xmlns就是Java,C#中的namespace,引入了namespace就可以使用其中的元素
从xmlns的作用说起的更多相关文章
- Android:AndroidManifest.xm中xmlns的作用
有了它,你就可以alt+/作为提示,提示你输入什么,不该输入什么,什么是对的,什么是错的,也可以理解为语法文件.或者语法判断器什么的 这个主要作用是在运行的时候那些控件的属性都是通过它来识别的,如果上 ...
- Android xmlns 的作用及其自定义
转自:http://blog.csdn.net/chuchu521/article/details/8052855 xmlns:Android="http://schemas.android ...
- xmlns:android作用以及自定义布局属性
要定制Android layout 中的 attributes关键是要明白android中命名空间定义如: xmlns:android="http://schemas.android.com ...
- spring.schemas和spring.handlers对xmlns配置文件作用
在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直接基于Spring的标准Bean来配置,但配置较为复杂或者需要更多丰富控制的 时候,会显得非常笨拙.一般的做法会用原生态的方式去解析定义好 ...
- XML 中的 xmlns 等属性的意义
原文:https://blog.csdn.net/lengxiao1993/article/details/77914155 Maven 是一个 java 开发人员很难绕过的构建工具, 因为有众多的开 ...
- Android Studio 学习笔记(二):布局简介和xmlns说明
初学Android Studio,是在b站看的教程视频,这里的笔记也是以其为基础的,个人强烈安利: [天哥]Android开发视频教程最新版 Android Studio开发 Android 布局简介 ...
- 收藏的技术文章链接(ubuntu,python,android等)
我的收藏 他山之石,可以攻玉 转载请注明出处:https://ahangchen.gitbooks.io/windy-afternoon/content/ 开发过程中收藏在Chrome书签栏里的技术文 ...
- 【转】WPF的知识
[-] 闲话WPF之二XAML概述 闲话WPF之五XAML中的类型转换 闲话WPF之十六WPF中的资源 2 闲话WPF之十九WPF中的传递事件 1 闲话WPF之二十WPF中的传递事件 2 闲话WPF之 ...
- Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术
第3章--AOP技术 Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.o ...
随机推荐
- 蒟蒻kc的垃圾数列
题目背景 在某教练的强迫之下,我一个蒟蒻居然出题了!!!出题了!!!(数据太水别找我qwq) 好的,JL说好的一题100快拿来 题目描述 首先,给你一个空的长度为n的序列(废话) 然后,你有一系列神奇 ...
- [转载]ConcurrentHashMap之实现细节
http://www.iteye.com/topic/344876 ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对Concurrent ...
- mysql 03章_完整性、约束
.完整性:数据库中数据的可靠性有效性和合理性我们称为数据的完整性,这样才能保证数据合理符合现实生活中的数据体现. 注:数据完整性的设计应该在设计表的时候就进行设计了,而不是等到数据库中已经存在数据才进 ...
- dev设置子窗体的初始位置,grid控件表头的属性设置
当在父窗体上弹出子窗体时,一般设置子窗体的初始位置是居中, //在需要展示子窗体的父窗体上写这段,注意必须设置在show方法之前Form2 f2 = new Form2(); f2.MdiParent ...
- 浏览器自带记忆功能,使input颜色和字体丢失
方法一 : 会有视觉上颜色的变化input:-internal-autofill-selected { /*内置阴影填充 背景颜色*/ box-shadow: inset 0 0 0 1000px # ...
- Sublime Text自定制代码片段(Code Snippets)
在编写代码的整个过程中,开发人员经常会一次又一次的改写或者重用相同的代码段,消除这种重复过程的方法之一是把我们经常用到的代码保存成代码片段(snippets),这使得我们可以方便的检索和使用它们. 为 ...
- TCP三次握手形象理解
tcp三次握手就像是你用企业微信给人家发信息,首先你得确认别人在不在,你会发 在吗? 这个时候显示的是未读 对方看到之后未读会变成已读 然后他会回复你 在的 你看到这个消息后,他那边也 ...
- thinkphp 正则路由
正则路由也就是采用正则表达式定义路由的一种方式,依靠强大的正则表达式,能够定义更灵活的路由规则. 路由表达式支持的正则定义必须以“/”开头,否则就视为规则表达式.也就是说如果采用: '#^blog\/ ...
- 17个方法防止dedeCMS织梦网站被黑挂木马
dede织梦cms系统的程序存在漏洞,黑客攻击方法层出不穷,导致网站经常被黑,被百度安全中心等拦截,影响排名和流量,让站长非常头疼,下面总结一些防止dede织梦cms系统被攻击设置的方法,可有效的防止 ...
- (1)python tkinter-窗体
1.导入自带的包名 import tkinter 2.创建一个窗体对象 form=Tkinter.Tk() 3.显示窗体(这句应该是所有的设置部署完最后执行的一句代码) form.mainloop() ...