我正在尝试为一些基本但特定的需求创建一个简单的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文件).为此创建一个新的命名空间似乎有点过分了?
此信息应位于其自己的命名空间中.存储它的最佳位置是属性的注释.您可以将注释附加到任何架构项,它们可以包含为人类可读文档设计的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>