Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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
Java 将XML属性的值限制为不同的属性';s/element';s值_Java_Xml_Jaxb_Xsd - Fatal编程技术网

Java 将XML属性的值限制为不同的属性';s/element';s值

Java 将XML属性的值限制为不同的属性';s/element';s值,java,xml,jaxb,xsd,Java,Xml,Jaxb,Xsd,我将从一个例子开始 <template> <components> <component name="switch" /> <component name="server" /> </components> <layout> <grid> <position componentName="switch" positionX="0" positionY="0"

我将从一个例子开始

<template>
  <components>
    <component name="switch" />
    <component name="server" />
  </components>
  <layout>
    <grid>
      <position componentName="switch" positionX="0" positionY="0" />
    </grid>
  </layout>
</template>


我想要的是限制
componentName
属性中的值与上面在
components
中指定的名称之一相匹配。这在JAXB中可能吗?因为我需要有注释类,然后这些类用于生成XSD。

给定您的场景,XSD1.0可以通过一个key/keyref组合来强制您的“引用完整性”。但是,我不知道JAXB中这些构造有什么注释(听起来好像您正在考虑从Java类生成XSD);至少我从未遇到过这样的注释(见列表)


<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="template">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="components">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element maxOccurs="unbounded" name="component">
                <xsd:complexType>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="layout">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="grid">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="position">
                      <xsd:complexType>
                        <xsd:attribute name="componentName" type="xsd:string" use="required" />
                        <xsd:attribute name="positionX" type="xsd:unsignedByte" use="required" />
                        <xsd:attribute name="positionY" type="xsd:unsignedByte" use="required" />
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:key name="ComponentsKey">
        <xsd:selector xpath="components/component"/>
        <xsd:field xpath="@name"/>
    </xsd:key>
    <xsd:keyref name="MatchComponent" refer="ComponentsKey">
        <xsd:selector xpath="layout/grid/position"/>
        <xsd:field xpath="@componentName"/>
    </xsd:keyref>
  </xsd:element>
</xsd:schema>