2010-02-23 128 views
4

我有一个项目,其中加载了一个xsd文档,并基于该项目为每个元素创建了一个编辑器。然后实现该模式的xml被加载到编辑器中。这可以是字符串的简单文本框,日期的日期选择器或更复杂的数据,如具有关联的元数据的章节。
编辑器是通用的,所以编辑器是根据模式生成的。对于简单类型(如字符串和日期),我们可以使用type属性。但是对于更复杂的自定义类型,我们需要向xsd文档添加一个属性,该属性定义要使用的编辑器子元素。如何将属性添加到xml模式元素?

因此我添加了一个名为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> 
+0

我想知道这一点。 – 2010-02-23 14:15:28

回答

2

您似乎已经被创建扩展类型。您不限于使用“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> 
+0

Ahh frig,我想我在前段时间甚至在w3schools上读到过这个... 我认为这应该可以解决问题。我会放弃它。一旦我测试了它,我会在稍后给你接受。 – 2010-02-23 14:30:36

+0

它的工作原理。这太简单了。谢谢。 – 2010-02-23 14:47:39

+0

不客气。 – Ioan 2010-02-23 15:50:15