Bir XML belgesinde var olan tüm öğeler arasında bir özniteliğin tekliğini doğrulamaya çalışıyorum.XML belgesinde XSD ile öznitelik tekliğini doğrulayın
Örnek XML:
<exampleXml>
<a id="1"/>
<a id="2">
<b id="1"/>
</a>
</exampleXml>
Benim XSD şeması:
<xs:schema elementFormDefault="qualified">
<xs:element name="exampleXml">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="a">
<xs:complexType>
<xs:complexContent>
<xs:extension base="baseRuleType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="b">
<xs:complexType>
<xs:complexContent>
<xs:extension base="baseRuleType"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="duplicateIdsForbidden">
<xs:selector xpath="//"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
<xs:complexType name="baseRuleType">
<xs:attribute name="id" use="optional"/>
</xs:complexType>
</xs:schema>
xpath burada konudur.
Element '{http://www.w3.org/2001/XMLSchema}selector', attribute 'xpath': The XPath expression '//' could not be compiled
degisebilirim "*" ama bu sadece kökün doğrudan Torunlar olan unsurları id özelliğini doğrular için xpath: Ben kökün altındaki her eleman ama yukarıda döner seçici xpath eşleştirmek istiyoruz.
Bunu PHP'de DOMDocument::schemaValidate()
kullanarak lib_xml ile doğrulıyorum. Herhangi bir yardım büyük beğeni topluyor.
Neden öznitelik türünü kimliğe ayarladınız veya ID özniteliği için xml: kimlini kullanmıyorsunuz? Bu benzersizliği otomatik olarak zorlar. Yine de kimlikleri sayısal değil, ancak NCNames. – Gordon
'xpath'i * * 'olarak değiştirebilirim, ancak bu yalnızca kök öznitelikleri olan öğelerdeki id özniteliğini doğrulayacaktır.' Bence "... en üst düzey elemanın doğrudan * çocukları *" demek istiyorsun, değil mi? – LarsH