0

まず、ご褒美をいただきありがとうございます。私はXMLスキーマの初心者です。

XIncludeを使用して、いくつかのインクルードで分割されたXMLファイルを作成しました。含まれている各XMLファイルはスタンドアロンで検証できるため、この方法を他の方法よりも優先して選択しました。

ローカルファイルで作業しているため、名前空間を定義せず、xsi:noNamespaceSchemaLocation属性を使用してxsdファイルを参照します。

parameters.xml

<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="parameters.xsd">
    <xi:include href="./Transducers/transducers.xml" parse="xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</Root>

parameters.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:include schemaLocation="./Transducers/transducers.xsd"/>
    <xs:element name="Root">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Transducers" minOccurs="1" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

トランスデューサー/transducer.xml

<?xml version="1.0" encoding="UTF-8"?>
<Transducers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./transducers.xsd">
...
</Transducers>

トランスデューサー.xsdファイルは、問題に付加価値を与えないため、配置しません。トランスデューサー.xmlが彼のスキーマに対して有効であることを考慮に入れてください。

したがって、parameters.xmlを検証しようとすると、次のエラーが発生します。

'noNamespaceSchemaLocation'属性は、ターゲット名前空間がすでに検証に使用されているスキーマを参照します。

わかりやすいエラーですが、自分の状況では回避できません。

その場合の解決策は何でしょうか。ありがとう。

4

1 に答える 1

1

トリッキーです。私のアプローチは、xsi:schemaLocation を使用しないことです。とにかく、私はいつもそれが偽物だと思っていました.XMLファイルが有効であると信じていないのなら、XMLファイルがそのスキーマを見つける場所を教えてくれると信じるべきでしょうか?

于 2012-12-07T14:04:44.263 に答える