XML 스키마 (XSD) 유효성 검사 도구? [닫은
-
02-07-2019 - |
문제
사무실에서 우리는 현재 우리가 제공 한 스키마에 대해 XML 파일을 생성하는 응용 프로그램을 작성하고 있습니다. .xsd 파일에 스키마가 있습니다.
생성 된 XML이 스키마와 일치하는지 확인하기 위해 자동 테스트에 사용할 수있는 도구 또는 라이브러리가 있습니까?
스키마 체커를 번들링하지는 않지만 개발 중에 DEVS에서만 사용할 수 있어야하지만 상업용 사용에 적합한 무료 도구를 선호합니다.
XML 파일을 생성 한 다음 테스트에서 별도의 프로그램을 호출하여 유효성 검사를 수행 할 수 있다고 생각하지는 않지만 우리의 개발 언어는 C ++입니다.
해결책
약간의 연구 후에, 나는 가장 좋은 대답은 xerces, 모든 XSD를 구현하므로 교차 플랫폼이며 널리 사용됩니다. 나는 a Github의 작은 Java 프로젝트 일반적으로 xerces 인 기본 JRE 파서를 사용하여 명령 줄에서 검증합니다. Windows/Mac/Linux에서 사용할 수 있습니다.
또 한있다 Xerces의 C ++ 버전 오히려 사용하려면 사용할 수 있습니다. 그만큼 stdinparse 유틸리티 명령 줄에서 호출하는 데 사용할 수 있습니다. 또한 아래의 의견자는 이것을 지적합니다 보다 완전한 래퍼 유틸리티.
일부인 XMLLINT를 사용할 수도 있습니다. libxml. 이미 설치했을 수 있습니다. 예제 사용 :
xmllint --noout --schema XSD_FILE XML_FILE
한 가지 문제는 libxml이 모든 사양을 구현하지 않으므로 문제가 발생할 수 있다는 것입니다.
또는 Windows에있는 경우 사용할 수 있습니다. MSXML, 그러나 당신은 이것에 설명 된 GUI와 같이 그것을 호출하려면 일종의 래퍼가 필요합니다. DDJ 기사. 그러나 Windows의 대부분의 사람들은 Notepad ++와 같은 XML 편집기를 사용하는 것 같습니다 ( 네이트의 대답) 또는 XML Notepad 2007 ~처럼 Stevec가 제안합니다 (여기서 언급하지 않을 몇 가지 상업용 편집자도 있습니다).
마지막으로, 불행히도 다른 프로그램이 다른 결과를 제공 할 것입니다. 이것은 주로 XSD 사양의 복잡성 때문입니다. 여러 도구로 스키마를 테스트 할 수 있습니다.
업데이트: 나는 이것에 대해 a 블로그 게시물.
다른 팁
xmlstarlet 이 작업을 수행하는 명령 줄 도구입니다.
$ xmlstarlet val --help XMLStarlet Toolkit: Validate XML document(s) Usage: xmlstarlet val <options> [ <xml-file-or-uri> ... ] where <options> -w or --well-formed - validate well-formedness only (default) -d or --dtd <dtd-file> - validate against DTD -s or --xsd <xsd-file> - validate against XSD schema -E or --embed - validate using embedded DTD -r or --relaxng <rng-file> - validate against Relax-NG schema -e or --err - print verbose error messages on stderr -b or --list-bad - list only files which do not validate -g or --list-good - list only files which validate -q or --quiet - do not list files (return result code only) NOTE: XML Schemas are not fully supported yet due to its incomplete support in libxml2 (see http://xmlsoft.org) XMLStarlet is a command line toolkit to query/edit/check/transform XML documents (for more information see http://xmlstar.sourceforge.net/)
귀하의 경우 사용은 다음과 같은 선을 따라야합니다.
xmlstarlet val --xsd your_schema.xsd your_file.xml
창문에는 무료가 있습니다 XML Notepad 2007. XSD를 선택할 수 있습니다.
온라인 XML 스키마 유효성 검사기 DecisionSoft에서 주어진 스키마에 대해 XML 파일을 확인할 수 있습니다.
나는 xerces를 사용합니다.
빠르고 쉬운 XML 유효성 검사를위한 XML 편집기는 http://www.xml-buddy.com
설치 프로그램을 실행하면 사용하기 쉬운 데스크톱 응용 프로그램 또는 명령 줄로 XML 파일을 검증 할 수 있습니다. 또한 Schematron 및 Relaxng에 대한 지원을받습니다. 배치 검증도 지원됩니다 ...
업데이트 1/13/2012 : 명령 줄 도구는 XML 파서로 XERCES를 무료로 사용할 수 있으며 사용합니다.
( "외부 XML 스키마에 대한 유효성 검사"상자를 확인하십시오)
나는 단지 스키마를 배우고 있습니다. 나는 allel ng를 사용하고 xmllint를 사용하여 검증을 사용하고 있습니다. xmlllint에서 나오는 오류로 인해 좌절됩니다. 나는 그들이 좀 더 유익했으면 좋겠다.
XML에 잘못된 속성이있는 경우 XMLLINT는 지원되지 않은 속성의 이름을 알려줍니다. 그러나 XML에 속성이 없으면 요소를 검증 할 수 없다는 메시지가 표시됩니다.
나는 매우 복잡한 규칙을 가진 매우 복잡한 XML을 연구하고 있으며, 이것에 익숙하지 않으므로 어떤 속성이 누락되었는지 추적하는 데 오랜 시간이 걸립니다.
업데이트 : 방금 좋아하는 Java 도구를 찾았습니다. xmllint와 같은 명령 줄에서 실행할 수 있으며 릴리쉬 NG를 지원합니다. https://msv.dev.java.net/
'Corefiling'의이 온라인 유효성 검사기가 매우 유용하다는 것을 알았습니다.
http://www.corefiling.com/opensource/schemavalidate.html
내 XSD를 검증하기위한 몇 가지 도구를 시도한 후에는 자세한 오류 정보를 제공 한 것입니다. 따라서 스키마의 오류를 수정할 수있었습니다.
XML에서 XSD를 검증하고 생성하는 훌륭한 시각적 도구 중 하나는 직관적이고 단순한 Intellij 아이디어입니다.
XML 스키마를 Microsoft Visual Studio의 Intellisense에 연결할 수 있습니다. 이 옵션은 실시간 유효성 검사와 자동 완성을 제공합니다.
Microsoft Visual C ++ 2010 Express의 무료 사본 에서이 정확한 시나리오가 실행됩니다.
다른 온라인 XML 스키마 (XSD) 유효성 검사기 : http://www.utilities-online.info/xsdvalidation/.
.NET 파일에서 XSD를 생성하기 위해 Microsoft의 XSD를 사용하는 경향이 있습니다. 또한 XMLStarlet을 사용하여 XML의 섹션을 구문 분석합니다. 귀하에게 사용할 최종 무료 도구는 Altovaxml 이며이 URL에서 사용할 수 있습니다. http://www.altova.com/download_components.html .
이를 통해 XML을 구문 분석하여 사용할 XSD를 선택하는 모든 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
}
I를 사용하는 XML을 생성하려면 다음과 같습니다.
내가 사용하는 xsd 이름을 얻으려면 : xmlstarlet sel -t -t -m /xxx /* -v local -name () $ 1 | sed 's/$ //'
이를 통해 XML 파일의 요소 태그를 사용하여 올바른 XSD를 픽업 할 수 있습니다.
순 결과는 BASH 기능을 호출하여 모든 XML 파일을 스캔하여 확인할 수 있습니다. 그들이 여러 하위 디렉토리에 있더라도.