XML验证失败
我有一个简单的XSD使用XmlReaderSettingsXML验证失败
这里通过的XmlSchemaSet对象和XML paresed加载的问题是我的XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element name="B">
<xs:complexType>
<xs:sequence>
<xs:element name="C" minOccurs="0" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="Properties" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" minOccurs="0">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这以下XML将在第5行上生成错误(“无法找到属性'名称'的架构信息。at 5:11行:
<A>
<B>
<C>
<Properties>
<Item Name="OBJECT">
<Item Name="CONTENT"/>
</Item>
</Properties>
</C>
</B>
</A>
我的XSD有什么问题?
您需要定义的模式为Item
元素。
你缺少第二级项目的定义和它的属性。
下应该是你的*作品
<xs:complexType>
<xs:sequence>
<xs:element name="Item">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
所以它看起来像这样
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element name="B">
<xs:complexType>
<xs:sequence>
<xs:element name="C" minOccurs="0" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="Properties" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Item">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
要么,你的第一个项目应自终止,如果你只想要一个水平之下项目。但即便如此,您仍然必须定义属性。
我认为没有什么不妥的XSD,和什么是错的与你的架构处理器。以下是撒克逊报道:
Saxon-EE 9.8.0.3J from Saxonica
Java version 1.8.0_121
Using license serial number V005192
Loading schema document file:/Users/mike/Desktop/temp/test.xsd
Finished loading schema document file:/Users/mike/Desktop/temp/test.xsd
Schema checking successful. Time: 738ms. Memory: 37Mb.
Using parser org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser
Processing file:/Users/mike/Desktop/temp/test.xml
Validation time: 244ms. Memory: 40Mb.
Validation successful
您的Item
元素声明既没有simpleType
或complexType
的孩子,也不是type
属性。在XSD部分1的相关规则是在§3.3.2,在那里它说,有效{类型定义}是:
对应于
<simpleType>
或<complexType>
元素信息项在[儿童]类型定义,如果有一个存在, 否则类型定义·由·实际值的 类型[属性]·由·实际值解析·到,否则{类型定义}元素 声明·解析·到·的 substitutionGroup [属性],如果存在的话,否则·UR型 定义·。
因此,在这种情况下,它是“·乌尔类型定义·”,这仅仅是xs:anyType
一个奇特的名字(见§3.4.7),它允许任何内容。
遗憾的是微软还没有更新其架构处理器大约15年,盲蝽象这样不知道。
这意味着你有3种方式前进:
提交错误微软并等待15年的分辨率
切换到不同架构处理器(例如,撒克逊)周围的错误
工作通过声明的元素
Item
所需的类型。
谢谢迈克尔的全面解释。我会跳过选项#1 :) – MikyMike
https://*.com/questions/5303476/how-to-fix-error-could-not-find-schema-information-for-the-attribute-element – obl
@obi,没有什么在那个Q/A中对于这种情况很有用。 –