2013-04-17 6 views
0

XML 파일이 있습니다. xml 구조를 변경할 수 없기 때문에 xsd 파일을 변경해야합니다. 문제는 네임 스페이스에 관한 것입니다.로컬로 요소에 네임 스페이스 할당

<po:purchaseOrder orderDate="2001-01-01" xmlns:po="http://objectshop.com/ns/po" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://objectshop.com/ns/po po.xsd "> 
<shipTo country="USA"> 
    <name>Alice Smith</name> 
    <street>123 Maple Street</street> 
    <city>Cambridge</city> 
    <state>MA</state> 
    <postalcode>12345</postalcode> 
</shipTo> 
</po:purchaseOrder> 

일반적으로 나는 모든 요소에 ns를 넣어야합니다. 내가 그렇게하면 괜찮아. 질문은 어떻게 설계 xsd 파일. 특히 xsd에 네임 스페이스를 어떻게 할당합니까?

<?xml version="1.0" encoding="UTF-8"?> 
<schema targetNamespace="http://objectshop.com/ns/po" 
elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:po="http://objectshop.com/ns/po"> 

<complexType name="PurchaseOrderType"> 
    <sequence> 
     <element name="shipTo" type="po:Address" maxOccurs="unbounded" minOccurs="0" ></element> 
     <element name="billTo" type="po:Address" maxOccurs="unbounded" minOccurs="0"></element> 
     <element name="items" type="po:Items" maxOccurs="unbounded" minOccurs="0"></element> 
    </sequence> 

    <attribute name="orderDate" type="date"></attribute> 
</complexType> 
</schema> 
+0

. 나는 당신이 고심하고있는 것을 이해하지 못합니다. – IndoKnight

답변

1

게시 된 XSD가 불완전하기 때문에 설정이 무엇인지 밝히기가 어렵습니다. 그래서 XML을 기반으로 두 가지 옵션을 설명 할 것입니다. 하나는 특정 사건을 설명해야합니다.

XSD1 :

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema xmlns:po="http://objectshop.com/ns/po" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://objectshop.com/ns/po" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:import schemaLocation="XSD2.xsd" /> 
    <xsd:element name="purchaseOrder"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element ref="shipTo" /> 
     </xsd:sequence> 
     <xsd:attribute name="orderDate" type="xsd:date" use="required" /> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

XSD2 :

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="shipTo"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="name" type="xsd:string" /> 
     <xsd:element name="street" type="xsd:string" /> 
     <xsd:element name="city" type="xsd:string" /> 
     <xsd:element name="state" type="xsd:string" /> 
     <xsd:element name="postalcode" type="xsd:unsignedShort" /> 
     </xsd:sequence> 
     <xsd:attribute name="country" type="xsd:string" use="required" /> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

나는 XML에서 시작하고에서 XSD가 발생하는 경우

, 이것은 당신이 일반적으로 얻을 것이 무엇인가

이 두 XSD는 게시 된 XML의 유효성을 검사합니다. 이들이 보여주는 것은 네임 스페이스에없는 콘텐츠를 참조하는 방법입니다. 이것이 내가 당신의 문제에 관한 것이라고 생각합니다.

그러나 이러한 XML을 하나의 XSD 파일로 기술 할 수도 있습니다. "말하기"는 문서 요소 만 자격이있는 경우입니다 (귀하의 경우 purchaseOrder). 그 외 모든 것은 "부적합"입니다. 기본적으로 스키마를 설정하려면 elementFormDefault="unqualified"을 사용하여 설정해야합니다.

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema xmlns:po="http://objectshop.com/ns/po" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://objectshop.com/ns/po" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="purchaseOrder" type="po:PurchaseOrderType"/> 
    <xsd:complexType name="PurchaseOrderType"> 
     <xsd:sequence> 
      <xsd:element name="shipTo" type="po:Address" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:sequence> 
     <xsd:attribute name="orderDate" type="xsd:date" use="required"/> 
    </xsd:complexType> 
    <xsd:complexType name="Address"> 
     <xsd:sequence> 
      <xsd:element name="name" type="xsd:string"/> 
      <xsd:element name="street" type="xsd:string"/> 
      <xsd:element name="city" type="xsd:string"/> 
      <xsd:element name="state" type="xsd:string"/> 
      <xsd:element name="postalcode" type="xsd:unsignedShort"/> 
     </xsd:sequence> 
     <xsd:attribute name="country" type="xsd:string" use="required"/> 
    </xsd:complexType> 
</xsd:schema> 

또는 각 요소/속성에 대해 양식 속성을 설정하여 스키마 수준 기본 설정을 무시할 수 있습니다. 아래에 예가 나와 있습니다 (설명을위한 것으로 XML과 일치하지는 않습니다).

<xsd:element name="name" type="xsd:string" form="qualified"/> 
<xsd:attribute name="country" type="xsd:string" use="required" form="qualified"/> 

이 경우, XML은 다음과 같아야합니다

당신은 로컬로 다스 려하기 전에 XSD 요소를 정의 할 필요가
<po:purchaseOrder orderDate="2001-01-01" xmlns:po="http://objectshop.com/ns/po" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://objectshop.com/ns/po po.xsd "> 
    <shipTo po:country="USA"> 
     <po:name>Alice Smith</po:name> 
     <street>123 Maple Street</street> 
     <city>Cambridge</city> 
     <state>MA</state> 
     <postalcode>12345</postalcode> 
    </shipTo> 
</po:purchaseOrder>