Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XML模式中将自定义类型定义为限制_Xml_Validation_Xsd - Fatal编程技术网

在XML模式中将自定义类型定义为限制

在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 文件夹。要自动验证和解析这些XML文件,我需要 定义XSD模式。这应该是一个有效的文件:

<?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>