我想验证以下数组中的数据:
input_array = array(
"boy"=> array("boy_id"=>1),
"first_name=>"First Name",
"last_name"=>"Last Name"
);
在input_array内部,第一个索引可以替换为女孩数组作为
"girl"=>array("girl_id"=>2)
我想创建xsd来验证以下信息:
<xs:element name="xml">
<xs:complexType>
<xs:all>
<xs:element ref="boy" minOccurs="0"/>
<xs:element ref="girl" minOccurs="0"/>
<xs:element ref="first_name"/>
<xs:element ref="last_name"/>
</xs:all>
</xs:complexType>
</xs:element>
问题-我想确保男孩或女孩的信息都在那里,first_name
和last_name
永远在那里,我怎么能把它们(女孩、男孩)作为选择或选项。我更喜欢使用xs:all
,这样元素顺序就不会成为问题。
我引用了这个链接来使用,以便尝试在xs:all
中使用choice,但无法使其工作。如果有任何回应,我将不胜感激。非常感谢。
在您引用的文章中(http://www.w3.org/wiki/Needs_choice_inside_all)它们提供了一个替换群的例子。那么,为什么不使用一个呢?
以下是它的外观:
<xs:element name="xml">
<xs:complexType>
<xs:all>
<xs:element ref="gender" minOccurs="1"/>
<xs:element ref="first_name"/>
<xs:element ref="last_name"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="gender" abstract="true"/>
<xs:element name="boy" substitutionGroup="gender"> ... </xs:element>
<xs:element name="girl" substitutionGroup="gender"> ... </xs:element>
具体来说,我尝试了这个完整的模式:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="xml">
<xs:complexType>
<xs:all>
<xs:element ref="gender" minOccurs="1"/>
<xs:element ref="first_name"/>
<xs:element ref="last_name"/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="gender" abstract="true"/>
<xs:element name="boy" substitutionGroup="gender"/>
<xs:element name="girl" substitutionGroup="gender"/>
<xs:element name="first_name" type="xs:string"/>
<xs:element name="last_name" type="xs:string"/>
</xs:schema>
要验证此XML:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<girl/>
<first_name>Lara</first_name>
<last_name>Croft</last_name>
</xml>
成功了!此时,如果我指定<boy/>
代替<girl/>
,它也通过了,但当不存在CCD_ 7、CCD_。
你能试试这个代码吗?
<xsd:complexType name="column">
<xsd:all>
<xsd:element ref="gender" minOccurs="1"/>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xsd:all>
</xsd:complexType>
<xsd:element name="gender">
<xsd:complexType>
<xsd:choice>
<xs:element name="boy" type="xs:integer" default="1"/>
<xs:element name="girl" type="xs:integer" default="0"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
最简单的方法可能是将boy_id和girl_id重命名为gender(具有适当的属性值),正如@herry所建议的那样。如果你不想这样做(为什么不呢?),那么你剩下的选择包括:
- 声明一个抽象元素gender_id,将其放入all组,并声明boy_id和girl_id在其替换组中
- 将封闭元素从"xml"重命名为"girl"或"boy",以携带与女孩还是男孩打交道的信息
毫无疑问,还有其他一些,其中一些对Java程序员来说是惯用的,而另一些对XML用户来说则是惯用的。