为什么XSD转XML样本后再转回XSD会出现结构不一致问题?
XSD与XML双向转换后结构不一致的原因说明
这两份XSD本来就不需要也不可能完全保持结构相同。从XML反向推断XSD属于逆向推导,推导结果完全依赖你提供的XML样本携带的信息,无法还原原始XSD中没有在样本里体现的所有约束和结构设计。
二者的核心差异原因如下:
- 全局复用类型被展开为内嵌类型:原始XSD中将
deptType、accountType、chargeType都定义为全局命名复杂类型,方便多处在不同元素中复用。但你提供的XML样本中这些类型仅对应一个元素出现,Visual Studio的推导工具无法识别你原本的复用设计,会直接将类型定义内嵌到对应元素的声明中,不会单独提取全局类型。 - 元素出现次数约束丢失:原始XSD中定义了
dept最少1个、最多无上限,deptstatement最少1个、最多无上限,accountcharge可选、最多无上限。但你的XML样本中这三类元素都仅出现了1次,推导工具没有依据判断这些元素支持重复或可选,会默认推导为仅允许出现1次。 - 数据类型被自动收窄:原始XSD中
deptnum、chargeid定义为字符串类型,deptlimit、accountid定义为整数类型,但你的XML样本中这些字段的值都是小范围非负整数,推导工具会自动推断为范围更精确的xs:unsignedByte类型,无法还原你原本的类型设计意图。
如果需要反向推导的XSD尽可能接近原始设计,你需要提供覆盖所有业务场景的XML样本:比如包含多个dept节点、多个deptstatement节点、不带accountcharge的deptstatement节点、字符串形式的deptnum/chargeid、超出byte范围的整数数值等,推导工具才能基于更多样本信息得到更准确的约束。
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

