因此,我们有一个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)。这是可行的/可行的,还是他们完成同样任务的更好方法?
答案 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>
由于我实现了类似的功能,我将告诉您我在命名空间中添加的一些改进,以防您想知道它们: