验证 XML 架构注释/应用程序信息中的 XML 内容
本文关键字:XML 信息 内容 应用程序 注释 验证 | 更新日期: 2023-09-27 18:30:30
我对XML的理解并不完全令人震惊,但我对注释/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()
会告诉我此架构无效。
但是,如果我使用上面写的架构,它告诉我没有问题。 在我开始使用的更复杂的文件中,我通过 XmlSchemaSet.Add()
将外部架构提供给 XmlSchemaSet
我还尝试从 http://www.w3.org/2001/XMLSchema.xsd 加载 XML 模式并将要验证的架构加载到XmlDocument
中并运行XmlDocument.Validate()
但没有乐趣。
我觉得在花了几个小时之后,我完全错过了一些完全基本的东西。 任何指示赞赏!
我对lax
的理解:如果你有一个声明
<any
namespace=". . . "
processContents="lax">
</any>
将针对与 namespace
指定的命名空间(如果有)对应的架构验证正在验证的 XML 中相应元素的内容,而不是针对它可能使用的任何架构进行验证。appInfo
的声明是
<xs:element name="appinfo" id="appinfo">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:any processContents="lax"/>
</xs:sequence>
<xs:attribute name="source" type="xs:anyURI"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
</xs:element>
没有任何对应于namespace="##any"
namespace
规范,这意味着没有针对任何模式的验证。