web-dev-qa-db-ja.com

文書に対して文法制約(DTDまたはXMLスキーマ)が検出されませんでした

私はこの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>

EDIT:xmlを変更しました。このエラーが発生しました。

要素タイプ "template"の内容は "一致する必要があります"(説明、バリエーション、バリエーションフィールド、許可マルチプルバリエーション、クラスパターン、getter-setter、許可ファイル拡張子、number-required-クラス?、template-body) ").

179
fastcodejava

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

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

Eclipse 3.7.1でこれはうまくいきました。Preferencesウィンドウに行き、次にXML - > XML Files - > Validationの順に選択します。次に、右側の設定パネルの「ファイルの検証」セクションで、「文法が指定されていません」設定のドロップダウンボックスで「無視」を選択します。ファイルを閉じてから再度開くと、警告が消えます。

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

161
Marc Bernstein

答え:

下記のあなたの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として定義されている子要素
行5)子要素。データ型#PCDATAとして定義されています
6行目)文書がXMLパーサーによって解析されるときに&nbsp;のインスタンスを&#xA0;に拡張する
7行目)文書がXMLパーサーによって解析されるときに&author;のインスタンスをYour Author Nameに拡張する
8行目)定義の終わり

31
Pup

本当の解決策

問題のある各XMLの先頭に<!DOCTYPE something>を追加します。

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

あなたはDoctypeのために何でも書くことができますが、基本的にそれは私が理解していることから明らかにされている、活動などであるべきです

20
Amir.F

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

eclipseでは、「文書に対して文法上の制約(dtdまたはxmlスキーマ)が検出されない」という問題を回避できます。私は下のxmlカタログにxsdスキーマファイルを追加するために使用します

#〜msgstr "Window\preferences\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ファイルを閉じてから再度開き、スキーマに違反するように変更を加えてください。通知が表示されるはずです。

11
user1374968

新しいきれいな方法は、あなたのxmlを次のように書くことです。

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

<rootElement>
 ....
</rootElement>

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

6
Damilola

私にとっては、Eclipseを実行している文字エンコーディングunix filemodeの問題でした。 Windowsの場合

完全なコードをマークし、切り取って元に戻す(つまり、CtrlA-CtrlX-CtrlV)、すべて問題なかった - 文法的な制約はこれ以上ない... "警告

6
user3022856

DOCTYPEタグを追加...

この場合:

<!DOCTYPE xml>

後に追加:

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

そう:

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

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

要素型 "template"の内容は ""(description +、variation?、variation-field?、allow-multiple-variation?、class-pattern?、getter-setter?、allowed-file-extensions?、template-body +)と一致する必要があります。 。

そしてそれは正しいと思います(私は信じています( "number-required-classes"要素は許されません)。

3
mzjn

私はこれが古いことを知っていますが、私は同じ問題を投げかけていて、春の文書で解決策を見つけました、以下の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">

このフォーラムトピックで提案されているように上記の行を置く前に、私は同じ警告メッセージを持っていて、これを配置しています...

<?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設定の推奨行を使うようにしてください。

3
Wesley Silva

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

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

エラーがなくなったはずです。

1
sifr_dot_in

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
Max Hohenegger

私もweb.xmlファイルを使用してEclipseで同じ問題を抱えていた
これは、「この文書では文法上の制約が参照されていない」ということを示していました。

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

1

Eclipse 3.5.2でこの問題を解決しました。そのうちの1つが警告を持っていた2つの全く同一のレイアウト。すべてのタブを閉じ、再度開くと警告が消えました。

1
delformo

これはこの問題のための実用的な解決策です:


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

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

ステップ3:「ライブラリの追加」 - >「JREシステムライブラリ」をクリック - >「ワークスペースデフォルトJRE」を選択

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

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

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

0
user2372633

私が解決策であることがわかったのはあなたが好みをいじる前に試すべきだと思う非常に単純なものでした。私の場合、この問題は、ベースタグとして "resources"として持っているstringsファイルにありました。それ以来、問題は解消され、私に警告を出すことは決してありませんでした。それは本当のように単純に聞こえるかもしれませんがねえ、時にはそれは問題を解決するための最も簡単なものです。乾杯

0
Francesco D.M.

問題ビューの警告を削除しました。今まで戻ってこなかった。

0
jantje