问题标签 [xsd-1.1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
124 浏览

xpath - XSD 1.1 断言依赖于实现的结果

考虑以下带有简单断言的简单模式:

让我们看一下断言:

左操作数为真,而第二个操作数在计算时会产生错误(因为名称函数需要节点参数而不是字符串)。Saxon 验证器说断言满足,Xerces 验证器说不满足

根据XPath 1.0 规范

如果左操作数的计算结果为真,则不计算右操作数

所以根据 XPath 1.0,这个断言应该被满足而不会引发错误,因为不应该评估正确的操作数。但是,XSD 1.1 使用 XPath 2.0,它允许依赖于实现的评估顺序,状态

如果 XPath 1.0 兼容模式为 false [...],如果第一个表达式评估为 true,则 or 表达式可以返回 true,如果第一个表达式的评估引发错误,它会引发错误 [...]。存在错误时,逻辑表达式不是确定性的

XSD 1.1 规范中,我们可以清楚地阅读:

要使 XPath 表达式属性记录 X 有效,必须满足以下所有条件

[...]

2.2.1 XPath 1.0 兼容模式为假。

[...]

据我了解,在 XSD 1.1 中,XPath 兼容模式为假,因此断言结果依赖于实现,因此XML 文档应该对相同的 XSD 有效,具体取决于验证器实现。在这种情况下,Saxon 正确地说明了断言得到满足,而 Xerces 也正确地说明了断言没有得到满足。这是对的还是我错过了什么?

0 投票
2 回答
79 浏览

xml - 参数化允许的数字范围或嵌入类型名称?

从我到目前为止所看到的,我的问题可能无法在给定的限制内解决,但我会在这里给它一个机会。

我正在尝试编写一个与非常简单的 XML 匹配的 XSD(1.1) 文件。问题是 XML 标记中存在属性,这迫使我使用 xs:extension。一个元素的例子:

而我创建的名为“int1TO10”的类型如下所示:

这确实有效,问题在于它需要大量编写,如果您想更改某些内容,则需要更改引用名称以保持一致以及定义类型中的值。如果这是一个小文件,这将是可行的;但是这里有很多元素,它们几乎可以有最小和最大整数的任意组合。因此,对于每个新元素,有人必须检查一个类型是否已经存在,或者必须创建它。这一切都让人感到难以置信的多余。

我正在寻找的是一个简单的解决方案:

尽管从我的发现来看,这似乎是不可能的。例如,在这个 Stackoverflow 帖子中,接受的答案表明我目前正在做的事情就是要走的路;虽然那个帖子已经有点老了,所以也许我错过了一些最近的突破?

我能想到的唯一其他选择是重组 XML 文件本身,从 (current)

这还需要相当多的工作和更改与 XML 一起使用的其他一些东西(脚本等),所以我宁愿避免这种情况。

所以总结一下:有没有办法不为我的元素可以拥有的每个新 Integer 组合编写新的 simpleType ?欢迎提出任何建议,也许还有完全不同的方法或 XSD 结构?

0 投票
3 回答
1925 浏览

xml - 指定的类型未被识别:name='CD', namespace='urn:hl7-org:v3

我正在尝试使用自动生成的 ac# 类反序列化 XML 文件。当我尝试反序列化 xml 文件时,出现异常“无法识别指定的类型。” 有没有人遇到过这个问题?对你的帮助表示感谢。

我试图加载 c# 类和 xsd 文件,但它们太大而无法在此处加载。

c# 类是从使用下面的 xml 文件创建的 xsd 文件生成的。创建了两个xsd文件qrda.xsd和qrda1.xsd,使用如下命令生成c#类(xsd qrda.xsd qrda1.xsd /c)

0 投票
1 回答
2228 浏览

xml - 限制 XSD 中的特定数字

我正在尝试创建一个 XSD,它应该验证 XML 元素的整数值。我想要实现的是能够将此值限制为多个范围(因此 min/maxInclusive 不会这样做)和一些特定值。

让我们举个例子。我希望元素有效,如果它包含 1、9 到 12 之间的数字或 15 到 20 之间的数字。我试图想出一个模式

但这不起作用,因为(据我了解)9-12 部分执行类似 9|0|1.... 的操作,因为它不能将 12 解释为一个整体。用个位数的数字,如

它确实有效。我试图将多位数字括在更多的括号中,例如 9-(12),但无济于事。

我可以尝试以这样的方式使用枚举:

,但这是非常不切实际的,尤其是对于大范围。模式形式的相同事物也是如此:

所以我现在看到了两条路径:要么有一个模式,我自己无法想出,它允许我使用多个单个数字和范围,包括多位数字,或者有一种方法可以做某事喜欢

据我所知,一般来说,创建这样一个正则表达式似乎相当困难,我的同事们对正则表达式有更多经验。在这里为我的确切示例提出本地化解决方案并不太难,但我正在寻找一个通用解决方案,通过它很容易得到一个任意列表,如 (1,3-5,9-12,99 -999) 并在没有太多麻烦的情况下对其进行 XSD 限制。

据我所知,将范围拆分为包含的所有数字的枚举方法似乎是最有可能实际可行的方法,但它仍然会非常难看。

这是关于 XSD 1.1。也许有一种完全不同的方法我还没有偶然发现?

编辑:即使我只是自我回答,我将把问题留到今天,以防有人能想出比我创造的东西更优雅的东西。(我不确定删除问题 - 如果您认为这没有帮助,请标记它或类似的东西。谢谢。)

0 投票
1 回答
239 浏览

xsd - XSD 1.1 断言测试包含单引号

任何人都知道为什么以下不起作用?使用 Xerces 验证 xsd

当我使用单引号'实体时出现错误......

谢谢

0 投票
1 回答
1920 浏览

xml - Does libxml2 supports XSD 1.1

Does libxml2 latest release supports XSD 1.1 for XML validation?

I am using libxml2 v2.6.30 for XML validation with XSD (schema) 1.0. But, I it does not support XSD v1.1. I am not sure if the latest version of libxml2 supports XSD 1.1 or not. Any idea?

0 投票
2 回答
188 浏览

xml - XSD 断言违规可以是警告而不是错误吗?

我一直在使用 XML Schema 1.1,因为我想在模式中定义一些断言。问题是我是否可以将任何断言错误作为简单的警告处理。

原因是任何不一致都会在我的网站中自动处理,所以我想通知用户所做的更改。

也许有一个我不知道的“断言”的合适替代方案。

0 投票
1 回答
975 浏览

java - 如何准确解析 XSD1.1 功能标签?

我一直在使用 XSOM 解析器 (xsom-20140925.jar) 来解析 XSD 1.0 并能够解析所有 xs:elements 和限制(如模式、minOccurs 等)。

最近我们的 XSD1.0 升级到了 XSD1.1 版本,其中包含了新的断言标签。我的 XSOM 解析器无法识别此断言标记并引发以下异常。

无法解析输入流:org.xml.sax.SAXParseException:意外<xsd:assert>出现在行。java.lang.NullPointerException

基本上我的需要是将 XSD 中的所有限制自动化到 JavaScript 函数,以便可以验证客户端 UI。

我已经完成了谷歌搜索并了解 Xerces-j 只能针对 XSD1.1 验证 XML。

但我的要求是解析断言值并转换为 JavaScript 函数。

考虑下面的断言示例:这里我需要解析双引号“”之间的值,并根据条件到达一个 JavaScript 函数。

有没有办法实现上述要求?任何帮助或建议都会对我有很大帮助。

..................................................... ......................

感谢您的回答。通过关闭 sax 验证,我可以解析断言标记值。但我的要求是将这些作为 XSD1.1 功能的断言值(如下所示)转换为 Java 正则表达式或任何可以评估的表达式,并且我应该具有正确的链接,即该断言标记所属的元素。

我了解 xercesImpl-xsd11-2.12-beta 具有可以使用的 Xpath2.0 处理器。但是我无法将 XSD 解析为带有 assert 标签的 XSModel。

使用的 XSD 文件:

要解析的 Java 代码:

System.setProperty(DOMImplementationRegistry.PROPERTY, "org.apache.xerces.dom.DOMXSImplementationSourceImpl");

执行时控制台中显示以下错误:[Error] testxsdassert.xsd:17:65: s4s-elt-invalid-content.1: 'NodeType' 的内容无效。元素 'assert' 无效、放错位置或过于频繁地出现。

任何线索或建议都会帮助我。

谢谢。

..................................................... .........................................

很抱歉没有明确要求。让我再试一次。

  1. 现有的 XSOM 解析器(参见下面的代码)将解析任何 XSD 并针对 XSD 中存在的任何元素检索所有限制,例如 MINLENGTH、MAXLENGTH、PATTERN、ENUMERATION。这个解析器的意图是仅仅解析这些值并根据它的元素名称进行存储。对于以下示例(parser.xsd),此结构派生-> {allowedMonths,["JAN","FEB"]}

解析后,我会将解析后的结构 {allowedMonths,["JAN","FEB"]} 转换为 JavaScript 函数,在 UI 验证中调用此函数以检查用户输入的值是否动态符合 XSD。

到目前为止,这一切都很好。这个解决方案是自动化的,这样在 XSD 中的任何新添加时,这个解析器都会处理 JS 代码的生成。

  1. 要求:现在 XSD 已得到增强,包括具有跨字段验证。所以最终我不得不增强我的解析器来为每个元素捕获这些断言,并为 XSD 的每个元素提供 JavaScript 函数。所以我需要找到一种方法来解析这些存在于任何简单和复杂类型元素中的断言值。

您将解析为原始类型 XML 的建议似乎不适合我现有的 XSOM 解析器。即我正在寻找解析器 API 来获取标记的值,因此该解决方案对任何 XSD 都是通用的。

有关此方法的任何建议都将有助于解决问题。

0 投票
1 回答
618 浏览

xml - 如何获取 XSD1.1 Schema Model 进行解析?

以下程序将 schemaLanguage 设置为“ http://www.w3.org/XML/XMLSchema/v1.1 ”,newSchema() 返回类型为 {org.apache.xerces.jaxp.validation.SimpleXMLSchema} 的 Schema。我无法导入类,错误是 - org.apache.xerces.jaxp.validation.SimpleXMLSchema 类型不可见

我的意图是将 XSD(Ver 1.1)断言值(如下所示)解析为 XPath 表达式,并且在 SimpleXMLSchema 对象中可用。

有没有其他方法可以获取 XSD1.1 Schema 对象?

使用的jar:xercesImpl-xsd11-2.12-beta-r1667115.jar、org.eclipse.wst.xml.xpath2.processor-2.1.100.jar

任何建议/帮助都将帮助我解决问题。谢谢。

0 投票
1 回答
433 浏览

xsd - 简单类型由属性驱动的元素的 XML 模式

我想为包含选项的文档编写一个 XML 模式 (xsd 1.1)。每个选项都有一个名称和一个类型(如布尔值、整数、字符串等...)以及与该类型匹配的数据。类型列表是固定的,但很长。(为简单起见,清单 3 中仅列出了 3 个。)

我如何在没有大量重复的情况下做到这一点?

用例 1

这是此架构的有效文档..

清单 1:

用例 2

此文档对此模式无效,因为 @type 属性的简单类型位是错误的。

到目前为止我尝试过的...

清单 3 是我迄今为止的尝试。但这很糟糕,因为我必须为每个数据类型重新声明 @name 属性。有更好的解决方案吗?也就是说,我不必为每种可能的数据类型重新声明 @name 属性。

清单 3: