这个XML示例是否可以为其编写模式?

时间:2011-01-31 22:41:34

标签: xml xsd

我有两个XML示例,我想为其编写架构:

示例1:

<attributes>
<attribute type="test" value="yes"/>
</attributes>

示例2:

<attributes>
<attribute type="test">
<value x="100" y="50">yes</value>
</attribute>
</attributes>

示例3:

<attributes>
<attribute type="test" value="no">
<value x="100" y="50">yes</value>
</attribute>
</attributes>

是否可以使用适合这些的架构? “value”是一个属性,另一个是元素吗?

更新 是的,我想我现在明白了我的问题。

我有这个XSD:

<xs:complexType name="Attribute">
   <xs:sequence >
      <xs:element name="value" type="Value" minOccurs="0" maxOccurs="unbounded">
      </xs:element>
   </xs:sequence>
   <xs:attribute name="type" type="xs:string" use="required">
   </xs:attribute>
   <xs:attribute name="value" type="xs:string" >
   </xs:attribute>
</xs:complexType>

但是当我尝试使用JAXB从XSD生成java类时,我得到一个错误:

  [xjc] [ERROR] Property "Value" is already defined. Use &lt;jaxb:property> to resolve this conflict.
  [xjc]   line 275 of file:common.xsd
  [xjc] [ERROR] The following location is relevant to the above error
  [xjc]   line 286 of file:common/common.xsd
  [xjc] failure in the XJC task. Use the Ant -verbose switch for more details

我想这是JAXB而不是XSD的限制。它将尝试创建两个名为getValue()的方法,这些方法将失败。

2 个答案:

答案 0 :(得分:4)

答案是'是',但是如果你想在基于value属性的模式中使用if / else语句,那么答案就是'no'。您只需创建包含所有属性和元素值的xsd作为可选项,文档将验证正常。 xsd验证将为您做的是告诉您文档在架构中指定的规则下是有效的,但做的是处理文档内的数据,如实际的{{1} } / yes值属性的值。

如果您发布了当前的架构并对其外观有疑问,您将获得更具体的架构反馈。

答案 1 :(得分:1)

我猜你的问题是我们是否可以为你的例3创建一个模式 - 你基本上有一个名为value的属性和一个名为value的元素。这是可能的