2009-07-15 2 views
0

다양한 제약 조건에 맞춰 XML 파일의 유효성을 검사해야합니다 : 요소 텍스트의 형식 및/또는 형식, 동시 발생, 날짜 비교 및 ​​날짜 계산 및 일부 사용자 정의 데이터베이스 (즉, 요소 ​​X는 하위 요소 A, B 및 C 만 포함 할 수 있음)의 규칙을 사용하고이를 수행하는 방법을 모르겠습니다.광범위한 제약 조건에 대해 XML 문서 유효성 검사

이 응용 프로그램의 현재 화신은 Perl 코드가 XSD 또는 RELAX NG를 사용하여 out-the-box에서 얻을 수있는 많은 기능을 복제한다고 생각하므로 Perl을 통해 이러한 제약을 적용합니다. 불행하게도 이들 중 하나를 사용하면 최종 사용자에게 숨겨진 오류 메시지가 표시됩니다. 이러한 비밀스러운 메시지를 우호적 인 것으로 매핑하는 것은 불가능합니다 (줄/줄 번호 제공 이외).

다음은 Schematron입니다. 위에서 언급 한 스키마 언어가 할 수없는 친숙한 메시지 및 제약 조건을 생성 할 수 있습니다. 불행히도 형식/형식 검사와 날짜 계산은 큰 XSLT 템플릿 해킹이됩니다.

이제 무엇을해야할지 모르겠습니다.

RELAX NG와 같이 Schematron과 RELAX NG의 결합이 가장 좋은 방법 인 것처럼 보이지만 RELAX NG에서 생성 된 오류로 인해 최종 사용자에게 유용한 정보를 제공 할 수 없습니다.

DB의 사용자 지정 규칙을 기반으로 수정할 마스터 스키마 템플릿을 사용하고 싶습니다.

원래 접근법을 최상으로 유지하고 있습니까? 아니면 Schematron/RELAX NG를 사용하고 형식/유형 집행을 XSLT 템플릿으로 레슬링해야합니까?

+0

오류는 "RELAX NG에서 제공하지"않으며 오류의 특정 구현에 의해 제공됩니다. 어느 쪽을 사용하고 있습니까? –

+0

사실. libxml을 사용하고 있습니다. –

답변

0

실용주의 사항에 따르면, 귀하의 작업은 실제로 XML 유효성 검사 중 하나가 아니며 아마도 하나의 작업으로 강제 적용되어서는 안됩니다.

귀하의 설명은 실제로 XML 문서 자체가 아닌 XML 문서 내에 포함 된 데이터의 도메인 특정 및 상황 별 유효성 검사가 많은 것처럼 읽습니다. 따라서 필자는 문서를 구문 분석하고 복잡한 데이터 기반 유효성 검사 제품군을 적용하는 코드에 유효성 검사기를 작성한다고 말하고 싶습니다. 귀하의 코드는 도메인에 대한 의미 론적 지식을 갖기 때문에 사용자들에게 더 나은 피드백을 줄 수있을 것으로 판단됩니다.

그런 시스템의 "첫 번째 단계"로 XML 스키마 시스템을 사용할 수 있다고 가정하지만, 결국 데이터를 구문 분석하고 어쨌든로드해야하는 경우 스키마 유효성 검사에서 아무 것도 추가하지 않는 것으로 나타났습니다. 왜냐하면 본질적으로 구문 분석하는 코드는 어쨌든 검증해야하기 때문입니다.

+0

도메인은 XML 문서입니다. 사용자 정의 규칙이 있지만 전체 요구 사항의 아주 작은 부분을 차지합니다. 유효성 검사는 통제 할 수없는 정교한 XML 사양을 시행하는 데 사용됩니다. 주어진 인스턴스 문서가 전달되면 다시는 전달되지 않습니다. 실패하면 수정되어 전송됩니다. 규칙은 다른 용도로 사용되지 않습니다. –

+0

아마도 우리는 당신의 상황을 충분히 이해하지 못했을 것입니다. "날짜 비교 및 ​​날짜 계산"및 "데이터베이스의 일부 사용자 정의 규칙"은 표준 XML 유효성 검사 언어에 적합한 후보는 아닙니다. 다른 용도로 사용할 데이터를로드 할 필요가 없다는 것을 이해했습니다. 따라서 두 가지 접근 방법이 가장 좋습니다. XML 유효성 검사 (스키마가 가장 쉬운 것으로 보이는 것)를 사용하고 문서를 구문 분석하고 날짜 계산과 같은 데이터 검사를 수행합니다. – MtnViewMark