题
我刚刚学习 XML/XSD,并且正在努力实现对文件夹结构进行建模的 XML 模式。我的想法是为文件夹定义一个复杂类型,它可以有代表子文件夹的附加文件夹实例。使用 xsd 架构验证器 这里 始终返回架构无效。
我尝试预先定义复杂类型,然后使用 参考 子文件夹的关键字:
<xs:complexType name="tFolder">
<xs:sequence>
<xs:element name="Path" type="tFolderType" msdata:Ordinal="0" />
<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="File" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent msdata:ColumnName="File_Text" msdata:Ordinal="0">
<xs:extension base="xs:string">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Type" type="tFolderType" />
至于元素本身:
<xs:element name="Folder" type="tFolder" />
验证器返回的错误是:
“无法将名称“文件夹”解析为“元素声明”组件。”
并且错误发生在该行
<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />
在元素本身中定义复杂类型会产生完全相同的错误:
<xs:element name="Folder">
<xs:complexType>
<xs:sequence>
<xs:element name="Path" type="tFolderType" msdata:Ordinal="0" />
<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="File" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent msdata:ColumnName="File_Text" msdata:Ordinal="0">
<xs:extension base="xs:string">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Type" type="tFolderType" />
</xs:complexType>
</xs:element>
我读过的内容是,这种递归应该使用 参考.
谁能告诉我我做错了什么?也许 xsd 验证器有问题?如果是这样,有人知道更好的选择吗?我也尝试过使用 w3.org 上的那个,但它似乎已离线......
解决方案
我认为这是这样做的方法(不要使用 ref ):
<element name="test" type="tns:TestType"></element>
<complexType name="TestType">
<sequence>
<element name="test" type="tns:TestType"></element>
</sequence>
</complexType>
不隶属于 StackOverflow