2010-06-21 59 views
5

我想为一些基本但具体的需求做一个简单的xml编辑器,我不知道如何处理的事情是我想能够拥有自己的定制xsd模式本身的属性(或其他)。在xsd架构中的自定义属性

像这样的东西是什么,我脑子里想的:

<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文件没有任何信息或线索至于元素是否可列出,listable属性只是一种在编辑器中组织元素的方法)。

它不需要是它自己的属性。如果有一个misc属性或者我可以用它玩的话就没问题。问题在于上面的模式没有验证(在此上下文中不支持“可列表”属性。)

有没有办法将这种信息存储在模式中?

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

或者我完全用错误的方式去做这件事吗?

回答

5

此信息应该位于其自己的名称空间中。存储它的最佳位置是在属性的注释中。您可以将注释附加到任何模式项目,并且它们可以包含为人类可读文档设计的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> 
+0

谢谢! 似乎正是我所需要的。 – Magnus 2010-06-22 06:29:42

+0

@Aled G:如果我想让xml文档中的特定元素具有特定的名称空间,应该怎么做。其余元素不包含任何名称空间声明。在这种情况下,我应该如何编写模式? – Ashwin 2012-05-28 04:02:59