2012-04-30 20 views
2

Schematronと組み合わせたSXDスキーマの検証に問題があります。Schematronとxsltprocを使用してXSDスキーマを検証する

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="Test"> 

     <xs:annotation> 
      <xs:appinfo> 
       <sch:pattern name="Testing schematron" xmlns:sch="http://purl.oclc.org/dsdl/schematron"> 
        <sch:rule context="Test"> 
         <sch:assert test="@Attribute1">Attribute 1 exists</sch:assert> 
        </sch:rule> 
       </sch:pattern> 
      </xs:appinfo> 
     </xs:annotation> 

     <xs:complexType> 
      <xs:attribute name="Attribute1" type="xs:string" use="optional"/> 
      <xs:attribute name="Attribute2" type="xs:string" use="optional"/> 
     </xs:complexType> 
    </xs:element> 

</xs:schema> 

この文書はテスト(または検証)することになっている文書

<?xml version="1.0" encoding="ISO-8859-1"?> 
<Test Attribute1="attr1"/> 
次のように私はXSD文書の <xs:appinfo>タグの間のSchematronを取り入れてきました。この guideで説明する手順に従い

シンプルなxsltprocベースのスクリプトを使用して、schematron pageにリストされています。残念ながら、スクリプトの最後のステップで次のエラーメッセージが表示されます。

step3.xsl:13: parser error : Extra content at the end of the document 
plates select="*|comment()|processing-instruction()" mode="M0"/></axsl:template> 
                      ^
cannot parse step3.xsl 

このエラーの原因を理解していただきありがとうございます。

答えて

3

あなたのスキーマが正しいか、それを行うには何を意味するかん...

問題は、スクリプトを使用することです:このスクリプトは、Schematronのスキーマを受信することを期待して、あなたは、組み込みのルールとそれをXMLスキーマを与えます別の種類の獣。

検証を行うには、XMLスキーマからSchematronを抽出し、この結果に対して検証を実行する最初の変換を実行する必要があります。

xmllint(libxml)を使用して、異なる操作であるXMLスキーマに対してドキュメントを検証することもできます。あなたはネイティブでスキーマやツールなどoXygenに埋め込まれたSchematron規則をサポートする実装を使用することができ、また

#!/bin/bash 

echo XSD validation 
xmllint -schema $1 $2 

echo Step0 ... 
xsltproc ExtractSchFromXSD.xsl $1 > schema.sch 

echo Step1 ... 
xsltproc iso_dsdl_include.xsl schema.sch > step1.xsl 

echo Step2 ... 
xsltproc iso_abstract_expand.xsl step1.xsl > step2.xsl 

echo Step3 ... 
xsltproc iso_svrl_for_xslt1.xsl step2.xsl > step3.xsl 

echo Validation ... 
xsltproc step3.xsl $2 | tee result.svrl 

:行うには

は、あなたがにダウンロードExtractSchFromXSD.xslスクリプトを変更することができます。

+0

ありがとうございました。できます。しかし、あなたはまだXSD2がちょうど標準化されているという事実を考慮して、Schematronの使用を主張していますか? – Olumide

+1

あなたはXML Schema 1.1を意味しますか?) Schematronは、使用できるXPath式に制限を課すXML SChema 1.1アサーションよりもはるかに柔軟性があり、エラーメッセージを定義するためにSchematron独自の機能を保持します。私の助言は、あなたのニーズを満たすときにXSD 1.1を使用することですが、必要に応じてSchematronを使用することができます。 –

関連する問題