문서에 대한 문법 제한 조건 (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을 변경했는데 지금이 오류가 발생합니다.

요소 유형 "템플릿"의 내용은 "(설명, 변형?, 변형 필드?, 허용 다변량?, 클래스 패턴?, 게터 설정?, 허용 된 파일 확장명?, 숫자 필요)와 일치해야합니다. 클래스?, 서식 파일)).


@ 존-그래 이클립스입니다.
fastcodejava


8
환경 설정을 하지 않겠습니다 | XML | XML 파일 | Eclipse에서 유효성 검사 는 오류를 숨기거나 숨기므로 오류를 해결 하지 않습니다 . Eclipse 만 사용하여 Android 애플리케이션을 빌드하는 경우이 "솔루션"이 허용됩니다. 그러나 Eclipse를 사용하여 JSF 등의 다른 Java 프로젝트를 빌드하는 경우 XML 유효성 검사가 "끄기"상태이면 이러한 프로젝트가 중단됩니다. 그러니 조심해. 실제 솔루션은 Oracle, Google 및 IBM이 소프트웨어를 업데이트 된 DTD 및 스키마로 업데이트하는 것입니다.
ChuongPham

하나는 안드로이드 앱 작업을 위해 설치하고 Java 웹 개발 작업을 수행하기 위해 설치를 유지하면 일식이 훨씬 빠르며 충돌이 덜 발생한다는 것을 알았습니다. 따라서 Eclipse의 내 Android ADT 설치에만 위의 솔루션을 사용하게되어 기쁩니다.
데이먼 스미스

답변:


408

내 경우에는 단순히 태그 <!DOCTYPE xml>뒤에 after 를 추가 하여이 성가신 경고를 해결했습니다 <?xml ... >.

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

10
동의하다. 이것이 정답입니다. 경고를 "숨기는"것은 정확하게 "해결하는"것이 아닙니다.
실버

31
두 번째 줄인 "<! DOCTYPE xml>"에서 "xml"은 문서의 루트 요소 이름과 일치해야합니다 .
강아지

Downvote : 문제는 경고를 제거하는 방법이 아니라 질문자가 가지고있는 dtd에 대해 일식을 검증하는 방법이었습니다.
Periata Breatta

작동하지 않습니다. 이클립스 4.10, 날짜 2019-05-31. 때로는 경고가 사라지지만 Eclipse를 다시 시작하면 다시 경고가 나타납니다.
마이크 설치류

두 가지 : 1. doctype 선언은 xml 문서의 루트 노드 이름과 일치해야합니다. 2. 프로젝트 탐색기 메뉴에서 마우스 오른쪽 버튼을 클릭하고 확인을 통해 명시 적 유효성 검사를 수행 할 때까지 경고가 지속될 수 있습니다.
mvreijn

162

이것은 Eclipse 3.7.1에서 나를 위해 일했습니다 : 환경 설정 창으로 이동 한 다음 XML-> XML 파일-> 유효성 검사로 이동하십시오. 그런 다음 오른쪽에있는 환경 설정 패널의 파일 유효성 검증 섹션에서 "문법 지정되지 않음"환경 설정의 드롭 다운 상자에서 무시를 선택하십시오. 경고가 사라지도록 파일을 닫았다가 다시 열어야 할 수도 있습니다.

(이 질문은 오래되었다는 것을 알고 있지만 경고를 검색 할 때 처음 발견 한 것이므로 다른 검색자를 위해 여기에 답변을 게시하고 있습니다.)


1
"빌드"상자뿐만 아니라 "수동"상자가 선택되어 있는지 확인한 다음 프로젝트를 마우스 오른쪽 단추로 클릭하고 경고가 사라지도록 "확인"을 선택하여 수동 유효성 검사를 수행해야합니다. 이클립스에 유효성 검사기가 엉망이되는 버그가있는 것 같습니다. 빌드 타임에 원하지 않는 경우에도 최소한 수동 유효성 검사 작업을 수행 할 수 있어야 합니다. 그런 다음 수동 유효성 검사를 수행 한 후 경고를 쉽게 지울 수 있어야합니다. 그때까지 이것이 해결책입니다.
crowmagnumb

1
경고는 지능을 깨뜨 렸고 나는 그 이유가 무엇인지 알아 내기 위해 많은 시간을 보냈습니다. 이것은 해결했다 :)
Shekhar

또한 프로젝트 단위로이 작업을 수행하여 소스 제어를 확인하고 동료를 도울 수있는 .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는 다음 두 번째 줄과 같습니다.

<?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">
]>

위 줄의 의미 ...
Line 1) "nameOfYourRootElement"로 정의 된 루트 요소
Line 2) 요소 정의 시작
Line 3) "nameOfYourRootElement1"및 "nameOfYourRootElement2"로 정의 된 루트 요소 자식
Line 4) 데이터로 정의되는 하위 요소 입력 #PCDATA
데이터 유형으로 정의되어 5 호선) 아이 요소, #PCDATA
6 호선)의 경우 확장 &nbsp;에이 &#xA0;문서를 XML 파서에 의해 구문 분석 할 때
7 호선)의 경우 확장 &author;에이 Your Author Name문서를 XML 파서에 의해 구문 분석 할 때
정의의 라인 8) 끝


21

실제 솔루션 :

<!DOCTYPE something>문제가있는 각 XML의 시작 부분에 추가

xml 태그 뒤 <?xml version="1.0" encoding="utf-8"?>

당신은 doctype을 위해 무엇이든 쓸 수 있지만, 기본적으로 그것은 내가 이해 한 것에서 명시 적이거나 활동적이어야합니다.


작동하지 않습니다. 이클립스 4.10, 날짜 2019-05-31. 때로는 경고가 사라지지만 Eclipse를 다시 시작하면 다시 경고가 나타납니다.
마이크 설치류

@mikerodent 프로젝트 탐색기 메뉴에서 마우스 오른쪽 버튼을 클릭하고 확인을 통해 명시 적 유효성 검사를 수행 할 때까지 경고가 지속될 수 있습니다.
mvreijn

11

XML 카탈로그에 스키마를 추가하려고 했습니까?

"문서에 대해 문법 제약 (dtd 또는 xml 스키마)이 감지되지 않음"을 피하기 위해 아래의 XML 카탈로그에 xsd 스키마 파일을 추가하는 데 사용합니다.

"창 \ 환경 설정 \ 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 참조 ) 을 편집하고 있으며 그 예제를 사용합니다. XSI = ": 난 그냥 XMLNS를 사용하여 작업이를 얻을에만 수 있었다 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에서 나를 위해 일했습니다. 이 두 줄을 개미의 build.xml
Eugene Gr에

7

새로운 깨끗한 방법은 다음과 같이 XML을 작성하는 것입니다.

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

<rootElement>
 ....
</rootElement>

위의 Eclipse Juno +에서 작동합니다


프로젝트 탐색기 메뉴에서 마우스 오른쪽 버튼을 클릭하고 확인을 통해 명시 적 유효성 검사를 수행 할 때까지 경고가 지속될 수 있습니다.
mvreijn

6

나에게 그것은 문자 인코딩유닉스 파일 모드에 문제가있었습니다. Windows에서 이클립스를 실행하는 .

완전한 코드를 표시하고 잘라내어 다시 붙여 넣었습니다 (짧게 : CtrlA-CtrlX-CtrlV ). 더 이상 "문법 제약 없음 ..."경고가 표시되지 않습니다.


6

경고 메시지에 제시된 제안을 이해하면 언젠가 도움이됩니다.

나는 또한 같은 문제가 있었는데, 약간의 연구를 한 후에 해결책을 찾았고 처음에 아래 줄을 추가하여 수정했습니다.

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

내 경우에는 다른 문제가 발생합니다. 제안을 읽고 다시 해결하여 다른 원인으로 바뀌 었습니다.이 문제는 원래 원인을 이해하여 해결되었으며 첫 번째 링크가 끊어졌습니다 (찾을 수 없음). 다음은 문제를 완전히 해결하기 위해 수행 된 작업을 설명하는 단계별 이미지입니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


3

"문법 제한 없음 ..."경고가 표시되는 이유를 실제로 말할 수는 없지만 DOCTYPE 선언을 완전히 제거하여 Eclipse에서이를 유발할 수 있습니다. 선언을 다시 넣고 다시 확인하면 다음 오류 메시지가 나타납니다.

"template"요소 유형의 내용은 "(description +, variation?, variation-field?, allow-multiple-variation?, class-pattern?, getter-setter?, allowed-file-extensions?, template-body +)와 일치해야합니다. .

그리고 그것이 맞습니다, 나는 믿습니다 ( "number-required-classes"요소는 허용되지 않습니다).


괄호는 순서가 중요 함을 나타냅니다. 문서에 class-pattern 요소 뒤에 multi-variple-variation 요소가 있는데 유효하지 않습니다. 다른 질문을하기 전에 질문을 변경하거나 기존 답변을 수락해야합니다.
nitind

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">

이 포럼 주제에서 위와 같이 위의 줄을 표시하기 전에 동일한 경고 메시지가 표시됩니다.

<?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 구성의 sugested 라인을 사용하십시오.


2

이클립스에서 유효성 검사를 해제했기 때문일 수 있습니다.


1

이 문제는 Eclipse 3.5.2에서 해결되었습니다. 하나는 경고가있는 두 개의 완전히 동일한 레이아웃입니다. 모든 탭을 닫고 다시 열 때 경고가 사라졌습니다.


1
  1. 전체 코드를 메모장에 복사하십시오.
  2. 파일을 저장하는 동안 "encoding"= UTF-8 (또는 UTF보다 높지만 UTF)을 사용하는 동안 임의의 이름으로 파일을 임시로 저장하십시오.
  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 파일을 사용하는 이클립스에서도 동일한 문제가 발생했습니다.
그것은 나에게이 "문서에 참조 된 문법 제약"을 보여주지

그러나
xml 태그 뒤에 태그를 추가하여 해결할 수 있습니다.<?xml version = "1.0" encoding = "UTF-8"?>


나를 위해 벌금을 근무 (이클립스 루나) 감사합니다
마티아스 Zaja

0

이 문제에 대한 해결책은 다음과 같습니다.


1 단계 : 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동

2 단계 : '라이브러리'로 이동하여 프로젝트의 'JRE 시스템 라이브러리'를 제거하십시오.

3 단계 : '라이브러리 추가'-> 'JRE 시스템 라이브러리'를 클릭하고 '작업 공간 기본 JRE'를 선택하십시오.

3 단계 : '주문 및 내보내기'로 이동하여 새로 추가 된 'JRE 시스템 라이브러리'를 표시하십시오.

4 단계 : 프로젝트 새로 고침 및 정리

유레카! 작동합니다 :)


귀하의 솔루션을 사용해 보았습니다. 그러나 불행히도 프로젝트를 새로 고치고 정리하면 새로 추가 된 'JRE 시스템 라이브러리'가 '라이브러리'섹션과 '주문 및 내보내기'섹션에서 사라집니다. 도와주세요.
VikramV

이 답변의 대부분은 도움이 될 수도 있고하지 않을 수도있는 4 단계 "프로젝트 정리"를 제외하고는 질문과 관련이 없습니다.
Aaron Digulla

0

내가 해결책으로 찾은 것은 환경 설정을 조정하기 전에 시도해야 할 매우 간단한 것입니다. 내 경우에는 기본 태그 "resources"로 사용되는 문자열 파일 에서이 문제가 발생했습니다 ... 위와 아래에서 태그를 삭제하고 프로젝트를 정리하고 파일을 저장하고 태그를 다시 삽입하기 만하면됩니다. 그 이후로 문제는 사라졌고 아무런 경고도 없었습니다. 간단하게 들리는 것처럼 들릴 수 있지만 때로는 문제를 해결하는 가장 간단한 것입니다. 건배


-1

문제보기에서 경고를 삭제했습니다. 지금까지 돌아 오지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.