1
这里是我的XML的简化版本:定义唯一约束基础上的多个元素
<Invoice>
<DataRow>
<Group>ZB</Group>
<Specie>M</Specie>
<Length>360</Length>
</DataRow>
<DataRow>
<Group>ZB</Group>
<Specie>M</Specie>
<Length>360</Length>
</DataRow>
</Invoice>
我不想被不进行验证这个XML,因为集团/树种/长度值相同。所以我想在我的XSD文件中添加一个唯一的约束。 我有本作的唯一约束:
<xs:unique name="specieSizeGroupLengthAssortment">
<xs:selector xpath="Invoice/DataRow"/>
<xs:field xpath="@Specie"/>
<xs:field xpath="@Group"/>
<xs:field xpath="@Length"/>
</xs:unique>
然而,这似乎并不正确。我为这个约束尝试了几个职位,但是文档验证了。 我的XSD文件似乎是有效的,并且任何其他XML错误都会得到纠正。
这里是我的XSD的完整副本,它有完整的属性名称,所以与上面的简化版本有一些区别。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Invoice" >
<xs:complexType>
<xs:sequence>
<xs:element type="xs:date" name="EntryDate" minOccurs="1" maxOccurs="1"/>
<xs:element name="InvoiceNumber" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element type="xs:date" name="InvoiceDate" minOccurs="1" maxOccurs="1"/>
<xs:element name="ContractNumber" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="MeasurerDocNr" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="TransportJobNr" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="15"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Supplier" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="140"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="RegNr" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Reciever" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="140"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="RegNr" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="6"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Carrier" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="FirmName" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="140"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="TruckNumber" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Driver" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Measuring" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="MeasuringDate" minOccurs="1" maxOccurs="1"/>
<xs:element name="OperatorName" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="6"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="MeasureMethod" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[I,K]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AssortmOrigin" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="FSCNumber" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="SlashCode" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DataRow" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="AssortmentGroup" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
<xs:maxLength value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Specie" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="A"/>
<xs:enumeration value="B"/>
<xs:enumeration value="Ba"/>
<xs:enumeration value="M"/>
<xs:enumeration value="L"/>
<xs:enumeration value="Oz"/>
<xs:enumeration value="Os"/>
<xs:enumeration value="LK"/>
<xs:enumeration value="SK"/>
<xs:enumeration value="E"/>
<xs:enumeration value="P"/>
<xs:enumeration value="JK"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="SizeGroup" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="18"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Length" minOccurs="1" maxOccurs="1" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[1-9][0-9]{0,6}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="RejectReason" minOccurs="0" maxOccurs="1" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="M"/>
<xs:enumeration value="D"/>
<xs:enumeration value="T"/>
<xs:enumeration value="Z"/>
<xs:enumeration value="R"/>
<xs:enumeration value="G"/>
<xs:enumeration value="S"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
<xs:enumeration value="N"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Assortment" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Diameter" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="LowerLimit" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[1-9][0-9]{0,6}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="UpperLimit" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[1-9][0-9]{0,6}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Overlength" minOccurs="0" maxOccurs="1" >
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:fractionDigits value="3"/>
<xs:totalDigits value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LengthReduction" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:fractionDigits value="3"/>
<xs:totalDigits value="7"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="DiamterReduction" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:fractionDigits value="3"/>
<xs:totalDigits value="7"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="GrosVolume" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
<xs:fractionDigits value="3"/>
<xs:totalDigits value="7"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NetVolume" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
<xs:fractionDigits value="3"/>
<xs:totalDigits value="7"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Count" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[1-9][0-9]{0,4}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NotAgreed" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[1,0]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Price" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
<xs:fractionDigits value="2"/>
<xs:totalDigits value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PriceTotal" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
<xs:fractionDigits value="2"/>
<xs:totalDigits value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="specieSizeGroupLengthAssortment">
<xs:selector xpath="Invoice/DataRow"/>
<xs:field xpath="@Spiecie"/>
<xs:field xpath="@SizeGroup"/>
<xs:field xpath="@Length"/>
<xs:field xpath="@Assortment"/>
</xs:unique>
</xs:element>
我会明白任何帮助。
非常感谢你,这是解决方案。我必须承认,我不知道寻址规则,所以我不知道@地址属性。 – AndyZ
您的欢迎 - 总是乐于提供帮助。 [MSDN XPath示例](http://msdn.microsoft.com/zh-cn/library/ms256086.aspx)提供了很好的参考。 – Filburt
这个主题对我来说是全新的。现在我想知道我的题目是否应该编辑。它不应该更像是“基于多个元素定义唯一约束”,现在我认为我的标题是误导性的。 – AndyZ