在类型属性中使用自定义 xml 命名空间前缀
Use a custom xml namespace prefix in type attribute
我想从 xsd:string
引入新的命名空间和前缀 "extending" hod:string
。然后在我的模式中我可以定义一个字符串元素:
<xsd:element name="Label" type="hod:string"/>
这样我就可以将 hod:string
类型的所有元素的 maxLength 更改为 80。如果该要求稍后更改为 50,我可以简单地更改 hod:string
中的定义一个地方。这就是我正在尝试的——我的 IDE 不喜欢第 15 行 ("cannot resolve symbol hod:string"):
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:hod="http://hod.com/2019/XMLSchema/hod"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xsd:simpleType name="hod:string">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="80"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="Object">
<xsd:sequence>
<xsd:element name="Label" type="hod:string"/>
<xsd:element name="MateriaID" type="GUID"/>
...
我将所有“hod:string
”更改为“mystring
”以验证我定义的内容是否正确并且看起来很高兴,但我想要使用如果可能,前缀。 (也试图改变这个:attributeFormDefault="qualified"
但它似乎没有什么不同)
简单类型从 xs:schema
元素的 targetNamespace
属性获取它们的命名空间。由于您的 xs:schema
元素没有 targetNamespace
,您当前的 elements/types,包括您的自定义字符串类型,没有命名空间。
如果您想将当前元素保留在无命名空间中,而只让您的字符串类型有命名空间,您需要在具有不同 targetNamepsace
的新架构中定义类型,并将其导入到此模式。例如:
hodtypes.xsd
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:hod="http://hod.com/2019/XMLSchema/hod"
targetNamespace="http://hod.com/2019/XMLSchema/hod">
<xsd:simpleType name="string">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="80"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
main.xsd
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:hod="http://hod.com/2019/XMLSchema/hod"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xsd:import namespace="http://hod.com/2019/XMLSchema/hod" schemaLocation="hodtypes.xsd" />
<xsd:complexType name="Object">
<xsd:sequence>
<xsd:element name="Label" type="hod:string"/>
<xsd:element name="MateriaID" type="GUID"/>
...
我想从 xsd:string
引入新的命名空间和前缀 "extending" hod:string
。然后在我的模式中我可以定义一个字符串元素:
<xsd:element name="Label" type="hod:string"/>
这样我就可以将 hod:string
类型的所有元素的 maxLength 更改为 80。如果该要求稍后更改为 50,我可以简单地更改 hod:string
中的定义一个地方。这就是我正在尝试的——我的 IDE 不喜欢第 15 行 ("cannot resolve symbol hod:string"):
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:hod="http://hod.com/2019/XMLSchema/hod"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xsd:simpleType name="hod:string">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="80"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="Object">
<xsd:sequence>
<xsd:element name="Label" type="hod:string"/>
<xsd:element name="MateriaID" type="GUID"/>
...
我将所有“hod:string
”更改为“mystring
”以验证我定义的内容是否正确并且看起来很高兴,但我想要使用如果可能,前缀。 (也试图改变这个:attributeFormDefault="qualified"
但它似乎没有什么不同)
简单类型从 xs:schema
元素的 targetNamespace
属性获取它们的命名空间。由于您的 xs:schema
元素没有 targetNamespace
,您当前的 elements/types,包括您的自定义字符串类型,没有命名空间。
如果您想将当前元素保留在无命名空间中,而只让您的字符串类型有命名空间,您需要在具有不同 targetNamepsace
的新架构中定义类型,并将其导入到此模式。例如:
hodtypes.xsd
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:hod="http://hod.com/2019/XMLSchema/hod"
targetNamespace="http://hod.com/2019/XMLSchema/hod">
<xsd:simpleType name="string">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="80"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
main.xsd
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:hod="http://hod.com/2019/XMLSchema/hod"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xsd:import namespace="http://hod.com/2019/XMLSchema/hod" schemaLocation="hodtypes.xsd" />
<xsd:complexType name="Object">
<xsd:sequence>
<xsd:element name="Label" type="hod:string"/>
<xsd:element name="MateriaID" type="GUID"/>
...