我正在尝试为一些基本但特定的需求创建一个简单的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文件这个)。为此创建一个新的命名空间似乎有点过分了吗?
或者我是否完全以错误的方式解决这个问题?
答案 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>