在XSD中引用另一个模式时,属性无效

时间:2015-11-04 17:25:27

标签: xml validation intellij-idea xsd xml-namespaces

我有两个模式:

<schema xmlns:foo="urn:x:foo:1.0" xmlns:bar="urn:x:bar:1.0"
        targetNamespace="urn:x:foo:1.0"
        version="1.0"
        xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="bar" type="bar:bar" />
</schema>

<schema xmlns:bar="urn:x:bar:1.0"
        targetNamespace="urn:x:bar:1.0"
        version="1.0"
        xmlns="http://www.w3.org/2001/XMLSchema">
    <complexType name="bar">
        <attribute name="goo" type="string" />
    </complexType>
    <element name="bar" type="bar:bar"/>
</schema>

在IntelliJ 15(EAP)中编辑XML时,此XML可以很好地验证:

<bar goo="xxx" xmlns="urn:x:bar:1.0" />

但是找不到属性goo(虽然元素栏本身很好):

<bar goo="xxx" xmlns="urn:x:foo:1.0" />

我已尝试将<import namespace="urn:x:bar:1.0"/>添加到foo.xsd但未成功。

这是IntelliJ中的错误还是我遗漏了什么?您是否会推荐能够处理多个XSD文件的任何(最好是在线)XML验证器?

2 个答案:

答案 0 :(得分:0)

我发现这可能是bug in IntelliJ,因为我可以使用xmllint验证这一点(我需要添加mix)。

也许一个解决方法可以是定义复杂类型foo:bar扩展bar:bar - 这种方式似乎对IntelliJ有效。

答案 1 :(得分:0)

xs:import是必要的。您可以尝试在xs:import上添加schemaLocation属性 - 它是可选的,但是某些XML处理器没有用于将命名空间解析为模式位置的默认实体解析器。