2008-11-03 3 views
16

우리 시스템에서 중요한 문제인 성능 및 정확성을 위해 어떤 XML 유효성 검사 도구를 권장 할 수 있습니까? 우리는 다음과 같은 요구 사항이 있습니다RelaxNG를 사용하는 XML 스키마 유효성 검사

  • 그것은이다 하지 xmllint가
  • 이 RelaxNG
  • 지원 (아래 참조)
  • 쉽게 펄 (이것은 선택 사항이지만 좋은 것)
과 통합 할 수 있습니다

왜 xmllint가 아닌가요? (배경이고 원하는 경우 건너 뛸 수 있습니다.)

우리는 RelaxNG를 사용하여 XML을 검증하는 대형 Perl 시스템을 보유하고 있습니다. compact RelaxNG formattrang을 사용하여 표준 RelaxNG 형식으로 변환합니다. 그런 다음 xmllint을 통해 실제 유효성 검사를 수행합니다.

그 때 문제가 시작됩니다. xmllint 정기적으로 유효성 검사 오류를보고하는 데 문제가 있습니다. 거짓 긍정이나 부정을주지는 않지만 문서의 유효성을 검사하지 못하면 xmllint는 주어진 오류에 대해 잘못된 요소 나 속성을보고합니다. 때로는 이전 오류가보고되지 않았기 때문에 ('bar'는 필수이지만 누락 된 요소 인 'foo'를 따르기로되어 있었기 때문에) 오류가 올바른 경우 ("요소 'bar'가 표시되지 않을 것으로 예상했으나), xmllint가 ' 이것은 xmllint의 오랜 문제점이며 최신 버전조차도 동일한 문제가 있음을 기억하십시오. 우리는 종종 거대한 XML 문서를 가지고 있으며 오류를 잘못보고하면 클라이언트와 개발자 모두에게 큰 슬픔을 안겨줍니다.

+0

7 년 전 (지금은 2015 년)이 질문을 받았기 때문에 : xmllint는 여전히 목적에 맞지 않습니까? – Jens

+0

Jens : 그게 BBC에 있었고 몇 년 동안 거기에서 일하지 않았고 그 이후로 xmllint도 사용하지 않았습니다. – Ovid

답변

14

나는 JDrago가 올바른 생각을 가지고 있다고 생각합니다. RNG 유효성 검사를위한 libxml2 기반 도구를 피하기 위해 적어도 지금은. 나는 내 프로젝트에서 이것을 발견하고있다. 나는 최근에 RNG 검증과 관련하여 libxml2에 대한 두 가지 버그를 기록했다.

나는 jing을 권장합니다. 그것은 Relax NG의 창시자이자 XML 세계의 주요 조명 중 하나 인 James Clark에 의해 작성되었습니다. 그는 또한 이미 사용하고있는 trang의 저자이기도합니다. 이 코드 (및 trang)의 개발은 위에 링크 된 Google 코드 사이트에서 최근 재개되었습니다.

Jing은 우리 콘텐츠와 스키마에서 일관되게 옳은 것으로 입증되었으며, libxml2보다 훨씬 좋은 오류 메시지를 제공하고 있습니다.하지만 여전히 개선의 여지가 많이 남아 있습니다.

libxml2/xmllint에 대한 jing의 단점은 현재 OASIS XML 카탈로그를 사용하여 공개 및 시스템 식별자와 스키마를 가리키는 URI를 확인하지 않는다는 것입니다. 이는 'http'URI로 참조되는 스키마가 포함 된 경우 문제가 될 수 있습니다.이 스키마는 항상 네트워크를 통해 가져옵니다.

2

나는 xmllint가 동일한 기본 라이브러리 (libxml2 등)를 다른 것으로 사용한다고 의심합니다. 동일한 라이브러리의 다른 프론트 엔드가 다른 결과를내는 것으로 생각하는 것은 직관이 다릅니다.

2

rnv은 자유롭고 (무료 언론 에서처럼) 무료이며 명령 줄에서 실행되기 때문에 (Perl이 쉽게 호출 할 수 있습니다). 대부분의 경우 메시지는 정상입니다. 불행히도 더 이상 유지되지 않는 것 같습니다.

2

저는 RNV의 저자입니다. 그것은 sourceforge.net에서 유지 관리되며, 소스 포지와 debian 패키지 빌더 모두를 관리하는 관리자가 있습니다. 사실 코드가 변경되지 않는 것은 코드가 안정적이기 때문입니다. 보고 된 버그가 없습니다.

+1

분명히 사실이 아닙니다. 예를 들어, 2006 년 2 월에보고 한 xsd : anyURI 버그는 완전히 무시되었습니다. http://www.lemonde.fr/web/article/0,[email protected],[email protected],0.html과 같이 @가있는 URI가 잘못되었습니다. 거절했다. http://www.w3.org/TR/xmlschema-2/#anyURI – bortzmeyer

3

Hamcrest Schema을 사용하면 Hamcrest Matchers를 사용하여 RelaxNG에 대한 XML 문서의 유효성을 검사 할 수 있습니다.