【Java】Java核心 74:XML (下)

news2024/9/23 19:15:09

文章目录

      • **7** **Schema约束(能够看懂即可)**
        • **1** **书写schema约束**
        • **2** **在xml文件中引入schema约束**


在这里插入图片描述

7 Schema约束(能够看懂即可)

与dtd约束一样,schema它也是用来约束xml文件的。schema约束书写的时候,它遵守xml的语法规则。在书写schema的时候,就和书写xml文件的文档结构一样。

注意:书写schema文件的时候,它的文件扩展名是xsd。

1 书写schema约束

1、首先创建一个xml文件。然后根据xml文件书写符合规范的schema约束。

创建books.xml文件:

在这里插入图片描述

代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book>
		<name>面试宝典</name>
		<author>锁哥</author>
		<price>78.8</price>
	</book>
	<book>
		<name>java从入门到精通</name>
		<author>黑旋风</author>
		<price>88.8</price>
	</book>
</books>

2、接下来我们需要创建一个schema文件:

步骤:

第一步:首先进入文件创建窗口,选中工程鼠标右击,new–>File,然后进入如下页面:

在这里插入图片描述

第二步:输入创建的文件的名称和schema文件的后缀名xsd;

在这里插入图片描述

第三步:因为schema约束文件本身就是xml,所以声明xml文件的头适用于schema约束的文件。

在这里插入图片描述

第四步:将如下的内容复制到上述已经创建好的books.xsd中。然后我们就可以书写schema约束了。

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
		   targetNamespace="http://www.example.org/books"
		   elementFormDefault="qualified">
</schema>

说明:

1)schema约束的结构和xml文件书写规范是一样的,<?xml version="1.0" encoding="UTF-8"?>表示对xml的声明,是根标签;

2)xmlns=“http://www.w3.org/2001/XMLSchema” 表示此schema文件受到w3组织的指定的约束;

3)targetNamespace=“http://www.example.org/books”,叫做名称空间,这个相当于java中包的作用,区分不同约束中的不同标签。当需要被当前这个schema文件约束的xml文件,需要通过当前这个名字引入当前schema文件。

4)elementFormDefault=“qualified”,如果值为qualified,那么当前schema中所有的标签默认都是放在名称空间中的。如果值为unqualified,那么除了schema中的根标签在名称空间即 http://www.example.org/books 包中,其他的标签都不会在这个包中。在开发中,我们都是书写默认值qualified。

上述了解完成之后,接下来我们读一下一个完整的schema约束:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
		targetNamespace="http://www.example.org/books"
		elementFormDefault="qualified">
		<!-- 在此处书写schema约束语法 -->
		<element name="books">
			<complexType><!-- 声明books是复杂标签 -->
				<sequence><!-- 通过sequence标签指定子标签的顺序 -->
					<element name="book" maxOccurs="unbounded">
						<complexType>
							<sequence>
								<element name="name" type="string"></element>
								<element name="author" type="string"></element>
								<element name="price" type="double"></element>
							</sequence>
							<attribute name="address"></attribute>
						</complexType>
					</element>
				</sequence>
			</complexType>
		</element>
</schema>

说明:

1.xml中出现的标签需要使用这样的语法来定义。即先清楚xml中需要多少个标签,在Schema文件中就书写多少个element标签。

所以xml中第一个出现的books标签需要使用来声明。

element标签中的 name属性 就是xml中 可以书写的标签的名字。

2.为了方便schema约束的书写,我们将xml中的标签简单的分为2大类:

​ a) 简单标签 : 标签中只有文本数据;

​ b) 复杂标签:标签中有子标签或者属性加上文本数据;

在element标签中需要使用complexType声明当前的element标签name属性指定的是一个复杂标签。

如果是简单标签可以使用simpleType。

3.上述在books.xml文件中我们发现books标签是复杂标签,针对复杂标签,需要在当前的标签中书写子标签来限制当前复杂标签中的其他内容。

所以我们需要使用标签来声明books标签是一个复杂标签。并且针对复杂标签中出现的子标签,我们需要使用标签来声明子标签出现的顺序。

A)books标签中出现的子标签是book,由于book也是一个标签,所以我们也需要使用标签来声明xml中的book;

B)并且book标签也是一个复杂标签,所以我们需要使用标签来声明;

C)book标签中也有子标签,所以还需要使用来声明子标签的顺序;

D)最后发现book标签在books.xml出现了多次,所以需要给加上maxOccurs="unbounded"属性。表示book标签可以出现很多次。(没有次数的限制)

大于等于1次

5.最后在里面写上book标签中出现的3个name,author,price子标签的声明。并且针对book标签中出现的属性。我们需要使用

这样的语法来声明。注意标签的位置。

在books.xml文件中增加一个address属性:

在这里插入图片描述

所以在books.xsd即schema约束中添加一个属性。注意标签的位置。

2 在xml文件中引入schema约束

在books.xml文件中引入schema约束的步骤:

第一步:首先鼠标放在根标签books后面,打个空格,然后将如下内容复制到books后面

代码如下:

<books xmlns="default namespace"
		xsi:schemaLocation="{namespace} {location}"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

然后引入schema约束的图解

在这里插入图片描述

最终完整代码:

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.example.org/books"
		xsi:schemaLocation="http://www.example.org/books books.xsd"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		>
	<book address="藏经阁">
		<name>面试宝典</name>
		<author>锁哥</author>
		<price>78.8</price>
	</book>
	<book>
		<name>java从入门到精通</name>
		<author>黑旋风</author>
		<price>88.8</price>
	</book>
</books>

说明:

1)xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”,表示当前xml文件是一个受schema约束的实例,这里不需要改变;

2)xmlns=“http://www.example.org/books”,schema约束文件中的targetNamespace的值,表示在books.xml文件中引入名称空间;

3)xsi:schemaLocation=“http://www.example.org/books books.xsd”,

schema约束文件中的targetNamespace的值 schema约束文件的路径



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/689784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vb.net 正则表达式解析一些奇奇怪怪的文件名为时间类型

Public Function 正则表达式A(f As String) As Date2023-02-06 1653830If New Regex("\d{4}.\d{2}.\d{2}.\d{6}").IsMatch(f) ThenDim nian Strings.Mid(f, 1, 4)Dim yue Strings.Mid(f, 6, 2)Dim ri Strings.Mid(f, 9, 2)Dim shi Strings.Mid(f, 12, 2)Dim feng…

什么是编程语言?||与编程相关的计算机硬件介绍

什么是编程语言&#xff1f; 学习编程语言之前&#xff0c;首先要搞清楚“编程语言”这个概念。 很小的时候&#xff0c;父母就教我们开口说话&#xff0c;也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习&#xff0c;我们竟然在不知不觉中学会了说话&#xff0c…

【从零开始学习JAVA | 第二十二篇】BigInteger

目录 前言&#xff1a; BigInterger&#xff1a; BigInteger常见的方法&#xff1a; 总结&#xff1a; 前言&#xff1a; 本篇我们将介绍BigInteger这个比较实用一点的API&#xff0c;这个API在我们实际写项目中都是很实用的API&#xff0c;因此大家应该对这个API有更加熟练的…

sublime text 打开 txt 文档乱码问题

对于 windows 系统使用系统自带的 txt 编辑工具&#xff0c;默认打开和保存文件的文件的格式是 GBK 或者 GB2312&#xff0c;而 sublime 默认仅支持 utf-8&#xff0c;所以当从 windows 系统拷贝文件在 mac 上浏览有时候会出现乱码的问题&#xff0c;这时候就需要安装插件使 su…

RDBMS 与 非RDBMS

RDBMS vs 非RDBMS 前言一、关系型数据库(RDBMS)1、实质2、优势 二、非关系型数据库(非RDBMS)1、介绍2、有哪些非关系型数据库3、NoSQL的演变4、小结 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#xff01;…

基于uni-app+vue3跨端「h5+小程序+App」仿制chatGPT模板实例

uni-chatgpt 一款uniappvite4uview-plus多端ChatGPT模板实例。 全新首发的一款多端仿制chatgpt智能对话实战项目&#xff0c;基于uniAppVue3PiniauViewUIMarkdownIt等技术开发搭建项目。支持编译到h5小程序APP端&#xff0c;支持markdown语法解析及代码高亮。 功能特点 全屏沉…

LinkedList的底层实现原理(JDK8)

目录 一、知识点回顾二、LinkedList 的 add() 和 remove() 的实现2.1 list.add(e) 实现原理2.2 list.remove(e) 实现原理 一、知识点回顾 双向链表特点&#xff1a; 区间离散&#xff0c;占用内存宽松&#xff0c;空间复杂度小&#xff0c;时间复杂度 O(n)。优点&#xff1a;…

Android Jetpack Compose —— FloatingActionButton

FloatingActionButton 通常用于呈现应用程序的主要操作或常用操作&#xff0c;并具有显著的圆形形状和浮动的定位。FloatingActionButton 提供了一种简单而优雅的方式来引导用户进行主要的应用程序交互&#xff0c;例如开始一个新的任务、分享内容、启动一个动作等。它在应用程…

Java——《面试题——Zookeeper篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

FreeRTOS 中断管理之延迟中断处理 -- 二值信号量同步

3.1 概览 3.1.1 事件&#xff1a;嵌入式实时操作系统需要对整个系统环境产生的事件作出反应&#xff0c;例如&#xff1a;按一下按键&#xff0c;灯闪一下 3.1.2 ISR 中断服务函数尽量越短越好&#xff0c;应快速执行完&#xff0c;然后退出中断服务函数 3.1.3 在中断服务函…

Web3在HTML中获取 MetaMask 启用的用户列表

当然 我们还是要先启动ganache环境 然后 通过MetaMask 导入一些用户 然后 我们需要在页面中引入 web3.min.js 如果您还没有这个文件 可以查看我的文章web3.js获取导入 然后我访问官网 https://learnblockchain.cn/docs/web3.js/web3-eth.html#getchainid 打开后 先来到 web3.…

OAuth2.0四种授权模式及实战

OAuth2.0四种授权模式以及Oauth2.0实战 首先我们得了解什么是Oauth2.0&#xff0c;简单来说Oauth2.0它是一个授权协议。我们可能会听说过&#xff0c;使用Oauth2.0来实现单点登录SSO&#xff0c;以及第三方登录。那个什么是授权&#xff1f; 举个通俗易懂的例子&#xff0c;就…

概率论与数理统计教程第六章节笔记

参考书籍&#xff1a;概率论与数理统计教程第三版 茆诗松 程依明 濮晓龙 编著 文章声明&#xff1a;如有错误还望批评指正 文章目录 ξ \xi ξ 6.1点估计的概念与无偏性 ξ 6.2 \xi6.2 ξ6.2矩估计及相和性 ξ 6.3 \xi6.3 ξ6.3最大似然估计与EM算法 ξ 6.6 \xi6.6 ξ6.6区间估…

Pandas 解决保存excel文件发生异常问题

代码&#xff1a; #保存excel my.to_excel(df.xlsx,#设置Excel1的工作表名sheet_name表1) 异常&#xff1a; 原因&#xff1a;没有导入这个库openpyxl 解决&#xff1a; 1) 使用 pip list 查看 2) 如果没有&#xff0c;则安装 pip install openpyxl 3) 再导入 import openpyx…

uniapp中引入uview教程

uview官网&#xff0c;本次教程中用不到&#xff0c;若需要查看官网教程&#xff0c;可点击前往 1、在插件市场中搜索uview&#xff0c;并导入项目&#xff0c;点击前往 2、如果没有安装scss&#xff0c;需要安装scss依赖&#xff0c;如已安装&#xff0c;请跳过 // 安装sass…

【刷题笔记】反转链表——头插法/栈实现

【刷题笔记】反转链表——头插法/栈实现 解法一&#xff1a;头插法 思路及代码&#xff1a; * 1、创建一个newheadnull&#xff0c;即最终反转后的链表的头结点* 2、循环遍历当前的链表的head&#xff0c;创建temp记录当前head的next&#xff0c;然后将head的next指向新的头ne…

Acer宏碁Swift笔记本电脑SF314-54原装Win10系统工厂模式恢复原厂OEM出厂系统镜像

Acer宏基&#xff0c;Acer宏碁Swift笔记本电脑&#xff0c;Swift SF314-54原装Windows10系统工厂模式恢复原厂OEM出厂状态镜像 系统自带所有驱动、Office办公软件、出厂主题壁纸LOGO、 Acer Care Center、Quick Access等预装程序 所需要工具&#xff1a;32G或以上的U盘&#…

springboot+vue高校科研队伍管理系统_2byeq-

1.登录和注册&#xff1a;创建用户密码后用户输入正确用户密码即可登录&#xff0c;超级管理员可查看平台内所有账号信息。 2.个人信息管理&#xff1a;支持修改个人信息以及保存。 3.科研队伍管理&#xff1a;支持创建科研队伍&#xff0c;个人可以创建队伍后自己成为组长&…

uniapp倒计时

uniapp实现根据传递的时间展示倒计时 需求说明&#xff1a;听书倒计时&#xff0c;设置完时间展示倒计时 countDownTime(showTime){ //showTime为传递的时间 默认在转化成分钟var that this;that.times showTime * 60that.timer setInterval(function() {that.times--;if(th…

教程 | Datavines 自定义数据质量检查规则(Metric)

Metric 是 Datavines 中一个核心概念&#xff0c;一个 Metric 表示一个数据质量检查规则&#xff0c;比如空值检查和表行数检查都是一个规则。Metric 采用插件化设计&#xff0c;用户可以根据自己的需求来实现一个 Metric。下面我们来详细讲解一下如何自定义Metric。 第一步 …