自定义 xml schemas (2)

前端之家收集整理的这篇文章主要介绍了自定义 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@H_404_37@ xmlns:xs@H_404_37@="http://www.w3.org/2001/XMLSchema"@H_404_37@ elementFormDefault@H_404_37@="qualified"@H_404_37@ attributeFormDefault@H_404_37@="unqualified"@H_404_37@>@H_404_37@

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

</xs:schema@H_404_37@>@H_404_37@

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

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

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


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

</xs:schema@H_404_37@>@H_404_37@

顺带补充一句,写 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 和站内相关的其他内容较好

猜你在找的XML相关文章