我正在为一些产品索引开发XSD。希望你不介意我用德语名称发布代码;)问题是:我希望我的“artikelgruppe”(= Product-Group)有一个独特的“GRUPPE”(= GroupNumber)。同样适用于“artikel”/“ARTNR”。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="artikelkatalog">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="artikelgruppen">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="artikelgruppe" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="GRUPPE" type="xsd:integer">
</xsd:element>
<xsd:element name="GRUP_TXT" type="xsd:string">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="unique_GRUPPE">
<xsd:selector xpath="artikelgruppe" />
<xsd:field xpath="@GRUPPE" />
</xsd:unique>
</xsd:element>
<xsd:element name="alle_artikel">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="artikel" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ARTNR" type="xsd:integer">
</xsd:element>
<xsd:element name="ARTBEZ" type="xsd:string">
</xsd:element>
<xsd:element name="EKPREIS" type="xsd:float">
</xsd:element>
<xsd:element name="EKWAEHRUNG" type="xsd:string">
</xsd:element>
<xsd:element name="VPREIS" type="xsd:float">
</xsd:element>
<xsd:element name="VWAEHRUNG" type="xsd:string">
</xsd:element>
<xsd:element name="GRUPPE" type="xsd:integer">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="unique_ARTNR">
<xsd:selector xpath="artikel" />
<xsd:field xpath="@ARTNR" />
<!--<xsd:keyref name="keyref_GRUPPE_REFERENZ" refer="unique_ARTNR">
<xsd:selector xpath="artikelgruppe" />
<xsd:field xpath="@ARTNR"/>
</xsd:keyref>-->
</xsd:unique>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
我的代码没有导致错误,但没有完成这项工作:(我喂了这个:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<artikelkatalog>
<artikelgruppen>
<artikelgruppe>
<GRUPPE>20</GRUPPE>
<GRUP_TXT>Workstation</GRUP_TXT>
</artikelgruppe>
<artikelgruppe>
<GRUPPE>20</GRUPPE>
<GRUP_TXT>Server</GRUP_TXT>
</artikelgruppe>
<artikelgruppe>
<GRUPPE>30</GRUPPE>
<GRUP_TXT>Monitor</GRUP_TXT>
</artikelgruppe>
</artikelgruppen>
<alle_artikel>
<artikel>
<ARTNR>1100</ARTNR>
<ARTBEZ>Transtec 800</ARTBEZ>
<EKPREIS>720.00</EKPREIS>
<EKWAEHRUNG>€</EKWAEHRUNG>
<VPREIS>749.00</VPREIS>
<VWAEHRUNG>€</VWAEHRUNG>
<GRUPPE>10</GRUPPE>
</artikel>
<artikel>
<ARTNR>1100</ARTNR>
<ARTBEZ>Trinitron 17"</ARTBEZ>
<EKPREIS>375.00</EKPREIS>
<EKWAEHRUNG>$</EKWAEHRUNG>
<VPREIS>399.00</VPREIS>
<VWAEHRUNG>$</VWAEHRUNG>
<GRUPPE>20</GRUPPE>
</artikel>
</alle_artikel>
</artikelkatalog>
机器很好用它:(什么事?看到未注释的keyref语句?那将是樱桃;)非常感谢你。
答案 0 :(得分:1)
在XPath表达式中,@
字符选择一个属性。但是,在您的示例中,键存储为元素值,而不是属性。
只需从字段选择器中删除@
,唯一性约束就可以正常工作:
<xsd:field xpath="GRUPPE" />
...
<xsd:field xpath="ARTNR" />
评论部分没有多大意义,因为没有
ARTNR
中的artikelgruppe
。我假设您想参考
两个元素组之间的GRUPPE编号。
在这种情况下,keyref
必须在共同的祖先元素中指定,即artikelkatalog
:
<xsd:element name="artikelkatalog">
<xsd:complexType>
...
</xsd:complexType>
<xsd:keyref name="keyref_GRUPPE_REFERENZ" refer="unique_GRUPPE">
<xsd:selector xpath="alle_artikel/artikel" />
<xsd:field xpath="GRUPPE"/>
</xsd:keyref>
</xsd:element>