【发布时间】:2022-08-24 02:40:06
【问题描述】:
当我从包含一个或多个 XSD 文件的 XSD 文件生成 XML 文件时,生成的 XML 文件是否应该也包含从 XSD 文件生成的 XML?
蛋糕.xsd:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns=\"https://www.examle.com/bakery\"
targetNamespace=\"https://www.examle.com/bakery\"
elementFormDefault=\"qualified\">
<xs:include schemaLocation=\"bakery.xsd\"/>
<xs:include schemaLocation=\"cakeType.xsd\"/>
<xs:element name=\"Cake\">
<xs:complexType>
<xs:all>
<xs:element name=\"cakeName\" type=\"xs:string\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"cakeType\" type=\"cakeType\" minOccurs=\"0\"/>
<xs:element name=\"ingredients\" type=\"xs:string\" minOccurs=\"0\"/>
<xs:element name=\"instructions\" type=\"xs:string\" minOccurs=\"0\"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
面包店.xsd:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns=\"https://www.examle.com/bakery\"
targetNamespace=\"https://www.examle.com/bakery\"
elementFormDefault=\"qualified\">
<xs:element name=\"Bakery\">
<xs:complexType>
<xs:all>
<xs:element name=\"guid\" type=\"xs:string\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"creationDate\" type=\"xs:dateTime\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"update\" minOccurs=\"1\" maxOccurs=\"1\">
<xs:complexType>
<xs:all>
<xs:element name=\"updateBy\" type=\"xs:string\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"updateDate\" type=\"xs:dateTime\" minOccurs=\"1\" maxOccurs=\"1\"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"description\" type=\"xs:string\" minOccurs=\"0\" maxOccurs=\"1\"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
cakeType.xsd:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns=\"https://www.examle.com/bakery\"
targetNamespace=\"https://www.examle.com/bakery\"
elementFormDefault=\"qualified\">
<xs:element name=\"CakeType\"/>
<xs:simpleType name=\"cakeType\">
<xs:restriction base=\"xs:token\">
<xs:enumeration value=\"angel\"/>
<xs:enumeration value=\"pound\"/>
<xs:enumeration value=\"cheese\"/>
<xs:enumeration value=\"chiffon\"/>
<xs:enumeration value=\"genoise\"/>
<xs:enumeration value=\"sponge\"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
我了解生成的 XML 文件如下所示:
cake.xsd.xml:
<bak:Cake xmlns:bak=\"https://www.examle.com/bakery\">
<bak:cakeName>string</bak:cakeName>
<!--Optional:-->
<bak:cakeType>chiffon</bak:cakeType>
<!--Optional:-->
<bak:ingredients>string</bak:ingredients>
<!--Optional:-->
<bak:instructions>string</bak:instructions>
</bak:Cake>
面包店.xsd.xml:
<bak:Bakery xmlns:bak=\"https://www.examle.com/bakery\">
<bak:guid>string</bak:guid>
<bak:creationDate>2008-09-28T19:49:45</bak:creationDate>
<bak:update>
<bak:updateBy>string</bak:updateBy>
<bak:updateDate>2014-09-18T17:18:33</bak:updateDate>
</bak:update>
<bak:name>string</bak:name>
<!--Optional:-->
<bak:description>string</bak:description>
</bak:Bakery>
cakeType.xsd.xml:
<bak:CakeType xmlns:bak=\"https://www.examle.com/bakery\">anyType</bak:CakeType>
问题:为什么它不会以这种方式生成 XML 文件?
(它包括所包含的 XSD 文件的生成 XML)
cake.xsd.xml:(不验证)
<bak:Cake xmlns:bak=\"https://www.examle.com/bakery\">
<bak:Bakery xmlns:bak=\"https://www.examle.com/bakery\">
<bak:guid>string</bak:guid>
<bak:creationDate>2008-09-28T19:49:45</bak:creationDate>
<bak:update>
<bak:updateBy>string</bak:updateBy>
<bak:updateDate>2014-09-18T17:18:33</bak:updateDate>
</bak:update>
<bak:name>string</bak:name>
<!--Optional:-->
<bak:description>string</bak:description>
</bak:Bakery>
<bak:CakeType xmlns:bak=\"https://www.examle.com/bakery\">anyType</bak:CakeType>
<bak:cakeName>string</bak:cakeName>
<!--Optional:-->
<bak:cakeType>chiffon</bak:cakeType>
<!--Optional:-->
<bak:ingredients>string</bak:ingredients>
<!--Optional:-->
<bak:instructions>string</bak:instructions>
</bak:Cake>
编辑:我找到了我正在寻找的答案。为了在 cake XML 生成中包含 bakery 的内容,我将 bakery 更改为一个类型,并为 cake 添加了一个新的 bakery 元素。现在,每当我更改烘焙内容时,它仍会包含在蛋糕 XML 生成中。
更改了 bakery.xsd:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns=\"https://www.examle.com/bakery\"
targetNamespace=\"https://www.examle.com/bakery\"
elementFormDefault=\"qualified\">
<xs:element name=\"Bakery\"/>
<xs:complexType name=\"bakeryType\">
<xs:all>
<xs:element name=\"guid\" type=\"xs:string\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"creationDate\" type=\"xs:dateTime\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"update\" minOccurs=\"1\" maxOccurs=\"1\">
<xs:complexType>
<xs:all>
<xs:element name=\"updateBy\" type=\"xs:string\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"updateDate\" type=\"xs:dateTime\" minOccurs=\"1\" maxOccurs=\"1\"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name=\"name\" type=\"xs:string\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"description\" type=\"xs:string\" minOccurs=\"0\" maxOccurs=\"1\"/>
</xs:all>
</xs:complexType>
</xs:schema>
更改 cake.xsd:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"
xmlns=\"https://www.examle.com/bakery\"
targetNamespace=\"https://www.examle.com/bakery\"
elementFormDefault=\"qualified\">
<xs:include schemaLocation=\"bakery.xsd\"/>
<xs:include schemaLocation=\"cakeType.xsd\"/>
<xs:element name=\"Cake\">
<xs:complexType>
<xs:all>
<xs:element name=\"bakery\" type=\"bakeryType\"/>
<xs:element name=\"cakeName\" type=\"xs:string\" minOccurs=\"1\" maxOccurs=\"1\"/>
<xs:element name=\"cakeType\" type=\"cakeType\" minOccurs=\"0\"/>
<xs:element name=\"ingredients\" type=\"xs:string\" minOccurs=\"0\"/>
<xs:element name=\"instructions\" type=\"xs:string\" minOccurs=\"0\"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
现在从 cake.xsd 文件生成的 XML 文件验证并包含 bakery 元素:
<bak:Cake xmlns:bak=\"https://www.examle.com/bakery\">
<bak:bakery>
<bak:guid>string</bak:guid>
<bak:creationDate>2008-09-28T19:49:45</bak:creationDate>
<bak:update>
<bak:updateBy>string</bak:updateBy>
<bak:updateDate>2014-09-18T17:18:33</bak:updateDate>
</bak:update>
<bak:name>string</bak:name>
<!--Optional:-->
<bak:description>string</bak:description>
</bak:bakery>
<bak:cakeName>string</bak:cakeName>
<!--Optional:-->
<bak:cakeType>cheese</bak:cakeType>
<!--Optional:-->
<bak:ingredients>string</bak:ingredients>
<!--Optional:-->
<bak:instructions>string</bak:instructions>
</bak:Cake>
-
从 XSD 模式生成 XML 实例有很多工具,但它不受任何标准的约束,而且它不可避免地是一个有点不可预测的过程,因为有许多不同的实例文档符合任何标准。给定的架构。您需要根据您正在使用的特定软件工具提出问题。
标签: xml xsd-validation