gpt4 book ai didi

java - 带有空命名空间的 XML 模式验证

转载 作者:行者123 更新时间:2023-11-29 06:00:54 24 4
gpt4 key购买 nike

我试图理解遵循 XML 模式处理的所有(复杂)规则,但我仍然无法理解!我的问题是:

  • 我有一个 XSD;
  • 我想基于此 XSD 创建和验证 XML 文件,没有元素前缀;
  • 我希望 jEdit、Eclipse 等编辑器能够处理基于 XSD 的自动完成。

但是,所有验证编辑器都给我相同的错误消息。

这是 XSD 的精简版:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.megadix.org/standards/temp.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jfcm="http://www.megadix.org/standards/temp.xsd"
elementFormDefault="unqualified" attributeFormDefault="unqualified">

<xsd:complexType name="MapsType">
<xsd:sequence>
<xsd:element name="map" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0" maxOccurs="1"></xsd:element>
<xsd:element name="concepts" minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="concept" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>

<xsd:element name="maps" type="jfcm:MapsType"></xsd:element>

如果我使用前缀,文件会正确验证并自动完成:

<?xml version="1.0" encoding="UTF-8"?>
<jfcm:maps xmlns:jfcm="http://www.megadix.org/standards/temp.xsd">
<map name="Test Map">
<concepts>
<concept name="c1" />
<concept name="c2" />
<concept name="c3" />
</concepts>
</map>

但是如果我删除它:

<?xml version="1.0" encoding="UTF-8"?>
<maps xmlns:jfcm="http://www.megadix.org/standards/temp.xsd">
<map name="Test Map">
<concepts>
<concept name="c1" />
<concept name="c2" />
<concept name="c3" />
</concepts>
</map>

我收到此错误消息:

Invalid content was found starting with element 'map'. One of '{map}' is expected.

有什么建议吗?

最佳答案

因为您对元素的形式使用“不合格”,所以这是正确的做法:

<?xml version="1.0" encoding="UTF-8"?>
<maps xmlns="http://www.megadix.org/standards/temp.xsd">
<map name="Test Map" xmlns="">
<concepts>
<concept name="c1" />
<concept name="c2" />
<concept name="c3" />
</concepts>
</map>
</maps>

如果你想让所有的元素在命名空间上“共享”,你必须定义 elementFormDefault="qualified";作为侧边栏,许多 XSD 设计人员会认为这是一个很好的建议。

关于java - 带有空命名空间的 XML 模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10125656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com