我有两个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 <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()的方法,这些方法将失败。
答案 0 :(得分:4)
答案是'是',但是如果你想在基于value
属性的模式中使用if / else语句,那么答案就是'no'。您只需创建包含所有属性和元素值的xsd作为可选项,文档将验证正常。 xsd验证将为您做的是告诉您文档在架构中指定的规则下是有效的,但不做的是处理文档内的数据,如实际的{{1} } / yes
值属性的值。
如果您发布了当前的架构并对其外观有疑问,您将获得更具体的架构反馈。
答案 1 :(得分:1)
我猜你的问题是我们是否可以为你的例3创建一个模式 - 你基本上有一个名为value的属性和一个名为value的元素。这是可能的