• XML中如何使用schema


    Schema简介
    DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系,W3C定义的Schema用来代替DTD。
    chema相对于DTD的明显好处是XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法。
    这就方便了用户和开发者,因为可以使用相同的工具来处理XML Schema和其他XML信息,而不必专门为Schema使用特殊工具,Schema简单易懂,懂得XML语法、规则的人都可以立刻理解它。
    如何编写SCHEMA:
    一.1个简单的Schema文档
    下面是一个最简单的XML文档和schema文件。
    hello.xml
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    <?xml version="1.0"?>
    <greeting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="E:stu.xsd">Hello World!!</greeting>
    <!--一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。-->
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    hello.xsd
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    <?xml version="1.0"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="greeting" type="xsd:string"/>
    </xsd:schema>
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    由上面可以看出:
    XML Schema文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xmlns:xsd="http://www.w3.org/2001/XMLSchema, -----注意在 schema的 xsd文件中 是 XMLSchema 而在引用文件xml中是XMLSchema-instance,写错了无法引用到,也不会报错。
    用元素<element>定义实例文档中的元素;
    引用时用(写在根节点里):
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:stu.xsd"


    关键地方:
    在 xsd文件中 开头:
    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ---固定
    targetNamespace="http://www.w3school.com.cn"  --自定义
    xmlns="http://www.w3school.com.cn"  --自定义
    elementFormDefault="qualified">
    
    
    ....................coding
    
    
    </xs:schema>
    
    
    

     在 xml 引用中 

    <?xml version="1.0"?>
    <note     ----定义在schema中的根节点
    xmlns="http://www.w3school.com.cn"  --- schema中定义的namespace
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  ----固定
    xsi:schemaLocation="http://www.w3school.com.cn note.xsd">  ----namespace + filename
    
    ......coding
    
    
    
    </note>
    

      


    二.我们来看下面这个XML文档和schema文件。 stu.xml ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <stus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:stu.xsd"> <stu ID="s1" 婚否="否"> <name>长度1-10</name> <sex>女</sex> <age>10</age> </stu> <stu ID="s2" 婚否="是"> <name>长度1-10</name> <sex>男</sex> <age>24</age> </stu> </stus> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 注:要求: <stus>下可出现多个<Stu>,<stu>有属性id,不能重复; 子节点<name>:不能为空,长度1-10 子节点<sex>:只能为男/女两个选项 子节点<age>:只能为数字,并且大于0小于100 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 相应的schema文件如下: stu.xsd ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="stus"> <xs:complexType> <xs:sequence> <xs:element name="stu" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="name" type="myname"/> <xs:element name="sex" type="mysex"/> <xs:element name="age" type="myage"/> </xs:sequence> <xs:attributeGroup ref="stuGroup"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:simpleType name="myname"> <xs:restriction base="xs:string"> <xs:minLength value="1"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="myage"> <xs:restriction base="xs:integer"> <xs:minInclusive value="1"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="mysex"> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration value="女"/> </xs:restriction> </xs:simpleType> <xs:attributeGroup name="stuGroup"> <xs:attribute name="ID" type="xs:ID" use="required"/> <xs:attribute name="婚否" type="myhf" use="optional"></xs:attribute> </xs:attributeGroup> <xs:simpleType name="myhf"> <xs:restriction base="xs:string"> <xs:enumeration value="是"></xs:enumeration> <xs:enumeration value="否"></xs:enumeration> </xs:restriction> </xs:simpleType> </xs:schema> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- hello.xsd与stus.xsd相比,stus.xsd比hello.xsd限制得更加的完整 三:分析stus.xsd文件的内容: 1.<xs:element name="stus">:声明一个根节点名为stus 2.<xs:complexType>:类型为复杂类型,复杂类型:为带属性和子节点的类型 3.<xs:sequence>:sequence表示子元素依次出现的顺序。 4.<xs:element name="stu" minOccurs="0" maxOccurs="unbounded">: 声明一个子节点名为stu,minOccurs="0" :子节点的数量最少为0个,最大不进行限制(unbounded也可指定一个具体的数字,如10) 5.<xs:complexType>:指定<stu>节点也为复杂类型 6.<xs:sequence>:sequence表示子元素依次出现的顺序。 7.<xs:element name="name" type="myname"/>:在<stu>节点下指定<name>描述节点,简单类型(最底层的节点),类型用名为myname的自定义的类型 8.<xs:element name="sex" type="mysex"/> :在<stu>节点下指定<sex>描述节点,简单类型(最底层的节点),类型用名为mysex的自定义的类型 9.<xs:element name="age" type="myage"/> :在<stu>节点下指定<age>描述节点,简单类型(最底层的节点),类型用名为myage的自定义的类型 10.找到自定义myname类型: <xs:simpleType name="myname"> <xs:restriction base="xs:string"> <xs:minLength value="1"/> <xs:maxLength value="10"/> </xs:restriction> </xs:simpleType> 详解: <xs:simpleType name="myname">:定义一个名为myname的简单数据类型 <xs:restriction base="xs:string">:指定其基地类型如(string,integer)等 <xs:minLength value="1"/>:长度最少为1 <xs:maxLength value="10"/>:长度最大为10 11.自定义myage类型: <xs:simpleType name="myage"> <xs:restriction base="xs:integer"> <xs:minInclusive value="1"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> 详解: <xs:simpleType name="myage">:定义一个名为myage的简单数据类型 <xs:restriction base="xs:integer">:指定其基地类型如(string,integer)等 <xs:minInclusive value="1"/>:值最小为1,包括1 <xs:maxInclusive value="100"/>:值最大为1,包括10 12.自定义myage类型: <xs:simpleType name="mysex"> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration value="女"/> </xs:restriction> </xs:simpleType> 详解: <xs:simpleType name="myage">:定义一个名为myage的简单数据类型 <xs:restriction base="xs:integer">:指定其基地类型如(string,integer)等 <xs:enumeration value="男"/>:指定其值为枚举值“男” <xs:enumeration value="女"/>:指定其值为枚举值“女” 13.<xs:attributeGroup ref="stuGroup"/>:为stu节点引用一个名为“stuGroup”的属性组 14.我们找到名为stuGroup的属性组: <xs:attributeGroup name="stuGroup"> <xs:attribute name="ID" type="xs:ID" use="required"/> <xs:attribute name="婚否" type="myhf" use="optional"/> </xs:attributeGroup> 详解: <xs:attributeGroup name="stuGroup">:定义一个名为stuGroup 的属性组. <xs:attribute name="ID" type="xs:ID" use="required"/>:为stuGroup 属性组中定义一个名为“ID”的属性,类型为ID,不能重复,use为指定此属性是否可选/必须,值有:required是必须值,optional是可选值,prohibited是无属性值。 <xs:attribute name="婚否" type="myhf" use="optional"/>:为stuGroup 属性组中定义一个名为“婚否”的属性,类型使用自定义枚举类型,只能为是/否,此属性为可选

      转自 

    http://dang-java.iteye.com/blog/665167
    

      

    I'm falling off the sky all alone.The courage inside is gonna break the fall. Nothing can dim my light within. I am That I am 程序 = 数据结构 + 算法
  • 相关阅读:
    poj 3125 Printer Queue
    poj 1877 Flooded!
    hdu 4121 xiangqi 模拟
    Codeforces Round #268 (Div. 2)
    hdu 4096 Universal Question Answering System
    hdu 1720 c++一水
    lab1
    homework2
    第一次作业
    IFE_part2_JavaScript_数组去重/trim()
  • 原文地址:https://www.cnblogs.com/IamThat/p/4345656.html
Copyright © 2020-2023  润新知