自定义 xml schemas (2)

接上一篇写 Yun UI 封装的例子,接下来要封装一下自己的常用控件了;上 w3schools.com 读了完整的教程,先从简单处入手:

文件开头必须声明 xml 版本和编码,通常就是 <?xml version="1.0" encoding="UTF-8" ?>
全部元素都需要被包覆在 <xs:schema></xs:schema> 之间,也就是 <xs:schema> 必须在第一个元素的前面,而 </xs:schema> 必须在最后一个元素的后面

当然,这里的 <xs:schema> 实际应该补充好引用的命名空间,也就是写成 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> ,下一步就是元素的组装
遵照这个惯例,我们的全部元素和属性,都要以 xs: 来开头了;元素的类型可以是 complexType ,也可以是 simpleType ,一个元素的类型只能声明为 complexType 或者 simpleType ;比如写成这样的

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

    <!-- 这里只声明了一个"猫"元素,而且类型是 simpleType,假定只有1到5只猫 -->
    <xs:element name="cat"> 
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                <xs:minInclusive="1"/>
                <xs:minInclusive="5"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>

</xs:schema>

这里元素的类型,如果是 simpleType ,那么 restriction base 的值会是一个字符串,可以是 w3.org 的 schemas 中指定的数据类型,比如 xs:integerxs:stringxs:token 等; restriction base 的值也可以是当前或者其他某个 schema 中,类型为 simpleType 的元素的名称;如果元素的类型是 complexType ,那么这个元素必须带有一个叫 sequence 的下级元素,再在 sequence 中包含一个或以上的元素

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

    <!-- 这里的"猫"元素,类型改为 complexType,而且包含了多个元素 -->
    <xs:element name="cat"> 
        <xs:complexType>
            <xs:sequence>
                <!-- 猫的眼睛个数,是一个 simpleType 的元素 -->
                <xs:element name="countOfEyes" value="2" type="xs:int"/>
                <!-- 猫的叫声,被定义成一个 complexType 的元素, 使用了 Sound 元素的自定义 soundsLike 属性 -->
                <xs:element name="mySound" soundsLike="meow" type="Sound"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>


    <!-- 这里定义了声音的元素本体 -->
    <xs:element name="Sound">
        <xs:complexType>
            <xs:sequence>
            </xs:sequence>
            <!-- 猫叫声的自定义 soundsLike 属性, 就是来自 Sound 元素内部的 soundsLike 属性 -->
            <xs:attribute name="soundsLike" type="xs:string"/>
        </xs:complexType>
    </xs:element>

</xs:schema>

顺带补充一句,写 schema 还是尽量按业界标准来吧,除去易于理解,还有这么多年的实践的教训,可以看看 https://msdn.microsoft.com/en-us/library/7f0tkwcx(v=vs.80).aspxhttp://www.w3school.com.cn/schema/schema_elements_ref.asp ,告别瞎摸,从我做起(笑)
另,写这篇文章的用意,是出于校验的方法较常见、而通过“掌握”了规则的软件来设计 schema 的例子较少;如果想做这块,还是看 http://www.edankert.com/validate.html 和站内相关的其他内容较好

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇