ドキュメントの文法制約(DTDまたはXMLスキーマ)は検出されませんでした


202

私はこのdtdを持っています:http : //fast-code.sourceforge.net/template.dtd しかし、XMLに含めると、次の警告が表示されます。ドキュメントに対して文法制約(DTDまたはXMLスキーマ)が検出されません。xmlは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE templates PUBLIC "//UNKNOWN/" "http://fast-code.sourceforge.net/template.dtd">

<templates>
<template type="INSTANCE_OF_CLASS">
    <description>Used to Create instance of class</description>
    <variation>asasa</variation>
    <variation-field>asasa</variation-field>
    <class-pattern>asasa</class-pattern>
    <getter-setter>setter</getter-setter>
    <allowed-file-extensions>java</allowed-file-extensions>
    <number-required-classes>1</number-required-classes>
    <allow-multiple-variation>false</allow-multiple-variation>
    <template-body>
        <![CDATA[
            // Creating new instance of ${class_name}
            final ${class_name} ${instance} = new ${class_name}();
            #foreach ($field in ${fields})
                ${instance}.${field.setter}(${field.value});
            #end
        ]]>
    </template-body>
</template>
</templates>

編集:私はxmlを変更しました、私は今このエラーを受けています:

要素タイプ「テンプレート」のコンテンツは、「(説明、バリエーション?、バリエーションフィールド?、複数バリエーション?、クラスパターン?、ゲッターセッター?、許可ファイル拡張子?、番号必須? classes?、template-body) "。


@ジョン-ええ、これは日食です。
fastcodejava 2010


8
私はこの設定をしません| XML | XMLファイル| これはエラーをマスク/非表示にするだけなので、Eclipseでの検証はエラーを解決しません。Eclipseのみを使用してAndroidアプリケーションを構築する場合は、この「解決策」が受け入れられます。しかし、Eclipseを使用して他のJavaプロジェクト(JSFなど)をビルドする場合、XML検証が「オフ」になっていると、これらのプロジェクトが機能しなくなります。ので注意してください。実際のソリューションは、Oracle、Google、IBMが更新されたDTDとスキーマでソフトウェアを更新することです。
ChuongPham 2014年

Androidアプリでの作業用に1つのインストールを維持し、Java Web開発作業を行うための別のインストールを維持すると、Eclipseがはるかに速くなり、クラッシュが発生しにくくなります。だから私はちょうど私の日食のアンドロイドADTインストールのために上記の解決策を使用したいです。
デイモン・スミス

回答:


409

私の場合<!DOCTYPE xml><?xml ... >タグの後にを追加するだけでこの迷惑な警告を解決しました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

10
同意します。これは受け入れられる答えになるはずです。警告を「非表示」にすることは、正確に「解決」することではありません。
シルバー

31
2行目の「<!DOCTYPE xml>」、「xml」は、ドキュメントのルート要素の名前と一致する必要があります。
子犬

反対票:問題は、どのように警告を排除するかではなく、Eclipseに質問者が持っていたdtdで検証を実行させる方法でした。
Periata Breatta 2016年

動作しません。Eclipse 4.10、日付2019-05-31。警告が消えることもありますが、Eclipseを再起動すると再び警告が表示されます。
マイクげっ歯類

2つのこと:1. doctype宣言は、xmlドキュメントのルートノード名と一致する必要があります。2.プロジェクトエクスプローラーメニューで右クリック/検証を使用して明示的な検証を実行するまで、警告が続く場合があります。
mvreijn

162

これはEclipse 3.7.1で機能しました。[設定]ウィンドウに移動し、[XML]-> [XMLファイル]-> [検証]をクリックします。次に、右側の設定パネルの[ファイルの検証]セクションで、[文法が指定されていません]設定のドロップダウンボックスで[無視]を選択します。警告を表示しないようにするには、ファイルを閉じてから再度開く必要がある場合があります。

(私はこの質問が古いことを知っていますが、警告で検索したときに最初に見つかったので、他の検索者のためにここに回答を投稿します。)


1
「手動」ボックスと「ビルド」ボックスがチェックされていることを確認してから、プロジェクトを右クリックして「検証」を選択し、警告が表示されないようにして手動検証を実行する必要がありました。バリデーターがめちゃくちゃになるEclipseのバグがあるようです。あなたは必要があり、少なくともあなたはそれがビルド時に起こるしたくない場合でも、手動で検証作業を持つことができます。そして、手動検証を行った後で警告を簡単にクリアできるはずです。それまでは、これが解決策です。
crowmagnumb

1
警告はインテリセンスを壊し、私はかなりの時間を費やして理由が何であるかを理解しました。これで解決しました:)
シェカール2013年

プロジェクトごとにこれを行うこともできます。これにより、.projectファイルが変更され、ソース管理でチェックインして、同僚を支援できます。[設定]ウィンドウに移動する代わりに、プロジェクトを右クリックして[プロパティ]に移動し、そこから上記の手順に従います。
Stuart Leyland-Cole

2
反対票。...質問は警告を非表示にされていないか尋ねたが、それを解決する方法(すなわちメイク日食は、文書を正しく検証)
Periata Breatta

34

回答:

以下のDTDの各部分に関するコメント。詳細については、公式の仕様を参照してください。

  <!
  DOCTYPE ----------------------------------------- correct
  templates --------------------------------------- correct  Name matches root element.
  PUBLIC ------------------------------------------ correct  Accessing external subset via URL.
  "//UNKNOWN/" ------------------------------------ invalid? Seems useless, wrong, out-of-place.
                                                             Safely replaceable by DTD URL in next line.
  "http://fast-code.sourceforge.net/template.dtd" - invalid  URL is currently broken.
  >

簡単な説明:

非常に基本的なDTDは、次の2行目のようになります。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE nameOfYourRootElement>
<nameOfYourRootElement>
</nameOfYourRootElement>

詳細な説明:

DTDは、合意されたデータ形式を確立し、そのようなデータの受信を検証するのに役立ちます。これらは、以下を含むXML文書の構造を定義します。

例えば

<!DOCTYPE nameOfYourRootElement
[
<!ELEMENT nameOfYourRootElement (nameOfChildElement1,nameOfChildElement2)>
<!ELEMENT nameOfChildElement1 (#PCDATA)>
<!ELEMENT nameOfChildElement2 (#PCDATA)>
<!ENTITY nbsp "&#xA0;"> 
<!ENTITY author "Your Author Name">
]>

上記の行の意味...
行1)「nameOfYourRootElement」として定義されたルート要素
行2)要素定義の開始
行3)「nameOfYourRootElement1」および「nameOfYourRootElement2」として定義されたルート要素の子
行4)データとして定義された子要素タイプ#PCDATA
Line 5)データ型として定義されている子要素#PCDATA
Line 6)ドキュメントがXMLパーサーによって解析されるときの&nbsp;toのインスタンスを展開 行7)XMLパーサーによってドキュメントが解析されるときのtoのインスタンスを展開 行8)定義の終わり &#xA0;
&author;Your Author Name


21

実際のソリューション:

<!DOCTYPE something>問題のある各XMLの最初に追加し、

xmlタグの後 <?xml version="1.0" encoding="utf-8"?>

あなたはdoctypeのために何でも書くことができますが、基本的には私が理解していることからマニフェスト、アクティビティなどであるはずです


動作しません。Eclipse 4.10、日付2019-05-31。警告が消えることもありますが、Eclipseを再起動すると再び警告が表示されます。
マイクげっ歯類

@mikerodentプロジェクトエクスプローラーメニューで右クリック/検証を使用して明示的な検証を実行するまで、警告が続く場合があります
mvreijn

11

スキーマをXMLカタログに追加しようとしましたか?

「ドキュメントの文法制約(dtdまたはxmlスキーマ)が検出されない」ことを回避するために日食で。xsdスキーマファイルをxmlカタログに追加するために使用します

「ウィンドウ\設定\ xml \ xmlカタログ\ユーザー指定のエントリ」。

右側の「追加」ボタンをクリックします。


例:

<?xml version="1.0" encoding="UTF-8"?>
<HolidayRequest xmlns="http://mycompany.com/hr/schemas">
    <Holiday>
        <StartDate>2006-07-03</StartDate>
        <EndDate>2006-07-07</EndDate>
    </Holiday>
    <Employee>
        <Number>42</Number>
        <FirstName>Arjen</FirstName>
        <LastName>Poutsma</LastName>
    </Employee>
</HolidayRequest>

このxmlからxsdを生成して保存しました:/home/my_user/xsd/my_xsd.xsd

場所として:/home/my_user/xsd/my_xsd.xsd

キータイプとして:名前空間名

キーとして:http : //mycompany.com/hr/schemas


xmlファイルを閉じて再度開き、スキーマに違反するようにいくつかの変更を行います。通知されます。


これは私にとってはうまくいきましたが、この変更により。私は.wadlファイル(w3.org/Submission/wadlを参照)とその例を使用して編集していました。xmlns:xsi = " w3.org/2001/XMLSchema-instance " xmlns:xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.netを使用するだけでこれを機能させることができました/ 2009/02 "およびその提出ショーの例としてxsi:schemaLocation =" wadl.dev.java.net/2009/02 wadl.xsd "ではありません。wadl.dev.java.net/2009/02
djb

10

DOCTYPEタグを追加...

この場合:

<!DOCTYPE xml>

後に追加:

<?xml version="1.0" encoding="UTF-8"?>

そう:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

Eclipse JEE v.2018-12で私のために働いた。Antのbuild.xmlにこれら2行を追加すると、警告は消えました
Eugene Gr。Philippov

7

新しいクリーンな方法は、次のようにxmlを記述することです。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rootElement>

<rootElement>
 ....
</rootElement>

上記はEclipse Juno +で動作します


この警告は、プロジェクトエクスプローラーメニューで右クリック/検証を使用して明示的な検証を実行するまで続く場合があります。
mvreijn

6

私にとってそれは文字エンコーディングとWindowsで日食を実行しているUNIXファイルモードの問題でした:

完全なコードをマークし、切り取って貼り付けただけです(つまり、CtrlA-CtrlX-CtrlV)。すべて問題はありませんでした-「文法の制約はありません...」という警告はもうありません


6

警告メッセージに示された提案を理解してみてください。それはいつか役立つでしょう。

私も同じ問題を抱えていました、いくつかの調査を行った後、解決策を見つけ、最初に以下の行を追加することで修正しました

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

私の場合、他の問題につながります。最初のリンクが壊れている(見つかりません)という、元の原因を理解することで解決された別の問題に再び変わった提案を読んで私は解決しました。以下は、問題を完全に解決するために何が行われたかを説明する段階的な画像です。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください


3

「文法上の制約がありません...」という警告が表示される理由はわかりませんが、DOCTYPE宣言を完全に削除することで、Eclipseでそれを誘発できます。宣言を元に戻して再度検証すると、次のエラーメッセージが表示されます。

要素タイプ「テンプレート」のコンテンツは、「(description +、variation?、variation-field?、allow-multiple-variation?、class-pattern?、getter-setter?、allowed-file-extensions?、template-body +)と一致する必要があります。

そして、それは正しいと思います(「number-required-classes」要素は許可されていません)。


括弧は、順序が重要であることを示しています。ドキュメントのclass-pattern要素の後にallow-multiple-variation要素があり、これは無効です。別の質問をする前に、質問を変更するか、既存の回答を受け入れる必要があります。
nitind、2011年

3

私はこれが古いことを知っていますが、同じ問題を解決し、春のドキュメントで解決策を見つけました、次のxml構成で問題が解決されました。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx 

<!-- THIS IS THE LINE THAT SOLVE MY PROBLEM -->
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 

http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

このフォーラムトピックでsugestedとして上記の行を配置する前に、同じ警告メッセージが表示され、これを配置します...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>

次の警告メッセージが表示されます...

The content of element type "template" must match "
(description,variation?,variation-field?,allow- multiple-variation?,class-
pattern?,getter-setter?,allowed-file-extensions?,number-required- 
classes?,template-body)".

したがって、私のxml構成のサジェスト行を使用してみてください。


2

これは、Eclipseで検証をオフにしたことが原因である可能性があります。


1

この問題はEclipse 3.5.2で解決されました。2つの完全に同一のレイアウトで、そのうちの1つに警告がありました。すべてのタブを閉じ、再び開いたときに警告が消えていました。


1
  1. コード全体をメモ帳にコピーします。
  2. ファイルを任意の名前で一時的に保存します[ファイルの保存中に「エンコーディング」= UTF-8(またはそれ以上)を使用します]。
  3. ファイルを閉じます。
  4. もう一度開きます。
  5. コードにコピーして貼り付けます。

エラーがなくなっている必要があります。


1

xsi:noNamespaceSchemaLocationで相対パスを使用してローカルxsdファイルを提供しました(インスタンスxmlで名前空間を使用できなかったため)。

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

検証は機能し、警告は修正されます(無視されません)。

https://www.w3schools.com/xml/schema_example.asp


1

私もweb.xmlファイルを使用したeclipseで同じ問題があり、
「このドキュメントで参照されている文法の制約はありません」と示されました。

しかし
、xmlタグの後にタグを追加することで解決できます。<?xml version = "1.0" encoding = "UTF-8"?>


私のためにうまく
いき

0

この問題の解決策は次のとおりです。


ステップ1:プロジェクトを右クリックしてプロパティに移動

ステップ2:「ライブラリ」に移動し、プロジェクトの「JREシステムライブラリ」を削除します

手順3:[ライブラリを追加]をクリックします-> [JREシステムライブラリ]-> [ワークスペースのデフォルトJRE]を選択します

ステップ3:「注文とエクスポート」に移動し、新しく追加された「JREシステムライブラリ」をマークします。

ステップ4:プロジェクトを更新してクリーンにする

ユーレカ!それは働いています:)


私はあなたの解決策を使ってみました。しかし、残念ながら、プロジェクトを更新してクリーンアップすると、新しく追加された「JREシステムライブラリ」が「ライブラリ」セクションと「注文とエクスポート」セクションから消えます。助けてください。
VikramV、2014

この回答のほとんどは、ステップ4の「プロジェクトのクリーンアップ」を除いて、問題とは無関係です。
Aaron Digulla

0

私が解決策であるとわかったのは、設定をいじくり回す前に試してみるべき非常に単純なものでした。私の場合、ベースタグとして「リソース」が含まれている文字列ファイルにこの問題がありました...私がしたのは、タグを上部と下部から削除し、プロジェクトをクリーンアップしてファイルを保存し、タグを再挿入することだけでした。問題は解消され、警告は出されませんでした。それは本当であると単純に聞こえるかもしれませんが、ちょっと、時々それは問題を解決する最も簡単なものです。乾杯


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.