几年以来,我一直在我的模型中使用这种架构。
我有 3 个模型:
- 作为主要模型的对象,
- A 和 B 扩展对象模型并添加新元素。
对象.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="A.xsd"/>
<xs:include schemaLocation="B.xsd"/>
<xs:complexType name="object">
<xs:sequence>
<xs:element name="elt1" type="xs:token"/>
</xs:sequence>
</xs:complexType>
<xs:element name="object" type="object"/>
</xs:schema>
A.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="object.xsd"/>
<xs:complexType name="A">
<xs:complexContent>
<xs:extension base="object">
<xs:sequence>
<xs:element name="elt2" type="xs:token"/>
<xs:element name="elt3" type="xs:token"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
B.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="object.xsd"/>
<xs:complexType name="B">
<xs:complexContent>
<xs:extension base="object">
<xs:sequence>
<xs:element name="elt4" type="xs:token"/>
<xs:element name="elt5" type="xs:token"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
我在示例中使用 xsi:type 来选择对象是 A 类型还是 B 类型。下面是与 A 关联的示例:
<?xml version="1.0" encoding="UTF-8"?>
<object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="A">
<elt1>test1</elt1>
<elt2>test2</elt2>
<elt3>test3</elt3>
</object>
我的一些合作伙伴在他们的 ERP 中导入 XSD 模式来创建他们的类对象。但是,他们必须调整我提供的文件以正确导入它们并能够利用它们。
我想知道我是否正确使用了 xsi:type 。实际上,XSD 中没有对 xsi 命名空间 (xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance") 的引用。xsi:type 引用也是一样,他们的ERP怎么知道要添加呢?