답변
XSD 1.0은이 기능을 지원하지 않습니다. XSD 1.1은 이것을 할 수 있도록 Conditional Types and assertions을 지원합니다. xsd 1.0의 경우 이것을 달성하기 위해 Schematron을 사용할 수 있습니다.
제약 조건은 요소의 컨텍스트에서만 표현 될 수 있습니다.
<?xml version="1.0" encoding="utf-8" ?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="Options">
<xsd:sequence>
<xsd:element name="option" maxOccurs="unbounded">
<xsd:complexType>
<xsd:all>
<xsd:element name="id" type="xsd:integer"/>
<xsd:element name="label" type="xsd:string"/>
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
<xsd:element name="dependency" type="xsd:integer" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="Options" type="Options">
<xsd:key name="PK">
<xsd:selector xpath="option"/>
<xsd:field xpath="id"/>
</xsd:key>
<xsd:keyref name="FK" refer="PK">
<xsd:selector xpath="option"/>
<xsd:field xpath="dependency"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
이 유형은 당신이 지시 한 제약과 함께 여러 인스턴스에서 언급 한하고자하는 경우에, 당신은 항상 전역 요소를 정의해야하며, 그 요소의 심판 귀하의 특정 상황.
귀하의 질문에 "다른"단어를 사용하는 것을 이해하는 것이 매우 중요하다는 것을 말씀 드리고자합니다. 당신이 정말로 그것을 의미한다면, 위는 당신에게 그것을주지 않습니다.
주어진'Option'과'Options' 요소에 대해'key'와'keyref'가 정의되어야합니다 'Options'는 부모이고,'Option'은 자식이 아닙니다. – Svish
@Svish, 네, 옵션 단계에 있어야합니다. 이것은 스펙에서 나온 것입니다 :'{selector}는 선언 된 요소의 인스턴스에 상대적으로 제한된 XPath ([XPath]) 표현식을 지정합니다. 이것은 제약이 적용되는 하위 요소 (즉, 선언 된 요소 내에 포함 된)의 노드 집합을 식별해야합니다.'기본적으로'option' 요소를 제한하려고합니다. 즉, 한 수준 위로 이동해야합니다. –
'다른 옵션'을 사용하면 자기 참조 옵션을 사용할 수 없다는 것을 강요하고 싶습니까? –
@PetruGardea 실제로 좋을 것입니다.하지만 무엇보다 먼저이 질문에서 참조 부분 바로 뒤에 있습니다 :) – Svish