如您所见,除了“非工作”和“工作”版本之外,唯一的区别(左)是到处都使用“this”前缀。
默认命名空间
xmlns
属性的全部意义不是为了避免这个确切的问题吗?
我在这里做错了什么吗?
根据要求这里是 XSD 作为代码:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
targetNamespace="Ember.Graphics.OpenGL"
elementFormDefault="qualified"
attributeFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="Ember.Graphics.OpenGL"
>
<xsd:element name="UniformBlock">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="BlockMember" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="type" use="required" type="Types"/>
<xsd:attribute name="name" use="required" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string"/>
<xsd:attribute name="instanceName" use="optional" type="xsd:string"/>
<xsd:attribute name="layout" use="optional" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="Types">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="mat4"/>
<xsd:enumeration value="mat3"/>
<xsd:enumeration value="vec3"/>
<xsd:enumeration value="vec4"/>
<xsd:enumeration value="float"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
“工作”XML(略有改动):
<?xml version="1.0" encoding="utf-8"?>
<x:UniformBlock
xmlns:x="Ember.Graphics.OpenGL"
>
<x:BlockMember
x:type="mat4"
x:name="WorldToCamera"
/>
</x:UniformBlock>
我认为您的示例或您的期望中的一个错误是使用 attributeFormDefault="qualified" 以及在默认命名空间示例中使用无前缀的属性;默认命名空间声明适用于元素但不适用于属性。
因此,根据您的需要/要求,您想要删除
attributeFormDefault="qualified"
或者您需要确保,如果您希望您的属性位于(目标)命名空间中,那么您的 XML 示例中的属性名称的前缀带有前缀绑定到命名空间。