如果可能,我想禁止使用从基本模式 (BaseSchema.xsd) 继承的属性(下划线),而不用重新定义整个元素 TextType,如果可能,按照以下示例中演示的方式:
基本架构 (BaseSchema.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Text" type="TextType"/>
<xs:complexType name="TextType"> <!-- Actual example is much longer -->
<xs:attribute name="bold" type="xs:boolean"/>
<xs:attribute name="italics" type="xs:boolean"/>
<xs:attribute name="underline" type="xs:boolean"/>
</xs:complexType>
</xs:schema>
派生架构 (DerivedSchema.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:override schemaLocation="BaseSchema.xsd">
<xs:complexType name="TextType">
<xs:simpleContent>
<xs:extension base="TextType">
<xs:attribute name="underline" type="xs:boolean" use="prohibited"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:override>
</xs:schema>
这里的问题是TextType
相当于<xs:extension base="TextType">
一个循环定义,我想将其标识为TextType
基本模式中的定义。
解决方案,基于 xs:redefine感谢 Michael
基本架构(已编辑)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="Text" type="TextType"/>
<xs:complexType name="TextType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="bold" type="xs:boolean"/>
<xs:attribute name="italics" type="xs:boolean"/>
<xs:attribute name="underline" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
派生架构(已编辑)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:redefine schemaLocation="BaseSchema.xsd">
<xs:complexType name="TextType">
<xs:simpleContent>
<xs:restriction base="TextType">
<xs:attribute name="underline" type="xs:boolean" use="prohibited"/>
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:redefine>
</xs:schema>