对照模式和相互验证一组XML文件的标准方法

对照模式和相互验证一组XML文件的标准方法,xml,validation,xsd,relationship,Xml,Validation,Xsd,Relationship,我正在开发一个数据传输标准,它将涉及(简单地说)一个用XML定义项目定义的客户机到一个项目定义模式,以及一个提供符合数据供应模式和客户机定义的项目定义的数据的供应商 我知道我可以按照惯例/通过定义一个要遵循的过程来做到这一点,我的问题是“有没有一种公认的标准方法来做这类事情?”也许可以使用注释/appinfo?(我在谷歌上搜索过,结果是空的) 下面是我所讲内容的一个例子(为了简洁起见,大部分内容都被删去了): 简化的客户端项目定义模式 <xs:schema ...> <

我正在开发一个数据传输标准,它将涉及(简单地说)一个用XML定义项目定义的客户机到一个项目定义模式,以及一个提供符合数据供应模式和客户机定义的项目定义的数据的供应商

我知道我可以按照惯例/通过定义一个要遵循的过程来做到这一点,我的问题是“有没有一种公认的标准方法来做这类事情?”也许可以使用注释/appinfo?(我在谷歌上搜索过,结果是空的)

下面是我所讲内容的一个例子(为了简洁起见,大部分内容都被删去了):

简化的客户端项目定义模式

<xs:schema ...>
    <xs:element name="ProjectConfiguration">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Enum" type="EnumType" minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
            <xs:attribute name="id" type="xs:string" use="required" />
        </xs:complexType>
    </xs:element>

    <xs:complexType name="EnumType">
        <xs:sequence>
            <xs:element name="Value" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required" />
    </xs:complexType>
</xs:schema>

客户端项目定义XML

<ProjectConfiguration id="myproj">
    <Enum name="myenum">
        <Value>AllowedValue1</Value>
        <Value>AllowedValue2</Value>
    </Enum>
</ProjectConfiguration>

允许值1
允许值2
简化的供应商数据供应模式

<xs:schema ...>
    <xs:element name="Data">
        <xs:complexType>
            <xs:attribute name="value" type="xs:string" use="required">
                <xs:annotation>
                    <xs:documentation>
                        Here, I want the type to be validated against the list supplied
                        in the Client Project Definition XML.  I know (think) that XSD 
                        won't cut this, but am wondering if there is anything
                        that will in a standard manner. 
                    </xs:documentation>
                </xs:annotation>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
</xs:schema>

在这里,我希望根据提供的列表验证类型
在客户端项目定义XML中。我知道(认为)XSD
我不会剪这个,但我想知道是否有什么
这将以标准方式进行。
为免生疑问,我完全控制了我的代码库,没有外部强加的约束。我不希望客户为每个项目定义一个模式,因为最终的解决方案将涉及多个层/库存配置(以及通过配置继承和修改这些层/库存配置)


如果有另一种方式与我试图做的完全不同,我洗耳恭听

枚举不能在单独的XML文件中指定,也不能作为约束应用于XSD中的值,这是正确的

我不希望客户机为每个项目定义一个模式,就像 最终的解决方案将涉及多层/库存配置 (以及通过配置继承和修改这些内容)

就需求而言,这有点模糊,但如果您发现XSD 1.0过于有限,这里有一些其他验证选项:

  • XSD1.1有断言,尽管它们仅限于访问 当前节点及其子节点
  • Schematron具有基于XPath的断言,可以调用用户定义的 函数(XSLT语法),这反过来又可以参考其他XML文档 例如,包含枚举声明的
  • 原始XSLT将提供最大的功能和灵活性,尽管是在 供应商提供的标准化和预定义结构的费用 Schematron

感谢您的指点;听起来Schematron方法可能是最好的;标准且被充分理解——我将进行调查,如果调查结果属实,我将发布一个答案,其中包含在我的实例中起作用的解决方案。