xml schema
产生的背景:替代dtd,但是编写shema和dtd文件的目的是一样的.:定义 XML 文档的合法结构。xsd文件也被人称为规约
特点
书写和xml很相似。如果你的xsd文件结构和xml结构不一致,就会
报错,为什么会报错呢?因为有一个文件,就是它http://www.w3.org/2001/XMLSchema,它规定xsd文件就该这么写,
并且还给你提供了标签元素。该文件的默认命名空间xmlns是空。
什么?你想自定义xsd标签?我不清楚可不可以!
比dtd多了命名空间,一个xsd文件的namespace和包的作用是一致的。
一个xsd文件对应有且仅有一个namespace,也就是说xsd文件和namespace是一一对应的。在一个项目中难免会出现同名的类,但是有了包名就不怕了。
问题来了
tarnamespace 和namespace的区别?
xml文件中的xmlns与xsd文件的targetNamespace网址竟然一样。
targetNamespace是xsd文件的标签, 相当于 .Java文件中最开始文件头中的package.
而xmlns 或者说namespace相当于在进行单元测试时 import需要的类。比如:xmlns:context=”http://www.springframework.org/schema/context” 在java编程中import时是包名.类名,在xml文件中可以把带context前缀的标签看出类名,而http://www.springframework.org/schema/context就是包名。最后使用schemaLocation指定xsd文件在哪里。一个xsd文件对应有且仅有一个namespace
想在一个xsd文件中复用另一个xsd文件的规约怎么办?
<xsd:schema xmlns="http://www.springframework.org/schema/context"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:tool="http://www.springframework.org/schema/tool"
targetNamespace="http://www.springframework.org/schema/context"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"/>
<xsd:import namespace="http://www.springframework.org/schema/tool" schemaLocation="http://www.springframework.org/schema/tool/spring-tool-4.3.xsd"/>
使用http://www.w3.org/2001/XMLSchema定义的import标签,表示导入namespace=”http://www.springframework.org/schema/beans”的xsd文件定义的所有规约内容。注意:一个xsd文件对应一个namespace.
在一个xsd文件下文引用上文定义的类型,需要加入前缀吗?
需要,不解释。
如何在xml文件中引入xsd规约?
简单点说,只要在xml文件中指定前缀和命名空间并指定命名空间对应的xsd文件的位置,就算是把xsd文件定义的规约。这就告诉xml解析器,前缀为xx的标签,使用某一个xsd文件定义的内容来校验。
一般来说,编写xml文件之前,xsd文件的命名空间和xsd文件位置都是固定的,前缀可以随意改变。