提问人:yumba 提问时间:7/29/2023 更新时间:7/29/2023 访问量:40
通过解析所有自定义定义和引用,将 XSD 架构转换为其原子形式
Turn XSD schema into its atomic form by resolving all custom definitions and refs
问:
有没有一种简单的方法可以将包含一堆自定义类型定义和引用的 XSD 架构转换为“最终结果”,如果您“解析”所有这些自定义定义并将它们放在它们应该在的位置,您将得到该结果。
换句话说:生成相同的架构,但编写得好像不允许使用自定义类型定义和引用一样。当XML文件根据模式进行评估时,我想知道这是否是在某个时候“在引擎盖下”发生的事情。
例我该如何转动这个:
<xs:schema>
<xs:simpleType name="STRING_MAX_200">
<xs:restriction base="xs:string">
<xs:maxLength value="200"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="NAME_TYPE">
<xs:sequence>
<xs:element name="firstName" type="STRING_MAX_200"/>
<xs:element name="middleName" type="STRING_MAX_200" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="signature" type="NAME_TYPE"/>
</xs:schema>
进入这个
<xs:schema>
<xs:element name="signature">
<xs:sequence>
<xs:element name="firstName">
<xs:restriction base="xs:string">
<xs:maxLength value="200"/>
</xs:restriction>
</xs:element>
<xs:element name="middleName" minOccurs="0">
<xs:restriction base="xs:string">
<xs:maxLength value="200"/>
</xs:restriction>
</xs:element>
</xs:sequence>
</xs:element>
</xs:schema>
答:
1赞
Michael Kay
7/29/2023
#1
架构处理器在“后台”执行的操作可能恰恰相反,它可能会将所有匿名类型转换为具有系统分配名称的命名类型。
您的方法的主要问题是 (a) 如果在多个位置使用类型定义,则内联移动类型定义将涉及重复,以及 (b) 如果从另一个类型定义引用类型(例如,通过扩展、限制、联合或列表派生的类型),则无法内联移动类型。
它也不适用于递归架构,其中子元素与其父元素具有相同的类型:如果您尝试扩展该内联,则递归不会终止。
评论
0赞
yumba
8/1/2023
谢谢!经过一番挖掘,我相信确实没有直接的方法来“内联”嵌套模式。只能通过编写自己的逻辑来完成。
评论