2017-04-19 5 views
0

いくつかのXMLの検証にSchematron.net nugetパッケージを使用していますが、診断タグを正しく使用する方法がわかりません。私は、次のXMLがありますSchematron.netに診断をトリガするにはどうすればよいですか?

<bk:books xmlns:bk="http://www.example.com/books"> 
    <bk:book publisher="QUE"> 
    <bk:title>XML By Example</bk:title> 
    <!--<bk:author>Benoit Marchal</bk:author>--> 
    <bk:publication-date>1999-12-31</bk:publication-date> 
    <bk:retailPrice>9.95</bk:retailPrice> 
    </bk:book> 
    <bk:book publisher="Addison Wesley"> 
    <bk:title>Essential C++</bk:title> 
    <bk:author>Stanley Lippman</bk:author> 
    <bk:publication-date>2000-10-31</bk:publication-date> 
    <bk:retailPrice>29.95</bk:retailPrice> 
    </bk:book> 
</bk:books> 

をそして、私の簡素化のSchematronスキーマは、次のようになります。

try 
    { 
     var bookValidator = new Validator(); 
     bookValidator.AddSchema("book.xsd"); 
     bookValidator.Validate("book.xml"); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

<schema xmlns="http://www.ascc.net/xml/schematron" 
     schemaVersion="1.01" > 
    <title>A Schema for Books</title> 
    <ns prefix="bk" uri="http://www.example.com/books" /> 
    <pattern id="authorTests"> 
    <rule context="bk:book"> 
     <assert test="count(bk:author)!= 0" diagnostics="bookTest"> 
     A book must have at least one author 
     </assert> 
    </rule> 
    </pattern> 
    <diagnostics> 
    <diagnostic id="bookTest"> 
     The book that has no author is <value-of select="bk:title"></value-of> 
    </diagnostic> 
    </diagnostics> 
</schema> 

私はこのスキーマを行使するために実行しているコードは次のようになります

これを実行すると、次のコンソール出力が表示されます。

Results from Schematron validation: A Schema for Books 
    From pattern "" 
     Assert fails: A book must have at least one author 
     At: /bk:bk:books[1]/bk:bk:book[1] 
      <bk:book publisher="QUE">...</bk:book> 
      (Line: 3, Column: 4) 
      xmlns:bk="http://www.example.com/books" 

診断タグの出力がコンソールに表示されないのはなぜですか?

答えて

0

NMatrix.Schematronの実装がSchematron機能のフルセットをサポートしていないようです。ソースコードを見ても、診断要素への参照はまったく見つかりません。さらに、コードはXPath 1.0と以前の実装のSchematron(名前空間がISO標準化によって変更される前)をサポートするように見えます。最良のアドバイスは、Schematron "Skeleton"実装をガイドとして使用して、Schematronパイプラインを実装することです。このガイドは、ここにあります:http://schematron.com/front-page/the-schematron-skeleton-implementation/

関連する問題