Không phát hiện ràng buộc ngữ pháp (lược đồ DTD hoặc XML) cho tài liệu


202

Tôi có dtd này: http://fast-code.sourceforge.net/template.dtd Nhưng khi tôi đưa vào xml tôi nhận được cảnh báo: Không phát hiện ràng buộc ngữ pháp (lược đồ DTD hoặc XML) cho tài liệu. Xml là:

<?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 : Tôi đã thay đổi xml, hiện tôi đang gặp lỗi này:

Nội dung của loại phần tử "mẫu" phải khớp "(mô tả, biến thể ?, Trường biến thể ?, Cho phép nhiều biến thể ?, Mẫu lớp ?, Getter-setter ?, Cho phép mở rộng tệp ?, Số-bắt buộc- các lớp?, mẫu-body) ".


@ John - Vâng đây là nhật thực.
fastcodejava


8
Tôi sẽ KHÔNG làm tùy chọn này | XML | Tệp XML | Xác nhận trong Eclipse vì điều này chỉ che giấu / ẩn lỗi, nó không giải quyết được lỗi. Nếu bạn chỉ sử dụng Eclipse để xây dựng các ứng dụng Android, thì "giải pháp" này có thể chấp nhận được. Nhưng nếu bạn sử dụng Eclipse để xây dựng các dự án Java khác - JSF, v.v. - nó sẽ phá vỡ các dự án này nếu việc xác thực XML bị "tắt". Vì vậy, hãy cẩn thận. Giải pháp thực sự là để Oracle, Google và IBM cập nhật phần mềm của họ với các DTD và lược đồ được cập nhật.
ChuongPham

Tôi thấy nhật thực nhanh hơn và ít gặp sự cố hơn nếu tôi giữ một cài đặt để làm việc trên các ứng dụng Android và một cài đặt khác để thực hiện công việc phát triển web java. Vì vậy, tôi rất vui khi sử dụng giải pháp trên chỉ cho cài đặt nhật thực ADT của Android.
Damon Smith

Câu trả lời:


408

Trong trường hợp của tôi, tôi đã giải quyết cảnh báo khó chịu này bằng cách thêm vào <!DOCTYPE xml>sau <?xml ... >thẻ.

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

10
Đồng ý. Đây phải là câu trả lời được chấp nhận. "Ẩn" cảnh báo không chính xác là "giải quyết" nó.
bạc

31
Trong dòng thứ hai, "<! DOCTYPE xml>", "xml" phải khớp với tên của phần tử gốc của tài liệu .
Pup

Downvote: câu hỏi là làm thế nào để nhật thực thực hiện xác nhận trên dtd mà người hỏi có chứ không phải làm thế nào để loại bỏ cảnh báo.
Periata Breatta

Không hoạt động. Nhật thực 4.10, ngày 2019-05-31. Đôi khi cảnh báo biến mất - nhưng nó sẽ quay trở lại khi bạn khởi chạy lại Eclipse.
mike gặm nhấm

Hai điều: 1. khai báo doctype của bạn phải khớp với tên nút gốc của tài liệu xml. 2. Cảnh báo có thể tồn tại cho đến khi bạn thực hiện xác nhận rõ ràng thông qua nhấp chuột phải / Xác thực trong menu trình thám hiểm dự án.
mvreijn

162

Điều này làm việc với tôi trong Eclipse 3.7.1: Chuyển đến cửa sổ Tùy chọn, sau đó XML -> Tệp XML -> Xác thực. Sau đó, trong phần Xác thực tệp của bảng tùy chọn ở bên phải, chọn Bỏ qua trong hộp thả xuống cho tùy chọn "Không chỉ định ngữ pháp". Bạn có thể cần phải đóng tệp và sau đó mở lại để cảnh báo biến mất.

(Tôi biết câu hỏi này đã cũ nhưng đây là câu hỏi đầu tiên tôi tìm thấy khi tìm kiếm cảnh báo, vì vậy tôi đang đăng câu trả lời ở đây cho những người tìm kiếm khác.)


1
Tôi phải đảm bảo rằng hộp "thủ công" cũng như hộp "xây dựng" đã được chọn và sau đó thực hiện xác nhận thủ công bằng cách nhấp chuột phải vào dự án và chọn "Xác thực" để cảnh báo biến mất. Có vẻ như có một lỗi trong nhật thực, trong đó trình xác nhận bị rối. Bạn nên có thể ít nhất có công việc xác nhận thủ công ngay cả khi bạn không muốn nó xảy ra ở thời gian xây dựng. Và sau đó bạn sẽ có thể dễ dàng xóa các cảnh báo sau khi thực hiện xác nhận thủ công. Cho đến lúc này đây là giải pháp.
crowmagnumb

1
Các cảnh báo phá vỡ intellisense và tôi đã dành khá nhiều thời gian để tìm hiểu lý do là gì. Điều này đã giải quyết nó :)
Shekhar

Bạn cũng có thể thực hiện việc này trên cơ sở từng dự án, điều này tạo ra sự thay đổi trong tệp .project của bạn mà bạn có thể kiểm tra kiểm soát nguồn và giúp đỡ đồng nghiệp của mình! Thay vì đi đến cửa sổ Tùy chọn, nhấp chuột phải vào dự án của bạn và đi đến Thuộc tính và làm theo các hướng dẫn ở trên từ đó.
Stuart Leyland-Cole

2
Downvote. Câu hỏi được hỏi không phải là làm thế nào để ẩn cảnh báo, mà là cách giải quyết nó (tức là làm cho nhật thực xác thực chính xác tài liệu) ..
Periata Breatta

34

Câu trả lời:

Nhận xét về từng phần của DTD của bạn dưới đây. Tham khảo thông số kỹ thuật chính thức để biết thêm.

  <!
  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.
  >

Giải thích đơn giản:

Một DTD cực kỳ cơ bản sẽ trông giống như dòng thứ hai ở đây:

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

Giải thích chi tiết:

Các DTD phục vụ để thiết lập các định dạng dữ liệu theo thỏa thuận và xác nhận việc nhận dữ liệu đó. Chúng định nghĩa cấu trúc của một tài liệu XML, bao gồm:

  • một danh sách các yếu tố pháp lý
  • nhân vật đặc biệt
  • chuỗi ký tự
  • nhiều hơn nữa

Ví dụ

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

Ý nghĩa của các dòng trên ...
Dòng 1) Phần tử gốc được định nghĩa là "nameOfYourRootEuity"
Dòng 2) Bắt đầu định nghĩa phần tử
Dòng 3) Phần tử con được định nghĩa là "nameOfYourRootEuity1" và "nameOfYourRootEuity2"
Dòng 4) gõ #PCDATA
dòng 5) yếu tố trẻ em, được định nghĩa là kiểu dữ liệu #PCDATA
dòng 6) Mở rộng các trường hợp &nbsp;đến &#xA0;khi tài liệu được phân tách bởi phân tích cú pháp XML
dòng 7) Mở rộng các trường hợp &author;đến Your Author Namekhi tài liệu được phân tách bởi phân tích cú pháp XML
Dòng 8) Kết thúc định nghĩa


21

Giải pháp thực sự:

thêm <!DOCTYPE something>vào sự khởi đầu của từng XML có vấn đề,

sau thẻ xml <?xml version="1.0" encoding="utf-8"?>

bạn có thể viết bất cứ điều gì cho doctype, nhưng về cơ bản, nó được coi là biểu hiện, hoạt động, v.v. từ những gì tôi hiểu


Không hoạt động. Nhật thực 4.10, ngày 2019-05-31. Đôi khi cảnh báo biến mất - nhưng nó sẽ quay trở lại khi bạn khởi chạy lại Eclipse.
mike gặm nhấm

@mikerodent Cảnh báo có thể tồn tại cho đến khi bạn thực hiện xác nhận rõ ràng thông qua nhấp chuột phải / Xác thực trong menu thám hiểm dự án
mvreijn

11

Bạn đã thử thêm một lược đồ vào danh mục xml chưa?

trong nhật thực để tránh "không có ràng buộc ngữ pháp (lược đồ dtd hoặc xml) được phát hiện cho tài liệu." tôi sử dụng để thêm một tệp lược đồ xsd vào danh mục xml bên dưới

"Cửa sổ \ Preferences \ xml \ xml danh mục \ Mục nhập do người dùng chỉ định".

Nhấp vào nút "Thêm" ở bên phải.


Thí dụ:

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

Từ xml này, tôi đã tạo và lưu một xsd trong: /home/my_user/xsd/my_xsd.xsd

Là Địa điểm: /home/my_user/xsd/my_xsd.xsd

Là loại khóa: Tên không gian tên

Là khóa: http://mycompany.com/hr/schemas


Đóng và mở lại tệp xml và thực hiện một số thay đổi để vi phạm lược đồ, bạn sẽ được thông báo


Điều này làm việc cho tôi, nhưng với sự thay đổi này. Tôi đã chỉnh sửa tệp .wadl (xem w3.org/Submission/wadl ) và các ví dụ ở đó sử dụng. Tôi chỉ có thể làm cho nó hoạt động bằng cách sử dụng chỉ xmlns: xsi = " w3.org/2001/XMLSchema-instance " xmlns: xsd = " w3.org/2001/XMLSchema " xmlns = " wadl.dev.java.net / 2009/02 " chứ không phải xsi: lượcLocation =" wadl.dev.java.net/2009/02 wadl.xsd "như các ví dụ trong chương trình đệ trình đó. Tôi đã thêm một mục danh mục cho tên không gian tên với wadl.dev.java.net/2009/02
djb

10

Thêm thẻ DOCTYPE ...

Trong trường hợp này:

<!DOCTYPE xml>

Thêm vào sau:

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

Vì thế:

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

Làm việc cho tôi tại Eclipse JEE v. 2018-12. Cảnh báo biến mất khi tôi thêm hai dòng này vào build.xml của ant
Eugene Gr. Philippov

7

Một cách sạch mới có thể là viết xml của bạn như vậy:

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

<rootElement>
 ....
</rootElement>

Các công việc trên trong Eclipse Juno +


Cảnh báo có thể tồn tại cho đến khi bạn thực hiện xác nhận rõ ràng thông qua nhấp chuột phải / Xác thực trong menu trình thám hiểm dự án.
mvreijn

6

Đối với tôi, đó là một vấn đề với mã hóa ký tựunix filemode chạy nhật thực trên Windows:

Chỉ cần đánh dấu mã hoàn chỉnh, cắt và dán lại (viết tắt: CtrlA-CtrlX-CtrlV ) và mọi thứ đều ổn - không còn cảnh báo "Không ràng buộc ngữ pháp ..."


6

Hãy thử hiểu đề xuất được đưa ra trong các thông điệp cảnh báo, đôi khi nó sẽ giúp ích.

Tôi cũng gặp vấn đề tương tự, sau khi thực hiện một số nghiên cứu tôi đã tìm ra giải pháp và khắc phục bằng cách thêm dòng dưới đây vào đầu

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

dẫn đến một số vấn đề khác trong trường hợp của tôi. Mà tôi đã giải quyết bằng cách đọc các đề xuất, một lần nữa lại chuyển sang một vấn đề khác, đã được giải quyết để hiểu nguyên nhân ban đầu, rằng liên kết đầu tiên đã bị hỏng (không tìm thấy). Dưới đây là hình ảnh từng bước giải thích những gì đã được thực hiện để giải quyết vấn đề hoàn toàn.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


3

Tôi thực sự không thể nói lý do tại sao bạn nhận được cảnh báo "Không có ràng buộc ngữ pháp ...", nhưng tôi có thể kích thích nó trong Eclipse bằng cách loại bỏ hoàn toàn khai báo DOCTYPE. Khi tôi đặt lại tờ khai và xác nhận lại, tôi nhận được thông báo lỗi này:

Nội dung của loại phần tử "mẫu" phải khớp "(mô tả +, biến thể ?, Trường biến thể ?, Cho phép nhiều biến thể ?, Mẫu lớp ?, Getter-setter ?, Phần mở rộng tệp được phép ?, Mẫu cơ thể +) .

Và đó là chính xác, tôi tin rằng (phần tử "số bắt buộc-lớp" không được phép).


Dấu ngoặc chỉ ra rằng thứ tự là quan trọng. Tài liệu của bạn có phần tử đa biến cho phép sau phần tử mẫu lớp không hợp lệ. Bạn thực sự nên thay đổi câu hỏi hoặc chấp nhận câu trả lời hiện có trước khi hỏi một phần tử khác.
nitind

3

Tôi biết điều này đã cũ nhưng tôi đã vượt qua vấn đề tương tự và tìm thấy giải pháp trong tài liệu về mùa xuân, cấu hình xml sau đây đã được giải quyết vấn đề cho tôi.

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

trước khi tôi đặt dòng trên là có đường trong chủ đề diễn đàn này, tôi có cùng một thông điệp cảnh báo và đặt ...

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

và nó cho tôi thông báo cảnh báo sau ...

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

Vì vậy, hãy thử sử dụng các dòng có cấu hình xml của tôi.


2

Điều này có thể là do tắt xác nhận trong nhật thực.


1

Đã giải quyết vấn đề này trong Eclipse 3.5.2. Hai bố cục hoàn toàn giống nhau trong đó một cảnh báo. Đóng tất cả các tab và khi mở lại cảnh báo đã biến mất.


1
  1. sao chép toàn bộ mã của bạn trong notepad.
  2. tạm thời lưu tệp với bất kỳ tên nào [trong khi lưu tệp sử dụng "mã hóa" = UTF-8 (hoặc cao hơn nhưng UTF)].
  3. đóng tập tin
  4. mở lại
  5. sao chép dán lại vào mã của bạn.

lỗi phải biến mất


1

Tôi đã sử dụng một đường dẫn tương đối trong xsi: noNamespaceSchemaLocation để cung cấp tệp xsd cục bộ (vì tôi không thể sử dụng một không gian tên trong ví dụ xml).

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

Xác nhận hoạt động và cảnh báo là cố định (không bỏ qua).

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


1

Tôi cũng gặp vấn đề tương tự trong nhật thực khi sử dụng tệp web.xml,
nó cho tôi thấy "không có ràng buộc ngữ pháp nào được tham chiếu trong tài liệu"

nhưng nó có thể được giải quyết bằng cách thêm thẻ
sau thẻ xml tức là<?xml version = "1.0" encoding = "UTF-8"?>


Làm việc tốt với tôi (Eclipse Luna) Cảm ơn
Mathias Zaja

0

Đây là giải pháp làm việc cho vấn đề này:


Bước 1: Nhấp chuột phải vào dự án và đi đến các thuộc tính

Bước 2: Chuyển đến 'thư viện' và xóa 'Thư viện hệ thống JRE' của dự án

Bước 3: Nhấp vào 'Thêm thư viện' -> 'Thư viện hệ thống JRE' -> chọn 'JRE mặc định không gian làm việc'

Bước 3: Chuyển đến 'Đặt hàng và Xuất' và đánh dấu 'Thư viện hệ thống JRE' mới được thêm vào

Bước 4: Làm mới và làm sạch dự án

Eureka! Nó đang hoạt động :)


Tôi đã thử sử dụng giải pháp của bạn. Nhưng thật không may, khi tôi làm mới và dọn dẹp dự án của mình, 'Thư viện hệ thống JRE' mới được thêm vào sẽ biến mất khỏi phần 'Thư viện' và cả từ phần 'Đặt hàng và Xuất khẩu' của tôi. Xin vui lòng giúp đỡ.
VikramV

Hầu hết câu trả lời này không liên quan đến câu hỏi ngoại trừ Bước 4 "làm sạch dự án" có thể giúp (hoặc có thể không).
Aaron Digulla

0

Những gì tôi thấy là giải pháp là một thứ rất đơn giản mà tôi nghĩ bạn nên thử trước khi mày mò các sở thích. Trong trường hợp của tôi, tôi đã gặp vấn đề này trong một tệp chuỗi có "tài nguyên" thẻ cơ sở ... tất cả những gì tôi đã làm là xóa thẻ từ trên xuống và dưới cùng, làm sạch dự án, lưu tệp và gắn lại thẻ. Vấn đề đã biến mất và không bao giờ đưa ra bất kỳ cảnh báo nào. Nghe có vẻ đơn giản là sự thật nhưng này, đôi khi, đó là những điều đơn giản nhất giải quyết vấn đề. Chúc mừng


-1

Tôi đã xóa cảnh báo trong chế độ xem vấn đề. Nó đã không trở lại cho đến bây giờ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.