在XML模式中将自定义类型定义为限制
我打算为源代码(多种语言)编写一个生成器。 类(即基本数据容器)应指定为XML 文件夹。要自动验证和解析这些XML文件,我需要 定义XSD模式。这应该是一个有效的文件:在XML模式中将自定义类型定义为限制,xml,validation,xsd,Xml,Validation,Xsd,我打算为源代码(多种语言)编写一个生成器。 类(即基本数据容器)应指定为XML 文件夹。要自动验证和解析这些XML文件,我需要 定义XSD模式。这应该是一个有效的文件: <?xml version="1.0"?> <class> <customType name="vector3D"> <variable name="x" type="int"/> <variable name="y" type="in
<?xml version="1.0"?>
<class>
<customType name="vector3D">
<variable name="x" type="int"/>
<variable name="y" type="int"/>
<variable name="z" type="int"/>
</customType>
<variable name="identifier" type="string"/>
<variable name="direction" type="vector3D"/>
</class>
然而,我正在努力尝试允许有限的
基本类型和在customType
标记中定义的名称。决定性的
我的基本类型集很简单:
<xsd:simpleType name="ValidType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="bool"/>
<xsd:enumeration value="int"/>
<xsd:enumeration value="string"/>
</xsd:restriction>
</xsd:simpleType>
但是有没有办法允许在名称中定义标识符
customType
标记的属性,或者我必须允许
xsd:string
并检查生成器中的有效性
编辑
如果我理解正确,我想要的东西就不能用XSD来完成(因为限制仅限于
minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength |枚举|空格|模式|断言| explicitTimezone
,它们不支持这种动态限制),我必须在手动验证XSD模式后执行此操作
有人能证实这是正确的吗?是的,我想你是对的。在xsd 1.0中,不可能进行动态限制,例如“如果属性名等于XX,那么属性类型只能等于ZZ”。在XSD1.1中,可以定义断言,但我不确定可用的解析器对断言的支持程度(可能Saxon可以有此功能)。是的,我认为您是正确的。在xsd 1.0中,不可能进行动态限制,例如“如果属性名等于XX,那么属性类型只能等于ZZ”。在XSD1.1中,可以定义断言,但我不确定在可用的解析器中支持多少断言(Saxon可能有此功能)
<xsd:simpleType name="ValidType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="bool"/>
<xsd:enumeration value="int"/>
<xsd:enumeration value="string"/>
</xsd:restriction>
</xsd:simpleType>