xml - 是否有理由根据 xsd :token or xsd:string 定义类型

标签 xml schema xsd

我正在处理许多 xsd 文件。我注意到有几种基于 xsd:token 和 xsd:string 的类型定义,没有任何限制。例如

<xsd:complexType name="BaseString">
    <xsd:simpleContent>
        <xsd:extension base="xsd:token"/>
    </xsd:simpleContent>
</xsd:complexType>

我想知道是否有这种定义的原因。为什么不使用 xsd:token 或 xsd:string 而不是 BaseString 类型? 任何的想法?

最佳答案

它看起来不是很好的设计,但它取决于更广泛的上下文,您没有通过这个示例向我们展示。

我见过定义专用 ID 的模式。假设您的域有 FooObjects。它们由 FooObjectIDs 标识。通常,FooObjectID 将被定义为 FooObjectIDType 类型。该类型又可以定义为 xsd:tokenxsd:string 的扩展。该类型将 FooObjectID 区分为不同于普通字符串(因此处理方式也不同于普通字符串)。

有时当 ID 是实际上是复合值的“智能 ID”时,您会看到这种情况。想象一下客户 ID 类似于:CUST-VA-3391。在所有数据管理中,一个典型的糟糕设计是这些“智能 key ”,它们将多条信息编码在一个 ID 中(弗吉尼亚客户 #3391)。像这样的 ID 的类型(以我的经验)通常看起来像你在这里的类型。

添加人工类型是为了区分这个特殊的东西和普通字符串,但惰性导致缺乏限制/与普通底层类型(xsd:token、xsd:string)没有区别。

底线——您创建派生类型的部分目的是为该类型注入(inject)一些额外的语义;它不是原始字符串,而是 FooObjectID。但良好做法往往表明进一步扩展/限制是适当的。

关于xml - 是否有理由根据 xsd :token or xsd:string 定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22957240/

相关文章:

jaxb - 如何更改 JAXB 生成的列表的名称

针对 XSD 模式的 Java XML 验证

android - Android 开发微调器的默认 Eclipse 主题?

c# - 检索 SQL Server 中表的 DataTable 信息

xml - jaxb 或 Coldfusion 的等价物

ruby-on-rails - 表之间的外键交叉引用

java - 如何在 Java 中有效地使用 SAXParseException

android - 将 dimens.xml 中的尺寸应用于使用 Html.fromHtml 格式化的文本

php - 解析xml并在mysql表中插入数据

java - 在 Java 中使用 XML 验证 XSD 的框架