我有一个加载xsd文档的项目,并根据该项目为每个元素创建一个编辑器.然后将实现该模式的xml加载到编辑器中.这可以是字符串的简单文本框,日期的日期选择器或更复杂的数据,如带有关联元数据的章节.
编辑器是通用的,因此编辑器基于模式生成.对于简单类型(如字符串和日期),我们可以使用type属性.但是对于更复杂的自定义类型,我们需要向xsd文档添加一个属性,该属性定义要使用的编辑器子元素.
所以我添加了一个名为UIType的自定义属性,但w3架构架构不允许这样做.有没有什么办法可以扩展w3架构架构,而不是复制它并添加我需要的东西,但实际上是扩展它?或者还有另一种更聪明的方法吗?
谢谢.
只是为了说清楚;我不想将属性添加到实际的xml数据中,而是添加到模式中.
以下是架构的示例:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="PublishDate" type="xs:date" />
<xs:element name="Chapters">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Chapter" UIType="ChapterPicker" >
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:int" />
<xs:element name="FileID" type="xs:int" />
<xs:element name="Title" type="xs:string" />
<xs:element name="Artist" type="xs:string" />
<xs:element name="Year" type="xs:int" />
<xs:element name="Timestamp" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
最佳答案 您似乎已经在创建扩展类型了.您不限于使用“xs:int”或“xs:string”作为类型.您可以通过提取complexType元素并命名它们来定义自己的类型.然后,您可以将其名称用作其他元素的类型.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="PublishDate" type="xs:date" />
<xs:element name="Chapters" type="Chapters_t" />
<xs:complexType name="Chapters_t">
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Chapter" UIType="ChapterPicker" >
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:int" />
<xs:element name="FileID" type="xs:int" />
<xs:element name="Title" type="xs:string" />
<xs:element name="Artist" type="xs:string" />
<xs:element name="Year" type="xs:int" />
<xs:element name="Timestamp" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>