gpt4 book ai didi

xml - 使用 Schematron 和 xsltproc 验证 XSD 模式

转载 作者:行者123 更新时间:2023-12-04 05:48:27 28 4
gpt4 key购买 nike

我很难验证结合 Schematron 的 SXD 模式。

遵循此 guide 中描述的步骤我在 <xs:appinfo> 之间加入了 schematron 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"/>

使用 schematron page 上列出的简单的基于 xsltproc 的脚本.不幸的是,我在脚本的最后一步收到以下错误消息。
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

我很感激帮助找出此错误的原因。

最佳答案

您的架构是正确的,并完成了它的意图......

问题出在脚本上:这个脚本期望接收一个 Schematron 模式,而你给它一个带有嵌入规则的 XML 模式,这是一种不同的野兽。

要进行验证,您需要运行第一个转换,该转换将从 XML Schema 中提取 Schematron 并对这个结果运行验证。

您还可以使用 xmllint (libxml) 根据 XML 模式验证文档,这是一种不同的操作。

要做到这一点,您可以更改下载ExtractSchFromXSD.xsl你的脚本:

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

或者,您可以使用 native 支持模式中嵌入的 Schematron 规则的实现或诸如 oXygen 之类的工具。 .

关于xml - 使用 Schematron 和 xsltproc 验证 XSD 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10384788/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com