我有一个XSD定义,其中包含标记元素列表。以什么方式允许开发人员在输入限制选择元素的值时只从XML文件中已定义的元素列表中进行选择?
换句话说,鉴于此XML声明:
<collection>
<myItem name="Item_1">
<childElement />
</myItem>
<myItem name="Item_2">
<childElement>
<item name="Item_1"/>
</childElement>
</myItem>
<myItem name="Item_3">
<childElement>
<item name="Child_2"/>
</childElement>
</myItem>
</collection>
...以及此XSD定义
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="collection">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="collection">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="childElement" >
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="item">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我想让用户在想要输入myItem
的{{1}}值时,从XML文件中已定义的name
元素列表中进行选择?
在XAML甚至某些Visual Studio 2008的模式中选择属性值时会出现这个概念。
答案 0 :(得分:3)
您可能希望查看通过XML架构提供的identity constraints。这些约束允许您应用XPath表达式来表示给定元素的唯一性和引用约束。
尽管我的语法可能缺少<sequence>
或<complexType>
定义,但您应该可以编写类似下面的内容。我没有验证这一点,但想法是为你想要约束的值创建一个“键”,然后在你想要约束的元素中引用带有“key-ref”的键。
<xs:element name="myItem">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="optional"/>
<xs:key name="itemNameKey">
<xs:selector xpath="myItem"/>
<xs:field xpath="@name"/>
</xs:key>
</xs:complexType>
</xs:element>
<xs:element name="childElement">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="optional"/>
<xs:keyref name="itemConstraint" refer="itemNameKey">
<xs:selector xpath="childElement"/>
<xs:field xpath="@name"/>
</xs:key>
</xs:complexType>
</xs:element>
答案 1 :(得分:0)
您是否尝试过<choice/>
元素?