3

XSDに問題があり、コードをXSDバリデーターに入力すると次のエラーが発生します: "no-xmlns:属性宣言の{name}は'xmlns'と一致してはなりません。"

これが私のXMLです:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Test">
        <xs:complexType>
            <xs:attribute name="xmlns" type="xs:string" use="required"/>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="unbounded">
                    <xs:element name="Screens" minOccurs="0" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="Screen" minOccurs="1" maxOccurs="unbounded">
                                    <xs:complexType>
                                        <xs:attribute name="name" type="xs:string" use="required"/>
                                        <xs:attribute name="package" type="xs:string" use="required"/>
                                        <xs:attribute name="class" type="xs:string" use="required"/>
                                        <xs:sequence>
                                            <xs:element name="ScreenData" minOccurs="1" maxOccurs="unbounded">
                                                <xs:complexType>
                                                    <xs:attribute name="step" type="xs:int" use="required"/>
                                                    <xs:attribute name="description" type="xs:string" use="required"/>
                                                    <xs:sequence>
                                                        <xs:element name="element" minOccurs="1" maxOccurs="unbounded">
                                                            <xs:complexType>
                                                                <xs:attribute name="name" type="xs:string" use="required"/>
                                                                <xs:attribute name="type" type="xs:string" use="required"/>
                                                                <xs:attribute name="value" type="xs:string" use="required"/>
                                                            </xs:complexType>
                                                        </xs:element>
                                                    </xs:sequence>
                                                </xs:complexType>
                                            </xs:element>
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="DBSession" minOccurs="0" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:attribute name="use_test.properties" type="xs:boolean" use="required"/>
                            <xs:attribute name="use_dbserver" type="xs:string" use="required"/>
                            <xs:attribute name="use_db" type="xs:string" use="required"/>
                            <xs:sequence>
                                <xs:element name="login" minOccurs="1" maxOccurs="1">
                                    <xs:complexType>
                                        <xs:attribute name="server" type="xs:string" use="required"/>
                                        <xs:attribute name="database" type="xs:string" use="required"/>
                                        <xs:attribute name="username" type="xs:string" use="required"/>
                                        <xs:attribute name="password" type="xs:string" use="required"/>
                                        <xs:sequence>
                                            <xs:element name="Queries" minOccurs="1" maxOccurs="1">
                                                <xs:complexType>
                                                    <xs:sequence>
                                                        <xs:attribute name="query" type="xs:string" use="required"/>
                                                        <xs:attribute name="expectedResults" type="xs:string" use="required"/>
                                                    </xs:sequence>
                                                </xs:complexType>
                                            </xs:element>
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="CLISession" minOccurs="0" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:attribute name="use_test.properties" type="xs:boolean" use="required"/>
                            <xs:sequence>
                                <xs:element name="login" minOccurs="1" maxOccurs="unbounded">
                                    <xs:complexType>
                                        <xs:attribute name="host" type="xs:string" use="required"/>
                                        <xs:attribute name="password" type="xs:string" use="required"/>
                                        <xs:attribute name="username" type="xs:string" use="required"/>
                                        <xs:sequence>
                                            <xs:element name="Commands" minOccurs="1" maxOccurs="1">
                                                <xs:complexType>
                                                    <xs:sequence>
                                                        <xs:element name="Command" minOccurs="1" maxOccurs="unbounded">
                                                            <xs:complexType>
                                                                <xs:attribute name="exe" type="xs:string" use="required"/>
                                                                <xs:attribute name="args" type="xs:string" use="required"/>
                                                                <xs:attribute name="wait" type="xs:int" use="required"/>
                                                                <xs:attribute name="expectedOutput" type="xs:string" use="required"/>
                                                                <xs:attribute name="toVariable" type="xs:string" use="required"/>
                                                            </xs:complexType>
                                                        </xs:element>
                                                    </xs:sequence>
                                                </xs:complexType>
                                            </xs:element>
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

スキーマの2行目のコードと関係があると思います。この行は、私のXMLドキュメントの次の行に関連しています。

<Test xmlns="http://MyURL">
4

1 に答える 1

5

問題はスキーマにあります。次の行を削除するだけです。

<xs:attribute name="xmlns" type="xs:string" use="required"/>

XMLドキュメントは正しいです。http://MyURLドキュメントでは、その値属性を割り当てることにより、URIをデフォルトの名前空間にバインドすることを選択しましたxmlnsXML 1.0の名前空間で説明されているように、これはまったく問題ありません。

名前空間は特別です。XMLスキーマパート1の最後の段落を参照してください。3.2.1属性の詳細

[XML-Infoset]は、xmlnsやxmlns:xslなどの名前の属性を通常の属性と区別し、[名前空間属性]として識別します。したがって、スキーマにそのような名前空間宣言に対応する属性宣言を含めることは不要であり、実際には不可能です。xmlnsNot Allowed(§3.2.6)を参照してください。この仕様では、名前空間宣言のデフォルト値を提供する手段は提供されていません。

作成したスキーマのすべてのコンテンツは、宣言した名前空間にあるため、ドキュメント作成者をそのように正確に宣言する必要はありません。上位レベルの要素で名前空間を宣言できます。または、別の名前空間プレフィックスにバインドすることもできます。

ちなみに、 XML Schema PrimertargetNamespaceで説明されているように、最上位schemaの要素を設定して、ドキュメントでスキーマの名前空間を宣言する必要があります。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://MyURL">
于 2012-08-16T21:20:35.003 に答える