XML入门---语义约束

思考:XML中都是自定义标签,如果在公司编写员工个人信息的时候使用XML文档编写,在编写过程中标签的英文打错了会导致在查找此名员工时出现错误,或者在员工档案中出现游戏名称这种荒谬的情况,那么如何避免这种问题?

使用XML中的语义约束

XML中的语义约束有两种方式:

1.DTD

DTD是一种简单易用的语义约束方式

DTD通常以单独的文件出现,其扩展名为.dtd

以下是一份简单的dtd文件

<!EMELENT class (student+)>
<!EMELENT student (name,no,gender)>
<!EMELENT name (#PCDATA)>
<!EMELENT gender (#PCDATA)>
<!ATTLIST student no CDATA "">


PCDATA是限制元素里面的内容是字符类型的,而这个CDATA是限制属性里面的内容是字符类型。

//用<!EMELENT 元素名 (子元素1,子元素2,....)>来定义元素
//用<!ATTLIST 元素名 属性名 属性类型 默认值>来定义属性


例:
<!EMELENT student (name,no,gender)> : student元素有name,no,gender这三个子元素
<!EMELENT name (#PCDATA)>        :name元素为纯文本元素不能有子元素

利用DTD的<!EMELENT >标签,我们可以定义XML文档中允许出现的节点数量与个数:

      定义hr节点下只允许出现1employee子节点

      <!EMELENT hr(employee)>

     

定义可以出现的标签时,必须按定义的顺序写

     

      定义name标签体只能是文本,#PCDATA代表文本元素

      <!EMELENT name (#PCDATA)>

DTD定义节点数量:

 如某个子节点需要多次重复出现,则需要在子节点后面增加相应的描述符:

      定义hr节点下至少出现1个employee子节点

      <!EMELENT hr(employee+)>

      定义hr节点下至少0个(可以出现也可以不出现)employee子节点

      <!EMELENT hr(employee*)>

      定义hr节点下至多出现1个employee子节点

      <!EMELENT hr(employee)>

在XML中引用DTD文件

<!DOCTYPE 根节点 SYSTEM “dtd文件路径”>

实例:

<!DOCTYPE hr SYSTEM “hr.dtd”>

2.XML Schema

xml schema比dtd更为复杂,提供更多功能

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="hr">
    <!--complexType标签含义是复杂节点,包含子节点是必须使用这个标签-->
    <complexType>
        <!--有序的:sequence-->
        <sequence>
                <!--       minOccurs="1"指的是至少有一个employee   maxOccurs为至多    -->
            <element name="employee" minOccurs="1" maxOccurs="9999">
                <complexType>
                    <sequence>
                        <element name="name" type="string"></element>
                        <element name="age" type="string">
<!--                         简单约束   -->
                            <simpleType>
                                <restriction base="integer">
<!--                                    最小值-->
                                    <minInclusive value="18"></minInclusive>
                                    <maxInclusive value="60"></maxInclusive>
                                </restriction>
                            </simpleType>

                        </element>
                        <element name="salary" type="string"></element>
                        <element name="department" type="string">
                            <complexType>
                                <sequence>
                                    <element name="dname" type="string"></element>
                                    <element name="address" type="string"></element>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
<!--      use="required" 为: no这个属性在任何employee节点下必须存在              -->
                    <attribute name="no" type="string" use="required"></attribute>
                </complexType>
            </element>
        </sequence>
    </complexType>
</element>
</schema>

在XML中引用Schema

在后文件中加属性:xmlns:xsi:http://www.w3.org/2001/XMLSchema-instance

 xsi:noNameSpaceSchemaLocation=”xsd文件名.xsd”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值