2014-02-08 45 views
0

我有一个练习,要求我将DTD转换为XML Schema。我知道可以根据DTD验证XML文档(我使用的是由氧气开发的xml开发人员)。验证XML Schema是否可以用于DTD?我问这是因为我想检查我的翻译是否正确。检查XML Schema是否已正确从DTD转换

这是我DTD:

<!DOCTYPE x [ 
<!ELEMENT x (y1,y2)+> 
<!ELEMENT y1 ((z1|z2)*,(z3,z4)+)> 
<!ELEMENT y2 (z1?,z2*,z3?)> 
<!ELEMENT z1 (#PCDATA)> 
<!ELEMENT z2 (#PCDATA)> 
<!ELEMENT z3 (#PCDATA)> 
<!ELEMENT z4 EMPTY> 
<!ATTLIST x attrx CDATA #REQUIRED> 
<!ATTLIST y1 attry CDATA #IMPLIED> 
]> 

这是我的XML模式的尝试:

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="x" type="xsd:string"></xsd:element> 
    <xsd:complexType name="tipox"> 
     <xsd:sequence minOccurs="1" maxOccurs="unbounded"> 
      <xsd:element name="y1" type="tipoy1"/> 
      <xsd:element name="y2" type="tipoy2"/> 
     </xsd:sequence> 
     <xsd:attribute name="attrx" type="xsd:string" use="required"/> 
    </xsd:complexType> 
    <xsd:complexType name="tipoy1"> 
     <xsd:sequence> 
      <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
       <xsd:element name="z1" type="xsd:string"></xsd:element> 
       <xsd:element name="z2" type="xsd:string"></xsd:element> 
      </xsd:choice> 
      <xsd:sequence minOccurs="1" maxOccurs="unbounded"> 
       <xsd:element name="z3" type="xsd:string"></xsd:element> 
       <xsd:element name="z4"><xsd:complexType/></xsd:element> 
      </xsd:sequence> 
     </xsd:sequence> 
     <xsd:attribute name="attry" type="xsd:string" use="optional"/> 
    </xsd:complexType> 
    <xsd:complexType name="tipoy2"> 
     <xsd:sequence> 
      <xsd:element name="z1" type="xsd:string" minOccurs="0" maxOccurs="1"></xsd:element> 
      <xsd:element name="z2" type="xsd:string" minOccurs="0" maxOccurs="unbounded"></xsd:element> 
      <xsd:element name="z3" type="xsd:string" minOccurs="0" maxOccurs="1"></xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

回答

0

可以有翻译之间的一些差异做手工或使用工具例如<元Z1! (#PCDATA)>可解释为

<xsd:element name="z1"> 
    <xsd:complexType mixed="true"/> 
</xsd:element> 

或者干脆

<xsd:element name="z1" type="xsd:string" minOccurs="0" maxOccurs="1"></xsd:element> 

除了手动翻译的,你可以更好地依靠像 XML Spy翻译,然后缩小范围,事件和你的元素/复杂类型的使用喜好来定制您的需求。