13

如果我创建一个需要模式 1.1 特性的 XML 模式(尤其是微妙的特性,比如在限制基本类型时删除可选元素),那么表明此模式不应与仅理解版本的处理器一起使用的最佳方法是什么1.0?

version在 XSLT 样式表文件中,可以使用属性来指示使用的 XSLT 规范的版本。

但是在 XSD 文件中,该version属性没有这个含义——它是一个自由格式的属性,它说明了模式的版本,而不是正在使用的规范版本。

是否需要标记使用 1.1 功能的模式?

我有一组使用 FPML 5.5 规范和一些自定义模式的复杂模式,它无法使用一些模式验证器进行验证,但我不确定这是因为验证器有错误还是因为模式巧妙地使用了 xml 模式1.1 特点。

4

2 回答 2

9

在这个时间点上,这个问题不是那么容易解决的;这是因为大多数 XSD 处理器都是 1.0,并且 XSD 1.1 规范中引入的模式版本不能向后应用。要了解有关它的更多信息(一般而言),请查看The Schema Versioning Namepsace以及第4.2.2 节条件包含中包含的示例。

您可以实现自己的预处理解决方案,即至少有助于选择合适的 XSD 处理器,例如:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning">

    <xsd:element name="e" vc:minVersion="1.1">
        <xsd:complexType>
            <xsd:all>
                <xsd:element name="a" minOccurs="0"/>
                <xsd:element name="b" maxOccurs="unbounded"/>       
            </xsd:all>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="e" vc:minVersion="1.0" vc:maxVersion="1.1">
        <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
                <xsd:element name="a" minOccurs="0"/>
                <xsd:element name="b" />            
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>      
</xsd:schema>

这样至少您将使用 XSD 1.1 认可的版本控制方法;它还带有一个处理模型。对于某些任务,建立一个至少可以处理XSD处理器(1.0或1.1)的预处理前处理器相对容易。为了在封闭环境中变得更简单,您还可以选择一个约定,您可以xsd:schema用 vc:minVersion="1.1" 标记整体 - 基本上是您似乎想要开始的内容。

关于您的最后一段,XSD 处理器的选择必须是断言而不是暗示。这是因为 XSD 1.1 允许在 XSD 1.0 中不可能的构造(例如,all包含最大出现次数大于 1 的粒子的合成器)......所以除非事先做出决定:要使用的处理器,XSD 可能会也可能不会无效。而无论使用何种处理器,其他内容都将无效。

于 2014-02-04T17:06:59.057 回答
8

在 XML Schema 开发列表上有一个与此相关的讨论:http: //lists.w3.org/Archives/Public/xmlschema-dev/2013Sep/0000.html

结论是,如果我们想指定 XML Schema 的版本,我们应该在 xsd:schema 元素上使用 vc:minVersion 和 vc:maxVersion 属性。这些属性不在模式命名空间中,它们在“ http://www.w3.org/2007/XMLSchema-versioning ”命名空间中。因此,您也可以在 XML Schema 版本 1.0 上设置它们,并且该模式将是有效的。

因此,如果要指定模式是否为 1.0 版,可以像这样在 xsd:schema 元素上设置版本属性: vc:minVersion="1.0" vc:maxVersion="1.1" (minVersion 包括在内,maxVersion 是独家的)。

如果要将架构版本设置为 1.1,可以像这样在 xsd:schema 元素上设置版本属性:vc:minVersion="1.1"。在这种情况下不需要设置 maxVersion 属性,因为我们还没有超过 1.1 的 XML Schema 版本。

于 2014-02-05T15:30:02.420 回答