这个问题在这里已有答案:
我尝试为我的xml文件定义一些xsd架构。
xml结构就像
<?xml version="1.0" encoding="UTF-8"?>
<product name="abc" xmlns="http://example.org/productMetadata.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.org/productMetadata.xsd productMetadata.xsd">
<metainf />
</product>
(带有一些已定义属性“name”的根标记和一些嵌套标记,如示例“metainf”中所示)
我定义xsd的方法看起来像
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.org/productMetadata.xsd" xmlns="http://example.org/productMetadata.xsd">
<xsd:element name="product">
<xsd:complexType>
<xsd:all>
<xsd:element type="xsd:string" name="metainf" />
</xsd:all>
<xsd:attribute type="xsd:string" name="name" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
然而,我无法针对xsd验证xml。
根据验证器(我使用java,web-app和eclipse),我收到以下失败消息。
找到以元素'metainf'开头的无效内容。其中一个'{metainf}'是预料之中的。
要么
Cvc-complex-type.2.4.a:从元素'metainf'开始发现无效内容。其中一个'{metainf}'是预期的,'第5行',第13列。
任何人提示,我的xsd或xml有什么问题。
只需在elementFormDefault="qualified"
声明中添加xsd:schema
,如下所示:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://example.org/productMetadata.xsd" xmlns="http://example.org/productMetadata.xsd">
根据elementFormDefault
属性的文档:
在此架构的目标命名空间中声明的元素的表单。该值必须为“合格”或“不合格”。默认为“不合格”。
- “unqualified”表示目标名称空间中的元素不需要使用名称空间前缀进行限定。
- “qualified”表示必须使用名称空间前缀限定目标名称空间中的元素。