【问题标题】:Use existing XML Schema type definitions in pattern restriction在模式限制中使用现有的 XML Schema 类型定义
【发布时间】:2021-06-06 15:31:55
【问题描述】:

我正在为现有的 XML 格式创建一个 XML 模式。该架构基于已经生成 XML 的代码和示例输出。

有没有办法在模式限制中使用现有数据类型?

示例一

日期以现有 XML 格式编码为 YYYYMMDD(例如“20210308”)。这与使用 YYYY-MM-DD 的现有 XML Schema date type definition 不匹配(例如“2021-03-08”)。定义类型的最佳方法似乎是具有模式限制的字符串。我可以引用模式中的其他类型,例如gYearyearFrag?那会让我写

<xs:pattern value="&yearFrag;&monthFrag;&dayFrag;" />

而不是

<xs:pattern value="-?([1-9][0-9]{3,}|0[0-9]{3})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])" />

这可能吗?定义这种类型的最佳方式是什么?

示例二

有一个以 XML 格式编码的字符串,其中包含先前定义的自定义简单类型。我可以在新模式中引用它吗?

示例第一种类型:

<xs:simpleType name="myCustomId">
  <xs:restriction base="xs:string">
    <xs:pattern value="m[0-5]t[0-9]{0,10}" />
  </xs:restriction>
</xs:simpleType>

预期重复使用示例:

<xs:simpleType name="idBasedName">
  <xs:restriction base="xs:string">
    <xs:pattern value="export_&myCustomId;_[crs]\.csv" />
  </xs:restriction>
</xs:simpleType>

这可能吗?最好的定义方式是什么?

【问题讨论】:

    标签: xml xsd schema


    【解决方案1】:

    能否引用模式中的其他类型,例如 gYear 或 yearFrag?

    不,XML Schema 正则表达式子集在此处定义:https://www.w3.org/TR/xmlschema-2/#regexs 它不包括对 XSD 语法片段的任何特殊支持。

    有一个以 XML 格式编码的字符串,其中包含先前定义的自定义简单类型。我可以在新模式中引用它吗?

    我没有比这更好的了:https://www.w3.org/TR/xmlschema-2/#rf-pattern 特别注意标题为“多种模式”的部分

    【讨论】:

    • 太糟糕了,这是不可能的,但感谢您的确认。关于如何组合多种模式的规则非常有用,再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多