0
xsdは要素の重複値を防止する必要があります。私はいろいろな方法で試してみましたが、要素のユニークな制約を達成するために何とか見逃しましたxsdを介したxmlのユニークな要素の値
以下のXMLでは、xyz:interval要素の値が重複しています。 一意のタグを使用して複製を回避するにはどうすればよいですか?
私はXSD以下でユニークを使用しようとしましたが、これを達成できませんでした。
XSD:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xyz="http://www.example.com/schema/public/" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.example.com/schema/public/" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Intervals">
<xs:sequence>
<xs:element name="interval" type="xs:int" maxOccurs="unbounded">
<xs:unique name="alias_unique">
<xs:selector xpath="supportedMeasurementIntervals" />
<xs:field xpath="." />
</xs:unique>
</xs:element>
<xs:element name="defaultInterval" type="xs:int" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<xs:element name="NoOfPeriod" type="xs:int" />
<xs:element name="isPeriodSupported" type="xs:boolean" />
<xs:element name="MType">
<xs:complexType mixed="true">
<xs:sequence minOccurs="0">
<xs:element name="SIntervals" type="xyz:Intervals" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:group name="Child">
<xs:sequence>
<xs:element name="SIntervals" type="xyz:Intervals" minOccurs="1" maxOccurs="1" />
<xs:element ref="xyz:NoOfPeriod" minOccurs="1" maxOccurs="1" />
<xs:element ref="xyz:isPeriodSupported" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:group>
<xs:element name="Parent">
<xs:complexType>
<xs:sequence>
<xs:element name="Child" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:group ref="xyz:Child" />
</xs:complexType>
</xs:element>
<xs:element name="MTypes" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="xyz:MType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML:
<?xml version="1.0" encoding="utf-8"?>
<xyz:Parent xmlns:xyz="http://www.example.com/schema/public/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/schema/public/">
<xyz:Child>
<xyz:SIntervals>
<xyz:interval>1111</xyz:interval>
<xyz:interval>1111</xyz:interval>
<xyz:interval>1111</xyz:interval>
<xyz:interval>9727</xyz:interval>
<xyz:defaultInterval>504</xyz:defaultInterval>
</xyz:SIntervals>
<xyz:NoOfPeriod>4804</xyz:NoOfPeriod>
<xyz:isPeriodSupported>1</xyz:isPeriodSupported>
</xyz:Child>
<xyz:MTypes>
<xyz:MType id="string" />
<xyz:MType id="string" />
<xyz:MType id="string">
<xyz:SIntervals>
<xyz:interval>2222</xyz:interval>
<xyz:interval>2222</xyz:interval>
<xyz:defaultInterval>6631</xyz:defaultInterval>
</xyz:SIntervals>
</xyz:MType>
<xyz:MType id="string" />
</xyz:MTypes>
</xyz:Parent>
私は複数の間隔定義を持つことができますが、それらの値は同じではありません。値が繰り返されると、xsdは検証に失敗します。 – user1529282
OK、質問が正しく表示されませんでした。固有の要素の適用範囲が適用されますが、complexTypeに適用する場合は不可能です(https://stackoverflow.com/questions/32826828/unique-constraint-on-a-complextype-insteadを参照)。要素のおそらく、あなたはxsdとタイプの定義を再設計しなければならないでしょう。 –