XML模式定义中的<any>
元素允许一个模式被另一个模式扩展。
我尝试遵循https://www.w3schools.com/xml/schema_complex_any.asp中给出的示例。
但是,只要children
元素不是名称空间限定的IntelliJ,就会向我显示验证错误消息“匹配的通配符是严格的,但找不到元素'children'的声明”。我可以通过在children元素中添加“ xmlns =“ https://www.w3schools.com””来消除此错误。尽管这很有意义,但我真的很希望无需指定名称空间即可使用“直接插入”扩展。我缺少一些隐藏功能吗?还是该示例存在缺陷,您始终需要显式指定名称空间?
我正在使用IntelliJ在激活XML Schema 1.1的情况下编辑和验证XML Schema和XML文件。
我对示例中的family.xsd
片段进行了如下补充:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.microsoft.com"
targetNamespace="http://www.microsoft.com"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
问题是:W3Schools示例是否存在缺陷,还是应该在不为'children'元素指定名称空间的情况下工作?
感谢您的提示和想法!
答案 0 :(得分:1)
通过“模式限定”,我怀疑您的意思是“名称空间限定”。
如果要允许任何名称空间中的元素或不包含任何元素,请使用<xs:any namespace="##any"/>
namespace='##any'
确实是默认设置,所以这似乎不是问题。
现在您已经告诉我们错误消息,该错误消息指向processContents
。 processContents
的默认值为strict
,这意味着仅当存在全局元素声明(并且该声明必须对该声明有效)时,才允许该元素。
在W3Schools示例中,实例文档具有xsi:schemaLocation
元素的命名空间的children
属性,该属性指向包含该元素声明的架构。因为processContents="strict"
,所以需要该架构。只要存在全局元素声明,名称空间就无关紧要。