我对 XML 的理解并不完全令人惊叹,但我对 annotation/appinfo 中的内容的理解是,您可以使用任何格式正确的 XML,而这是未经验证的。我对宽松验证的理解是,如果可以获得相关的架构信息,就会验证元素和属性。
我的情况是我有一个 XML 模式,其中包含本节中需要验证的一些内容。我有相关的模式来验证内容。
我采用了一个完全简单的 XML 模式并向其中添加了一个 appinfo 元素,如下所示。appinfo 的内容是另一个元素声明,纯粹是为了不引用另一个模式的简单性。我试图验证的架构显然引用了不同的东西。
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.demo.org"
xmlns="http://www.demo.org"
elementFormDefault="qualified">
<xsd:annotation>
<xsd:appinfo>
<xsd:element name="Demo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="A" type="xsd:iteger"/>
<xsd:element name="B" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Demo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="A" type="xsd:integer"/>
<xsd:element name="B" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
请注意,在 appinfo 部分中,我故意在元素 A 上拼错了“整数”。如果我在架构的主体中执行此操作,XmlSchemaSet.Compile()
则会告诉我此架构无效。
但是,如果我使用上面写的模式,它告诉我没有问题。在我开始使用的更复杂的文件中,我通过以下方式将外部架构提供给 XmlSchemaSetXmlSchemaSet.Add()
我还尝试从http://www.w3.org/2001/XMLSchema.xsd加载 XML 模式,并将要验证的模式加载到一个XmlDocument
并运行XmlDocument.Validate()
但没有乐趣。
在花了几个小时之后,我觉得我完全错过了一些完全基本的东西。任何指针表示赞赏!