如何验证XML架构中的命名约定
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何验证XML架构中的命名约定相关的知识,希望对你有一定的参考价值。
我们正在研究我们在公司内部使用的XML Schemas(XSD)的命名约定。 为了确保每个人都遵守惯例,我正在寻找一种验证XSD的方法。
我们使用的IDE是IntelliJ,因此应该能够使用XSD文件来验证其他XSD文件。
一种方法是使用W3C的XSD标准的扩展版本,但这有一些含义。另一个是编写一些Python或Java代码来验证我们的特定约定,但这感觉有点奇怪。
我们想要检查的一些事情:
- 一个简单的元素名称应始终是具有前导大写的camelcase。它也应该与
SType
完成。 - 一个复杂的项目也应该是带有大写的大写字母,但它应该以
CType
结尾。 - 如果简单类型包含枚举限制,则应以
QualifierSType
结尾。 - 如果复杂类型仅包含简单类型的列表,则它应始终以
ListCType
结尾。
是否有一些标准工具可以完成这些验证,还是我们必须自己开发一些东西?什么是实现这一目标的最佳方法?
我通过Schematron自动化了WIPO ST.96 XML Design Rules and Conventions一致性。许多规则很容易表示,但是某些命名约定(如CamelCase)需要一些严格的字典驱动代码。考虑:
- GD-10:类型名称必须使用UCC约定并具有后缀Type。例如,ApplicantType。
我们决定放弃完整UCC验证所需的词汇复杂性,但至少要检查名称是否以大写字母开头,不是全部大写,并以所需的后缀结束:
<pattern>
<title>GD-10</title>
<rule context="xsd:complexType[@name] | xsd:simpleType[@name]">
<assert test="fnx:is-exception('GD-10')
or matches(@name,'^[A-Z]')" flag="AUTO" role="ERROR">
The <value-of select="local-name()"/> name <value-of
select="@name"/> does not start with an upper-case letter.
</assert>
<assert test="fnx:is-exception('GD-10') or
not(matches(@name,'^[A-Z]+$'))"
flag="AUTO" role="ERROR">
The <value-of select="local-name()"/> name <value-of
select="@name"/> contains all upper-case letters instead of
using camel case.
</assert>
<assert test="fnx:is-exception('GD-10') or
ends-with(@name,'Type')" flag="AUTO" role="ERROR">
The <value-of select="local-name()"/> name <value-of
select="@name"/> does not end with Type.
</assert>
</rule>
</pattern>
(fnx:is-exception()
只是一个小实用程序功能,允许组织通过配置文件中的条目选择退出任何给定的约定。)
以上是关于如何验证XML架构中的命名约定的主要内容,如果未能解决你的问题,请参考以下文章
xml 中的 Android 谷歌地图片段。我得到“意外的命名空间前缀”
如果 xml 元素命名约定与 POJO 属性命名约定不同,则发送到 Spring Boot REST API 的 XML 元素不会映射到 POJO
如果xml元素命名约定与POJO属性命名约定不同,则发送到Spring Boot REST API的XML元素不会映射到POJO