ColdFusion의 XMLValidate() 함수를 사용하여 XML 문서의 유효성을 ONIX XSD Schema에 대해 확인하려고합니다. ONIX는 서적 출판 업계의 일부 측면에서 사용되는 '표준'XML 형식입니다.ColdFusion 10에서 XML 유효성 검사시 요소 선언을 찾을 수 없습니다.
이것은 샘플 XML 문서입니다 [Client NDA 유형의 이유로 일부 데이터를 수정했습니다. 길이에 대해 죄송합니다]
<?xml version="1.0"?>
<ONIXMessage release="3.0">
<Header>
<Sender>
<SenderName>Me</SenderName>
</Sender>
<SentDateTime>20131030T090000Z</SentDateTime>
<MessageNote>My Test for SO</MessageNote>
</Header>
<Product>
<RecordReference>12345</RecordReference>
<NotificationType>03</NotificationType>
<RecordSourceType>01</RecordSourceType>
<RecordSourceName>Me</RecordSourceName>
<ProductIdentifier>
<ProductIDType>15</ProductIDType>
<IDValue>12324567801011</IDValue>
</ProductIdentifier>
<DescriptiveDetail>
<ProductComposition>00</ProductComposition>
<ProductForm>ED</ProductForm>
<ProductFormDetail>E101</ProductFormDetail>
<ProductFormDetail>E127</ProductFormDetail>
<PrimaryContentType>10</PrimaryContentType>
<EpubTechnicalProtection>01</EpubTechnicalProtection>
<Collection>
<CollectionType>10</CollectionType>
<CollectionSequence>
<CollectionSequenceType>02</CollectionSequenceType>
<CollectionSequenceNumber>11</CollectionSequenceNumber>
</CollectionSequence>
<TitleDetail>
<TitleType>01</TitleType>
<TitleElement>
<TitleElementLevel>02</TitleElementLevel>
<TitlePrefix><![CDATA[The]]></TitlePrefix>
<TitleWithoutPrefix><![CDATA[Something]]></TitleWithoutPrefix>
</TitleElement>
</TitleDetail>
</Collection>
<TitleDetail>
<TitleType>01</TitleType>
<TitleElement>
<SequenceNumber>1</SequenceNumber>
<TitleElementLevel>01</TitleElementLevel>
<TitleText>
<![CDATA[ForSO]]>
</TitleText>
</TitleElement>
<TitleStatement><![CDATA[The Something for SO]]></TitleStatement>
</TitleDetail>
<Contributor>
<SequenceNumber>1</SequenceNumber>
<ContributorRole>A01</ContributorRole>
<PersonName>Me, Myself</PersonName>
<PersonNameInverted>Myself, Me</PersonNameInverted>
<NamesBeforeKey>Myself</NamesBeforeKey>
<KeyNames>Me</KeyNames>
</Contributor>
<Contributor>
<SequenceNumber>2</SequenceNumber>
<ContributorRole>A01</ContributorRole>
<PersonName>Someone Else</PersonName>
<PersonNameInverted>Else, Someone</PersonNameInverted>
<NamesBeforeKey>Someone</NamesBeforeKey>
<KeyNames>Else</KeyNames>
</Contributor>
<ContributorStatement>Me Myself and Someone Else</ContributorStatement>
<Language>
<LanguageRole>01</LanguageRole>
<LanguageCode>eng</LanguageCode>
</Language>
<Extent>
<ExtentType>00</ExtentType>
<ExtentValue>40</ExtentValue>
<ExtentUnit>03</ExtentUnit>
</Extent>
<Subject>
<MainSubject/>
<SubjectSchemeIdentifier>10</SubjectSchemeIdentifier>
<SubjectCode>JUV001000</SubjectCode>
</Subject>
<Audience>
<AudienceCodeType>01</AudienceCodeType>
<AudienceCodeValue>02</AudienceCodeValue>
</Audience>
<AudienceRange>
<AudienceRangeQualifier>17</AudienceRangeQualifier>
<AudienceRangePrecision>03</AudienceRangePrecision>
<AudienceRangeValue>8</AudienceRangeValue>
<AudienceRangePrecision>04</AudienceRangePrecision>
<AudienceRangeValue>12</AudienceRangeValue>
</AudienceRange>
</DescriptiveDetail>
<CollateralDetail>
<TextContent>
<TextType>03</TextType>
<ContentAudience>00</ContentAudience>
<Text textformat="02">
<![CDATA[Something, Something, Something, Dark Side]]>
</Text>
</TextContent>
</CollateralDetail>
<PublishingDetail>
<Imprint>
<ImprintName>Fake Publisher</ImprintName>
</Imprint>
<Publisher>
<PublishingRole>01</PublishingRole>
<PublisherName>Fake Publisher</PublisherName>
</Publisher>
<PublishingStatus>02</PublishingStatus>
<PublishingDate>
<PublishingDateRole>01</PublishingDateRole>
<DateFormat>00</DateFormat>
<Date>20110701</Date>
</PublishingDate>
<SalesRights>
<SalesRightsType>02</SalesRightsType>
<Territory>
<CountriesIncluded>GB AU NZ</CountriesIncluded>
</Territory>
</SalesRights>
<SalesRestriction>
<SalesRestrictionType>04</SalesRestrictionType>
<SalesOutlet>
<SalesOutletIdentifier>
<SalesOutletIDType>03</SalesOutletIDType>
<IDValue>AMZ</IDValue>
</SalesOutletIdentifier>
<SalesOutletName>Amazon</SalesOutletName>
</SalesOutlet>
<SalesOutlet>
<SalesOutletIdentifier>
<SalesOutletIDType>03</SalesOutletIDType>
<IDValue>BNO</IDValue>
</SalesOutletIdentifier>
<SalesOutletName>Barnes And Noble</SalesOutletName>
</SalesOutlet>
</SalesRestriction>
</PublishingDetail>
<ProductSupply>
<SupplyDetail>
<Supplier>
<SupplierRole>01</SupplierRole>
<SupplierName>Me</SupplierName>
</Supplier>
<ProductAvailability>20</ProductAvailability>
<Price>
<PriceAmount>12.99</PriceAmount>
<CurrencyCode>USD</CurrencyCode>
<Territory>
<CountriesIncluded>GB AU NZ</CountriesIncluded>
</Territory>
</Price>
</SupplyDetail>
</ProductSupply>
</Product>
</ONIXMessage>
위의 문서를 스키마와 비교하여 검증하는 샘플 코드는 다음과 같습니다. 이 코드를 실행하려면 위의 링크에서 스키마를 다운로드하고 스키마 문서를 웹 서버의 루트 디렉토리에 압축을 풀어야합니다. 위의 XML을 sample.xml 파일로 저장하십시오. cffile 태그의 파일 경로를 수정해야 할 수도 있습니다. 내가 제대로 오류를 번역하면
[Error] :2:28: cvc-elt.1: Cannot find the declaration of element 'ONIXMessage'.
, 그것은이 ONIXMessage 태그를 찾을 수 없습니다 :
<cffile action="read" file="Sample.xml" variable="xmlFileResults" >
<Cfset xmlValidateResults = xmlValidate(xmlFileResults,'#cgi.http_host#/ONIX_BookProduct_3.0_reference.xsd') />
<cfdump var="#xmlValidateResults#" /><Br/><br/>
그것은이 오류를 제공합니다. 그러나, 나는 왜 오히려 혼란 스럽습니다.
나는 간단한 XML 파일을 경우
<?xml version="1.0"?>
<ONIXMessage release="3.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</ONIXMessage>
나는 여전히 같은 오류가 발생합니다.
XML 또는 XSD 또는 CFs 유효성 검사 기능에 오류가 있는지를 확인하려고합니다.
본 사람이 있습니까? 누구든지 어떤 통찰력을 가지고 있습니까? 의견을 바탕으로
는,이 추가 싶어 :이 디버그 도움이된다면 나는 아무 생각이
을;
<ONIXMessage release="3.0" xmlns="http://ns.editeur.org/onix/3.0/reference"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ns.editeur.org/onix/3.0/reference http://myserver/ONIX_BookProduct_3.0_reference.xsd"
>
을하고 XMLVALIDATE() 함수에서 XSD 참조를 제거 :하지만 난 XML 헤더를 변경하는 경우이 참조하기가 유효한 것 같다 있지만
<cffile action="read" file="Sample.xml" variable="xmlFileResults" >
<Cfset xmlValidateResults = xmlValidate(xmlFileResults) />
<cfdump var="#xmlValidateResults#" /><Br/><br/>
내가 다른 오류의 회전을 얻는다. ONIXMessage의 선언을 찾는 데 문제가 없습니다. 하지만 다른 많은 오류를 강조 표시합니다. [그들이 아직 유효한지 확실치 않습니다.]
우리 환경에서 XML 문서의 스키마 위치를 "하드 코딩"해야하는 것은 현실적이지 않습니다.
이미 알고 있을지 모르지만 [온라인 ONIX 파일 검사기] (http://www.readyet.net/tools/onixFileValidation/3)를 발견했습니다. 이를 사용하여 ColdFusion 외부의 XML/XSD를 확인할 수 있습니다. 게시 한 샘플을 시도했지만 여기서 수정 한 부분 인 'TitleText'에 실패했습니다. 해당 사이트에서 실제 버전을 사용해 볼 수 있는지, 아니면 프로덕션과 유사한 데이터로 적어도 하나를 시도 할 수 있는지는 확실치 않습니다. –
@ Miguel-F 나는 그것을 이미 알지 못했다. 링크를 가져 주셔서 감사합니다. 나는 "진짜"파일을 업로드 할 때보고있는 것과 같은 오류를 보게됩니다. 그러나 현재의 오류는 해결되지 않습니다. 어쩌면 문제는 CF의 유효성 검사 라이브러리에 있습니다. – JeffryHouser
나는 링크가 최소한 XML을 확인해 주길 바랬다. 어떤 오류가 발생했는지에 대해 어떻게 생각하는지 확실하지 않습니다 (다른 오류가 있음에도 불구하고). 실제로 사용하고있는 XSD를 확실히 알 수는 없습니다. XSD를 다운로드하고 샘플 코드를 시도하여 동일한 결과를 얻는 지 확인합니다. 계속 지켜봐주십시오 ... –