xml及 dtd约束、schema约束

本文介绍XML的基础知识,包括其用途、语法规范及如何使用DTD和Schema进行数据约束。详细讲解了文档声明、元素定义、属性设置等内容,并通过实例演示了DTD与Schema的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          xml

1、简介:可扩展标记型语言

   标记型语言:html也是,也是使用标签来操作

   可扩展

  -    html里面的标签是固定的,每个标签都有特定的含义

  -    xml标签可以自己定义 可以写中文的标签

 2、xml用途

   html为了显示数据,xml也可以显示数据,但是最重要的是存储数据

 xml我w3c组织发布的技术。有2个版本:1.0和1.1    都使用1.0版本,1.1不能向下兼容。

3、xml的运用

  -不同的系统之间传输数据  (比如QQ文件的传输)

  -用来表示生活中有关系的数据  (比如国家下面的城市)

  -经常用在文件配置

4、xml的语法

 (1)xml的文档声明

   -创建一个文件,后缀名是.xml

   -如果写xml,第一步必须有一个文档声明(写了文档声明后,表示写xml文件的内容)

格式: <?xml version=”1.0” encoding=”gbk/utf-8”?>  注意空格,一定要有       文档声明必须写在第一行第一列

 属性

   -version:xml的版本1.0

   -encoding:xml编码  gbk、utf-8、iso8859-1(不包含中文)

   -standalone:是否需要依赖其他文件  yes/no  比较少用到

xml的中文乱码问题解决

设置保存时候的编码方式和打开时候的编码方式一致

 (2)定义元素(标签)

 和html的标签一样

  在xml中会把空格和换行都当成内容来解析

命名规则

1、xml代码区分大小写 

2、不能以数字或者下划线_开头 

3、不能以xml开头(大小写都不可以)

4、不能包含空格和冒号:

 (3)定义属性

命名规则与标签的命名规则是相同的

 (4)注释

写法: <!—xml的注释-->

 注释不能嵌套,也不能放到第一行第一列, 那个位置是放文档声明的位置

 (5)特殊字符

<:&lt;  >:&gt;  前面2个比较常用  ”:&quot;  ’:apos;   &:&amp;   

(6)CDATA区  了解

可以解决多个特殊字符都需要转义的操作,就是把这些内容放在CDATA区里面,就不需要转义了

写法:<![CDATA[  内容   ]]> 空格不用管

(7)PI指令(处理指令)  很少用

可以在xml中设置样式

写法:<?xml-stylesheet type=“text/css” href=“css的路径”?>

设置样式,只能对英文标签名称起作用,对于中文标签名称不起作用

5、xml的约束

因为要符合常理,比如人有名字和年龄这些属性,但是不能有猫狗这些属性,所以需要进行约束

                 xml的约束的技术:dtd约束和schema约束

6、dtd约束的快速入门

步骤(1)、创建一个文件  后缀名是.dtd

(2)、看xml中有多少个元素,有几个元素,就写几个<!ELEMENT>

(3)、判断元素是简单元素还是复杂元素

   -简单元素:没有子元素  <!ELEMENT 元素 (#PCDATA)>

   -复杂元素:有子元素  <!ELEMENT 复杂元素 (子元素,子元素..)> 没有孙子辈的元素,只有儿子的元素

(4)、需要在xml文件中引入dtd文件

  <!DOCTYPE 根元素名称 SYSTEM “dtd文件路径”>

 myeclipse工具进行检验 

ctrl+shift+/  注释的快捷键

7、dtd的三种引入方式

(1)  外部引入方式

   <!DOCTYPE 根元素名称 SYSTEM “dtd文件路径”>

(2)  使用内部的dtd文件   个人建议使用这个,就不用重新创建文件了

  如-  <!DOCTYPE 根元素名称 [

<!ELEMENT person (name,age)>   记得空格

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

]>

(3)  使用外部的dtd文件(网络上的dtd文件)

<!DOCTYPE 根元素 PUBLIC “dtd名称” “dtd文件的路径”>

8、使用dtd定义元素

 语法:<!ELEMENT 元素名 约束>

简单元素的约束

  (#PCDATA):约束的内容是字符串类型

   EMPTY:元素为空

   ANY:元素为任意

复杂元素的约束

  <!ELEMENT 复杂元素 (子元素)>

表示子元素出现的次数  这些符号是在子元素后面添加的

+:表示一次或者多次 

?:表示0次或者1次 

*:表示0次或者多次

子元素使用逗号,进行隔开  表示元素出现的顺序

子元素用|隔开 表示只能出现其中的任意一个

9、使用dtd定义属性

 语法: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>

属性名称随便写

  属性类型:

   CDATA:字符串

   枚举比如(aa|bb|cc):表示只能在一定的范围内出现,每次只能出现其中的一个 如

   ID:值只能是字母或者下划线开头

属性的约束

 #REQUIRED:属性必须存在

 #IMPLIED:属性可有可无

 #FIXED:表示一个固定值 比如 #FIXED “AAA” 那么属性值必须是“AAA”

直接值:如果不写属性,会使用直接值;如果写了属性,那么会使用属性的那个值

  10、定义实体

 语法: <!ENTITY 实体名称 “实体的值”>

 比如 <!ENTITY test “haha”>

  使用实体 &实体名称;   比如&test;

注意:定义实体需要写在内部dtd里面

 

  schema约束

特点:- schema符合xml的语法,里面写的是xml语句,与dtd约束不同,dtd是自成一派

- 一个xml中可以有多个schema,多个schema使用名称空间区分

- dtd里面有PCDATA等类型,但是在schema里面可以支持更多的数据类型,比如年龄只能是整数,schema可以严格的规定整数类型

- 但是schema语法更加复杂,还无法代替dtd

 

             快速入门

1、创建一个schema文件,后缀名是.xsd

根节点:<shema>

在schema文件里面的属性

xmlns=http://www.w3.org/2001/XMLSchema 表示当前是一个约束文件

targetNameSpace=http://www.itcast.cn/20151111使用schema约束文件,直接通过地址引入约束文件

elementFormDefault=“qualified”

2、步骤

- 看xml中有多少个元素,有几个就写几个<element>

- 看是否是简单元素或者复杂元素,简单元素写在复杂元素的里面

如 <element name =“person”>

<complexType>

<sequence>

<element name =“name” type=“string”></element>

<element name=“age” type =“ing”></element>

</sequence>

</complexType>

</element>

3、在被约束文件里面引入约束文件

如<person xmlns:xsi=“http://www.w3.org/2001/XMLSchema” xmlns=“http://www.itcast.cn/20151111” xis:schemaLocation=“http://www.itcast.cn/20151111” 1.xsd>

** xmlns:xsi=“http://www.w3.org/2001/XMLSchema”表示xml是一个被约束文件

** xmlns=“http://www.itcast.cn/20151111”是约束文档里面的targetNameSpace

** xis:schemaLocation=“http://www.itcast.cn/20151111” 1.xsd

格式:targetNamespace 空格 约束文档的路径

<sequence>:表示元素按照顺序出现

<all>:表示元素只能出现一次

<choice>:表示元素只能出现其中一个

maxOccurs=“unbounded”:表示元素出现的次数无限制

<any>:表示任意元素

约束属性,写在复杂元素里面,位置 </complexType>之前

<attribute name =“id1” type=“int” use=“required”> </attribute>

name:属性名称 type:属性类型 use:属性是否必须出现

 

转载于:https://www.cnblogs.com/zengjiao/p/7208608.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值