如何在Netbeans 8.2中使用XSD 1.1?

Netbeans似乎拒绝了XSD 1.1支持的一些XSD标签,例如“assert”:

cvc-complex-type.2.4.a:从元素'xs:assert'中找到的内容无效 . 其中一个值'{“http://www.w3.org/2001/XMLSchema":attribute,"http://www.w3.org/2001/XMLSchema":attributeGroup,"http://www.w3 .org / 2001 / XMLSchema“:anyAttribute}”是预期的 . [205]

我试图使用一些these examples但没有成功 . 我该怎么做才能解决我的问题?

据我所知,我无需在XSD架构中指定我使用XSD 1.1的一些功能:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

回答(1)

2 years ago

它完全取决于"use XSD 1.1 in NetBeans 8.2"的含义,但我假设您要使用NetBeans中的上下文菜单项 Validate XML 来对应具有XSD 1.1功能的某些 *.xsd 文件(例如 assert ) . 如果我这样做,我会看到您报告的相同"cvc-complex-type.2.4.a : Invalid content found..."错误 .

无法自定义 Validate XML 命令使用的验证器,显然它使用JDK的 javax.xml API进行验证 . NetBeans 8.2使用Java 8,但even with JDK 9 there is no way to validate XSD 1.1 features

Java 9. ...重大新闻是最终我们更新了Xerces的内部端口 . 甲骨文(以及他们之前的Sun)在如此长时间忽视这一点时非常松懈:为了善良,Java使用Xerces 2.7.n已经11年了 . 新端口相当于Apache Xerces 2.11.0 . (注意:XSD仍然只有1.0,XSD 1.1更新尚未到位,但这可能反映了Apache Xerces缓慢改变官方的速度 . )

使用Apache NetBeans 9.0 RC1时会出现同样的问题,因此在下列情况之前,此问题可能无法解决:

  • NetBeans使用JDK,它使用支持XSD 1.1功能验证的Xerces版本 .

  • NetBeans使用不同的方法进行XSD验证 .

我也没有看到任何有用的NetBeans插件 . 当然,仍有第三方工具和(可能)Maven项目的配置可能有所帮助,但我没有看到只使用NetBeans的解决方案 .