我有以下 XML 文件,其中包括内部 DTD 验证:
<?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 不能在内部使用是真的吗?
最佳答案
原则上你可以这样做:
<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) 您什么时候拥有过仅描述单个实例文档的模式?模式本质上定义了文档类,而这些类很少是单例。
关于xml - 是否可以在内部使用 XML 模式,就像 DTD 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39336531/