gpt4 book ai didi

java - XML 模式验证字符串的长度

转载 作者:行者123 更新时间:2023-12-02 09:05:50 25 4
gpt4 key购买 nike

我无法理解长度限制对于 XML 模式语言中的字符串意味着什么。我测试了两种不同的 XMLSchema validator 实现并得到了不一致的结果。我使用以下架构和文件进行测试:

<?xml version="1.0" encoding="UTF-8"?>
<test xmlns="http://www.example.org/NewXMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/NewXMLSchema NewXMLSchema.xsd ">
<id>&#x1f600;xx</id>
</test>

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/NewXMLSchema" xmlns:tns="http://www.example.org/NewXMLSchema" elementFormDefault="qualified">
<simpleType name="MyFixedString">
<restriction base="string">
<maxLength value="3"></maxLength>
</restriction>
</simpleType>
<complexType name="NewComplexType">
<sequence>
<element name="id" type="tns:MyFixedString"></element>
</sequence>
</complexType>
<element name="test" type="tns:NewComplexType"></element>
</schema>

IDE pycharm 在使用读取行在 id 元素下划线时给出错误,表明它不符合架构。使用 Python 3 执行的 Python 代码表示 XML 文件符合架构。我想知道 XML 文件是否符合架构。我认为重点是,如何计算字符(无论该术语的确切含义是什么):字符串的长度是 unicode 代码点的数量或 utf16 代理的数量或字素的数量。

该实现(Python 3,使用 AFAIK UFT-32)和 Java (UTF-16) 是否有可能泄漏到 XMLSchema 验证中?

有什么建议吗?

-- 米克

顺便说一句:Java 8 内置模式处理器提示我的示例也不符合模式。

最佳答案

maxLength 的正确语义是它适用于 Unicode 字符(代码点)的数量,而不适用于字符串的任何特定编码中的八位字节(或 16 位代码单元)的数量。

我不能说是否所有模式 validator 实际上都符合这个定义。但定义是明确的。

顺便说一句,您的示例使用 Saxon 模式 validator 验证得很好。

关于java - XML 模式验证字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59818374/

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