At 01:27 AM 4/5/2006, Wim Hooghwinkel \(Scriptware\) wrote:
>Just two quick questions (FM 7.x , Windows).


Wim,
   Asking the questions may have been quick, but I'm afraid the answers 
aren't as quick as you might think. See below!


>1. After exporting to XML the Import of the same document gives validation 
>error:
>Message: Notation 'epsi' was referenced but never declared
>Where should this be declared, in the EDD, DTD or Rules file? On export 
>FrameMaker generates the notation:
><!-- Begin Document Specific Declarations -->
><!NOTATION epsi    PUBLIC "">


   The notation should be declared in the DTD; either in the external 
subset (the file often referred to as the DTD), or in the internal subset 
at the beginning of the document. Given the two lines you quote (the 
comment and the notation declaration), FM has done just that on export. 
Unless you have removed that line on import, I don't see why you are 
getting an error message.

   By the way, as I write this, I have no Internet connection and can't 
check, but if my memory is correct, XML public identifiers require a system 
identifier. Although FM does not report an error given:

    <!NOTATION epsi PUBLIC "">

I believe it is incorrect and should be at least:

    <!NOTATION epsi PUBLIC "" "">

I suggest you avoid the issue by adding:

    <!NOTATION epsi SYSTEM "">

to your DTD.

   And here is some relevant background. When you export a document that 
uses a notation that is not declared in the DTD, FM generates a notation 
declaration such as:

    <!NOTATION epsi SYSTEM "">

in the internal subset. Whenever you open an XML document that has notation 
or entity declaration sin the internal subset, FM uses a reference page 
called Entity Declarations to save enough information to regenerate those 
declarations. Information about notation declarations is saved in a 
three-column table. The notation name goes in the first column, the public 
identifier in the second, and the system identifier in the third. The table 
does not distinguish a system identifier that is present but contains no 
characters from one that doesn't appear. When both columns 2 and 3 are 
empty, it generates a public identifier, so the imported:

    <!NOTATION epsi SYSTEM "">

is exported as:

    <!NOTATION epsi PUBLIC "">

Again, avoid the issue by declaring the notation in your EDD.


>2. When exporting to XML, the reference to DTD is stored with full path 
>info: <!DOCTYPE Section SYSTEM "file: 
>///E:/vijay/KOM107C-XML/FMApp/komori.dtd" - how can I make FM store only 
>the DTD name, without full path? The XML files need to be processed on 
>different systems that don't have access to the same server.

Good news, bad news on this one. There is a r/w rule that I believe should 
do what you want:

    writer {external dtd is "komori.dtd";}

Unfortunately, FM assumes that the specified file exists in the same folder 
as the FM file being saved. Thus, the rule works if you save the XML file 
to that folder. Suppose, however, that you have a main project folder with 
two subfolders, one called fm and once called xml. If your FM file is in 
the fm subfolder, and you save it as ..\xml\output.xml. FM uses 
..\xml\komori.dtd as the external identifier. Since there's no need to 
store the DTD there, such a file is not likely to exist. Short of using a 
custom FDK client, the workaround is to keep both FM and XML versions in 
the same folder.

         --Lynne



Lynne A. Price
Text Structure Consulting, Inc.
Specializing in structured FrameMaker consulting, application development, 
and training
lprice at txstruct.com            http://www.txstruct.com
voice/fax: (510) 583-1505      cell phone: (510) 421-2284 



Reply via email to