【问题标题】:XSD elements - adding displayname for UI displayXSD 元素 - 为 UI 显示添加显示名称
【发布时间】:2015-07-24 01:56:43
【问题描述】:

所以我们有一个 XSD 模式,我们用它来生成 UI,创建符合该模式的 XML 文档。对于架构中的所有 XElement,我们希望有一个用于 UI 的显示名称,而不仅仅是人类可读性不强的元素名称。

编辑:我们使用 C# 和 Linq 来解析 XSD 并生成 UI。没有工具。

最初的想法是使用 annotations/appInfo 为每个元素添加自定义的“评论类型”属性,但它变得非常冗长,混淆了模式的核心目的。所以我们想知道是否可以只向 XSD 架构元素添加一个“displayName”属性,这不一定会转换为需要该属性的 XML 数据。

例如XSD 之前:-

<xs:element name="grnBulb" type="xs:string">
  <xs:annotation>
    <xs:appinfo>
      <displayname>Bulbasaur</displayname>
    </xs:appinfo>
  </xs:annotation>
</xs:element>

XSD 之后:-

<xs:element name="grnBulb" type="xs:string" displayname="Bulbasaur" />

在任何一种情况下,所需的 XML 数据都是相同的:-

<grnBulb>Awesome</grnBulb>

并且显示名称仅用于 UI 显示(Bulbasaur:文本框)。这是可能/可行的,还是它们是完成相同任务的更好方法?

【问题讨论】:

  • 您使用什么工具将 XSD 架构转换为 UI 视图?
  • 没有工具 - C# 代码和 Linq

标签: xml xsd


【解决方案1】:

我的最终学位项目是一个多平台移动应用程序,它使用 XML Schema 来实现相同的目的,此外,如果用户想要他/她也可以使用 XSLT 将 XML 文档转换为 HTML 或 PDF,并使用 Schematron 添加允许我实现错误预防的语义限制(断言)。 DisplayName对app来说是一个很大的改进,所以我之前也遇到过这个问题,来到你说的解决方案。

正如XML Schema Specs 在您可以添加的每个元素中所说的那样

{任何具有非模式命名空间的属性。 . .}>

并且 XML Schema 对于这些属性仍然有效。这比使用xs:appinfo 更容易,为什么不使用呢?所以您可以创建自己的命名空间来进行改进。请注意,您可能希望在未来添加更多改进。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:imp="http://myImprovementsURI.com">
    <xs:element name="grnBulb" type="xs:string" imp:displayname="Bulbasaur"/>
</xs:schema>

由于我实现了类似的功能,我将告诉您我添加到命名空间的一些改进,以防您想了解它们:

  • imp:label - 这与 xs:elementxs:attributedisplayName 相同。
  • imp:image - 在元素或属性的标签附近添加一个图标。
  • imp:newPage - 元素将显示在新页面中(由于移动屏幕尺寸很小,我不得不实现多页面导航),所以一个元素显示了一个链接,当您按下链接时,该元素是全页显示。我不认为这对桌面平台有用。
  • imp:view - 某些元素可能有不同的视图(例如:您可以将枚举或选项显示为单选按钮或选择,您可以将字符串元素显示为输入或文本区域,等)
  • imp:listLabelimp:listImageimp:newPage - 除了列表之外,它们与其他相同。当某些东西有 maxOccurs>1minOccurs 时,我创建了一个列表,它可以有自己的标题并进行自己的改进。示例:列表标题中的一组人的图标和列表中每次出现 person 的标题中的一个人的图标。

【讨论】:

  • 非常感谢 - 这似乎是一个很好的答案。我还有几个问题。 1) 为什么我们不能只使用 displayname 而是需要引用模式 xmlns - 是因为它会作为有效的 xml 模式被拒绝吗? 2)“imp”自定义模式引用的格式是什么?
  • 不客气。 1)是的,为了有效,自定义属性需要一个不同于模式命名空间的命名空间。 2) 我不是以英语为母语的人,我认为我不明白这个问题。您是在询问命名空间的工作原理吗?
  • 请注意,如果 URI 指向不存在的站点,它也是有效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 2013-07-25
  • 2014-08-07
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多