我有一个XML文件。我正在尝试生成xsd架构文件。我的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<recipe xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="sample.xsd" id="62378">
<title>Beans On Toast</title>
<ingredients>
<item quantity="1" unit="slice">bread</item>
<item quantity="1" unit="can">bakedbeans</item>
</ingredients>
</recipe>
我的架构文件是:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="recipe" type="recipeType"/>
<xs:complexType name="recipeType">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="ingredients" type="ingredientsType"/>
</xs:sequence>
<xs:attribute name="id" type="xs:integer"/>
</xs:complexType>
<xs:complexType name="ingredientsType">
<xs:sequence>
<xs:element name="item" type="itemType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="itemType">
<xs:attribute name="quantity" type="xs:integer"/>
<xs:attribute name="unit" type="xs:string"/>
</xs:complexType>
</xs:schema>
我在验证时遇到错误。我知道原因。因为我无法定义元素项type = xs:string,因为我必须为属性编写complexType(“itemType”)。有人可以解决这个问题吗?
答案 0 :(得分:0)
如果您需要属性,则必须使用complexType
。但是,如果您还需要简单的内容,那么您可以将complexType
定义为包含simpleContent
,并使用基本简单类型使用属性对其进行扩展
在你的情况下,你可以这样做:
<xs:complexType name="itemType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="quantity" type="xs:integer"/>
<xs:attribute name="unit" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
这将允许:
<item quantity="1" unit="slice">bread</item>
您仍然需要在<item>
内允许多个ingredientsType
元素。如果您可以拥有无限制的商品,则可以使用:
<xs:complexType name="ingredientsType">
<xs:sequence>
<xs:element name="item" type="itemType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
答案 1 :(得分:0)
尝试将itemType
声明为混合(在复杂类型定义上使用mixed='true'
)。