XSD 元素 - 为 UI 显示添加显示名称
XSD elements - adding displayname for UI display
所以我们有一个 XSD 模式,我们用它来生成 UI,以创建符合该模式的 XML 文档。对于模式中的所有 XElement,我们希望有一个显示名称用于 UI,而不仅仅是人类可读性不高的元素名称。
编辑:我们使用 C# 和 Linq 解析 XSD 并生成 UI。没有工具。
最初的想法是使用 annotations/appInfo 为每个元素添加自定义 'comment type' 属性,但它变得非常冗长,混淆了架构的核心目的。所以我们想知道我们是否可以只向 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 显示(妙蛙种子:文本框)。这可能/可行吗,或者它们是完成相同任务的更好方法吗?
我的最终学位项目是一个多平台移动应用程序,它使用 XML Schema 来达到相同的目的,此外,如果用户想要 he/she 也可以使用 XSLT 来转换 XML 文档到 HTML 或 PDF,并使用 Schematron 添加允许我实现错误预防的语义限制(断言)。 DisplayName
对app来说是一个很大的改进,所以我之前也有这个问题,来解决你说的问题。
正如 XML Schema Specs 在每个元素中所说的那样,您可以添加
{any attributes with non-schema namespace . . .}>
并且 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>
由于我实现了类似的功能,我将告诉您我添加到命名空间的一些改进,以防您想要了解它们:
- imp:label - 这与 displayName 相同 xs:element 和 xs:attribute.
- imp:image - 在元素或属性的标签附近添加一个图标。
- imp:newPage - 该元素将显示在新页面中(由于移动屏幕尺寸较小,我不得不实现多页面导航),因此元素显示 link 并且当您按下 link 时,该元素将以整页显示。我不认为这对桌面平台有用。
- imp:view - 某些元素可能有不同的视图(例如:您可以将枚举或选项显示为单选按钮或 select,您可以将字符串元素显示为输入或文本区域等)
- imp:listLabel, imp:listImage, imp:newPage - 这些是与其他人相同,但用于列表。当某些东西有 maxOccurs>1 或 minOccurs<1 我创建了一个列表,它可以有自己的 header 和自己的改进。示例:列表 header 中的一组人的图标和列表中每次出现 人 的 header 中的一个人的图标。
所以我们有一个 XSD 模式,我们用它来生成 UI,以创建符合该模式的 XML 文档。对于模式中的所有 XElement,我们希望有一个显示名称用于 UI,而不仅仅是人类可读性不高的元素名称。
编辑:我们使用 C# 和 Linq 解析 XSD 并生成 UI。没有工具。
最初的想法是使用 annotations/appInfo 为每个元素添加自定义 'comment type' 属性,但它变得非常冗长,混淆了架构的核心目的。所以我们想知道我们是否可以只向 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 显示(妙蛙种子:文本框)。这可能/可行吗,或者它们是完成相同任务的更好方法吗?
我的最终学位项目是一个多平台移动应用程序,它使用 XML Schema 来达到相同的目的,此外,如果用户想要 he/she 也可以使用 XSLT 来转换 XML 文档到 HTML 或 PDF,并使用 Schematron 添加允许我实现错误预防的语义限制(断言)。 DisplayName
对app来说是一个很大的改进,所以我之前也有这个问题,来解决你说的问题。
正如 XML Schema Specs 在每个元素中所说的那样,您可以添加
{any attributes with non-schema namespace . . .}>
并且 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>
由于我实现了类似的功能,我将告诉您我添加到命名空间的一些改进,以防您想要了解它们:
- imp:label - 这与 displayName 相同 xs:element 和 xs:attribute.
- imp:image - 在元素或属性的标签附近添加一个图标。
- imp:newPage - 该元素将显示在新页面中(由于移动屏幕尺寸较小,我不得不实现多页面导航),因此元素显示 link 并且当您按下 link 时,该元素将以整页显示。我不认为这对桌面平台有用。
- imp:view - 某些元素可能有不同的视图(例如:您可以将枚举或选项显示为单选按钮或 select,您可以将字符串元素显示为输入或文本区域等)
- imp:listLabel, imp:listImage, imp:newPage - 这些是与其他人相同,但用于列表。当某些东西有 maxOccurs>1 或 minOccurs<1 我创建了一个列表,它可以有自己的 header 和自己的改进。示例:列表 header 中的一组人的图标和列表中每次出现 人 的 header 中的一个人的图标。