xs : choice 요소를 사용하려하지만 XSD 파일의 유효성을 검사하는 동안 xs : choice 요소와 관련 있다고 생각되는 오류가 발생합니다. 나는이 문제를 꽤 많이 찾았고 비슷한 것을 찾았지만 내 문제를 해결하기 위해 내가 찾던 답을주지 않았다.XML 스키마 xs : xs : sequence 내부의 선택
내가하려고하는 것은 "데이터"라는 요소를 선언하는 것입니다. 자식 요소는 타임 스탬프와 센서 또는 공급자가 될 것입니다 (여기서 나는 선택 요소를 사용하려고합니다. 센서 또는 제공자 요소를 타임 스탬프의 형제로 사용하려는 경우).
은 다음 XML 내가 검증하기 위해 노력하고있어입니다 :
<?xml version="1.0" encoding="ISO-8859-1"?>
<experience xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<data>
<timestamp>123456789</timestamp>
<sensor origin="proximity" >
<x-axis>9</x-axis>
<y-axis>0</y-axis>
<z-axis>0</z-axis>
<w-axis>0</w-axis>
</sensor>
</data>
</experience>
그리고이 XML의 유효성을 확인하기 위해를, 나는 다음과 같은 XSD 파일 작성 :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- definition of attributes -->
<xs:attribute name="origin" type="xs:string" />
<!-- definition of complex elements -->
<xs:element name="provider">
<xs:complexType>
<xs:all>
<xs:element name="latitude" type="xs:float" />
<xs:element name="longitude" type="xs:float" />
<xs:element name="altitude" type="xs:float" />
<xs:element name="bearing" type="xs:float" />
<xs:element name="speed" type="xs:float" />
</xs:all>
<xs:attribute ref="origin" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="sensor">
<xs:complexType>
<xs:all>
<xs:element name="x-axis" type="xs:float" />
<xs:element name="y-axis" type="xs:float" />
<xs:element name="z-axis" type="xs:float" />
<xs:element name="w-axis" type="xs:float" />
</xs:all>
<xs:attribute ref="origin" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element ref="timestamp" minOccurs="1" maxOccurs="1" />
<xs:choice>
<element ref="provider" />
<element ref="sensor" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- definition of main type -->
<xs:element name="experience">
<xs:complexType>
<xs:sequence>
<xs:element ref="data" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
을하지만 난을 업로드하면 파일과 following w3 website를 사용하여 유효성을 검사 할, 나는 다음과 같은 오류 얻을 :
file:/usr/local/XSV/xsvlog/tmph7cMmLuploaded:45:6: Invalid per cvc-complex-type.1.2.4: element {None}:element not allowed here (1) in element { http://www.w3.org/2001/XMLSchema }:choice, expecting [{ http://www.w3.org/2001/XMLSchema }:annotation,$,{ http://www.w3.org/2001/XMLSchema }:element,{ http://www.w3.org/2001/XMLSchema }:group,{ http://www.w3.org/2001/XMLSchema }:choice,{ http://www.w3.org/2001/XMLSchema }:sequence,{ http://www.w3.org/2001/XMLSchema }:any]:
I을 문제가 xs : choice 요소에 있다고 생각하지만 잘못된 것일 수 있습니다.
처음으로 xs : choice 요소를 사용하려고했기 때문에 올바르게 사용하는지 여부를 의심 스럽습니다. w3schools의 예에 따르면 나는 다른 요소 옆에서 사용하려고하기 때문에 더 이상 올바른지 모르겠습니다.
누군가가이 웹 사이트에서 나를 도울 수 있다면 매우 감사하겠습니다.
미리 감사드립니다.
우선 감사합니다. 타임 스탬프를 정의하는 것을 잊어 버렸지 만 이미 게시했습니다. 그게 내 문제를 해결해 줬어. XML 파일이 있거나 XML 파일을 작성하고 유효성을 검사하려는 사용자가 온라인으로 XSD를 확인할 수 있도록 내 xsd를 온라인에 연결하려고합니다. "http://mywebsite.com:123/schema/myxsd.xsd"에서 사용할 수 있다고 가정 해 봅시다. 이 링크가 내 XML 파일에 정의되어 있는지, "schemaLocation"이라는 속성이 있다는 것을 알고 있습니다. –
예, xsi : schemaLocation 속성을 사용하여 XML 파일에서 참조 할 수 있습니다 ... 특히 모든 프로세서가 자동으로이 위치를 따르지는 않기 때문에 항상 작동하지 않을 수 있습니다 (특히 원격 위치에있는 경우) ... 그래도 좋은 점은 문서화 방법 ... 제가 개인적으로 좋아하는 또 다른 메커니즘은 XSD의 targetNamespace가 XSD의 위치로 실제로 참조 해제 될 수있는 경우입니다 ... –
다시 한번 감사드립니다 @PetruGardea! ;) –