XML 스키마 (XSD) 유효성 검사 도구? [닫은]


266

사무실에서는 현재 주어진 스키마에 대해 XML 파일을 생성하는 응용 프로그램을 작성하고 있습니다. .XSD 파일에 스키마가 있습니다.

생성 된 XML이 스키마와 일치하는지 확인하기 위해 자동화 된 테스트에 사용할 수있는 도구 또는 라이브러리가 있습니까?

스키마 검사기를 번들로 제공하지는 않지만 개발 중에 개발자 만 사용할 수 있기 때문에 상업적 용도에 적합한 무료 도구를 선호합니다.

xml 파일을 생성 한 다음 테스트에서 별도의 프로그램을 호출하여 유효성을 검사해야한다고 생각하지는 않지만 개발 언어는 C ++입니다.


132
이 "비 구조적"질문 중 몇 개가 내가 검색 한 것의 Google 검색 결과 중 가장 인기 있고 답변이 유용합니다
matt freake

1
나는 건설적이지 않은 곳에서 오는 곳을 이해합니다. 솔직히 이것은 큰 질문이지만 토론 / 논쟁은 때때로 큰 해답을 이끌어냅니다.
Matt

22
이것은 관리자가 생산성을
떨어 뜨리는

Maven 빌드 도구 의 맥락에서 비슷한 질문 을 살펴볼 가치가 있습니다 .
Alberto

답변:


239

몇 가지 연구를 거친 후에 가장 좋은 대답은 Xerces 라고 생각합니다 .Xerces 는 모든 XSD를 구현하므로 크로스 플랫폼이며 널리 사용됩니다. 기본 JRE 파서를 사용하여 명령 줄에서 일반적으로 Xerces 인 유효성을 검사하기 위해 github 에서 작은 Java 프로젝트를 만들었습니다 . 이것은 Windows / Mac / Linux에서 사용할 수 있습니다.

오히려 사용하려는 경우 XercesC ++ 버전 도 있습니다. StdInParse 유틸리티는 명령 줄에서 호출 할 수 있습니다. 또한 아래의 주석 기는 이보다 완전한 래퍼 유틸리티를 가리 킵니다 .

libxml의 일부인 xmllint를 사용할 수도 있습니다 . 이미 설치했을 수 있습니다. 사용법 예 :

xmllint --noout --schema XSD_FILE XML_FILE

한 가지 문제는 libxml이 모든 사양을 구현하지 않으므로 문제가 발생할 수 있다는 것입니다.

또는 Windows를 사용하는 경우 msxml 을 사용할 수 있지만이 DDJ 기사에 설명 된 GUI와 같은 일종의 래퍼가 필요합니다 . 그러나 Windows의 대부분의 사람들은 SteveC가 제안한 Notepad ++ ( Nate의 답변에 설명 된 것처럼 ) 또는 XML Notepad 2007 과 같은 XML 편집기를 사용하는 것 같습니다 ( 여기서는 언급하지 않을 여러 상용 편집기가 있습니다).

마지막으로, 다른 프로그램이 불행히도 다른 결과를 낳게 될 것입니다. 이것은 주로 XSD 사양의 복잡성 때문입니다. 여러 도구를 사용하여 스키마를 테스트 할 수 있습니다.

업데이트 : 나는 이것을 블로그 포스트 에서 확장했습니다 .


1
다음 내용이 도움이되었습니다 : jmvanel.free.fr/xsd/README.html
Matthew Hegarty

Linux에서 StdinParse 사용법의 예는 유용합니다 : StdInParse -n -s -f -v = always <XML_FILE. XML_FILE에는 스키마 위치가 포함되어야합니다. 나를 위해 그것은 xmllint보다 더 완벽한 결과를 제공합니다.
helcim

3
모든 XSD를 수동으로 공급하는 대신 xsi : schemaLocation을 사용하도록 프로그램에 요청하는 방법이 있습니까?
Gabor Garami

@GaborGarami 현재는 아니지만 기능 요청입니다 : github.com/amouat/xsd-validator/issues/5
Adrian Mouat

1
xmllint하지 XML 정규식 준수, 불행히도, 일부 유효한 XML 정규 표현식에이 통과되지 않도록이다
세르게이 Bushmanov

112

XSD에 대한 XML 확인 및 유효성 검사를 제공하는 XML Tools 라는 메모장 ++ 용 플러그인이 있습니다 .

사용 방법은 여기에서 확인할 수 있습니다 .


5
-1,이 플러그인은 설치하기 어려움
jcollum

2
npp 5.8.6, XMLTools 2.3.1 유니 코드 베타 2 r805로 테스트했는데 정상적으로 작동합니다.
Palani

5
훌륭한 플러그인. 설치에 대한 도움말 은 Notepad ++ XmlTools 설치 안됨을 참조 하십시오 .
ladenedge

16
버전 5.8.7에서는 메모장 ++ 자체 플러그인 관리자 ( "플러그인 / 플러그인 관리자")가 설치 프로세스를 자동으로 만듭니다.
연료를 공급

1
@FranzEbner 나는이 같은 문제가 있었다. 예를 들어 , 파일 XML자체가 XSD파일을 참조하는 경우 xsi:noNamespaceSchemaLocation="file.xsd"XML 도구는 "세트"대화 상자 대신 파일 을 사용하려고합니다.
theblang

22

xmlstarlet 은 다음과 같은 작업을 수행하는 명령 줄 도구입니다.

$ xmlstarlet val --help
XMLStarlet Toolkit : XML 문서 유효성 검사
사용법 : xmlstarlet val <options> [<xml-file-or-uri> ...]
여기서 <옵션>
  -w 또는 --well-formed-올바른 형식 만 검증 (기본값)
  -d 또는 --dtd <dtd-file>-DTD에 대해 유효성 검증
  -s 또는 --xsd <xsd-file>-XSD 스키마에 대해 유효성 검사
  -E 또는 --embed-내장 DTD를 사용하여 유효성 검사
  -r 또는 --relaxng <rng-file>-Relax-NG 스키마에 대해 유효성 검증
  -e 또는 --err : stderr에 자세한 오류 메시지를 인쇄합니다
  -b 또는 --list-bad-유효성을 검사하지 않는 파일 만 나열
  -g 또는 --list-good-유효성을 검사하는 파일 만 나열
  -q 또는 --quiet-파일을 나열하지 않습니다 (반환 결과 코드 만 해당)

참고 : XML 스키마는 아직 불완전하여 완전히 지원되지 않습니다
      libxml2 지원 (http://xmlsoft.org 참조)

XMLStarlet은 쿼리 / 편집 / 체크 / 변환을위한 명령 행 툴킷입니다
XML 문서 (자세한 내용은 http://xmlstar.sourceforge.net/ 참조)

귀하의 경우 사용법은 다음과 같습니다.

xmlstarlet val --xsd your_schema.xsd your_file.xml

3
XML 스키마를 완전히 지원하지 않는 것에 대한 경고가 얼마나 심각한 지 알고 있습니까?
Jason Dagit

2
다른 답변으로 판단하면 xmlstarlet은 xsd 구현에서 약간 약합니다.
Jason Dagit

3
xmlstarlet이 후드 아래에서 libxml2를 사용한다고 가정하면 libxml2와 함께 제공되며 허용되는 답변에 설명 된 xmllint를 사용하는 것이 더 쉽습니다.
Adrian Mouat

@JasonDagit, ... xmllint만큼 약합니다. 동일한 라이브러리 구현을 사용합니다.
Charles Duffy

컨텐츠 모델은 결정적이지 않습니다. :-(
Greg

16

Windows의 경우 무료 XML Notepad 2007이 있습니다. XSD를 선택하여 유효성을 검사 할 수 있습니다

업데이트 : XML 도구 플러그인과 함께 메모장 ++을 사용하는 것이 좋습니다.



3

Xerces를 사용합니다.

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


1
XSLT 2.0의 XSD와 비교하여 XSLT 파일의 유효성을 검사하기 위해 콘솔에서 사용할 수있는 명령 행이 있습니까?
Alexis Wilke

예,로 CLI 도구를 설치 한 sudo apt install libxerces-c-samples다음로 문서를 확인할 수 있습니다 StdInParse -v=always -n -s < document.xml.
jgrocha


2

나는 단지 스키마를 배우고 있습니다. RELAX NG를 사용하고 xmllint를 사용하여 유효성을 검사하고 있습니다. xmlllint에서 나오는 오류로 인해 좌절하고 있습니다. 나는 그들이 좀 더 유익하기를 바랍니다.

XML에 잘못된 속성이 있으면 xmllint는 지원되지 않는 속성의 이름을 알려줍니다. 그러나 XML에 속성이 없으면 요소를 확인할 수 없다는 메시지가 나타납니다.

나는 매우 복잡한 규칙을 가진 매우 복잡한 XML을 작업하고 있으며, 이것에 익숙하지 않아 어떤 속성이 누락되었는지 추적하는 데 시간이 오래 걸립니다.

업데이트 : 방금 좋아하는 Java 도구를 찾았습니다. xmllint와 같은 명령 줄에서 실행할 수 있으며 RELAX NG를 지원합니다 : https://msv.dev.java.net/



2

빠르고 쉬운 XML 유효성 검사를위한 XML 편집기는 http://www.xml-buddy.com에 있습니다 .

설치 프로그램을 실행하기 만하면되며, 사용하기 쉬운 데스크탑 응용 프로그램이나 명령 줄을 사용하여 XML 파일의 유효성을 검사 할 수 있습니다. 또한 Schematron 및 RelaxNG도 지원합니다. 배치 유효성 검사도 지원됩니다 ...

2012 년 1 월 1 일 업데이트 : 명령 줄 도구를 무료로 사용할 수 있으며 Xerces를 XML 파서로 사용합니다.


1

XML에서 XSD를 검증하고 생성하는 훌륭한 시각적 도구 중 하나는 직관적이고 간단한 IntelliJ IDEA입니다.


1

XML 스키마를 Microsoft Visual Studio의 Intellisense에 연결할 수 있습니다. 이 옵션은 실시간 유효성 검사와 자동 완성 기능을 모두 제공합니다.

Microsoft Visual C ++ 2010 Express 무료 사본에서이 정확한 시나리오를 실행하고 있습니다.



0

Microsoft의 xsd를 사용하여 .NET 파일에서 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
}

내가 사용하는 XML을 생성하려면 xsd DOTNET.dll / type : CFGCLASS 및 schema0.xsd의 이름을 바꾸십시오. CFGCLASS.xsd

내가 사용하는 xsd 이름을 얻으려면 xmlstarlet sel -t -m / XXX / * -v local-name () $ 1 | sed 's / $ //'

이를 통해 xml 파일 내의 요소 태그를 사용하여 올바른 XSD를 선택할 수 있습니다.

결과적으로 bash 함수를 호출하여 모든 XML 파일을 스캔하고 확인할 수 있습니다. 여러 하위 디렉토리에 있더라도.

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