web-dev-qa-db-ja.com

XSDの使用中にxmllint検証エラー「DTDが見つかりません」

基本的なXSD、つまりXMLスキーマスキーマの開発中に、xmllintを使用して作業を確認しようとしています。しかし、それは私にエラーを与えています

検証に失敗しました:DTDが見つかりません。

私は何を間違えていますか?

私のxmllintコマンド:

xmllint --noout --valid --schema simple.xsd lucas-basic.xml
lucas-basic.xml:5: validity error : Validation failed: no DTD found !
        >
        ^
lucas-basic.xml validates

XSDファイルのテスト:

<?xml version = "1.0" encoding = "UTF-8"?>
<!--Generated by XML Authority. Conforms to w3c http://www.w3.org/2001/XMLSchema-->
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
        <xsd:element name = "vehicles">
                <xsd:complexType>
                        <xsd:sequence>
                                <xsd:element name = "nickname" type = "xsd:string" maxOccurs = "unbounded"/>
                        </xsd:sequence>
                </xsd:complexType>
        </xsd:element>

テストXMLファイル:

<?xml version="1.0"?>
<vehicles
                xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation = "http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd"
        >
        <nickname>Bog Hopper</nickname>
        <nickname>Wee Beastie</nickname>
        <nickname>Count Zero</nickname>
</vehicles>

Xsi:noNamespaceSchemaLocationのURLは、上記のXSDを返します。また、xsdファイルをダウンロードし、追加の手段として現在のディレクトリに配置しましたが、これは何も変更していないようです。

15
Tristan

--validは、DTD用であり、XSD用ではありません。

これは代わりにあなたのために働くでしょう:

xmllint --noout --schema http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd lucas-basic.xml
19
kjhughes

OPの試みと受け入れられた答えは、XSDをサンプルファイルに対してテストすることでXSDを「検証」します。 XSD仕様に対してXSDファイルを検証するには、次のコマンドを使用できます。

xmllint --noout --schema http://www.w3.org/2001/XMLSchema.xsd my_schema.xsd

... v1.1の場合、スキーマはhttps://www.w3.org/2009/XMLSchema/XMLSchema.xsd

注:v1.0スキーマの上部には規範的構造スキーマに関するいくつかの資格があるため、別のファイルを実際に使用する必要がある可能性がありますが、これはうまくいきました。

0
claytond