如何在XSD中使用XLink数据类型?xjc编译XSD报错求助
嘿,我来帮你搞定这两个XSD相关的技术问题!
要在XSD里用上XLink的功能,其实很简单,跟着这两步走就行:
先声明XLink命名空间
打开你的XSD文件,找到最外层的<xs:schema>标签,把XLink的命名空间加进去,一般前缀用xlink,对应的URI是http://www.w3.org/1999/xlink,示例代码如下:<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" attributeFormDefault="unqualified" elementFormDefault="qualified">然后在需要的地方引用XLink属性
XLink自带了一堆预定义属性,比如用来指定链接地址的xlink:href、定义链接类型的xlink:type等等。你可以直接在元素里引用这些属性,比如定义一个带跳转链接的元素:<xs:element name="external-link"> <xs:complexType> <xs:sequence> <xs:element name="link-text" type="xs:string"/> </xs:sequence> <!-- 必须的链接地址属性 --> <xs:attribute ref="xlink:href" use="required"/> <!-- 固定为简单链接类型 --> <xs:attribute ref="xlink:type" fixed="simple"/> </xs:complexType> </xs:element>这样定义后,
<external-link>元素就必须带上xlink:href属性,而且xlink:type只能是simple。
这个报错我之前也碰到过,主要是两个小问题导致的,一步步来修复:
先改前缀拼写!
你写的xlin:href明显是手滑打错了,正确的XLink前缀是xlink,所以先把所有地方的xlin替换成xlink,这是最常见的低级错误😂。添加XLink命名空间的import声明
就算你在schema开头声明了XLink的命名空间,xjc工具有时候还是需要明确的<xs:import>标签来拉取对应的schema定义。在你的<xs:schema>标签内部,加上这么一行:<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://www.w3.org/1999/xlink.xsd"/>这里的
schemaLocation指向官方的XLink schema文件,确保xjc能找到正确的属性定义。给你个完整的修正后的开头示例
调整后的schema开头应该是这样的:<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" attributeFormDefault="unqualified" elementFormDefault="qualified"> <!-- 引入XLink的官方schema --> <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://www.w3.org/1999/xlink.xsd"/> <!-- 下面放你的其他schema定义内容 --> </xs:schema>
改完这两点,再重新用xjc编译你的XSD文件,应该就能顺利通过了。
内容的提问来源于stack exchange,提问作者Erik_DA

