저는 XML 스키마를 자동으로 생성하고 결과 xsd 파일은 베네 치안 블라인드 디자인 패턴에 따라 생성됩니다. 지금은 복잡한 유형이 많이있어 숫자를 줄이려고합니다. 두 가지 복합 유형이 동일한 제한 사항을 설명하는지 알아내는 쉬운 방법이 있습니까?2 개의 XSComplexType을 비교하여 어떻게 평등합니까?
은 분명히 "someType"와 "someOtherType"<xs:complexType name="someType">
<xs:choice>
<xs:element name="BR" type="xs:string"/>
<xs:element name="A" type="xs:string"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="someOtherType">
<xs:choice>
<xs:element name="A" type="xs:string"/>
<xs:element name="BR" type="xs:string"/>
</xs:choice>
</xs:complexType>
동일합니다
여기 내 말은 무엇을 보여주기 위해 예입니다. 이제 두 스키마의 어느 유형이 동등한 지 알아 보겠습니다. XSOM을 사용하여 스키마를 파싱합니다.
import java.io.File;
import java.io.IOException;
import java.util.Map;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import com.sun.xml.xsom.XSComplexType;
import com.sun.xml.xsom.XSSchema;
import com.sun.xml.xsom.XSSchemaSet;
import com.sun.xml.xsom.parser.XSOMParser;
public class MyXSOM {
public static void main(String[] args) {
SAXParserFactory factory = SAXParserFactory.newInstance();
XSOMParser parser = new XSOMParser(factory);
try {
parser.parse(new File("schema.xsd"));
parser.parse(new File("schema2.xsd"));
XSSchemaSet sset = parser.getResult();
XSSchema schema1 = sset.getSchema(0);
XSSchema schema2 = sset.getSchema(1);
Map<String, XSComplexType> schema1ComplexTypes = schema1.getComplexTypes();
Map<String, XSComplexType> schema2ComplexTypes = schema2.getComplexTypes();
for(XSComplexType currentType1: schema1ComplexTypes.values()){
for(XSComplexType currentType2: schema2ComplexTypes.values()){
// if currentType1 and currentType2 define the same complexType, do s.t.
}
}
} catch (SAXException | IOException e) {
e.printStackTrace();
}
}
}
두 개의 "complexType"노드간에 이러한 종류의 동등성을 검사하는 우아한 방법이 있습니까?
컴퓨터 과학 이론에서 어려운 문제를 선택하셨습니다. http://math.stackexchange.com/questions/231187/an-efficient-way-to-determine-if-two-context-free-grammars-are-equivalent를 참조하십시오. –