6

ISO Schematron 標準が公開されてから 2 年が経ちましたが、ISO Schematron XSLT ファイルを使用した Java 実装をまだ見つけることができません (古いバージョンの Schematron のファイルとは対照的に、たとえばこちら: http://uploading.com )。 /files/c9c9cb87/SchematronXpath.jar/ )。

Javaメソッドから簡単に呼び出すことができる本番対応のISOスキーマバリデーターを知っている人はいますか?

4

4 に答える 4

9

さらにph-schematron、XSLT への変換とネイティブのプレーンな Java 検証の両方をサポートするものを使用できます。これは、ほぼすべてのケースで XSLT バージョンよりも高速です。詳細と簡単な紹介については、https://github.com/phax/ph-schematron/を参照してください。XML ファイルが Schematron ファイルと一致するかどうかを確認するコード例:

public static boolean validateXMLViaPureSchematron (File aSchematronFile, File aXMLFile) throws Exception { 
  final ISchematronResource aResPure = SchematronResourcePure.fromFile (aSchematronFile);
  if (!aResPure.isValidSchematron ()) 
    throw new IllegalArgumentException ("Invalid Schematron!"); 
  return aResPure.getSchematronValidity(new StreamSource(aXMLFile)).isValid ();
}
于 2013-11-07T17:08:29.170 に答える
6

Probatron4jは、ISO Schematron に対して検証できます。Web サイトでは、コマンド ラインから実行するように設計された単一の自己完結型 JAR が提供されますが、ソース コードがあれば、Java メソッドから Probatron を簡単に呼び出すことができます。これが私がやった方法の簡略化されたバージョンです:

public boolean validateSchematron(InputStream xmlDoc, File schematronSchema) {
    // Session = org.probatron.Session; think of it as the Main class
    Session theSession = new Session();
    theSession.setSchemaSysId(schematronSchema.getName());
    theSession.setFsContextDir(schematronSchema.getAbsolutePath());

    // ValidationReport = org.probatron.ValidationReport; the output class
    ValidationReport validationReport = null;
    try
    {
        validationReport = theSession.doValidation(xmlDoc);
    }
    catch(Exception e) { /* ignoring to keep this answer short */ }

    if (validationReport == null ||
        !validationReport.documentPassedValidation()) {
        return false;
    }
    return true;
}

JAR ファイル内から実行されていないことを Probatron に知らせるために、いくつかの小さな変更を加える必要がありますが、それほど時間はかかりません。

于 2012-12-04T15:45:56.113 に答える
0

SchematronAssertを確認できます(開示: 私のコード)。主に単体テスト用ですが、通常のコードにも使用できます。XSLT を使用して実装されます。

単体テストの例:

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

スタンドアロン検証の例:

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);

SVRL のオブジェクト表現を操作します。

ValidationOutput output = validator.validate(xmlSource, schemaSource);
// look at the output
output.getFailures() ... 
output.getReports() ...
于 2014-03-09T19:28:47.587 に答える
-1

jingライブラリは私にとってはうまくいきます。

于 2012-07-11T13:25:20.897 に答える