如何从 1.0 切换到 XSD 1.1?

Dev*_*r87 7 xml schema xsd

我的 xsd 配置中有以下标头:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns="http://www.mycompany.com/schema/app"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.mycompany.com/schema/app"
           elementFormDefault="qualified">
Run Code Online (Sandbox Code Playgroud)

切换到 XSD 1.1 需要什么?

有必要开始使用<xs:assert/>标签。

Mat*_*ler 8

编辑:这个答案错误了 6 ​​年。我最初声称添加version该属性声明架构遵循 XML Schema 1.1 标准。但是,该属性与 XSD 版本无关,它可以用于任意用户定义的版本控制

我现在已经删除了虚假信息。


指示您的 XML 模式文档遵循 ​​XML 模式 1.1 规范意味着将以下内容添加到最外面的元素:

  • 定义 XML 模式版本控制的命名空间:xmlns:vc=http://www.w3.org/2007/XMLSchema-versioning
  • 添加属性vc:minVersion = "1.1"

以下是该元素的示例xs:schema

<xs:schema xmlns="http://www.mycompany.com/schema/app"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       targetNamespace="http://www.mycompany.com/schema/app"
       elementFormDefault="qualified"
       xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
       vc:minVersion="1.1">
Run Code Online (Sandbox Code Playgroud)

即使您添加此信息,您的架构处理器也可能无法处理断言等 XSD 1.1 构造,并且指示版本 1.1 不会神奇地启用 1.1 处理。

换句话说,“切换”到 XSD 1.1 并不意味着在您的xs:schema元素中提及版本,它意味着确保您的模式处理器理解 XML Schema 1.1。要找出答案,只需xs:assert在架构中包含一个元素并检查是否收到任何错误消息。也许您的工具中有架构版本的设置,就像 Oxygen 中那样:

在此输入图像描述

有关设置 XML 架构版本的更多方法,请参阅Oxygen 文档。

顺便说一句:如果不支持 XSD 1.1,可能仍然支持 Schematron——一种对于断言和类似规则非常有用的语言。