Не понимаю этот кусок XML - PullRequest
       1

Не понимаю этот кусок XML

2 голосов
/ 01 сентября 2010

Я пытаюсь создать XML-схему, но у меня нет особого успеха. есть конструкция, которую я не понимаю ... вот что у меня есть для схемы, затем файл XML, для которого я пытаюсь ее создать ... какие-либо предложения?

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">



     <xsd:element name="CorbelFile">
     <xsd:complexType>
          <xsd:sequence>     
               <xsd:group ref="Project" minOccurs="0" maxOccurs="unbounded"/>   
          </xsd:sequence>
     </xsd:complexType>
     </xsd:element>

     <xsd:group name="Project">
          <xsd:sequence>          
                    <xsd:element name="ADProductID"
                                type="xsd:string" />
                    <xsd:element name="ADProductID"
                                type="xsd:string" />
                    <xsd:element name="ADProductName"
                                type="xsd:string" />
                    <xsd:element name="ADProductVersion"
                                type="xsd:string" />
                    <xsd:element name="ADProjectId"
                                type="xsd:string" />
                    <xsd:element name="ADProjectName"
                                type="xsd:string" />
                    <xsd:element name="ADFileLoc"
                                type="xsd:string" />
                    <xsd:group ref="Answers"
                              minOccurs="0"
                              maxOccurs="unbounded"/>
          </xsd:sequence>
     </xsd:group>

     <xsd:group name="Answers">
          <xsd:sequence>
               <xsd:element name="var"/>
           </xsd:sequence>
     </xsd:group>


</xsd:schema>

XML

<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<CorbelFile>
  <Project>
    <ADProductId>28359</ADProductId>
    <ADProductName>IDP 403(b)</ADProductName>
    <ADProductVersion>7.0</ADProductVersion>
    <ADProjectId>00010001</ADProjectId>
    <ADProjectName>Independence Dental Center PS</ADProjectName>
    <ADFileLoc>C:\Program Files\Relius\Docs\dp_data\1\0\00010001.ck2</ADFileLoc>
    <answers>
      <Var Ld="PKGA" />
      <Var Ld="BKTHead2" />
      <Var Ld="SingleSpace" />
      <Var Ld="MarginRagged" />
      <Var Ld="SPDTimes" />
      <Var Ld="BKTTimes" />
      <Var Ld="PlanNameB" />
      <Var Ld="ERPYEnds" />
      <Var Ld="InitialEffDate" />
      <Var Ld="2000SafHarEnhancMatch" />
      <Var Ld="StateCollege" />
      <Var Ld="CharityCorp" />
      <Var Ld="ExceptEEPartTime">Independence</Var>
      <Var Ld="ExceptEEStudent">Missouri</Var>
      <Var Ld="ExceptEENonResAliens">11500 East 23rd Street</Var>
      <Var Ld="ExceptEECollBargAgree">64052</Var>
      <Var Ld="EEExclNA">(816) 254-7200</Var>
      <Var Ld="NoExclElig">43-1118440</Var>
      <Var Ld="ACP2000CurrentYR">001</Var>
      <Var Ld="ExceptEEHR" />
      <Var Ld="1YRAndHalfServReq">Profit Sharing Plan and Trust</Var>
      <Var Ld="YRServReq">Independence Dental Center, Inc.</Var>
      <Var Ld="Age21">INDEPENDENCE DENTAL CENTER, INC.</Var>
      <Var Ld="AgeOther">PROFIT SHARING PLAN AND TRUST</Var>
      <Var Ld="1stDayMonth">September 30</Var>
      <Var Ld="1stDayPYNextFollowing">October 1</Var>
      <Var Ld="CompExclOT">September 30</Var>
      <Var Ld="CompExcl414s">October 1</Var>
      <Var Ld="CompSalRed">December 12, 1963</Var>
      <Var Ld="NASRA" />
      <Var Ld="ACPPreYR" />
      <Var Ld="QNECPY" />
      <Var Ld="QNEC500HRs" />
      <Var Ld="QNECYOS" />
      <Var Ld="ShareDiscrYOSEndPY" />
      <Var Ld="ForfeitRedERContr" />
      <Var Ld="7YRGrade" />
      <Var Ld="MinDistCYAftr2000">Brad Babcock</Var>
      <Var Ld="MinDistCYAftr2001">Lauren Carr</Var>
      <Var Ld="NServPriorEffDate" />
      <Var Ld="1999SafeHarbContr">John Smith</Var>
      <Var Ld="NRD1stDayMonth" />
      <Var Ld="NRAPartAnnivBDay1" />
      <Var Ld="NERD" />
      <Var Ld="NDistrJSA" />
      <Var Ld="Multi2ndERCityStateZip" />
      <Var Ld="2000SafHarNonElectOthrPln" />
      <Var Ld="TermDistrImmed" />
      <Var Ld="YTransRoll403b" />
      <Var Ld="LoansNA" />
      <Var Ld="Loans10000DeMin" />
      <Var Ld="LoansSRALimit" />
      <Var Ld="YDirInv" />
      <Var Ld="DirInvRollTrans" />
      <Var Ld="HrdshipSafeHarb401k" />
      <Var Ld="EmployerPhone" />
      <Var Ld="NMulti2ndER" />
      <Var Ld="Multi2ndERName" />
      <Var Ld="YMulti3rdER" />
      <Var Ld="Multi3rdERStreet" />
      <Var Ld="Multi4thEIN" />
      <Var Ld="Multi5thERStreet" />
      <Var Ld="SumPlanOnly" />
      <Var Ld="YPSBKT" />
      <Var Ld="YSBJPA" />
      <Var Ld="NAPriorCurrentYRTestMethP" />
      <Var Ld="NHCPContrPost973Perc" />
      <Var Ld="NComplyGATTUSERRASBJPATRA" />
      <Var Ld="NSafeHarbMatch" />
      <Var Ld="DeferBenOption" />
      <Var Ld="PayOldAnnuitDate">59 1/2</Var>
      <Var Ld="NAHrdshipSafeHarb401k">60th</Var>
      <Var Ld="VServ3" />
      <Var Ld="VServ6" />
      <Var Ld="VPerc1" />
      <Var Ld="VPerc6" />
      <Var Ld="ACPCurrentPre97" />
      <Var Ld="ACPCurrentPre98" />
      <Var Ld="YDiscrMC4PercCompPost99PY" />
      <Var Ld="EG_Hrdshp_Suspensn_Red_N" />
      <Var Ld="EG_Suspensn_2001_NA" />
    </answers>
  </Project>
  <Project>
    <ADProductId>83</ADProductId>
    <ADProductName>IDP Money Purchase/Target</ADProductName>
    <ADProductVersion>2.0</ADProductVersion>
    <ADProjectId>00010002</ADProjectId>
    <ADProjectName>Independence Dental Center MP</ADProjectName>
    <ADFileLoc>C:\Program Files\Relius\Docs\dp_data\2\0\00010002.ck2</ADFileLoc>
    <answers />
  </Project>
<Project>
    <ADProductId>24581</ADProductId>
    <ADProductName>IDP Revised SA</ADProductName>
    <ADProductVersion>10.0</ADProductVersion>
    <ADProjectId>000102C9</ADProjectId>
    <ADProjectName>2010 - Hanover - Trustee</ADProjectName>
    <ADFileLoc>C:\Program Files\Relius\Docs\dp_data\9\C\000102C9.ck2</ADFileLoc>
    <answers>
      <Var Ld="NShortAmendment" />
      <Var Ld="PASMM" />
      <Var Ld="PACorpResol" />
      <Var Ld="PTimes" />
      <Var Ld="SPDTimes" />
      <Var Ld="CorbelClientNameA">AMERICAN FIDUCIARY CORPORATION</Var>
      <Var Ld="SA401kProfitSharing" />
      <Var Ld="EmployerNameA">Hanover Obstetrics &amp; Gynecology, Inc.</Var>
      <Var Ld="Corp" />
      <Var Ld="EmployerStreet">135 Webster Street</Var>
      <Var Ld="EmployerCity">Hanover</Var>
      <Var Ld="EmployerState">Massachusetts</Var>
      <Var Ld="EmployerZip">02339</Var>
      <Var Ld="EmployerPhone">(781) 878-7020</Var>
      <Var Ld="EIN">04-2477545</Var>
      <Var Ld="PlanNumOther">001</Var>
      <Var Ld="PlanNameA">Hanover Obstetrics &amp; Gynecology, Inc.</Var>
      <Var Ld="PlanNameB">401(k) Profit Sharing Plan</Var>
      <Var Ld="AmendmentOne" />
      <Var Ld="AmendDate">August 1, 2010</Var>
      <Var Ld="NWitnessLine" />
      <Var Ld="PlanAdminERAddress" />
      <Var Ld="IndivTrustee" />
      <Var Ld="DesignatedAmendments" />
      <Var Ld="401KfeaturesNoChange" />
      <Var Ld="DiscrContrNoChange" />
      <Var Ld="DistributionsAmendNo" />
      <Var Ld="MiscAmendYes" />
      <Var Ld="NoChangeCompDefinition" />
      <Var Ld="NLoans" />
      <Var Ld="HCENoChange" />
      <Var Ld="NElimOfFamAggreg" />
      <Var Ld="AddTransRollNo" />
      <Var Ld="PYFYNoChange" />
      <Var Ld="ChangeTrustNameYes" />
      <Var Ld="ChangedTrustee1Name">Albert Marcus, M.D.</Var>
      <Var Ld="ChangedTrustee1EffDate">August 1, 2010</Var>
      <Var Ld="ChangedTrustee1Removed" />
      <Var Ld="MergFreezeTermNA" />
      <Var Ld="NERAdopt" />
      <Var Ld="RelDate" />
    </answers>
  </Project>

Ответы [ 3 ]

2 голосов
/ 01 сентября 2010

В Visual Studio откройте ваш XML-файл, перейдите в меню «XML», выберите «Создать схему».

1 голос
/ 03 сентября 2010

Как определить элемент, содержащий только текст, но также и атрибут

Обычно тип элементов с только текстовым содержимым должен быть xs:simpleType. В этом случае это вызывает проблему, поскольку определение типа элементов, которые могут содержать атрибуты (или другие элементы), должно быть xs:complexType. Решение состоит в том, чтобы использовать xs:simpleContent, чтобы разрешить только текст, и xs:extension, чтобы расширить этот тип требуемыми атрибутами.

Создание сложных текстовых элементов

xs:simpleContent используется для получения типов из других встроенных или ранее определенных типов. Для этого требуется либо xs:extension, либо xs:restriction дочерний элемент с атрибутом base, который определяет базовый тип (простой), который вы будете расширять или ограничивать. В этом случае базовый тип может быть xs:string. xs:extension или xs:restriction содержит требуемые новые функции.

<xs:element name="var">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="Ld" type="xs:string" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

Внутри xs:extension может быть добавлено несколько определений атрибутов - в этом случае нам нужно было только одно. xs:simpleContent не может содержать никаких определений элементов, только новые атрибуты. Если базовый тип не совпадает с каким-либо из встроенных типов данных схемы, например, если текст имеет некоторые ограничения длины, вы должны определить базовый тип как глобальное определение простого типа и использовать его имя в атрибуте base .

Разрешить текст внутри элементов, которые могут содержать другие элементы, проще: просто используйте <xs:complexType mixed="true"> при определении содержимого элемента.

1 голос
/ 02 сентября 2010

Вместо использования группы определите «Var» как элемент с атрибутом «Ld»:

<complexType name="Var">
    <annotation>
        <documentation>
            Description of what a Var is
        </documentation>
    </annotation>
    <attribute name="Ld" type="string">
        <annotation>
            <documentation>
                Description of what this attribute means
            </documentation>
        </annotation>
    </attribute>
</complexType>

Определение списка ответов:

<complexType name="Answers">
    <annotation>
        <documentation>
            A list of Var elements
        </documentation>
    </annotation>
    <sequence>
        <element name="Var" type="Var" minOccurs="0" maxOccurs="unbounded">
            <annotation>
                <documentation>
                    The list of Var elements
                </documentation>
            </annotation>
        </element>
    </sequence>
</complexType>

Тогда вместо этого:

<xsd:group ref="Answers"
                          minOccurs="0"
                          maxOccurs="unbounded"/>

Вы бы использовали это:

<element name="answers" type="Answers"/>

Кроме того, хорошее эмпирическое правило заключается в том, чтобы пространство имен по умолчанию соответствовало типу файла, который вы пишете. Поэтому, если вы пишете схему, поместите ее в корневой элемент, и вам не нужно будет везде писать префиксы "xsd":

xmlns="http://www.w3.org/2001/XMLSchema"

И также неплохо создать целевое пространство имен для вашей схемы, чтобы ваши элементы имели ассоциированное пространство имен:

targetNamespace="http://my.example.com/schema"
xmlns:mec="http://my.example.com/schema"

Что означало бы, что ваши элементы будут называться type = "mec: Project" вместо просто "Project" и, следовательно, предотвращают любые будущие проблемы при использовании этой схемы вместе с другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...