我想允许元素包含属性或定义更复杂的类型。
像
这样的东西<myElement someAttr="..."/>
或
<myElement>
<...>
</myElement>
也就是说,如果someAttr存在,那么我不想允许子元素,如果没有,那么我想。
原因是我希望有一个“包含”功能,其中包含一个基本上插入元素的文件。但我不想要两者。您可以在元素中包含其他外部xml代码,也可以添加两个外部xml代码。 (或者也可以从xml的单独部分插入)
这主要是为了简化复杂的xml,以便于理解结构。
答案 0 :(得分:1)
我怀疑你现在能够在XML模式中表达类似的内容。
您可以使属性可选,例如它可以存在与否。但如果属性不存在,则无法表达之类的内容,然后使用当前方法包含其他复杂内容。
您必须自己以编程方式检查,或者调查其他XML描述语言(如RelaxNG或Schematron)是否可以提供帮助。
答案 1 :(得分:0)
也许使用静态选择并更改myElement名称?
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:choice>
<xs:element name="myElementWithAttrs">
<xs:complexType>
<xs:attribute name="someAttrs" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="myElementWithoutAttrs">
<xs:complexType>
<xs:sequence>
<xs:any processContents="skip"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>