code

Visual Studio IDE에서 XSD를 사용한 XML 유효성 검사

codestyles 2020. 9. 1. 07:32
반응형

Visual Studio IDE에서 XSD를 사용한 XML 유효성 검사


이전에이 작업을 수행했지만 오늘은 작동하지 않으며 수행 방법을 설명하는 곳을 찾을 수 없습니다. 수면 부족 일 수 있지만 그렘린이 의심됩니다.

XML 문서와이를 정의하는 XSD로 가득 찬 디렉토리가 있습니다. 유효성 검사 실패를 알리고 지정된 컨텍스트에서 유효한 태그 및 특성의 지능적인 목록을 제공하도록 Visual IDE를 설정하려면 어떻게해야합니까?

내가 시도한 것 :

  • XML 문서로 프로젝트에 XSD를 추가했습니다.
  • XML Schema 목록 (XML / Schemas ... 메뉴 항목 아래)에 XSD를 추가했습니다.
  • XML 문서에 schemaLocation 및 noNamespaceSchemaLocation 속성도 포함했습니다.

Visual Studio는 여전히 유용한 디버깅 또는 편집 정보를 포기하지 않습니다. 나는 2010 년과 2008 년을 모두 시도했다

업데이트 : 다른 개발자가 이것을 시도했지만 그에게도 실패했습니다. 그는 자신이 다른 XML 문서로이 작업을 수행했으며 제대로 작동했음을 알고 있습니다. 그런 다음 Oxygen XML 편집기를 다운로드했고 동일한 XML 및 XSD 파일에서 제대로 작동 했으므로 파일이 괜찮은 것 같습니다 (또는 Oxygen이 더 관대하고 유연합니다....)


Visual Studio의 XML 문서를 가지고있는 XSD 파일과 연결해야합니다.

  1. XML 문서의 속성 창에 다음과 같은 내용이 표시되어야합니다.

    XML 속성> 스키마

  2. XML 스키마 집합 편집기 (속성 창의 "스키마"텍스트 상자에서 (...) 줄임표를 클릭하면 열림)에서 스키마가 있는지 확인해야합니다. 또한 Use해당 스키마에 대한 열이 활성화되어 있는지 확인합니다. 활성화되어 있지 않은 경우 클릭하면 옵션 드롭 다운 목록이 Use표시되고 녹색 확인 표시가있는 항목을 선택합니다 .

    XML 스키마 선택기

  3. Visual Studio의 오류 목록 창이 표시되는지 확인합니다 (메뉴보기> 오류 목록). 이것은 XML과 XSD 스키마 정의 사이의 모든 불일치를 보여줍니다.

  4. 이 모든 것이 준비되면 Visual Studio XML 편집기는 파란색 물결 선을 사용하여 편집기에서 XML 문제를 강조 표시합니다.

    오류의 예


Visual Studio에서 파일을 수동으로 연결할 필요가 없습니다. 두 파일을 모두 열고 네임 스페이스를 올바르게 정의한 경우 XML 파일을 XSD 파일에 자동으로 일치시킵니다.

네임 스페이스를 정의하려면 :

XML 파일의 루트 요소에서 :

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

XSD 파일의 스키마 요소에서 :

<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://yourdomain.com/yourschema.xsd"
    xmlns:this="http://yourdomain.com/yourschema.xsd"
    elementFormDefault="qualified">
    ...
</xs:schema>

targetNamespace가있을 때 스키마에서 유형 사용에 대한 참고 사항

targetNamespace스키마에를 지정하고 있기 때문에 스키마에 정의 된 유형에 대한 모든 참조는 네임 스페이스로 접두사를 붙여야합니다 (이것이 xmlns:this위의 <xs:schema />요소에 속성을 추가 한 이유입니다 ).

<!-- Define the type as normal -->
<xs:complexType name="Row">
    <xs:sequence>
        <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
        <xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />

Another point of failure here is Windows 7 "blocking" schema files... right-click on the xsd file on disk, Properties > General and if it's blocked, you'll have an "Unblock" button. This was causing my XML validation to fail in VS2012.


Does your xsd contain an attribute "targetNamespace" /schema/@targetNamespace that is similar to the namespace you are referencing in the xml?

Examples:

XSD:

<xs:schema .... targetNamespace="Datafile.xsd" ... >

XML:

<data xmlns="Datafile.xsd" >...</data>

See also: XML/XSD intellisense not working in Visual Studio 2010


I had this same problem, but VS was referencing my schema correctly already. Turns out the file I was trying to validate didn't have an 'xml' file extension. Added .xml to the end of my filename, and the validation started to work.

참고 URL : https://stackoverflow.com/questions/3161224/xml-validation-with-xsd-in-visual-studio-ide

반응형