笔记20051027

XML模式(Infoset):通过提供对结构和内容的约束,XML模式定义一类XML文档。使用模式指出文档中允许哪些元素、它们可能有哪些元素、它们可能包含什么。XML模式类似于DTD,但它还能指定元素的文本内容。


XML模式对XML实体一无所知。不能在XML模式中说明实体,不能指定在哪里使用实体。


DTD指出元素的有效性,而XML模式则指出元素、XML名域和类型化数据(如整数、日期和串)的有效性。
    1。文本内容。XML模式可以指定任何环境中允许哪些文本,而不只是DTD中的是否允许文本(#PCDATA)。
    2。类型化数据。除了指出必须出现文本内容外,还可规定它必须符合某种类型,如整数、日期或大写字母序列。这对用XML使用关系数据库的应用特别重要。
    3。文本原型。可以使用数据必须匹配的原型(严格地说,Perl类正规表达式)。例如,加拿大邮政编码必须包含用空格分隔的两个字母数字组(M6E 3J5)。
    4。复杂的内容模型。
    5。导出类型。
    6。文档资料。XML模式可以在documentation元素中存放关于个别元素的文档资料或作者姓名之类元数据的标准地址。
    7。名域。XML模式更好地支持混合多个名域的元素或使用缺省名域。


一个DTD和一个对应的模式(菜谱)。
DTD:
<!ELEMENT recipe (title,body)>
<!ATTLIST recipe page #CDATA #REQUIRED>
<!ELEMENT title (#PCDATA|indexItem)*>
<!-- * An indexItem appears at least once in every title * -->
<!ELEMENT indexItem (#PCDATA)*>
<!ELEMENT body (#PCDATA)*>

模式:
<element name="recipe">
    <complexType content="elementOnly">
        <element ref="title" />
        <element ref="body" />
        <attribute
            name="page"
            type="integer"
            use="required"
        />
    </complexType>
</element>
<element name="title">
    <type content="mixed">
        <annotation>
            <documentation>
            The recipe title always contains at least one indexItem; They are printed in Caps/small-caps in the 1782 edition of  the book.
            </documentation>
        </annotation>
    </type>
</element>
<element name="indexItem" type="string" />
<element name="body" type="string" />


连接模式与XML文档:可使用在W3C发布的一个名域中定义的两个属性之一。
1。<recipe
        xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
        xsi:schemaLocation="recipe.schema"
      >
      ......
      </recipe>
2。<recipe
        xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
        xsi:nonamespaceschemaLocation="recipe.schema"
      >
      ......
      </recipe>
地址可以多个,用空格分开即可。


XML名域是一种“限定”一组元素和属性的方法。它是在一个文档中混合来自多个DTD的元素或多组名字并声明哪些元素和属性来自哪组名字的一条途径。使用名域说明将一个URI引用与一个或多个XML元素联系在一起,作为一个前缀将它们相互区分开。如果两个元素同名但URI前缀不同,那么它们是不同元素。

XML名域的3个主要用途:混合词汇、混合文档片段及确定保留名。


posted on 2005-10-27 21:22  Harry  阅读(421)  评论(0)    收藏  举报