XML系列篇之dtd约束

news2025/1/16 6:03:16

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于xml的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.XML

是什么

💡辉辉小贴士:json和xml都能够进行数据交互,那么有什么不一样呢?

为什么要用

怎么用➡良好的xml格式是怎么样的

二.dtd约束

是什么

💡辉辉小贴士:xml有两种约束,那么这两种约束有什么不一样呢?

为什么要使用dtd约束

怎么用

元素

属性

代码示例 


一.XML

是什么

  • XML(Extensible Markup Language),中文为可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言
  • XML可以用来标记数据、定义数据类型,可以允许用户对自己标记语言进行定义,是对人和机器都比较友好的数据承载方式
  • 也可以用来进行数据交互

💡辉辉小贴士:json和xml都能够进行数据交互,那么有什么不一样呢?

        XML 和 JSON 是现今互联网中最常用的两种数据交换格式

        xml和json格式的区别

  • XML天生有很好的扩展性;XML有丰富的编码工具,
  • JSON是一种轻量级的数据交互格式,具有简单直观的格式;可以直接与JavaScript、Python等语言中的对象兼容;作为数据包格式传输的时候具有更高的效率(因为JSON不像XML有闭合标签,节省很多字节)

为什么要用

因为它是框架的重要组成部分,而框架能够提升效率,满足企业需求 

怎么用➡良好的xml格式是怎么样的

  1.         有且只有一个根节点
  2.         标签区分大小写
  3.         嵌套关系要正确
  4.         标签必须是合法的
  5.         定义有效属性

        有且只有一个根节点

    标签区分大小写

    嵌套关系要正确

标签必须是合法的

 定义有效属性

二.dtd约束

是什么

DTD (Document Type Definition,文档类型定义),主要是用来约束 XML 文件的一种方式。 它是标准通用标记语言和可扩展标记语言1.0版规格的一部分,文档可根据某种DTD语法规则验证格式是否符合此规则

💡辉辉小贴士:xml有两种约束,那么这两种约束有什么不一样呢?

        XML 可以使用 DTD (Document Type Definition) 和 XSD (XML Schema Definition) 来定义文档的结构和约束条件

        联系:

  • DTD (Document Type Definition) 约束和 Schema (XML Schema Definition) 约束都是用来定义 XML 文档的结构和内容的,但是它们之间存在一些区别

        区别:

  • 1. 语法差异
    • DTD 使用文本格式来定义 XML 结构,而 Schema 使用 XML 格式来定义 XML 结构。因此,DTD 的语法比较简单,易于学习和理解,但是不够灵活,而 Schema 的语法则更加复杂,但是更加灵活,可以支持数据类型、命名空间等特性。
  • 2. 数据类型验证
    • DTD 不支持数据类型验证,只能验证元素和属性是否符合规定的结构;而 Schema 支持数据类型验证,可以定义元素和属性的数据类型,例如字符串,日期格式等。数据类型验证可以帮助我们更好地检测数据的合法性。
  • 3. 命名空间支持
    • DTD 不支持命名空间,而 Schema 支持命名空间。通过命名空间的定义,我们可以为一个 XML 文档定义一个独立的标识符,并且使得不同应用程序中的 XML 文档之间可以进行独立的开发和解析。
  • 4. 束条件的复杂性
    • Schema 的约束条件可以定义更复杂的规则,例如元素的出现次数、元素之间的先后顺序等。此外,Schema 还支持代码重用,可定义自定义类型和元素(复杂类型)以帮助构建更复杂的文档。

        综上所述,DTD 约束和 Schema 约束都是用于定义 XML 结构和内容的,但 Schema 更加灵活、可扩展性更高。同时,使用 Schema 约束可以更好的支持数据类型验证和命名空间定义等功能,也可以定义更复杂的约束条件,支持数据格式验证

为什么要使用dtd约束

 如果没有约束的话,那么用户不知道你的规则究竟是什么,从而达不到好的体验感

怎么用

 格式:<!DOCTYPE root[]>

元素

	<!ELEMENT root()>
  • 元素的分类
    • 空(EMPTY)
    •  文本(#PCDATA)
    • 混合(a,b)   
  • 元素的限制  
    • 并且关系 用 ' , '
    •  或者关系 |
    • 次数 
      • 0次或者一次
      • 一次或者多次
      • 0次或者多次
         

属性

<!ATTLIST root 属性 约束>
  • 属性类型
    •         ID
    •         ( | )选择
    •         CDATA:文本
    •         IDREF:id的引用,相当于外键
    •         #REQUIRED:必填
    •         #IMPLIED:非必填

代码示例 

<?xml version="1.0" encoding="UTF-8"?>
	<!DOCTYPE persons[
	<!ELEMENT persons (person*)>
	<!ELEMENT person (name,age,contact,br?)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT contact (phone|email)>	
	<!ATTLIST person 
	pid ID #REQUIRED
	sex (男|女) '女'
	qq CDATA #IMPLIED
	parent IDREF #IMPLIED
	>
				
]>

<persons>
	<person pid="p1" sex="男" qq="aaa" parent="p2">
		<name>张小明</name>
		<age>10</age>
		<contact>
			<phone>1234567</phone>
		</contact>
		<br/>
	</person>
	<person pid="p2">
		<name>张大明</name>
		<age>35</age>
		<contact>
			<email>123@qq.com</email>
		</contact>
	</person>
</persons>

        

              好啦,今天的分享就到这了,希望能够帮到你呢!😊😊               

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

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

相关文章

STM32时钟系统

时钟 时钟是具有周期性的脉冲信号&#xff0c;最常用的是占空比50%的方波。 时钟是单片机的脉搏。 时钟树 HSE&#xff1a;高速外部振荡器&#xff0c;4~16MHz&#xff0c;&#xff08;晶体&#xff0c;陶瓷&#xff09;LSE&#xff1a;低速外部振荡器&#xff0c;32.768KHz…

ADC0808/ADC0809引脚图及功能和工作原理介绍

ADC0808芯片有28条引脚&#xff0c;采用双列直插式封装。如图所示&#xff1a; . . . 各引脚功能如下&#xff1a; 1-5和26-28&#xff08;IN0-IN7&#xff09;&#xff1a;8路模拟量输入端。 8、14、15和17-21&#xff1a;8位数字量输出端。 22&#xff08;ALE&#xff09…

深度学习代码环境配置(编译器, git, anaconda)

内容 编译器 gcc&#xff1a;GNU编译器套装C builderMicrosoft Visual C&#xff08;MSVC&#xff09;&#xff1a;微软的VC编译器MinGW&#xff08;Minimalist GNU on Windows&#xff09;&#xff1a;可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合&…

【设计模式】面向对象的设计原则

(一) UML 和面向对象设计原则 1. 一种某唱片播放器不仅可以播放唱片&#xff0c;而且可以连接计算机并把计算机中的歌曲刻录到 唱片上&#xff08;同步歌曲&#xff09;。连接计算机的过程中还可自动完成充电。 关于唱片&#xff0c;还有如下描述信息&#xff1a; &#xf…

ChatGPT底层架构Transformer技术及源码实现(一)

ChatGPT底层架构Transformer技术及源码实现 Language Model底层的数学原理之最大似然估计MLE及最大后验概率MAP内部机制详解 Gavin大咖微信:NLP_Matrix_Space 传统人工智能算法的真相(The Truth Under Traditional AI Algorithms),传统人工智能算法是相对于贝叶斯(Bayesia…

【软件设计师暴击考点】程序设计语言-高频考点暴击系列

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

碳中和城市建筑能源系统(4):储能篇(龙惟定)2022

碳中和城市建筑能源系统(4):储能篇 摘要 本文是碳中和城市建筑能源系统系列文章的第四篇。在碳中和语境下&#xff0c;无论是增加可再生能源应用的渗透率&#xff0c;还是平抑负荷、提高电网的灵活性&#xff0c;都离不开储能。本文介绍了当今储能技术的主要类型&#xff0c;…

【新星计划·2023】Centos 7安装教程(一步一图)

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、下载VMware 二、下载镜像的方式 三、安装Linux ’前言 本文将讲解下载VMware和下载镜像的方式&#xff0c;以及安装centos 7的教…

webpack编译打包从入门到放弃

写在前面的话&#xff1a;推荐学习vite。当然&#xff0c;我更推荐你直接上手体验webpack_demo与vite_demo 看看他们的编译、打包、热更新速度等差距。你也可以直接通过vite开发lib库&#xff0c;一句话就是比webpack快&#xff0c;它有的vite都有&#xff0c;并且更好&#x…

NCI-NFCEE

10.5 NFCEE 状态 NFCC 使用此控制消息向 DH 通知启用的 NFCEE 状态的变化。 NFCC 发送 NFCEE_STATUS_NTF 来报告启用的 NFCEE 状态的变化。 对于任何禁用或无响应的 NFCEE&#xff0c;NFCC 不应发送 NFCEE_STATUS_NTF。 当启用 NFCEE 并且 NFCC 检测到与该 NFCEE 通信时存在不…

C++布隆过滤器

目录 布隆过滤器介绍实现哈希函数布隆过滤器删除 小结使用——题目 布隆过滤器 介绍 在许多场景下&#xff0c;如设置昵称时&#xff0c;往往要求唯一性。这时就需要高效判断该昵称是否被使用过。 使用红黑树的kv模型或者哈希表来组织昵称集合&#xff0c;可以&#xff0c;但缺…

Qt中的日期和时间

目录 QDate 示例&#xff08;打印年月日&#xff09;&#xff1a; QTime 示例&#xff08;显示时分秒&#xff09;&#xff1a; QDateTime 示例&#xff08;显示当前日期和时间&#xff09;&#xff1a; 示例&#xff08;分别取出 年 月 日 时 分 秒&#xff09;&#xff…

牛客网专项练习——C语言错题集(8)

文章目录 字符串拼接和拷贝while 与 fortypedef 和 define浮点类型的组成部分 字符串拼接和拷贝 这题并没有难度&#xff0c;但不知为什么我把该题空着。 strcpy 用于拷贝字符串&#xff0c;strcat 用于拼接字符串。 while 与 for 假如 i 0&#xff0c;while 循环里 s1 被执…

【AI机器学习入门与实战】机器学习算法都有哪些分类?

&#x1f44d;【AI机器学习入门与实战】目录 &#x1f36d;基础篇 &#x1f525; 第一篇&#xff1a;【AI机器学习入门与实战】AI 人工智能介绍 &#x1f525; 第二篇&#xff1a;【AI机器学习入门与实战】机器学习核心概念理解 &#x1f525; 第三篇&#xff1a;【AI机器学习入…

Z变换方程转化为差分方程

将Z变换方程转换为差分方程的过程称为反Z变换。反Z变换是将信号从复频域转换为时间域的过程。如果我们已知一个系统的传递函数&#xff0c;即Z变换方程&#xff1a; H ( z ) Y ( z ) X ( z ) b n b n − 1 z − 1 ⋯ b 0 z − n 1 a n a n − 1 z − 1 ⋯ a 0 z − n 0…

AVL 树

目录 AVL树的概念AVL树节点的定义AVL树的插入AVL树的旋转左单旋(parent->_bf 2 && cur->_bf 1)a,b,c当高度为0a,b,c当高度为1a,b,c当高度为2a,b,c当高度为...... 右单旋(parent->_bf -2 && cur->_bf -1)a,b,c当高度为0a,b,c当高度为1a,b,c当高…

强化学习从基础到进阶-案例与实践[4]:深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

Azkaban初认识

Azkaban初认识 文章目录 Azkaban初认识Azkaban是什么&#xff1f;为什么需要工作流调度系统&#xff1f;常见的工作流调度系统Azkaban 与 Oozie的对比 Azkaban是什么&#xff1f; Azkaban是一个开源的分布式工作流管理器&#xff0c;在LinkedIn实施&#xff0c;以解决Hadoop作业…

RT-Thread-03-栈空间分配

栈空间分配 线程状态转换图&#xff1a; 系统滴答时钟 每个操作系统都存在一个系统时钟&#xff0c;是操作系统中最小的时钟单位。这个时钟负责系统和时间相关的一些操作。这个时钟由硬件定时器的定时中断产生。 系统时钟的频率需要根据芯片的处理能力来决定&#xff0c; 频…

【MySQL基础 | 第一篇】数据处理之基本查询

前言 查询语句属于DML&#xff08;Data Manipulation Language&#xff09;数据操作语言的其中一种&#xff0c;用于从数据库中提取所需的数据。通过灵活的条件和组合&#xff0c;查询语句帮助用户有效地获取、过滤和排序数据&#xff0c;满足各种信息需求。 文章目录 前言1️⃣…