XSD元素 - 为UI显示添加displayname

时间:2015-07-24 01:56:44

标签: xml xsd

因此,我们有一个XSD架构,用于生成UI,以创建符合架构的XML文档。对于模式中的所有XElements,我们希望有一个用于UI的显示名称,而不仅仅是不易读取的元素名称。

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

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

E.g。 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" />

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

<grnBulb>Awesome</grnBulb>

并且displayname仅用于UI显示(Bulbasaur:textbox)。这是可行的/可行的,还是他们完成同样任务的更好方法?

1 个答案:

答案 0 :(得分:0)

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

正如XML Schema Specs所述,您可以在每个元素中添加

  

{具有非架构命名空间的任何属性。 。 }&GT;

并且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:element xs:attribute displayName 相同>
  • imp:image - 在元素或属性的标签附近添加图标。
  • imp:newPage - 该元素将显示在新页面中(由于移动屏幕尺寸较小,我必须实现多页面导航),因此元素显示链接,当您按下链接时元素以整页显示。我不认为这对桌面平台有用。
  • imp:view - 某些元素可能有不同的视图(例如:您可以将枚举或选项显示为单选按钮或选择,您可以将字符串元素显示为输入或作为输入textarea等。)
  • imp:listLabel imp:listImage imp:newPage - 这些与其他列表相同,但是对于列表。什么东西有 maxOccurs&gt; 1 minOccurs&lt; 1 我创建了一个List,它可以有自己的标题,并有自己的改进。示例:列表标题中的一组人员的图标以及列表中每次出现 person 的标题中的人物图标。