Validating XSD Schema with Schematron and xsltproc

痞子三分冷 提交于 2020-01-02 09:55:36

问题


I'm having difficulty validating an SXD schema combined with Schematron.

Following the steps described in this guide I've incorporated schematron between the <xs:appinfo> tags in an XSD document as follows:

<?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>

This document is supposed to test (or validate) the document

<?xml version="1.0" encoding="ISO-8859-1"?>
<Test Attribute1="attr1"/>

using the simple xsltproc-based script listed on the schematron page. Unfortunately, I'm getting the following error message at the last step of the script.

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

I'd appreciate help figuring out the cause of this error.


回答1:


Your schema is correct and does what it is meant to do...

The issue is with the script: this script expects to receive a Schematron schema and you give it a XML Schema with embedded rules which is a different kind of beast.

To do your validation, you need to run a first transformation that will extract the Schematron from XML Schema and run validate on this result.

And you could also use xmllint (libxml) to validate the document against the XML Schema which is a different operation.

To do, you can change download ExtractSchFromXSD.xsl your script to:

#!/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

Alternatively, you could use an implementation that natively supports embedded Schematron rules in schemas or a tool such as oXygen.



来源:https://stackoverflow.com/questions/10384788/validating-xsd-schema-with-schematron-and-xsltproc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!