Công cụ xác thực Lược đồ XML (XSD)? [đóng cửa]


266

Tại văn phòng, chúng tôi hiện đang viết một ứng dụng sẽ tạo các tệp XML dựa trên lược đồ mà chúng tôi đã cung cấp. Chúng ta có lược đồ trong tệp .XSD.

Có công cụ hoặc thư viện nào chúng ta có thể sử dụng để kiểm tra tự động để kiểm tra xem XML được tạo có khớp với lược đồ không?

Chúng tôi muốn các công cụ miễn phí phù hợp cho sử dụng thương mại mặc dù chúng tôi sẽ không đóng gói trình kiểm tra lược đồ để các nhà phát triển chỉ cần sử dụng nó trong quá trình phát triển.

Ngôn ngữ phát triển của chúng tôi là C ++ nếu điều đó tạo ra sự khác biệt, mặc dù tôi không nghĩ nó nên như chúng tôi có thể tạo tệp xml và sau đó thực hiện xác nhận bằng cách gọi một chương trình riêng trong thử nghiệm.


132
Tôi thích có bao nhiêu câu hỏi "không mang tính xây dựng" này là kết quả tìm kiếm hàng đầu của Google về những điều tôi tìm kiếm và câu trả lời rất hữu ích
matt freake

1
Tôi hiểu nơi đó đến từ với không mang tính xây dựng. Thành thật mà nói, mặc dù đây là một câu hỏi và tranh luận / tranh luận tuyệt vời đôi khi cuối cùng lại xuất phát từ những câu trả lời tuyệt vời
Matt

22
đây là trường hợp chính xác khi quản trị viên đang phản tác dụng
anon58192932

Có lẽ đáng để xem xét một câu hỏi tương tự trong bối cảnh của công cụ xây dựng Maven .
Alberto

Câu trả lời:


239

Sau một số nghiên cứu, tôi nghĩ câu trả lời tốt nhất là Xerces , vì nó thực hiện tất cả XSD, là đa nền tảng và được sử dụng rộng rãi. Tôi đã tạo một dự án Java nhỏ trên github để xác thực từ dòng lệnh bằng cách sử dụng trình phân tích cú pháp JRE mặc định, thường là Xerces. Điều này có thể được sử dụng trên Windows / Mac / Linux.

Ngoài ra còn có phiên bản C ++ của Xerces nếu bạn muốn sử dụng nó. Các tiện ích StdInParse có thể được sử dụng để gọi nó từ dòng lệnh. Ngoài ra, một bình luận bên dưới chỉ ra tiện ích trình bao bọc hoàn chỉnh hơn này .

Bạn cũng có thể sử dụng xmllint, một phần của libxml . Bạn cũng có thể đã cài đặt nó. Ví dụ sử dụng:

xmllint --noout --schema XSD_FILE XML_FILE

Một vấn đề là libxml không thực hiện tất cả các đặc điểm kỹ thuật, vì vậy bạn có thể gặp phải các vấn đề :(

Ngoài ra, nếu bạn đang ở trên Windows, bạn có thể sử dụng msxml , nhưng bạn sẽ cần một số loại trình bao bọc để gọi nó, chẳng hạn như GUI được mô tả trong bài viết DDJ này . Tuy nhiên, dường như hầu hết mọi người trên Windows đều sử dụng Trình soạn thảo XML, chẳng hạn như Notepad ++ (như được mô tả trong câu trả lời của Nate ) hoặc XML Notepad 2007 như đề xuất của SteveC (cũng có một số trình soạn thảo thương mại mà tôi sẽ đề cập ở đây).

Cuối cùng, bạn sẽ thấy các chương trình khác nhau sẽ không may cho kết quả khác nhau. Điều này phần lớn là do sự phức tạp của thông số XSD. Bạn có thể muốn kiểm tra lược đồ của bạn với một số công cụ.

CẬP NHẬT : Tôi đã mở rộng về điều này trong một bài đăng trên blog .


1
Tôi thấy hữu ích sau đây: jmvanel.free.fr/xsd/README.html
Matthew Hegarty

Một ví dụ về việc sử dụng StdinPude (trên linux) sẽ hữu ích: StdInPude -n -s -f -v = always <XML_FILE. XML_FILE nên bao gồm vị trí lược đồ. Đối với tôi nó cho kết quả đầy đủ hơn xmllint.
helcim

3
Có cách nào để yêu cầu một chương trình sử dụng xsi: lượcLocationLocation thay vì cho tất cả các XSD bằng tay không?
Gabor Garami

@GaborGarami Không phải lúc này, nhưng đó là một yêu cầu tính năng: github.com/amouat/xsd-validator/issues/5
Adrian Mouat

1
xmllintThật không may, không tuân thủ regex XML, vì vậy một số regex XML hợp lệ sẽ không vượt qua nó
Sergey Bushmanov

112

Có một plugin cho Notepad ++ được gọi là Công cụ XML cung cấp xác minh và xác thực XML đối với XSD.

Bạn có thể xem làm thế nào để sử dụng nó ở đây .


5
-1, plugin này rất khó cài đặt
jcollum

2
Tôi đã thử nghiệm với npp 5.8.6, XMLTools 2.3.1 unicode beta2 r805, nó hoạt động tốt.
Palani

5
Plugin tuyệt vời. Xem Notepad ++ XmlTools Không cài đặt để được trợ giúp cài đặt.
ladenedge

16
Và với phiên bản 5.8.7, Trình quản lý trình cắm riêng của Notepad ++ ("Trình quản lý trình cắm / Trình cắm") giúp quá trình cài đặt tự động.
Cung cấp nhiên liệu

1
@FranzEbner Tôi cũng gặp vấn đề tương tự. Ví dụ , nếu XMLchính nó tham chiếu một XSDtệp, xsi:noNamespaceSchemaLocation="file.xsd"thì Công cụ XML sẽ cố gắng sử dụng nó thay vì cung cấp cho bạn một cuộc đối thoại "đã đặt".
theblang

22

xmlstarlet là một công cụ dòng lệnh sẽ làm điều này và hơn thế nữa:

$ xmlstarlet val - trợ giúp
Bộ công cụ XMLStarlet: Xác thực (các) tài liệu XML
Cách sử dụng: xmlstarlet val <tùy chọn> [<xml-file-or-uri> ...]
trong đó <tùy chọn>
  -w hoặc --well-hình thành - chỉ xác nhận tính hợp lệ (mặc định)
  -d hoặc --dtd <dtd-file> - xác thực với DTD
  -s hoặc --xsd <xsd-file> - xác thực đối với lược đồ XSD
  -E hoặc --embed - xác thực bằng cách sử dụng DTD nhúng
  -r hoặc --relaxng <rng-file> - xác thực đối với lược đồ Thư giãn-NG
  -e hoặc --err - in thông báo lỗi dài dòng trên stderr
  -b hoặc --list-bad - chỉ liệt kê các tệp không xác thực
  -g hoặc --list-good - chỉ liệt kê các tệp xác thực
  -q hoặc --quiet - không liệt kê các tệp (chỉ trả về mã kết quả)

LƯU Ý: Các lược đồ XML chưa được hỗ trợ đầy đủ do chưa hoàn thành
      hỗ trợ trong libxml2 (xem http://xmlsoft.org)

XMLStarlet là bộ công cụ dòng lệnh để truy vấn / chỉnh sửa / kiểm tra / chuyển đổi
Tài liệu XML (để biết thêm thông tin, hãy xem http://xmlstar.sourceforge.net/)

Cách sử dụng trong trường hợp của bạn sẽ nằm dọc theo dòng:

xmlstarlet val --xsd your_schema.xsd your_file.xml

3
Bạn có biết cảnh báo nghiêm trọng như thế nào về việc không hỗ trợ đầy đủ các lược đồ xml không?
Jason Dagit

2
Đánh giá bằng các câu trả lời khác xmlstarlet hơi yếu khi triển khai xsd.
Jason Dagit

3
Cho xmlstarlet chỉ sử dụng libxml2 dưới mui xe, có thể dễ dàng hơn khi chỉ sử dụng xmllint được gói cùng với libxml2 và được giải thích trong câu trả lời được chấp nhận.
Adrian Mouat

@JasonDagit, ... chính xác là nó yếu như xmllint - họ sử dụng cùng một triển khai thư viện.
Charles Duffy

Mô hình nội dung không phải là yếu tố quyết định. :-(
Greg

16

Đối với Windows có XML Notepad 2007 miễn phí . Bạn có thể chọn XSD cho nó để xác thực

CẬP NHẬT: tốt hơn nữa, sử dụng Notepad ++ với plugin Công cụ XML



3

Tôi sử dụng Xerces:

http://xerces.apache.org/xerces-c/


1
Họ có một dòng lệnh có thể được sử dụng từ bàn điều khiển để kiểm tra xác thực tệp XSLT so với XSD của XSLT 2.0 không?
Alexis Wilke

Có, bạn có thể cài đặt công cụ CLI sudo apt install libxerces-c-samplesvà sau đó kiểm tra tài liệu StdInParse -v=always -n -s < document.xml.
jgrocha


2

Tôi chỉ đang học Schema. Tôi đang sử dụng THƯ GIÃN NG và sử dụng xmllint để xác thực. Tôi cảm thấy thất vọng vì những lỗi phát sinh từ xmlllint. Tôi ước họ có thêm một chút thông tin.

Nếu có một thuộc tính sai trong XML thì xmllint sẽ cho bạn biết tên của thuộc tính không được hỗ trợ. Nhưng nếu bạn thiếu một thuộc tính trong XML, bạn chỉ nhận được một thông báo nói rằng phần tử không thể được xác thực.

Tôi đang làm việc trên một số XML rất phức tạp với các quy tắc rất phức tạp và tôi chưa quen với điều này vì vậy việc theo dõi thuộc tính nào bị thiếu đang mất nhiều thời gian.

Cập nhật: Tôi vừa tìm thấy một công cụ java tôi thích rất nhiều. Nó có thể được chạy từ dòng lệnh như xmllint và nó hỗ trợ THƯ GIÃN NG: https://msv.dev.java.net/


2

Tôi thấy trình xác nhận trực tuyến này từ 'corefiling' khá hữu ích -
http://www.corefiling.com/opensource/schemaValidate.html

Sau khi thử một vài công cụ để xác thực xsd của tôi, đây là công cụ cung cấp cho tôi thông tin lỗi chi tiết - vì vậy tôi có thể sửa lỗi trong lược đồ.


2

Một trình soạn thảo XML để xác thực XML nhanh chóng và dễ dàng có sẵn tại http://www.xml-buddy.com

Bạn chỉ cần chạy trình cài đặt và sau đó bạn có thể xác thực các tệp XML của mình bằng một ứng dụng máy tính để bàn hoặc dòng lệnh dễ sử dụng. Ngoài ra, bạn cũng nhận được hỗ trợ cho Schematron và RelaxNG. Xác thực hàng loạt cũng được hỗ trợ ...

Cập nhật 1/13/2012: Công cụ dòng lệnh miễn phí sử dụng và sử dụng Xerces làm trình phân tích cú pháp XML.


1

một công cụ trực quan tuyệt vời để xác thực và tạo XSD từ XML là IntelliJ IDEA, trực quan và đơn giản.


1

Bạn có thể kết nối lược đồ XML của mình với Intellisense của Microsoft Visual Studio. Tùy chọn này cung cấp cho bạn cả xác thực và tự động hoàn thành trong thời gian thực, điều này thật tuyệt vời.

Tôi có kịch bản chính xác này chạy trên bản sao miễn phí Microsoft Visual C ++ 2010 Express.



0

Tôi có xu hướng sử dụng xsd từ Microsoft để giúp tạo xsd từ tệp .NET. Tôi cũng phân tích các phần của xml bằng xmlstarlet. Công cụ miễn phí cuối cùng sẽ được sử dụng cho bạn là altovaxml, có sẵn tại URL này: http://www.altova.com/doad_components.html .

Điều này cho phép tôi quét tất cả các tệp xml chọn xsd nào sẽ sử dụng bằng cách phân tích cú pháp xml.

# Function:
#    verifyschemas - Will validate all xml files in a configuration directory against the schemas in the passed in directory
# Parameters:
#    The directory where the schema *.xsd files are located.  Must be using dos pathing like: VerifySchemas "c:\\XMLSchemas\\"
# Requirements:
#    Must be in the directory where the configuration files are located
#
verifyschemas()
{
    for FILENAME in $(find . -name '*.xml' -print0 | xargs -0)
    do
        local SchemaFile=$1$(getconfignamefromxml $FILENAME).xsd
        altovaxml /validate $FILENAME /schema $SchemaFile > ~/temp.txt 2> /dev/null
        if [ $? -ne 0 ]; then
            printf "Failed to verify: "
            cat ~/temp.txt | tail -1 | tr -d '\r'
            printf "    - $FILENAME with $SchemaFile\n"
        fi
    done
}

Để tạo xml tôi sử dụng: xsd DOTNET.dll / type: CFGCLASS & đổi tên lược đồ0.xsd CFGCLASS.xsd

Để có được tên xsd tôi sử dụng: xmlstarlet sel -t -m / XXX / * -v local-name () $ 1 | sed 's / $ //'

Điều này cho phép tôi chọn XSD chính xác bằng cách sử dụng thẻ phần tử trong tệp xml.

Kết quả cuối cùng là tôi có thể gọi hàm bash để quét tất cả các tệp XML và xác minh chúng. Ngay cả khi chúng ở trong nhiều thư mục con.

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.