XSD 검증기

WebAssembly로 컴파일된 libxml2(xmllint와 같은 엔진)로 XML을 XSD·RELAX NG·DTD에 대해 검증하고, 위반 사항마다 줄 번호를 알려줍니다.

실제 XML 도구가 쓰는 것과 같은 엔진인 libxml2(WebAssembly)로 파싱·검증합니다 — 직접 만든 정규식 검사기가 아닙니다.

XML을 XSD 스키마로 검증

XML 문서와 XSD(XML 스키마 정의)를 붙여넣으면 문서가 스키마를 따르는지 검사하고, 누락된 필수 요소, 순서가 잘못된 요소, xs:positiveInteger·xs:date 같은 데이터 타입 위반, 누락된 필수 속성 등 위반한 규칙을 모두 나열합니다. 각 위반은 libxml2가 찾은 줄 번호와 함께 표시되어 어디를 고쳐야 하는지 바로 알 수 있습니다. libxml2의 메시지는 원문 그대로 두고, 흔한 XSD 위반은 그 아래에 어떤 규칙을 어긴 것인지 한국어로 풀어 씁니다 — 형식에 맞지 않는 값, 순서가 틀렸거나 그 자리에 선언되지 않은 요소, 네임스페이스 불일치, 빠진 자식 요소나 필수 속성, 스키마가 선언하지 않은 속성이나 루트 요소, 열거값·패턴 위반 등입니다. 알아보지 못한 메시지에는 추측을 붙이지 않습니다. 스키마 칸을 비워 두고 검증하면 문서가 올바른 XML 형식인지만 검사하고, “올바른 형식 — 스키마가 없어 XML 문법만 검사했습니다”라고 알려 줍니다. 스키마 언어 선택에서 XML 문법의 RELAX NG나 DTD를 고르면 그것으로도 같은 방식으로 검증합니다. RELAX NG의 compact 문법은 읽지 못합니다.

엔터프라이즈·SOAP 스키마, Java 툴체인 불필요

검증은 WebAssembly로 컴파일된 libxml2(xmllint --schema와 동일한 엔진)로 처리되어 복합 타입, 네임스페이스, 데이터 타입 패싯까지 처리합니다. 여러 파일로 나뉜 스키마도 됩니다. “여러 파일로 된 스키마 열기…”로 그 파일들을 한꺼번에 고르면 다른 파일이 참조하지 않는 파일이 입력 칸에 들어가고, 나머지는 파일 이름으로 xs:include·xs:import 참조에 답합니다. 그래서 schemaLocation="common/types.xsd"는 고른 types.xsd를 찾아갑니다. 모든 처리는 브라우저에서 이루어지므로 스키마와 문서가 기기를 떠나지 않으며, 로컬에 xmllint나 XSD 라이브러리, Java/.NET 툴체인을 설치할 필요가 없습니다.

자주 묻는 질문

어떤 XSD 버전을 지원하나요?

libxml2 엔진(xmllint와 동일)을 통해 XML Schema 1.0을 지원합니다. 복합 타입, 시퀀스, 네임스페이스, 데이터 타입 패싯을 처리합니다. XSD 말고도 XML 문법의 RELAX NG와 DTD로 검증할 수 있습니다.

위반마다 줄 번호가 함께 나오는 이유는 무엇인가요?

libxml2가 문제를 찾은 위치를 기록하기 때문에 각 메시지는 줄 번호로 시작합니다("Line N: …"). XML 문법 오류에는 열 번호도, 여러 파일 스키마의 다른 파일에서 난 문제에는 그 파일 이름도 붙습니다. 두 입력 칸 중 한 곳의 문제라면 메시지 옆의 N행으로 이동을 누르면 그 줄이 해당 입력 칸에서 선택되어, 문제가 된 요소나 속성으로 곧장 찾아갈 수 있습니다. 메시지 본문은 libxml2가 낸 영어 원문 그대로 두어 검증기가 실제로 무엇이라고 했는지 확인할 수 있고, 흔한 위반에는 그 아래에 어떤 스키마 규칙을 뜻하는지 한국어 설명이 붙습니다.

여러 파일로 나뉜 스키마로 검증하려면 어떻게 하나요?

여러 파일로 된 스키마 열기…를 누르고 그 스키마의 파일을 한꺼번에 고르세요. 다른 파일이 include하거나 import하지 않는 파일이 스키마 칸에 들어가고, 나머지는 그 아래에 나열됩니다. include와 import는 파일 이름으로 풀리므로 schemaLocation이 common/types.xsd여도 어느 폴더에서 골랐든 types.xsd를 찾아갑니다. 파일들은 그 검증에만 libxml2에 넘겨지고, 그 파일들 빼기로 뺄 수 있습니다. RELAX NG의 include와 externalRef도 같은 방식으로 풀립니다.

스키마 없이 검사하거나, 오류를 쉬운 말로 볼 수 있나요?

네, 둘 다 됩니다. 스키마 칸을 비워 두고 검증하면 XML이 올바른 형식인지만 검사하고, 통과하면 스키마에 맞는다고 하지 않고 “올바른 형식 — 스키마가 없어 XML 문법만 검사했습니다”라고 표시합니다. 스키마로 검증할 때는 libxml2 메시지를 원문 그대로 두고, 형식에 맞지 않는 값·순서가 틀린 요소·네임스페이스 불일치·빠진 자식 요소나 속성·열거값·패턴 같은 흔한 위반에는 그 아래에 어떤 규칙을 뜻하는지 한국어 문장을 붙입니다. 알아보지 못한 메시지에는 추측으로 설명을 붙이지 않습니다.

위반 목록을 저장해서 이슈에 붙일 수 있나요?

네. 위반 목록 위의 복사는 목록 전체를 클립보드에 담고, 다운로드는 xsd-validator-issues.txt로 저장합니다. 한 줄에 위반 하나씩, 화면에 나온 그대로 libxml2의 원문 메시지와 줄 번호가 들어갑니다. 흔한 위반 아래 붙는 한국어 설명은 화면에만 있고 파일에는 들어가지 않습니다.