代码之家  ›  专栏  ›  技术社区  ›  Ronbear

XSD元素-为UI显示添加displayname

  •  2
  • Ronbear  · 技术社区  · 9 年前

    因此,我们有一个XSD模式,用于生成UI,创建符合该模式的XML文档。对于模式中的所有XElement,我们希望为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" />
    

    无论哪种情况,所需的XML数据都是相同的:-

    <grnBulb>Awesome</grnBulb>
    

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

    1 回复  |  直到 9 年前
        1
  •  0
  •   sergioFC    9 年前

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

    XML Schema Specs 在您可以添加的每个元素中

    {具有非架构命名空间的任何属性…}>

    并且XML模式对于这些属性仍然有效。这比使用更容易 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>
    

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

    • 导入:标签 -这和你的一样 显示名称 对于两者 xs:元素 xs:属性 .
    • 导入:图像 -在元素或属性的标签附近添加图标。
    • imp:newPage -该元素将显示在新页面中(由于移动屏幕尺寸较小,我不得不实现多页面导航),因此元素显示了一个链接,当您按下该链接时,元素将显示为完整页面。我不认为这对桌面平台有用。
    • 导入:视图 -某些元素可能具有不同的视图(例如:可以将枚举或选项显示为单选按钮或选择,可以将字符串元素显示为输入或文本区域等)
    • imp:列表标签 , imp:listImage , imp:newPage -除列表外,这些与其他列表相同。当某件事发生时 maxOccurs>1. minOccurs<1. 我创建了一个List,它可以有自己的标题和自己的改进。示例:列表标题中的一组人的图标和每次出现的标题中的人的图标 在列表中。