如何指定(XSD)元素具有子标记或简单内容,但不能同时具有二者
编辑:这不是我上一个问题的翻版,因为我不想再同时做这两个问题了 我想指定我的设置节点具有以下任一项:如何指定(XSD)元素具有子标记或简单内容,但不能同时具有二者,xsd,Xsd,编辑:这不是我上一个问题的翻版,因为我不想再同时做这两个问题了 我想指定我的设置节点具有以下任一项: <setting name='Some Setting'> SomeData </setting> 一些数据 架构是: <xs:element name="setting"> <xs:complexType> <xs:simpleContent> <xs:ex
<setting name='Some Setting'>
SomeData
</setting>
一些数据
架构是:
<xs:element name="setting">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
或
<setting name='Some Setting'>
<value>SomeData</value>
</setting>
一些数据
架构是:
<xs:element minOccurs="0" name="setting">
<xs:complexType>
<xs:sequence>
<xs:element name="value" type="xs:string" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
但不是两者都有。
我不知道如何在整个模式中组合它们。我尝试过使用
,但这抱怨说同名的元素需要具有相同的类型这些类型的限制无法在XSD中描述,您需要使用另一种语言来建模,例如schematron。这些类型的限制无法在XSD中描述,您需要使用另一种语言对它们进行建模,例如schematron。我认为最接近的方法是使用mixed=“true”
,如下所示:
<xs:complexType>
<xs:sequence>
<xs:element name="setting">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="value" type="xs:string" minOccurs="0" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<setting name="Some Setting">
<value>SomeData</value>
</setting>
一些数据
<setting name="Some Setting">
Some Data
<value>SomeData</value>
</setting>
一些数据
一些数据
(3)的可能性肯定不理想,但我认为你无法避免。你需要有一个规则来处理这种情况。我认为合理的规则是:如果存在
值
元素,则使用值
标记之间的数据,否则使用设置
标记之间的数据。我认为最接近的方法是使用mixed=“true”
,如下:
<xs:complexType>
<xs:sequence>
<xs:element name="setting">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="value" type="xs:string" minOccurs="0" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<setting name="Some Setting">
<value>SomeData</value>
</setting>
一些数据
<setting name="Some Setting">
Some Data
<value>SomeData</value>
</setting>
一些数据
一些数据
(3)的可能性肯定不理想,但我认为你无法避免。你需要有一个规则来处理这种情况。我认为合理的规则是:如果存在
值
元素,则使用值
标记之间的数据,否则使用设置
标记之间的数据。谢谢您的回答。我今天要试试这个。我知道不鼓励使用混合节点,但对我来说这似乎是最好的解决方案。谢谢您的回答。我今天要试试这个。我知道不鼓励使用混合节点,但对我来说这似乎是最好的解决方案。