我是XML和XML模式的新手。我使用Notepad ++验证我的.xml,但无法正常工作,记事本向我返回此错误:“无法解析架构文件,在第32行解析错误:元素complexContent:内容无效预期为(Annotation?,(restriction | extension))“。
我的productivprocess.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="working">
<xs:complexType name="working">
<xs:sequence>
<xs:element name="lot" minOccurs="1" maxOccurs="unbounded">
<xs:complexType name="lot">
<xs:all>
<xs:element name="atomicity" type="xs:boolean"/>
</xs:all>
<xs:attribute name="lotname" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="resources" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:element name="resource" minOccurs="1" maxOccurs="unbounded">
<xs:complexType name="resource">
<xs:all>
<xs:element name="available" type="xs:positiveInteger"/>
<xs:element name="time" type="xs:positiveInteger"/>
</xs:all>
<xs:attribute name="resourcename" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="process" minOccurs="1" maxOccurs="unbounded">
<xs:complexType name="process">
<xs:complexContent>
<xs:sequence>
<xs:element name="lot" type="lot" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="phase" minOccurs="1" maxOccurs="unbounded">
<xs:complexType name="phase" mixed="true">
<xs:all>
<xs:element name="power" type="xs:positiveInteger"/>
<xs:element name="isDiff" type="xs:boolean"/>
<xs:element name="timeDistribution" type="xs:boolean"/>
<xs:element name="resource" type="resource"/>
</xs:all>
<xs:attribute name="phasename" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="specialphase" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:element name="phase" type="phase" minOccurs="1" maxOccurs="unbounded"/>
<xs:attribute name="specialphasename" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="processname" type="xs:string"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这是我的.xml:
<?xml version="1.0" encoding="UTF-8"?>
<working xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="productiveprocess.xsd">
<lot name="lot1">
<atomicity>0</atomicity><!-- 0 means indivisible -->
</lot>
<lot name="lot2">
<atomicity>0</atomicity>
</lot>
<resources>
<resource resourcename="A1">
<resourcenumber>4</resourcenumber>
<time>1h</time>
</resource>
<resource resourcename="A2">
<resourcenumber>2</resourcenumber>
<time>30min</time>
</resource>
<resource resourcename="A3">
<resourcenumber>1</resourcenumber>
<time>2h</time>
</resource>
</resources>
<process name="process1">
<lot ref="lot1"> <!-- THis could be equal to previuosly lot1 -->
<atomicity>0</atomicity>
</lot>
<phase name="phase1">
<power>5</power>
<isDiff>0</isDiff> <!-- boolean, 0 not deferrable 1 deferrable-->
<timeDistribution>0</timeDistribution>
<resource ref="A1"></resource> <!-- This could be equal to
previuosly "A2" resource-->
</phase>
<phase name="phase2">
<power>3</power>
<isDiff>0</isDiff>
<timeDistribution>1</timeDistribution>
<resource ref="A2"></resource>
</phase>
<phase name="phase3">
<power>6</power>
<isDiff>0</isDiff>
<timeDistribution>1</timeDistribution>
<resource ref="A3"></resource>
</phase>
<specialphase name="specialphase4">
<phase ref="phase2"></phase> <!-- This could be equal to previuosly phase2-->
<phase ref="phase3"></phase>
</specialphase>
</process>
<process name="process2">
<lot ref="lot2">
<atomicity>0</atomicity>
</lot>
<phase name="phase1">
<power>5</power>
<isDiff>0</isDiff>
<timeDistribution>0</timeDistribution>
<resource ref="A1"></resource>
</phase>
<phase name="phase2">
<power>3</power>
<isDiff>0</isDiff>
<distrTempo>1</distrTempo>
<resource ref="A2"></resource>
</phase>
<phase name="phase3">
<power>6</power>
<isDiff>0</isDiff>
<timeDistribution>1</timeDistribution>
<resource ref="A3"></resource>
</phase>
<specialphase name="specialphase4">
<phase ref="phase2"></phase>
<phase ref="phase3"></phase>
</specialphase>
</process>
</working>
答案 0 :(得分:0)
您的架构文件缺少结束</xs:schema>
标记。
您不能在name
元素中使用属性<xs:complexType>
。
根据需要,您不必要使用<xs:complexContent>
或使用错误的元素。
<xs:attribute>
在<xs:element>
下无效,看起来不必要。
对于批次,阶段和资源,您具有三个自引用的type
声明-它们看起来不必要。
以上所有内容仅与架构中的语法错误有关。但是,正如我在下面指出的那样,模式通常由一系列元素定义组成,然后将这些元素定义用于其他定义(请注意,这非常简单),而不是一次性定义整个文档。
例如,我使用XMLSpy为您的XML生成了一个示例架构。它给出的第一个定义是
<xs:element name="working">
<xs:complexType>
<xs:sequence>
<xs:element ref="lot" maxOccurs="unbounded"/>
<xs:element ref="resources"/>
<xs:element ref="process" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
然后您将继续将元素“ lot”,“ resources”和“ process”定义为compexTypes等。
例如
<xs:element name="lot">
<xs:complexType>
<xs:sequence>
<xs:element ref="atomicity"/>
</xs:sequence>
<xs:attribute name="ref">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="lot1"/>
<xs:enumeration value="lot2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="lot1"/>
<xs:enumeration value="lot2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
(至少)有两种方法可以执行此操作。要么定义一个元素并引用它,例如
<xs:element name="resources">
<xs:complexType>
<xs:sequence>
<xs:element ref="resource" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
然后
<xs:element ref="resources"/>
或定义类型并定义该类型的元素,例如
<xs:complexType name="resourcesType">
<xs:sequence>
<xs:element ref="resource" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
然后
<xs:element name="resources" type="resourcesType"/>
请注意,您可以命名一个独立的complexType,但不能在元素的定义中使用它。如果您想在文档中多次使用相同的类型,但是每个实例的名称不同,这将很有用。
这是整个生成的架构。我建议您将它与XML进行比较,以了解架构的结构。但是,不要只照原样生成这个模式。一旦您有了主意,就应该能够简化和/或重组它。
<?xml version="1.0" encoding="UTF-8"?>
<!--W3C Schema generated by XMLSpy v2007 sp2 (http://www.altova.com)-->
<xs:schema xmlns="https://www.w3schools.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="https://www.w3schools.com">
<xs:element name="working">
<xs:complexType>
<xs:sequence>
<xs:element ref="lot" maxOccurs="unbounded"/>
<xs:element ref="resources"/>
<xs:element ref="process" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="timeDistribution">
<xs:simpleType>
<xs:restriction base="xs:byte">
<xs:enumeration value="0"/>
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="time">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="1h"/>
<xs:enumeration value="2h"/>
<xs:enumeration value="30min"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="specialphase">
<xs:complexType>
<xs:sequence>
<xs:element ref="phase" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="specialphase4"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="resources">
<xs:complexType>
<xs:sequence>
<xs:element ref="resource" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="resourcenumber">
<xs:simpleType>
<xs:restriction base="xs:byte">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="resource">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element ref="resourcenumber"/>
<xs:element ref="time"/>
</xs:sequence>
<xs:attribute name="resourcename">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="A1"/>
<xs:enumeration value="A2"/>
<xs:enumeration value="A3"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="ref">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="A1"/>
<xs:enumeration value="A2"/>
<xs:enumeration value="A3"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="process">
<xs:complexType>
<xs:sequence>
<xs:element ref="lot"/>
<xs:element ref="phase" maxOccurs="unbounded"/>
<xs:element ref="specialphase"/>
</xs:sequence>
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="process1"/>
<xs:enumeration value="process2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="power">
<xs:simpleType>
<xs:restriction base="xs:byte">
<xs:enumeration value="3"/>
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="phase">
<xs:complexType>
<xs:sequence minOccurs="0">
<xs:element ref="power"/>
<xs:element ref="isDiff"/>
<xs:choice>
<xs:element ref="distrTempo"/>
<xs:element ref="timeDistribution"/>
</xs:choice>
<xs:element ref="resource"/>
</xs:sequence>
<xs:attribute name="ref">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="phase2"/>
<xs:enumeration value="phase3"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="phase1"/>
<xs:enumeration value="phase2"/>
<xs:enumeration value="phase3"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="lot">
<xs:complexType>
<xs:sequence>
<xs:element ref="atomicity"/>
</xs:sequence>
<xs:attribute name="ref">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="lot1"/>
<xs:enumeration value="lot2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="lot1"/>
<xs:enumeration value="lot2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="isDiff">
<xs:simpleType>
<xs:restriction base="xs:byte">
<xs:enumeration value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="distrTempo">
<xs:simpleType>
<xs:restriction base="xs:byte">
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="atomicity">
<xs:simpleType>
<xs:restriction base="xs:byte">
<xs:enumeration value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>