【问题标题】:Add attribute / tag unrelated to XML file inside XSD在 XSD 中添加与 XML 文件无关的属性/标记
【发布时间】:2018-03-24 04:08:06
【问题描述】:

我习惯于创建 XML 文件,但对于创建自己的 XSD 文件来验证 XML 内容是很陌生的。所以我想问几个关于 XSD 文件的问题。

首先,我有一个 XML 文件。现在我需要创建一个 XSD 文件来严格验证 XML 内容。但我也想使用相同的 XSD 文件在我的网站中生成一些 UI 供用户输入值。就像对于每个标签或每个标签内的每个属性一样,我们将有 1 个输入、选择框、切换按钮等。之后,使用输入的值和 XSD 文件结构生成 XML 文件。

但是现在我对这两种情况有一个问题:

  1. 我需要一个标签来向我们的用户显示这个输入字段的用途。我可以在每个标签中放置一个具有固定值的属性以将其用于标签。但是 out XML 标签不需要这个属性。那么如何在 XSD 文件中添加一些东西来存储每个标签的标签而不影响 XML 文件呢?

  2. 我想创建一个下拉列表,选择其中一个值,然后在生成时,XML 文件会将所选值作为其属性值之一。要做到这一点,我可以使用枚举约束来使用限制。但有时该值很难理解,因此我需要显示其他内容,例如值为 1 但文本显示为“正在运行”。这有点像上面的问题,但需要限制部分。

那么任何人都可以帮助我解决这两个案例。我应该在 XSD 文件中使用什么标签、属性来将这些不相关的信息存储到 XML 文件中?

谢谢。

================================================ =====

更新:更具体地说明我的问题。 所以例如我在我的 xsd 文件中有这个

<xs:element name="car">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="Audi"/>
      <xs:enumeration value="Golf"/>
      <xs:enumeration value="BMW"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element> 

这个只有一个限制值来验证xml标签。但我想为每个枚举标签添加另一个值来存储标签或类似的东西:

<xs:element name="car">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="Audi" label="Option 1"/>
      <xs:enumeration value="Golf" label="Option 2"/>
      <xs:enumeration value="BMW" label="Option 3"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element> 

而且这个添加的东西不会使xsd文件无效,也不会影响xml文件的验证。

================================================ ==============

更新 2:

我需要使用 xsd 文件来生成这样的 UI

以value作为每个选项的值,label作为每个选项的显示文本。当用户选择例如选项 2 是高尔夫时,生成的 xml 将是这样的:

<car>Golf</car>

所以这些标签纯粹是为了生成 UI,与 xml 无关。

【问题讨论】:

  • 请阅读how to ask useful questions。您至少有 2 个不同的问题:XSD + XML 和 XML +(特定的操作系统使用)。
  • @LuisMuñoz:为什么 XSD + XML 和 XML +(特定的操作系统使用)有问题?我想要在这里为 XSD 文件添加一些与 XML 验证无关的值,以便我可以将它们用于其他目的
  • 我的意思是你问了一个太冒昧的问题,如何使用 xsd 构建 xml 以及如何将该 xml 应用于特定用途。这就是我将您指向 MCVE 帮助页面的原因。
  • @LuisMuñoz :不,我没有要求使用 xsd 构建 xml,而是要求将某些内容放入 xsd 并将 xsd 文件用于其他内容。您可以查看更新后的问题。
  • 请添加预期的 xml 输出。你可能需要<xs:complexType>

标签: xml xsd


【解决方案1】:

1.您可以使用<xsd:annotation>

<xs:annotation>
 <xs:appinfo>
    <!-- Add arbitrary xml here e.g. -->
    <label>Audi</label>
 </xs:appinfo>
</xs:annotation>

只需将注释放在元素旁边即可。

2. 看看其他人如何将xsd:annotation 用于类似目的。

- how to use annotations on an enumeration 上的示例

- 基于xsd的表单生成工具xsd-forms

3.类似的问题:

Toolkits or Applications That Build UI From Xsd

【讨论】:

  • 是的,这就是我要找的。注释工作就像一个魅力。对于工具的链接,我们的客户不允许任何第三方或开源,因此我们必须自己制作生成代码。无论如何,非常感谢。
  • xsd-forms 自述文件有一个关于“如何生成表单”的部分。它包括一个关于他们如何使用注释的小片段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多