如何修复此XML模式?

问题描述

我正在尝试在具有IntelliJ Ultimate的XML模式上使用JAXB。这是IndoorGML网站上的架构。但是,IDE表示它有问题。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  targetNamespace="http://www.opengis.net/indoorgml/1.0/core"
       xmlns:gml="http://www.opengis.net/gml/3.2" elementFormDefault="qualified" version="1.0.3">
<xs:annotation>
    <xs:documentation>
        IndoorGML is an OGC Standard. copyright (c) 2014,2015,2016,2018 Open Geospatial Consortium. To obtain additional rights of use,visit http://www.opengeospatial.org/legal/.
    </xs:documentation>
</xs:annotation>
<!--
 ======================================================================
-->
<xs:import namespace="http://www.opengis.net/gml/3.2" schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
<!--
 ======================================================================
-->
<xs:element name="IndoorFeatures" type="IndoorFeaturesType" substitutionGroup="gml:AbstractFeature"/>
<!--

</xs:schema>

substitutionGroup =“ gml:AbstractFeature” 的最后一行中,IDE用红色标记 AbstractFeature 显示消息“无法解析符号'gml:AbstractFeature'”。有人知道为什么吗? (XSD文件在结束模式标签之前有更多标签,我没有在此处加上标签,因为它有几百行。)

提前谢谢! :)

解决方法

报告的错误与此参考有关:substitutionGroup="gml:AbstractFeature" ...正在尝试使“ IndoorFeatures”成为另一个名称空间中定义的替换组的成员。

但是哪个命名空间?由前缀“ gml”标识的名称空间。那是哪个名称空间?答案在这里:xmlns:gml="http://www.opengis.net/gml/3.2"

因此,我们需要找出将该名称空间导入此XSD的位置。在这里完成:

<xs:import namespace="http://www.opengis.net/gml/3.2" schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>

我认为错误的原因现在已经很明显了,但是我将继续并回答。定义该名称空间的XSD在此标识: schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"

很显然,您的应用程序无法解析该URL或不允许访问该URL。

如何解决?

如果您可以获得XSD的副本,则可以

a)将其保存到本地文件夹,然后将schemaLocation属性更改为指向本地文件夹,或者

b)定义一个架构解析器,将URL映射到您的文件夹位置。

不确定IntelliJ是否支持架构解析器,但我希望它支持。