Xml 基于父元素的属性
我有一个树结构,我想为它创建一个模式。每个节点下都有两个节点列表。这些列表可以列出相同类型的元素。但是,一个列表中的元素需要两个附加属性。是否有任何方法需要基于其父元素的元素属性 我尝试创建单独的列表类型。一种列表类型只包含元素的选择。另一个包含相同的选择类型,但每个类型都扩展为需要额外的参数。这是可行的,而且非常简单,但它似乎不必要地冗长,我想知道是否有更聪明的解决方案。当前架构如下所示:Xml 基于父元素的属性,xml,xsd,xml-validation,Xml,Xsd,Xml Validation,我有一个树结构,我想为它创建一个模式。每个节点下都有两个节点列表。这些列表可以列出相同类型的元素。但是,一个列表中的元素需要两个附加属性。是否有任何方法需要基于其父元素的元素属性 我尝试创建单独的列表类型。一种列表类型只包含元素的选择。另一个包含相同的选择类型,但每个类型都扩展为需要额外的参数。这是可行的,而且非常简单,但它似乎不必要地冗长,我想知道是否有更聪明的解决方案。当前架构如下所示: <?xml version="1.0" encoding="utf-8"?> <xs:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/ElementSchema" xmlns="http://www.example.org/ElementSchema"
elementFormDefault="qualified">
<!--BaseElementTypes -->
<xs:element name="BaseElement" type="BaseElementType" />
<xs:element name="DoubleElement" type="DoubleElementType" />
<xs:element name="BoundedDoubleElement" type="BoundedDoubleElementType" />
<!--ElementListTypes -->
<xs:complexType name="ChildListType">
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element ref="BaseElement" />
<xs:element ref="DoubleElement" />
<xs:element ref="BoundedDoubleElement" />
</xs:choice>
</xs:complexType>
<xs:complexType name="PropertyListType">
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="BaseElement">
<xs:complexType>
<xs:complexContent>
<xs:extension base="BaseElementType">
<xs:attribute name="Role" type="xs:string" use="required" />
<xs:attribute name="Tag" type="xs:integer" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="DoubleElement">
<xs:complexType>
<xs:complexContent>
<xs:extension base="DoubleElementType">
<xs:attribute name="Role" type="xs:string" use="required" />
<xs:attribute name="Tag" type="xs:integer" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="BoundedDoubleElement">
<xs:complexType>
<xs:complexContent>
<xs:extension base="BoundedDoubleElementType">
<xs:attribute name="Role" type="xs:string" use="required" />
<xs:attribute name="Tag" type="xs:integer" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<!--elementTypes -->
<xs:complexType name="BaseElementType">
<xs:sequence>
<xs:element name="Children" type="ChildListType" minOccurs="0" />
<xs:element name="Properties" type="PropertyListType"
minOccurs="0" />
</xs:sequence>
<xs:attribute name="ID" type="xs:positiveInteger" use="required" />
<xs:attribute name="Key" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="DoubleElementType">
<xs:complexContent>
<xs:extension base="BaseElementType">
<xs:sequence>
<xs:element name="Value" type="xs:float" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="BoundedDoubleElementType">
<xs:complexContent>
<xs:extension base="DoubleElementType">
<xs:sequence>
<xs:element name="DesiredValue" type="xs:float" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
具体来说,我想知道是否有更好的方法来实现与PropertyListType
相同的结果
是否有任何方法可以基于元素的属性要求元素具有属性
家长
在XSD 1.0中,没有
在xsd1.1中,是:将属性设置为可选,然后xs:assert
确定特定父元素的每个子元素都有额外的属性是一个示例,展示了如何在XSD 1.1中使用每..满足断言