1

XML スキーマ処理のすべての (複雑な) ルールに従うことを理解しようとしましたが、それでも理解できません! 私の問題はこれです:

  • 私は XSD を持っています。
  • 要素にプレフィックスを付けに、この XSD に基づいて XML ファイルを作成して検証したいと考えています。
  • jEdit や Eclipse などのエディタで、XSD に基づいてオートコンプリートを処理できるようにしてほしい。

ただし、すべての検証エディターで同じエラー メッセージが表示されます。

以下は、XSD の簡素化されたバージョンです。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.megadix.org/standards/temp.xsd" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jfcm="http://www.megadix.org/standards/temp.xsd"
elementFormDefault="unqualified" attributeFormDefault="unqualified">

<xsd:complexType name="MapsType">
    <xsd:sequence>
        <xsd:element name="map" minOccurs="0" maxOccurs="unbounded">
            <xsd:complexType>
                <xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
                <xsd:sequence>
                    <xsd:element name="description" type="xsd:string" minOccurs="0" maxOccurs="1"></xsd:element>
                    <xsd:element name="concepts" minOccurs="0" maxOccurs="1">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="concept" minOccurs="0" maxOccurs="unbounded">
                                    <xsd:complexType>
                                        <xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
                                    </xsd:complexType>
                                </xsd:element>
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

<xsd:element name="maps" type="jfcm:MapsType"></xsd:element>

プレフィックスを使用すると、ファイルは正しく検証され、オートコンプリートされます。

<?xml version="1.0" encoding="UTF-8"?>
<jfcm:maps xmlns:jfcm="http://www.megadix.org/standards/temp.xsd">
<map name="Test Map">
    <concepts>
        <concept name="c1" />
        <concept name="c2" />
        <concept name="c3" />
    </concepts>
</map>

しかし、それを削除すると:

<?xml version="1.0" encoding="UTF-8"?>
<maps xmlns:jfcm="http://www.megadix.org/standards/temp.xsd">
<map name="Test Map">
    <concepts>
        <concept name="c1" />
        <concept name="c2" />
        <concept name="c3" />
    </concepts>
</map>

次のエラー メッセージが表示されます。

要素 'map' で始まる無効なコンテンツが見つかりました。「{map}」のいずれかが必要です。

助言がありますか?

4

3 に答える 3

3

要素のフォームに「非修飾」を使用しているため、これが正しい方法です。

<?xml version="1.0" encoding="UTF-8"?>
<maps xmlns="http://www.megadix.org/standards/temp.xsd">
  <map name="Test Map" xmlns="">
    <concepts>
      <concept name="c1" />
      <concept name="c2" />
      <concept name="c3" />
    </concepts>
  </map>
</maps>

名前空間ですべての要素を「共有」する場合は、elementFormDefault="qualified" を定義する必要があります。余談ですが、多くの XSD 設計者はこれを良いアドバイスと考えています。

于 2012-04-12T14:36:34.643 に答える
0

ここから、検証に関する名前空間とその関係について多くを理解できます。

XML スキーマの検証

于 2012-04-12T14:38:14.130 に答える