2009-05-26 38 views
6

Theo như tôi có thể biết, JAXP by default supports W3C XML Schema and RelaxNG from Java 6.Làm cách nào để xác thực tài liệu đối với các lược đồ Schematron trong Java?

Tôi có thể thấy một vài API, chủ yếu là thử nghiệm hoặc không đầy đủ, trên schematron.com links page.

Có cách tiếp cận nào về việc xác thực giản đồ trong Java hoàn chỉnh, hiệu quả và có thể được sử dụng với API JAXP không?

+0

Hoặc JAXP không hỗ trợ RelaxNG rất tốt, hoặc tôi phải làm điều gì đó sai khi tôi cố gắng sử dụng nó. –

+0

Chưa thử RelaxNG tbh, chỉ cần WXS – Brabster

+0

Không hoàn toàn là một sự lừa gạt, nhưng cũng thấy [Tôi có thể tìm thấy việc triển khai Java của trình xác nhận hợp lệ ISO Schematron ở đâu?] (Http://stackoverflow.com/questions/10126256/where-can -i-find-a-java-triển khai-of-an-an-is-schematron-validator) – Pops

Trả lời

6

Jing hỗ trợ xác thực Schematron trước ISO (lưu ý rằng việc triển khai của Jing cũng dựa trên XSLT).

Cũng có các triển khai XSLT có thể được gọi rất dễ dàng từ Java. Bạn cần phải quyết định phiên bản nào của Schematron mà bạn quan tâm và sau đó lấy bảng định kiểu tương ứng - tất cả chúng đều có sẵn từ schematron.com. Quá trình này rất đơn giản đơn giản, liên quan đến cơ bản 2 bước sau:

  • áp dụng XSLT bộ xương trên schema Schematron của bạn để có được một kiểu XSLT mới thể hiện schema Schematron của bạn trong XSLT
  • áp dụng XSLT thu được trên tài liệu ví dụ của bạn hoặc tài liệu để xác thực chúng

JAXP chỉ là một API và nó không yêu cầu hỗ trợ cho Relax NG từ việc triển khai. Bạn cần phải kiểm tra việc thực hiện cụ thể mà bạn sử dụng để xem có hỗ trợ Relax NG hay không.

+0

"JAXP chỉ là một API và nó không yêu cầu hỗ trợ cho Relax NG từ việc thực hiện." Từ "không" trong câu này là một sai lầm, phải không? Bạn có nghĩa là nó * không * yêu cầu hỗ trợ, phải không? –

+0

Không, nó không phải là một sai lầm. JAXP chỉ yêu cầu hỗ trợ cho Lược đồ XML W3C, đối với các ngôn ngữ lược đồ khác mà bạn cần kiểm tra để xem việc triển khai có hỗ trợ điều đó hay không. Xem thêm http://java.sun.com/developer/technicalArticles/xml/jaxp1-3/#Validate%20XML%20against%20any%20schema –

2

Triển khai thực hiện Java Schematron thuần túy được đặt tại https://github.com/phax/ph-schematron/ Nó mang lại hỗ trợ cho cả phương pháp XSLT và cách tiếp cận thuần Java.

1

Bạn có thể xem SchematronAssert (tiết lộ: mã của tôi). Nó có nghĩa là chủ yếu cho thử nghiệm đơn vị, nhưng bạn có thể sử dụng nó cho mã bình thường quá. Nó được thực hiện bằng cách sử dụng XSLT.

Unit dụ thử nghiệm:

ValidationOutput result = in(booksDocument) 
    .forEvery("book") 
    .check("author") 
    .validate(); 
assertThat(result).hasNoErrors(); 

độc lập xác nhận ví dụ:

StreamSource schemaSource = new StreamSource(... your schematron schema ...); 
StreamSource xmlSource = new StreamSource(... your xml document ...); 
StreamResult output = ... here your SVRL will be saved ... 
// validation 
validator.validate(xmlSource, schemaSource, output); 

Làm việc với một đại diện đối tượng của SVRL:

ValidationOutput output = validator.validate(xmlSource, schemaSource); 
// look at the output 
output.getFailures() ... 
output.getReports() ... 
Các vấn đề liên quan