【问题标题】:How can I reference XML ids from another XML using XInclude in a way that Webstorm does not mark it as an error?如何使用 XInclude 从另一个 XML 引用 XML id,Webstorm 不会将其标记为错误?
【发布时间】:2012-06-04 17:30:01
【问题描述】:

我有以下 XML 文件:

主文件

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<template_structure xmlns:xi="http://www.w3.org/2001/XInclude"    
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                    xsi:noNamespaceSchemaLocation="template_structure_validator.xsd">
    <xi:include href="parameter_definitions.xml" parse="xml"/>
    <parameters>
        <parameter idref="first_param" value="10"/>
    </parameters>
</template_structure>

parameter_definitions.xml

<parameter_definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xsi:noNamespaceSchemaLocation="template_structure_validator.xsd">
    <def_parameter id="first_param" advanced="true">
        <description>
            first parameter
        </description>
    </def_parameter>
    <def_parameter id="second_param" advanced="true">
        <description>
            second parameter
        </description>
    </def_parameter>
</parameter_definitions>

template_structure_validator.xsd:

<xs:element name="parameter_definitions">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="def_parameter" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="def_parameter">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="description"/>
        </xs:sequence>
        <xs:attribute name="id" use="required" type="xs:ID"/>
        <xs:attribute name="advanced" use="required" type="xs:boolean"/>
    </xs:complexType>
</xs:element>
<xs:element name="parameters">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="parameter"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="parameter">
    <xs:complexType>
        <xs:attribute name="idref" use="required" type="xs:IDREF"/>
                    <xs:attribute name="value" use="required" type="xs:string"/>
    </xs:complexType>
</xs:element>
<xs:element name="js_template_structure">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="parameter_definitions"/>
            <xs:element ref="parameters"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

当我使用 Webstorm 加载它们时,我在主文件中收到错误 "first_param" is unresolved。我该如何解决?

【问题讨论】:

    标签: xml xsd webstorm xinclude idref


    【解决方案1】:

    IDREF 要求为属性指定的值也在文档的其他地方指定为 ID 属性值。 IDREF 值必须作为 ID 值出现在别处:

     <xs:attribute name="id" type="xs:ID" use="required"/>
     <!--...-->
     <xs:attribute name="idref" use="required" type="xs:IDREF"/>
    

    【讨论】:

    • 您可以在上面的 template_structure_validator.xsd 中看到我将 id-attribute 值定义为 的属性
    • 看起来 id 和 idref 来源的 id 必须是 same document
    猜你喜欢
    • 2015-02-14
    • 2021-06-07
    • 1970-01-01
    • 2014-09-05
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多