xsd-schema中的自定义属性

时间:2010-06-21 11:20:44

标签: xml xsd

我正在尝试为一些基本但特定的需求创建一个简单的xml编辑器,我不确定如何处理的事情是我希望能够拥有自己的自定义属性(或其他东西) xsd-schema本身。

这样的事情就是我想到的:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:element name="Book">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="Author" type="xsd:string" listable="1" />
            <xsd:element name="Pages" type="xsd:int" />
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>

我想知道关于元素是否在模式中是“可列表”的信息(注意.xml文件没有关于元素是否可列表的信息或线索,可列表属性只是一种方式在编辑器中组织元素。

它不需要是它自己的属性。如果有一个misc属性或我可以玩的东西,那就没问题了。问题只是上面的模式没有验证(在此上下文中不支持'listable'属性。)

有没有办法在架构中存储此类信息?

似乎可以创建一个新的命名空间,但我不知道应该如何声明该命名空间,以便任何元素在xsd中都有一个特殊的属性(我宁愿避免弄乱xml文件这个)。为此创建一个新的命名空间似乎有点过分了吗?

或者我是否完全以错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:6)

此信息应位于其自己的命名空间中。存储它的最佳位置是属性的注释。您可以将注释附加到任何架构项,它们可以包含为人类可读文档设计的xsd:documentation元素,以及为机器可处理信息指定的xsd:appinfo。所以你的例子看起来像:

 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:foo="http://www.example.org/bar">
   <xsd:element name="Book">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="Author" type="xsd:string" >
        <xsd:annotation>
            <xsd:appinfo>
                <foo:listable value="true"/>
            </xsd:appinfo>
        </xsd:annotation>
             </xsd:element>
            <xsd:element name="Pages" type="xsd:int" />
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>
相关问题