2009-12-18 117 views

回答

5

你不能用XML模式来做到这一点。

您可以在元素上定义属性,但不能将它们限制为元素的一个实例。

4

您可以在products元素中添加一个属性,指示哪个product的特色。

+0

感谢您的建议。 – Jozef 2009-12-18 09:10:17

+0

@AOI Karasu:我认为这是绝对不可能的 – paolot 2010-01-26 10:07:08

3

你不能用XMLSchema做到这一点。如果您想在XML环境中指定这些约束,请尝试Schematron(http://www.schematron.com/)。

0

我的回复是这样,因为我还不能添加评论。

“您可以在products元素中添加一个属性,以指示哪个产品具有特色。”

此解决方案导致另一个问题:检查属性是否指向现有元素。

<products featured_id="3"> 
    <product id="1">Prod 1</product> 
    <product id="2">Prod 2</product> 
</products> 
2

你可以做以下...

<products> 
    <product featured="Yes">Prod 1</product> 
    <product>Prod 2</product> 
</products> 

然后使用一个独特的元素来约束这样的属性...

<xs:unique name="UniqueFeaturedProduct"> 
     <xs:selector xpath="product"/> 
     <xs:field xpath="@featured"/> 
</xs:unique> 

如果要限制“功能'属性为一个值的可选枚举“是”,那么只能有一个特色属性。像这样...

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="products"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="product" type="productType" maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
     <xs:unique name="UniqueFeaturedProduct"> 
      <xs:selector xpath="product"/> 
      <xs:field xpath="@featured"/> 
     </xs:unique> 
    </xs:element> 
    <xs:simpleType name="featuredType"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Yes"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:complexType name="productType"> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="featured" type="featuredType" use="optional"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:schema> 
相关问题