XML中约束文档的引用和书写

2023-11-18

在XML中定义了一套规则,来对文档内容进行约束,这叫做XML约束

常用的俩种约束语言:DTD约束、Schema约束

XML文档中可以引入多个约束文档,为了防止出现不同含义的同名名称冲突,所以,所以可以XML提供了名称空间

1. DTD语法:

DTD约束是不支持名称空间的

在XML文件中引入外部DTD约束:

1.引入本地DTD约束

<!DOCTYPE 根元素 SYSTEM "外部DTD文件的URI">

2.引入公共DTD约束

<!DOCTYPE 根元素 PUBLIC  DTD名称"  "外部DTD文件的URI">

元素定义:

<!ELEMENT 元素名称 元素内容>

元素名称是XML文档中的元素

元素内容是对元素包含内容的声明,包含数据类型和符号共有五种内容格式

1.#PCDATA :表示元素中嵌套的内容是普通文本字符串

<!ELEMENT 书 (#PCDATA)>

2.子元素:表示元素包含的的元素

<!ELEMENT 书 (书名,价格,数量)>

3.混合内容:表示既要包含字符数据又要包含子元素,混合内容必须被定义零个或多个

<!ELEMENT 书 (#PCDATA|书名,价格,数量) *>

4.EMPTY:表示该元素即不包含字符数据又不包含子元素是一个空元素

<!ELEMENT br EMPTY >

5.ANY:表示该元素包含任何的字符数据和子元素

<!ELEMENT br ANY >

注意:混合内容中 * 的意义及其他符号的意义

问号?:表示该对象出现0次或1次

星号 * :表示该对象出现0次或多次

加号 + :表示该对象出现1次或多次

竖线 | :表示在列出的对象中选择一个

逗号 , :表示对象按照指定的顺序出现

括号 () :表示给元素进行分组

属性定义:

<!ATTLIST 元素名

                   属性名 属性类型 设置说明> 

设置说明有4种

1.#REQUIRED 表示元素的该属性是必需的

2.#IMPLIED 表示元素可以包含该属性,也可以不包含

3.#FIXED  表示一个固定的属性默认值,使用时,需要提供一个默认值,该默认值不可变

4.默认值   如果元素不包含该属性,该属性将自动设置为默认值,但该默认值可以改变

 

属性类型:

1.CDATA

最常用的一种元素类型,表明属性类型是字符类型

2.Enumerated

表明属性类型是枚举类型,限制属性的取值只能从一个列表中选择

例如:

<!ATTLIST 肉

                   品种 (鸡肉|牛肉|猪肉) "鸡肉"

3.ID

用于唯一标识XML文档中的元素,且设置类型必须为REQUIRED或IMPLIED

注意:属性值不可以数字开头

4.IDREF 和 IDREFS

在ID之间建立一对一或者一对多联系,这个属性类型的属性值必须是一个已经存在的ID类型的属性值

建立一对一的关系
<!DOCTYPE 联系人列表[
<!ELEMENT 联系人列表 (#PCDATA)>
<!ELEMENT 联系人 (#PCDATA)>
<!ATTLIST 联系人
		编号 ID #REQUIRED
		上司 IDREF #IMPLIED
>
]>
<联系人列表>
	<联系人 编号="id1">
	</联系人>
	<联系人 编号="id2" 上司="id1">	
	</联系人>
</联系人列表>

建立一对多的关系
<!DOCTYPE libary[
<!ELEMENT libary (book,person)>
<!ELEMENT book (#PCDATA)>
<!ELEMENT person (#PCDATA)>
<!ATTLIST book
		bookID #REQUIRED
>
<!ATTLIST person
		bookroed IDREFS #REQUIRED
>
]>
<libary>
	<book bookID="id1">
	</book>
	<book bookID="id2">
	</book>
	<book bookID="id3">
	</book>
	<person bookroed="id1 id2">
	</person>
	<person bookroed="id2 id3 id1">
	</person>
</libary>

5.NMTOKEN和NMTOKENS

NMTOKENS表示一种列表类型,一个元素类型中的NMTOKENS类型的属性值可以是同一个XML文件中的另外NMTOKEN类型的属性的属性值

6.NOTATION

通过设置NOTATION类型的属性可以让一个外部应用程序去处理无法或者难以使用XML格式组织的数据,如图像,声音,影像

定义语句:

<!NOTATION 符号名 SYSTEM "MIME类型">
<!NOTATION 符号名 SYSTEM "URL路径名">
例如:
<!DOCTYPE 文件[
	<!NOTATION mp  SYSTEM "movplayer.exe">
	<!NOTATION gif SYSTEM "Image/gif">
	<!ELEMENT 文件 ANY>
	<!ELEMENT 电影 EMPTY>
	<!ATTLIST 电影 演示设备 NOTATION(mp|gif) #REQUIRED>
]>
<文件>
	<电影 演示设备="mp">
</文件>

7.ENTITY和ENTITYS

这俩个属性类型用到了实体,其中,

实体的定义有俩种:

<!ENTITY 实体名称 "实体内容">

<!ENTITY 实体名称 SYSTEM "外部文档的URI">

引用实体的方式:

&实体名称;

引用实体的意义:用以解决xml文档中内容重复的问题

ENTITY

对应的中文意思是实体,当某个属性的类型定义为ENTITY时,表明其属性值必须为在DTD中使用<!ENTITY...>语法的定义的一个实体的引用

例如:

DTD片段:

<!ENTITY itcast "交流论坛,www.hnhwy.xyz">

<!ELEMENT 电影 EMPTY>

<!ATTLIST 电影 来源 NOTATION(mp|gif)#REQUIRED>

XML数据片段:

<电影 来源="&itcast;"/>

ENTITYS表示一种列表类型,一个元素的ENTITYS类型的属性设置值可以是多个实体的引用每个实体的引用通过空格隔开

例如:

DTD片段:

<!ENTITY banner SYSTEM"http://www.hnhwy.xyz/imgs/topword.gif">

<!ENTITY login SYSTEM"http://www.hnhwy.xyz/imgs/logo.gif">

<!ELEMENT 电影 EMPTY>

<!ATTLIST 电影 来源 NOTATION(mp|gif)#REQUIRED>

XML数据片段:

<img src="banner login">

2.Schema语法

Schema是支持名称空间的

名称空间的声明语法:

1.<元素名 xmlns:prefixname=”URI”>xmlns:prefixname是指该元素的属性名

2.如果,多个元素位于同一个名称空间,可以设置默认名称空间 <元素名xmlns=”URI”>

XML文档中引入Schema约束文档

1.      使用名称空间引入Schema约束文档

2.	<?xml version="1.0" encoding="UTF-8"?>
3.	<beans xmlns="http://www.springframework.org/schema/beans"
4.	    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5.	    xmlns:myns="http://www.mycompany.com/schema/myns"
6.	    xsi:schemaLocation="
7.	        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
8.	        http://www.mycompany.com/schema/myns http://www.mycompany.com/schema/myns/myns.xsd">
9.	</beans>

3,5俩行代码声明了在beans myns俩个元素上的名称空间

xsi:schemaLocation属性是用来指定名称空间的名称和Schema的文档位置

即第一个URI是名称空间名称,第二个URI是文档位置

xsi:schemaLocation属性是在标准名称空间

http://www.w3.org/2001/XMLSchema-instance中定义的,

2,不使用名称空间引入Schema文档

<beans xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
	xsi:noNamespaceSchemaLocation=” http://www.springframework.org/schema/beans/spring-beans.xsd”	
>
</beans>

通过xsi:noNamespaceSchemaLocation属性来引入约束文档位置,xsinoNamespaceSchemaLocation属性也是定义在标准名称空间http://www.w3.org/2001/XMLSchema-instance


Schema语法

1. 元素定义

<xs:elementname="xxx" type="yyy">

xxx:元素名称

yyy:元素的数据类型

Schema中的数据类型:

xs:string表示字符串类型

xs:decimal表示小数类型

xs:integer表示整数类型

xs:boolean表示布尔类型

xs:date   表示日期类型

xs:time表示时间类型

例如

<xs:elementname="lastname" type="xs:string">

<xs:elementname="age" type="xs:integer">

<xs:elementname="dateborn" type="xs:date">

xml文档实例

<lastname>liming</lastname>

<age>28</age>

<dateborn>2018-05-09</dateborn>

2. 属性定义

<xs:attributename="xxx" type="yyy">

常用属性数据类型与常用元素数据类型一样

例如
<xs:elementname="lastname" type="xs:string">
       <xs:attribute name="lang"type="xs:string"/>
</xs:element>
xml文档实例
<lastnamelang="EN">liming</lastname>

3.简单类型

只包含字符数据的元素都是简单类型,简单类型使用xs:simpleType元素来定义

想对现有元素内容的类型进行限制,则需要使用xs:restriction元素来定义

<xs:enumeration/>元素对一组值的限定,也就是定义为枚举约束
<xs:pattern/>元素对一系列值的限定
<xs:whiteSpace value="preserve"/>元素对空白字符的限定
<xs:enumeration/>元素对一组值的限定,也就是定义为枚举约束
<xs:minInclusive/>和<xs:maxInclusive/>元素对值的限定

例如:

<xs:element name="age">
	<xs:simpleType>
		<xs:restriction base="xs:integer">
			<xs:minInclusive value="18" />
			<xs:maxInclusive value="58" />
		</xs:restriction>
	</xs:simpleType>
</xs:element>

4.复杂类型

复杂类型通过<xs:complexType/>

复杂类型有4种基本类型

1.  空元素(只包含属性,不包含内容的元素)

Schema约束文档

<xs:element name="product">
	<xs:compleType>
		<xs:attribute name="prodid" type="xs:positiveInteger">
	</xs:compleType>
</xs:element>

XML文档实例

<product prodid=”1234”/>

2. 包含其他元素的元素

Schema文档约束

<xs:element name="person">
	<xs:compleType>
		<xs:sequence>
			<xs:element name ="firstname" type="xs:string">
			<xs:element name ="lastname"  type="xs:string">
		</xs:sequence>
	</xs:compleType>
</xs:element>
XML文档实例
<persion>
	<firstname>lisi</firstname>
	<lastname>zhangsan</lastname>
</persion>

3.仅仅包含文本的元素

Schema约束文档

<xs:element name="shoesize">
	<xs:compleType>
		<xs:simpleContent>
			<xs:extension bast="xs:integer">
				<xs:attribute name="country" type="xs:string"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:compleType>
</xs:element>

xml文档实例



<shoesize country=”france”>35</shoesize>

4.包含元素和文本的元素

Schema文档约束

<xs:element name="letter">
	<xs:compleType>
		<xs:sequence>
			<xs:element name ="name" type="xs:string">
			<xs:element name ="orderid" type="xs:positiveInteger">
			<xs:element name ="shipdate"  type="xs:date">
		</xs:sequence>
	</xs:compleType>
</xs:element>

xml文档

<letter>
	Dear Mr.<name>John</name>
	Your order<orderid>1032</ordered>
	Will be shipsed on<shipdate>2018-09-23</shipdate>
</letter>












本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML中约束文档的引用和书写 的相关文章

随机推荐

  • 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    原文 http blog csdn net sup heaven article details 39313731 数据结构中常见的树 BST二叉搜索树 AVL平衡二叉树 RBT红黑树 B 树 B 树 B 树 转载 2014年09月16日
  • ERROR: transport error 202: gethostbyname: unknown host

    今天碰到了一个很奇怪的问题 当我启动tomcat的时候 报了如下的错误 ERROR transport error 202 gethostbyname unknown host ERROR JDWP Transport dt socket
  • 作为运维你还在想要不要学Python,听听运维老司机怎么说!

    现阶段 掌握一门开发语言已经成为高级运维工程师的必备计能 不会开发 你就不能充分理解你们系统的业务流程 你就不能帮助调试 优化开发人开发的程序 开发人员有的时候很少关注性能的问题 这些问题就得运维人员来做 一个业务上线了 导致CPU使用过高
  • Python数据可视化入门教程(非常详细)

    什么是数据可视化 数据可视化是为了使得数据更高效地反应数据情况 便于让读者更高效阅读 通过数据可视化突出数据背后的规律 以此突出数据中的重要因素 如果使用Python做数据可视化 建议学好如下这四个Python数据分析包 分别是 Panda
  • springboot整合ueditor(jsp)踩过的坑(富文本上传本地视频)(亲身经历)

    有一天老板突然找我让我改富文本 一脸懵逼 不过也不能推啊默默地接下了 大家都知道现在的富文本视频功能都是只有上传链接的没有从本地上传这一说 就连现在的csdn的也是 于是我找了好多个 最终发现百度的ueditor可以 经过几天的日夜 甚至牺
  • vue框架如何将侧边栏完全隐藏

    vue框架如何将侧边栏完全隐藏 如何将vue的左侧边栏在缩进的时候完全隐藏呢 效果图如下 找到目录src style sidebar scss 然后搜索 hideSidebar可以搜出两个 不要慌 下面的时手机端的 我们拉到上面的 hide
  • 【算法日志】哈希表应用:set和map容器,哈希表的使用(day5)

    代码随想录60day 链表 day4 链表 day3 目录 前言 一 三种哈希结构 数组 散列技术 哈希思想 哈希碰撞 set 集合 map 映射 二 哈希表的一些应用 总结 前言 哈希表 也叫散列表 是一种较为常用的数据结构 我们常用的数
  • 1486. XOR Operation in an Array

    class Solution public int xorOperation int n int start int nret start for int m 1 m lt n m nret nret start 2 m return nr
  • 编译原理(4)LR(0)语法分析程序设计(Python实现)

    1 实验要求 1 已知文法G S 0 S E 1 E aA 2 E bB 3 A cA 4 A d 5 B cB 6 B d 手工建立文法G S 的LR 0 的项目集规范族DFA和LR 0 分析表 2 根据清华大学版 编译原理 第3版 教材
  • Jfugue编程概要

    转自 http www sudu cn info html edu java 20060912 304274 html JFugue是个用于音乐作曲的Java API 和其他的音乐API不同 他能够让你用数据字符串来指定音符 乐器 和弦 及
  • java sql 查询中的转义序列不对_在 JDBC 中使用 SQL 转义序列 - SQL Server

    使用 SQL 转义序列Using SQL escape sequences 08 12 2019 本文内容 按照 JDBC API 的定义 Microsoft JDBC Driver for SQL ServerMicrosoft JDBC
  • 20天零基础自学Python

    大家好 我是宁一 Python 数字数据类型是用来存储数值的 是我们从小学就开始接触的老朋友了 也是python中最基础的数据类型 1 Number 数据类型 python3的 Number 数据类型包括 int 整数 float 浮点数
  • B站化播放量为播放时长,是谁的狂欢?

    6月26日晚 B站举办了14周年庆典晚会 在晚会上 除了周深 美依礼芽同框献唱受到关注 B站董事长兼CEO陈睿的演讲内容同样值得深思 一来 陈睿提到 要将目前B站视频前台显示的播放量数据从次数改为分钟数 计划未来几周 将完成产品更新 二来
  • 堆栈内存和闭包

    思维导图 堆栈内存小科普 1 js中的内存分为 堆内存和栈内存 堆内存 只要用来存储引用数据类型的值 对象存的是键值对 函数存的是字符串 栈内存 供js运行的环境 函数执行 存基本数据类型的值 堆栈内存的释放问题 我们每次给变量存值或者执行
  • 程序员秋招最全Java面试题及答案整理(2023最新版)

    前言 大家好 最近一个月 花了不少时间 给大家整理了一套 2023 的技术面试资料 包括各大厂最新面试题以及面经解析涉及JVM Mysql 并发 Spring Mybatis Redis RocketMQ Kafka Zookeeper N
  • 【C刷题】day1

    一 选择题 1 正确的输出结果是 int x 5 y 7 void swap int z z x x y y z int main int x 3 y 8 swap printf d d n x y return 0 答案 3 8 解析 考
  • 怎样将excel文件导入mysql中

    1 整理好excel表中的字段 2 在Navicat中创建表 如果导入的是一个追加的表 则无需创建新表 CREATE TABLE orderinfo orderid VARCHAR 10 NULL 订单 id 主键 userid INT 1
  • 华为OD机试2023年最新题库(JAVA、Python、C++)

    我是一名软件开发培训机构老师 我的学生已经有上百人通过了华为OD机试 学生们每次考完试 会把题目拿出来一起交流分享 重要 5 11月份考的都是OD统一考试 B卷 2023年5月份题库已经更新为OD统一考试 B卷 题库由三部分组成 1 202
  • 【H5】 svg内text、image、path标签的使用

    H5 svg内text image path标签的使用 text标签 div style width 500px height 500px border 2px solid pink margin 50px auto 0 div
  • XML中约束文档的引用和书写

    在XML中定义了一套规则 来对文档内容进行约束 这叫做XML约束 常用的俩种约束语言 DTD约束 Schema约束 XML文档中可以引入多个约束文档 为了防止出现不同含义的同名名称冲突 所以 所以可以XML提供了名称空间 1 DTD语法 D