鉴于是关注XML文件:
<root>
<customers>
<customer name="CustomerA" orders="111,222" />
</customers>
<orders>
<order ID="111">
<description text="Some bananas ..." />
</order>
<order ID="222">
<desciption text="good coffee" />
</order>
</orders>
</root>
现在我想验证customer元素的orders属性。所有订单都用逗号加注......所以,非常简单。
这是否可以使用模式文件?
答案 0 :(得分:0)
修改强>:
我认为你所追求的是大致如下的东西,虽然因为它使用了id,这意味着他们需要与docuement一样独特,所以你不能得到一个order.id和一个customer.id是相同的 - 不确定如果有办法解决这个问题。您也可以使用xsd:IDREFS
来做,就像您在我原先的例子中所说的那样,但我个人更喜欢这样...
<xsd:complexType name="Customer">
<xsd:attribute name="customerId" type="xsd:ID" use="required"/>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="Order">
<xsd:sequence>
<xsd:element name="text" type="xsd:string"/>
<xsd:attribute name="customerId" type="xsd:IDREF" use="required"/>
<xsd:attribute name="id" type="xsd:ID" use="required"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="customers>
<xsd:sequence>
<xsd:element name="customer" type="CustomerType" />
</xsd:sequence>
</xsd:element>
<xsd:element name="orders">
<xsd:sequence>
<xsd:element name="order" type="OrderType" />
</xsd:sequence>
</xsd:element>
如果我是你,我会做类似的事情:
<root>
<customers>
<customer id="unique-customer-id" name="CustomerA" />
</customers>
<orders>
<order id="222" customerId="unique-customer-id" text="Some Bananas..." />
</orders>
</root>
您可以制作模式以确保order.customerId对应于customer.id我认为这样可以使查找和转换更容易。当然,如果订单只是客户的孩子,你可以让它更容易,但我确定你必须有其他要求,这使得这个过于冗长或不明智。