当前位置: 首页 > 知识库问答 >
问题:

以编程方式将XSD 1.1模式转换为XSD 1.0?

胡承载
2023-03-14

如何将XSD 1.1模式自动转换为XSD 1.0模式,方法是去掉所有1.1功能,只保留与XSD 1.0兼容的子集?

我意识到这将限制您可以利用多少XSD 1.1功能,但是我想象的用例是一个模式,您可以发布XSD 1.1版本和更兼容的XSD 1.0版本,两者都描述相同的数据结构但是1.1版本有一些额外的


共有2个答案

谈旺
2023-03-14

正如您所预料的,一般情况下不可能进行转换。然而,考虑到你控制着v1。XSD,还有希望。XSD v1的附录G.1。1建议总结了与XSD v1相比的变化。0.简而言之,不要依赖附录G.1中描述的任何新构造或行为。

如果您不知道除了使用您提到的xsd:assert之外的所有更改,那么您可以使用一个简单的XSLT转换来维护v1中的映射。0 XSD到您的v1。1 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="xsd:assert"/>
</xsl:stylesheet>
陆浩博
2023-03-14

如果您想同时发布1.1模式和相关的1.0模式,那么最简单也是最好的方法可能是使用XSD1.1规范中描述的vc:名称空间。您可以使用vc:namespace标记1.1特性,如您提到的断言(或包含它们的声明),并提供1.0等价物或近似等价物。

我们可以使用它将XSD 1.1规范示例中的xs:assert标记为1.1-only特性:

<xs:complexType name="arrayType">
 <xs:sequence>
  <xs:element name="entry" minOccurs="0" maxOccurs="unbounded"/>
 </xs:sequence>
 <xs:attribute name="length" type="xs:int"/>
 <xs:assert test="@length eq fn:count(./entry)"
   xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
   vc:minVersion="1.1"/>
</xs:complexType>

任何XSD 1.1处理器都需要理解vc:命名空间并相应地过滤架构文档(接受vc: minVersion小于或等于1.1,或vc: maxVersion大于1.1,等等)。因此,带有vc:*属性的模式文档可以作为1.1模式发布。

一个符合标准的1.0处理器可以被更新以理解vc:名称空间,但我不知道有哪一个已经被更新了。因此,对于1.0处理器来说,在他们看到模式文档之前,需要对其进行过滤。

像kjhughes一样,我认为XSLT样式表可能是过滤的最佳选择。但是使用vc:*命名空间可以很容易地可靠地完成,并且不需要模式作者为了简化转换而最小化1.1特性的使用。

编写一个样式表来执行必要的过滤非常简单,但实际上您不必这样做:有一个XSLT1.0样式表来完成这项工作(完全公开;我编写了它)。以前也有一个在线演示,但我看到比特腐烂已经开始,在当前的浏览器中似乎不起作用;我有时间的时候会修好的。这些文档可能仍然有用。

 类似资料:
  • 问题内容: 我目前正在开发一个Web应用程序,该应用程序需要接受用户以任何格式(.avi,.mov等)上传的视频,并将其转换为flv以便在基于Flash的播放器中播放。 由于该站点是基于OpenCms的,因此最好的解决方案是为OpenCms提供一个现成的插件,该插件允许在后台执行转码操作的视频上传和播放,但是只有一组Java类可以完成转码,然后我可以自己制作上传表单和播放部分。 问题答案: 如果您

  • 问题内容: 我需要将Word文档转换为Java中的HTML文件。该函数将输入一个Word文档,而输出将是基于Word文档的页数的html文件,即如果word文档具有3页,则将生成3个具有所需分页符的html文件。 我搜索了可以将doc转换为html但没有结果的开源/非商业API。曾经做过此类工作的任何人都请帮助。 谢谢 问题答案: 我们使用tm-extractors,然后回到商业Aspose。两者

  • 问题内容: 请给我帮助。我正在使用一个Java应用程序,它将数据从txt文件转换为数据库,问题是该文件具有ANSI编码,由于它来自我的应用程序之外,并且当我将数据写到该文件时,我无法更改。数据库我有一些“ ???” 内。我的问题是,如何将从文件中读取的数据从ANSI转换为可以处理这些奇怪符号的UTF-8。我试过了Byte []到String的转换,但是没有用。 问题答案: 使用像这样打开一个解码阅

  • 问题内容: 我正在尝试使用带有spring-data-mongodb的自定义转换器。我想以编程方式创建它,但是出现以下错误: 以下是失败的代码段: 这是我的转换器类: 我要坚持的课程看起来像这样: 问题答案: 这个答案对OP来说可能有点晚了,但是我今天遇到了同样的问题并找到了解决方案… 要以编程方式进行设置,您需要先调用才能使用它。通过阅读的代码,我意识到了这一点。 这是一个例子:

  • 有一个网站这样做,但我想要一个图书馆或CLI。 谢了!

  • 对我来说,这似乎是如此基本和简单,但我在网上没有找到任何东西。 有许多关于如何获得JSON模式的示例,也有许多如何从以下对象创建mongoose模式的示例: 如果我试图直接放置JSON模式,我会得到一个错误 但是我在网上找不到从一种类型到另一种类型的转移。 以前有人有这个问题吗?