【问题标题】:Is it possible to use XML Schemas internally, just like DTDs?是否可以在内部使用 XML 模式,就像 DTD 一样?
【发布时间】:2016-09-06 05:33:39
【问题描述】:

我有以下包含内部 DTD 验证的 XML 文件:

<?xml version="1.0"?>
<!DOCTYPE animals [
    <!ELEMENT animals (animal)*>
    <!ELEMENT animal (skin, noise, eyes, diet, class, weight, special_skill)>
    <!ELEMENT skin (#PCDATA)>
    <!ELEMENT noise (#PCDATA)>
    <!ELEMENT eyes (#PCDATA)>
    <!ELEMENT diet (#PCDATA)>
    <!ELEMENT class (#PCDATA)>
    <!ELEMENT weight (#PCDATA)>
    <!ELEMENT special_skill (#PCDATA)>
    <!ATTLIST animal name CDATA #REQUIRED >
    <!ATTLIST weight unit CDATA "kg">
]>
<animals>
    <animal name="cow">
        <skin>
            Straight fur
        </skin>
        <noise>
            Moo!
        </noise>
        <eyes>
            2
        </eyes>
        <diet>
            Herbivore
        </diet>
        <class>
            Mammalia
        </class>
        <weight unit="kg">
            635-1134
        </weight>
        <special_skill>
            Chewing
        </special_skill>
    </animal>

    <animal name="sheep">
        ...
    </animal>

</animals>

我一直在寻找如何用 XSD 替换 DTD 验证,但找不到任何示例。似乎 XSD 总是需要在单独的文件中定义并由 XML 引用。 XSD不能在内部使用是真的吗?

【问题讨论】:

    标签: xml xsd dtd xml-validation


    【解决方案1】:

    原则上你可以这样做:

    <package>
      <xs:schema id="XSD">
       ... schema goes here ...
      </xs:schema>
      <doc xsi:noNamespaceSchemaLocation="#XSD">
       ... instance goes here ...
      </doc>
    </package>
    

    但是 (a) 不能保证任何特定的架构处理器都会支持这种形式的位置 URI,并且 (b) 很难理解这一点。

    我知道它是用 DTD 完成的,但我从来没有真正理解过:

    (i) 如果你想验证一个文档,你肯定想知道它对什么架构有效,而不是相信它来定义自己的架构?知道“此文档对某些架构有效,但我不知道该架构中有什么”有什么用?

    (ii) 您什么时候有过只描述单个实例文档的模式? Schema 本质上定义了文档类,而这些类很少是单例的。

    【讨论】:

      【解决方案2】:

      不,尽管您可能会找到一些用于在 XML 文档实例中嵌入 XSD 的 ad hoc implementational support,但没有对应于 DTD 的 internal subset 的 XSD 标准机制。

      【讨论】:

        猜你喜欢
        • 2011-09-06
        • 2023-03-11
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多